{"openapi":"3.1.0","info":{"title":"openobserve-api-http","description":"OpenObserve API documents [https://openobserve.ai/docs/](https://openobserve.ai/docs/)","contact":{"name":"OpenObserve","url":"https://openobserve.ai/","email":"hello@zinclabs.io"},"license":{"name":"AGPL-3.0","identifier":"AGPL-3.0"},"version":"0.1.0"},"paths":{"/.well-known/oauth-authorization-server":{"get":{"tags":["MCP"],"summary":"Handler for OAuth 2.0 Authorization Server Metadata (Enterprise)\nRFC 8414: https://datatracker.ietf.org/doc/html/rfc8414\nPublic (no auth) — describes the Dex authorization server, 404 when Dex is off.","operationId":"OAuthServerMetadata","responses":{"200":{"description":"Success","content":{"application/json":{}}},"404":{"description":"Not Found - OAuth discovery requires Dex to be enabled","content":{"application/json":{}}}},"security":[],"x-o2-mcp":{"enabled":false}}},"/api/clusters":{"get":{"tags":["Clusters"],"summary":"List available clusters","description":"Retrieves a list of all available clusters organized by region. Each region contains a list of cluster names that can be used for data processing and storage. This information is useful for understanding your deployment topology and selecting appropriate clusters for workload distribution.","operationId":"ListClusters","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"propertyNames":{"type":"string"}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Clusters","operation":"get"}}},"/api/invites":{"get":{"tags":["Users"],"summary":"List user invitations","description":"Retrieves a list of pending organization invitations for the authenticated user across different organizations. Shows invitation details including organization names, invited roles, expiration dates, and invitation status. Users can review and accept invitations to join new organizations with appropriate access permissions.","operationId":"UserInvitations","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInviteList"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Users","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/invites/{token}":{"delete":{"tags":["Users"],"summary":"Decline an invitation","operationId":"DeclineUserInvitation","parameters":[{"name":"token","in":"path","description":"invitation token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Users","operation":"delete"}}},"/api/license":{"get":{"tags":["License"],"summary":"Get license information","operationId":"GetLicense","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"License","operation":"get"}},"post":{"tags":["License"],"summary":"Store a license key","operationId":"SaveLicense","parameters":[{"name":"dry_run","in":"query","description":"Check the key and answer 200 with a preview instead of storing it (default false)","required":false,"schema":{"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["key"],"properties":{"key":{"type":"string","description":"The signed license key."}}}}},"required":true},"responses":{"201":{"description":"Stored; the body is an empty JSON string","content":{"application/json":{"schema":{"type":"string"}}}},"409":{"description":"A newer or conflicting key is already applied","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"License","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/license/refresh":{"post":{"tags":["License"],"summary":"Refresh license limits","operationId":"RefreshLicense","responses":{"200":{"description":"Refreshed; the body reports the outcome","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"A license refresh is already running","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"License","operation":"update"}}},"/api/license/rotate_key":{"post":{"tags":["License"],"summary":"Rotate the instance key and refresh the license","operationId":"RotateLicenseKey","responses":{"200":{"description":"Rotated; the body reports the outcome","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"A license refresh is already running","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"License","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/organizations":{"get":{"tags":["Organizations"],"summary":"Get user's organizations","description":"Retrieves a list of all organizations that the authenticated user has access to, including organization details, permissions, and subscription information. Root users can see all organizations in the system.","operationId":"GetUserOrganizations","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OrgDetails"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Organizations"],"summary":"Create new organization","description":"Creates a new organization with the specified configuration and settings. The authenticated user will be automatically added as an owner of the newly created organization and can then invite other users and configure the organization. If the creator is a service account, the response will include the service account's token for the newly created organization, enabling automated workflows to immediately access the new organization without additional token retrieval steps.","operationId":"CreateOrganization","requestBody":{"description":"Organization data","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"identifier":{"type":"string"},"name":{"type":"string","description":"Only alphanumeric characters (A-Z, a-z, 0-9), spaces, and underscores are allowed"},"org_type":{"type":"string"},"service_account":{"type":["string","null"],"description":"Optional service account email to add to the organization\nWhen specified, only this service account will be added (not the API caller)"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Organization"},{"type":"object","properties":{"service_account":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ServiceAccountTokenInfo"}]}}}]}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/status_pages_public/{slug}":{"get":{"tags":["Status Pages"],"summary":"Get the public snapshot of a status page","operationId":"GetPublicStatusPageSnapshot","parameters":[{"name":"slug","in":"path","description":"Public slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicStatusPageSnapshot"}}}}},"security":[],"x-o2-mcp":{"enabled":false}}},"/api/status_pages_public/{slug}/badge.svg":{"get":{"tags":["Status Pages"],"summary":"Get the status badge of a page","operationId":"GetPublicStatusPageBadge","parameters":[{"name":"slug","in":"path","description":"Public slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"image/svg+xml":{"schema":{"type":"string"}}}}},"security":[],"x-o2-mcp":{"enabled":false}}},"/api/status_pages_public/{slug}/feed.xml":{"get":{"tags":["Status Pages"],"summary":"Get the notice feed of a page","operationId":"GetPublicStatusPageFeed","parameters":[{"name":"slug","in":"path","description":"Public slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/atom+xml":{"schema":{"type":"string"}}}}},"security":[],"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/alert_calibration/config":{"get":{"tags":["Alert Calibration"],"summary":"Get the org's alert calibration config","description":"Returns the organization's alert calibration settings: whether it runs, how often, and how much history each run analyses.","operationId":"GetAlertCalibrationConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertCalibrationOrgConfig"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Alert calibration is disabled for this deployment","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alert Calibration","operation":"list"},"x-o2-mcp":{"enabled":true}},"put":{"tags":["Alert Calibration"],"summary":"Update the org's alert calibration config","description":"Applies a partial update; an absent field keeps its stored value. Creates the config on the org's first write.","operationId":"UpdateAlertCalibrationConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Any of enabled, frequency_minutes and window_minutes","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertCalibrationOrgConfig"}}}},"400":{"description":"A cadence or window outside its accepted bounds, or an unknown field","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Alert calibration is disabled for this deployment","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alert Calibration","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alert_calibration/digests":{"get":{"tags":["Alert Calibration"],"summary":"List alert calibration runs","description":"One row per digest emission in the range, newest first. A run pulled again emits a second time, so readers keep the newest emission of each window.","operationId":"ListAlertCalibrationRuns","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","required":false,"schema":{"type":["integer","null"],"format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid time range","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Alert calibration is disabled for this deployment","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alert Calibration","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alert_calibration/digests/alerts":{"get":{"tags":["Alert Calibration"],"summary":"List the runs that flagged an alert","description":"The windows of the runs in the range with a finding on an alert whose name matches, case-insensitively.","operationId":"ListAlertCalibrationRunsForAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_name","in":"query","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","required":false,"schema":{"type":["integer","null"],"format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid time range","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Alert calibration is disabled for this deployment","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alert Calibration","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alert_calibration/digests/records":{"get":{"tags":["Alert Calibration"],"summary":"Get the records of one alert calibration run","description":"Every record the run with this window wrote, newest emission first.","operationId":"GetAlertCalibrationRunRecords","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"window_start","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"window_end","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","required":false,"schema":{"type":["integer","null"],"format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid time range","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Alert calibration is disabled for this deployment","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alert Calibration","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alert_calibration/digests/rules":{"get":{"tags":["Alert Calibration"],"summary":"Count alert calibration findings by rule","description":"Per rule, how many distinct alerts and runs in the range it flagged.","operationId":"CountAlertCalibrationFindingsByRule","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","required":false,"schema":{"type":["integer","null"],"format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid time range","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Alert calibration is disabled for this deployment","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alert Calibration","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alert_calibration/digests/run":{"post":{"tags":["Alert Calibration"],"summary":"Request an alert calibration run now","description":"Brings the org's scheduled run forward to now. An org has one scheduled run, so a request while one is due or running is accepted without queuing another.","operationId":"RunAlertCalibration","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Run accepted"},"400":{"description":"The org's alert calibration config is disabled","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Alert calibration is disabled for this deployment, or the org has no config","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alert Calibration","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alert_calibration/status":{"get":{"tags":["Alert Calibration"],"summary":"Get how the latest alert calibration run ended","description":"A run that fails writes no digest, so this is where its error is reported. `last_run` is null until a run has been attempted.","operationId":"GetAlertCalibrationStatus","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalibrationStatus"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Alert calibration is disabled for this deployment, or the org has no config","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alert Calibration","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alerts":{"get":{"tags":["Alerts"],"summary":"List organization alerts","description":"Retrieves a list of all alerts in the organization with filtering and pagination options. Shows alert summaries including names, status, folder organization, and basic configuration details for monitoring and management purposes.","operationId":"ListAlerts","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Optional folder ID filter parameter.","required":false,"schema":{"type":"string"},"style":"form"},{"name":"slo_id","in":"query","description":"Restrict the list to the alerts attached to one SLO (Feature 5, B1).\nReads the indexed `slo_id` column, so it is a SQL predicate rather than\nan app-side scan. An EMPTY value matches nothing — see the field docs on\n`ListAlertsParams::slo_id`.","required":false,"schema":{"type":"string"},"style":"form"},{"name":"stream_type","in":"query","description":"Optional stream type filter parameter.","required":false,"schema":{"$ref":"#/components/schemas/StreamType"},"style":"form"},{"name":"stream_name","in":"query","description":"Optional stream name filter parameter.\n\nThis parameter is only used if `stream_type` is also provided.","required":false,"schema":{"type":"string"},"style":"form"},{"name":"alert_name_substring","in":"query","description":"Optional case-insensitive name substring filter parameter.","required":false,"schema":{"type":"string"},"style":"form"},{"name":"owner","in":"query","description":"Optional owner user filter parameter.","required":false,"schema":{"type":"string"},"style":"form"},{"name":"enabled","in":"query","description":"Optional enabled filter parameter.","required":false,"schema":{"type":"boolean"},"style":"form"},{"name":"page_size","in":"query","description":"The optional number of alerts to retrieve. If not set then all alerts\nthat match the query parameters will be returned.","required":false,"schema":{"type":"integer","format":"int64","minimum":0},"style":"form"},{"name":"page_idx","in":"query","description":"The optional page index. If not set then defaults to `0`.\n\nThis parameter is only used if `page_size` is also set.","required":false,"schema":{"type":"integer","format":"int64","minimum":0},"style":"form"},{"name":"alert_type","in":"query","description":"Optional alert type filter: `all` (default), `scheduled`, `realtime`,\nor `anomaly_detection`.","required":false,"schema":{"$ref":"#/components/schemas/AlertTypeFilter"},"style":"form"},{"name":"priority","in":"query","description":"Optional priority filter (PT-3), OR semantics.\n\nAccepts BOTH shapes, because both are natural to type and to generate:\n  * repeated — `?priority=1&priority=2`\n  * comma-separated — `?priority=1,2`\n\nEach value may be `1` or `P1`. Declared as a `Vec` so repeated keys\ndeserialize; absent leaves it empty, which means *no filter*.","required":false,"schema":{"type":"array","items":{"type":"string"}},"style":"form"},{"name":"tags","in":"query","description":"Optional tag filter (PT-8). Comma-separated, **AND** semantics — an\nalert must carry every listed tag.","required":false,"schema":{"type":"string"},"style":"form"},{"name":"sort_by","in":"query","description":"Optional sort column: `priority` or `name`. Anything else keeps the\nhistorical ordering.","required":false,"schema":{"type":"string"},"style":"form"},{"name":"sort_order","in":"query","description":"Sort direction: `desc` for descending, anything else ascending.","required":false,"schema":{"type":"string"},"style":"form"},{"name":"include_dependencies","in":"query","description":"When `true`, each list item also carries its notification `destinations`\nand any alert-level `template` override — the fields the notification\ndependency view cross-references. Only that view opts in; the default\n(absent / false) keeps them off the hot list path so ordinary consumers\nneither pay the extra bytes nor receive destination/template names.","required":false,"schema":{"type":"boolean"},"style":"form"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for `ListAlerts` endpoint.","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/ListAlertsResponseBodyItem"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List all alerts","category":"alerts","summary_fields":["name","stream_name","stream_type","enabled","is_real_time","folder_id","folder_name"]},"x-o2-ratelimit":{"module":"Alerts","operation":"list"}},"post":{"tags":["Alerts"],"summary":"Create new alert","description":"Creates a new alert with specified conditions, triggers, and notifications. Users can define custom queries, thresholds, and notification destinations to monitor their data and receive timely alerts when conditions are met.","operationId":"CreateAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID for the alert. Authoritative: it overrides any folder_id in the body. The default folder is used when absent.","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Alert data","content":{"application/json":{"schema":{"allOf":[{"oneOf":[{"type":"object","description":"Alert configuration for monitoring streams and triggering notifications.\n\nAn alert watches a stream (logs, metrics, or traces) using SQL or PromQL queries,\nand sends notifications to configured destinations when trigger conditions are met.","properties":{"context_attributes":{"type":["object","null"],"description":"Optional key-value attributes to include in alert notifications.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"creates_incident":{"type":"boolean","description":"When true, this alert routes notifications through the incident system\ninstead of sending direct alert notifications."},"description":{"type":"string","description":"Human-readable description of what this alert monitors.","example":"Fires when error count exceeds threshold in the specified time window"},"destinations":{"type":"array","items":{"type":"string"},"description":"List of destination names to notify when alert fires.\nDestinations must be pre-configured in the system.\nAccepts either `destinations` or `alert_destinations` as the JSON field name.","example":["slack-alerts","pagerduty"]},"enabled":{"type":"boolean","description":"Whether the alert is active. Disabled alerts are not evaluated."},"id":{"type":["string","null"],"description":"Unique identifier for the alert. Auto-generated on creation.","readOnly":true},"incident_title_template":{"type":["string","null"],"description":"Incident title template; the generated title is used when no variable resolves.","example":"{service_name} errors on {host}"},"is_real_time":{"type":"boolean","description":"If true, alert evaluates in real-time as data arrives.\nIf false, alert runs on a schedule defined by trigger_condition.frequency."},"keep_firing_for":{"type":"integer","format":"int64","description":"Seconds the condition must stay clear before the alert recovers.\n0 recovers on the first clear evaluation.","example":0},"last_edited_by":{"type":["string","null"],"description":"Username who last edited the alert.","readOnly":true},"last_satisfied_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of when alert condition was last satisfied.","readOnly":true},"last_triggered_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of when alert was last triggered.","readOnly":true},"name":{"type":"string","description":"Human-readable name for the alert. Must be unique within the organization.","example":"High Error Rate Alert"},"notify_on_recovery":{"type":"boolean","description":"Send one notification when this alert recovers; a multi-alert sends one per recovered\ngroup."},"oncall_team":{"type":["string","null"],"description":"On-call team (a team id) this alert pages, taking precedence over\nownership discovery. Omitted or `null` means \"work the owner out from the\nidentity dimensions\", which is the normal case.\n\nValidated at save against the on-call teams of the same org: a team id\nthat names nothing routes nowhere, and a page that routes nowhere is\nsilence rather than an error.\n\nSave is a full replace, like `tags` — sending the alert back without this\nfield clears the binding.","example":"2f9K3mXQpLrTgYw8vN1cBzHd0Ae"},"org_id":{"type":"string","description":"Organization ID. Usually set automatically from the request context."},"owner":{"type":["string","null"],"description":"Username of the alert owner."},"pending_period_sec":{"type":"integer","format":"int64","example":10},"priority":{"type":["integer","null"],"format":"int32","description":"Priority 1..=5 (P1 = most urgent), Feature 2 / PT-1.\n\nMutable configuration; display + propagation only — it does not affect\nwhen the alert fires. Omitted = unset.\n\n`value_type` is required because the enum serializes as an integer via\nserde `try_from`/`into`; without it the OpenAPI schema would advertise a\nstring enum and lie about the payload.","example":3,"minimum":0},"query_condition":{"$ref":"#/components/schemas/QueryCondition","description":"Query configuration: SQL query or PromQL expression to evaluate."},"recovery_destinations":{"type":"array","items":{"type":"string"},"description":"Where the recovery message goes. Empty = the firing's own destinations. Ticket closes are\nunaffected: a resolve must reach whatever the firing opened."},"row_template":{"type":"string","description":"Template for formatting individual rows in the alert message."},"row_template_type":{"$ref":"#/components/schemas/RowTemplateType","description":"Format type for the row template."},"runbook_url":{"type":["string","null"],"description":"Where the fix for this alert is written down.\n\nCopied onto every on-call response record the alert opens, so whoever is\nwoken is handed the link in the page instead of going to find it while\nthe thing is on fire.\n\nValidated at save: `http://` or `https://` with a host, or the save is\nrefused. A malformed link stored today is a dead click at 3am, and the\nmoment it is read is the worst possible moment to discover it.\n\nFull replace, like `oncall_team`.","example":"https://wiki.example.com/runbooks/checkout"},"scheduler_job_present":{"type":["boolean","null"],"description":"Whether a scheduler job exists for this alert (runtime status, not a\nstored field). Populated on the composite detail path; omitted otherwise.","readOnly":true},"stream_name":{"type":"string","description":"Name of the stream to monitor.","example":"default"},"stream_type":{"$ref":"#/components/schemas/StreamType","description":"Type of stream to monitor: logs, metrics, or traces."},"suppress_repeats":{"type":"boolean","description":"Notify once per state change instead of on every firing evaluation. Enterprise only."},"tags":{"type":"array","items":{"type":"string"},"description":"Selection tags (PT-6): `prod`, `service:checkout`. Normalized and\nvalidated on save; omitted when empty.","example":["prod","service:checkout"]},"template":{"type":["string","null"],"description":"Optional template name. When specified, this template is used for all\ndestinations instead of destination-level templates. This allows using\ndifferent templates for different alerts while reusing the same destinations."},"trigger_condition":{"$ref":"#/components/schemas/TriggerCondition","description":"Trigger configuration: when and how often to evaluate, thresholds."},"tz_offset":{"type":"integer","format":"int32","description":"Timezone offset in minutes. Negative values for western hemisphere."},"updated_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of last modification.","readOnly":true},"workflows":{"type":"array","items":{"type":"string"},"description":"workflows to trigger when alert triggers","example":["abcde12345"]}}}],"description":"The alert configuration. All fields from Alert are flattened into this request body."},{"type":"object","properties":{"alert_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AlertTypeFilter","description":"Discriminates the alert type. Defaults to scheduled alert when absent.\nSet to `\"anomaly_detection\"` to create an anomaly detection config instead."}]},"anomaly_config":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AnomalyAlertFields","description":"Anomaly-detection-specific fields (nested object)."}]},"composite_condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CompositeCondition","description":"Composite-only boolean condition over stable child alert IDs."}]},"folder_id":{"type":["string","null"],"description":"Deprecated. The destination folder is taken from the `folder` query\nparameter, which is what the permission check authorizes; the default\nfolder is used when it is absent. A value here that disagrees with the\nquery parameter is rejected with 400 rather than silently ignored.","deprecated":true,"example":"default"}}}],"description":"HTTP request body for `CreateAlert` endpoint.\n\nCreates a new alert with the specified configuration. The alert monitors\na stream (logs, metrics, or traces) and triggers notifications when conditions are met.\n\n## Example\n\n```json\n{\n    \"name\": \"High Error Rate Alert\",\n    \"stream_type\": \"logs\",\n    \"stream_name\": \"default\",\n    \"is_real_time\": false,\n    \"query_condition\": {\n        \"type\": \"sql\",\n        \"sql\": \"SELECT count(*) as count FROM \\\"default\\\" WHERE level = 'error'\"\n    },\n    \"trigger_condition\": {\n        \"period\": 15,\n        \"operator\": \">=\",\n        \"threshold\": 100,\n        \"frequency\": 5,\n        \"frequency_type\": \"minutes\",\n        \"silence\": 60\n    },\n    \"destinations\": [\"slack-alerts\"],\n    \"enabled\": true,\n    \"description\": \"Alert when error count exceeds 100 in 15 minutes\"\n}\n```"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create a new alert rule with flexible query options. IMPORTANT: Alert name must use snake_case (no spaces/special chars like :,#,?,&,%,/,quotes), destinations must name existing destinations and may be empty. QueryCondition supports 3 query types: (1) Custom - uses conditions, aggregation, vrl_function, search_event_type, multi_time_range; (2) SQL - uses sql, vrl_function, search_event_type; (3) PromQL - uses promql, promql_condition, multi_time_range","category":"alerts"},"x-o2-ratelimit":{"module":"Alerts","operation":"create"}}},"/api/v2/{org_id}/alerts/auto_investigate/decisions":{"get":{"tags":["Alerts"],"summary":"List the org's auto-investigate decisions","description":"Lists the auto-investigate gate's decisions for this org's alerts, newest first, skips included, with the figures and settings each decision used. Reads this region's log only. An org with no decisions yet gets an empty list.","operationId":"ListAutoInvestigateDecisions","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"group_key","in":"query","description":"Empty selects the ungrouped row.","required":false,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Microseconds, inclusive; defaults to 7 days before `end_time`.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"Microseconds, exclusive; defaults to now.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"reason","in":"query","description":"A reason code such as `flapping`.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Defaults to 100, capped at 1000.","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionsResponse"}}}},"400":{"description":"Invalid filter","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"The log could not be read","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alerts/bulk":{"delete":{"tags":["Alerts"],"summary":"Delete multiple alerts","description":"Permanently removes multiple alerts and all their configurations including conditions, triggers, and notification settings. This action cannot be undone and will stop all monitoring and notifications for the deleted alerts.","operationId":"DeleteAlertBulk","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Alert ids","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteAlertResponse"}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/alerts/bulk/enable":{"post":{"tags":["Alerts"],"summary":"Enable or disable alert in bulk","description":"Toggles the active status of alerts to enable or disable its monitoring and notification functionality in bulk. When disabled, the alert will stop evaluating conditions and sending notifications until re-enabled.","operationId":"EnableAlertBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"Set to `true` to enable the alert or `false` to disable the alert.","required":true,"schema":{"type":"boolean"},"style":"form"},{"name":"folder","in":"query","description":"Pass the folder id — required for rbac (enterprise), optional for oss","required":false,"schema":{"type":"string"},"style":"form"}],"requestBody":{"description":"Alert id list","content":{"application/json":{"schema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string"}}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertBulkEnableResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"update"}}},"/api/v2/{org_id}/alerts/composites/validate":{"post":{"tags":["Alerts"],"summary":"Validate a composite alert condition","description":"Parses and validates a composite alert's boolean expression over child alert IDs and returns the canonical form, resolved children, and an advisory result without persisting anything.","operationId":"ValidateCompositeAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"Advisory validation/preview request. Persistence repeats all checks under\nthe organization graph lock.","required":["composite_condition"],"properties":{"composite_condition":{"$ref":"#/components/schemas/CompositeCondition","description":"The composite expression and truth policy to validate."},"composite_id":{"type":["string","null"],"description":"When editing an existing composite, its ID (so the graph check can exempt\nthe composite being updated); `None` when validating a new definition."},"folder_id":{"type":["string","null"],"description":"Reserved and currently unused: validation does not read this field, so\ncallers must not rely on it to scope or validate the composite."}}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompositeValidationResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alerts/generate_sql":{"post":{"tags":["Alerts"],"summary":"Generate SQL from alert query parameters","description":"Generates a SQL query string based on alert query parameters including stream, aggregations, and conditions. This endpoint is useful for testing alert queries and understanding the SQL that will be executed.","operationId":"GenerateSql","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"SQL generation parameters","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for `GenerateSql` endpoint.","required":["stream_name","stream_type","query_condition"],"properties":{"query_condition":{"$ref":"#/components/schemas/QueryCondition","description":"Query condition containing aggregation and WHERE conditions\nThe conditions field within QueryCondition supports both V1 and V2 formats"},"stream_name":{"type":"string","description":"Stream name to query","example":"default"},"stream_type":{"$ref":"#/components/schemas/StreamType","description":"Type of stream (logs, metrics, traces, etc.)"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for `GenerateSql` endpoint.","required":["sql"],"properties":{"metadata":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/GenerateSqlMetadata","description":"Optional metadata about the generated query"}]},"sql":{"type":"string","description":"The generated SQL query string","example":"SELECT * FROM \"my_stream\" WHERE field > 100"}}}}}},"400":{"description":"Bad request - invalid parameters","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"create"},"x-o2-mcp":{"description":"Generate SQL from natural language","category":"alerts"}}},"/api/v2/{org_id}/alerts/history":{"get":{"tags":["Alerts"],"summary":"Get alert execution history","description":"Retrieves the execution history of alerts for the organization. This endpoint queries the organization's own triggers stream to provide details about when alerts were triggered, their status, and execution details.","operationId":"GetAlertHistory","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"query","description":"Filter by specific alert id","required":false,"schema":{"type":"string"}},{"name":"anomaly_id","in":"query","description":"Return history for this anomaly detection config","required":false,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time in Unix timestamp microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time in Unix timestamp microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"from","in":"query","description":"Pagination offset (default: 0)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"Number of results to return (default: 100, max: 1000)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sort_by","in":"query","description":"Field to sort by: timestamp, alert_name, status, is_realtime, is_silenced, start_time, end_time, duration, retries, delay_in_secs, evaluation_took_in_secs, source_node, query_took (default: timestamp)","required":false,"schema":{"type":"string"}},{"name":"sort_order","in":"query","description":"Sort order: asc or desc (default: desc)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["total","from","size","hits"],"properties":{"from":{"type":"integer","format":"int64"},"hits":{"type":"array","items":{"$ref":"#/components/schemas/AlertHistoryEntry"}},"size":{"type":"integer","format":"int64"},"total":{"type":"integer","minimum":0}}}}}},"400":{"description":"Bad Request","content":{"application/json":{}}},"403":{"description":"Forbidden","content":{"application/json":{}}},"404":{"description":"Alert or anomaly config not found","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Alerts","operation":"list"}}},"/api/v2/{org_id}/alerts/incidents":{"get":{"tags":["Incidents"],"summary":"List alert incidents","description":"Retrieves a list of correlated alert incidents with optional status filtering and pagination.","operationId":"ListIncidents","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","description":"Filter by status (open, acknowledged, resolved)","required":false,"schema":{"type":["string","null"]}},{"name":"limit","in":"query","description":"Maximum number of results","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"offset","in":"query","description":"Offset for pagination","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListIncidentsResponse"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List all incidents","category":"alerts"},"x-o2-ratelimit":{"module":"Alerts","operation":"list"}}},"/api/v2/{org_id}/alerts/incidents/external-alerts/{external_alert_id}/payload":{"get":{"tags":["Incidents"],"summary":"Get the raw payload of an external alert","description":"Retrieves the original, unmodified webhook payload received for an external alert event. Used to inspect exactly what the source system sent.","operationId":"GetExternalAlertPayload","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"external_alert_id","in":"path","description":"External alert ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"get"},"x-o2-mcp":{"enabled":false,"description":"Get the raw payload of an external alert","category":"alerts"}}},"/api/v2/{org_id}/alerts/incidents/stats":{"get":{"tags":["Incidents"],"summary":"Get incident statistics","description":"Retrieves statistics about incidents including counts by status and severity.","operationId":"GetIncidentStats","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentStats"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"get"},"x-o2-mcp":{"description":"Get incident statistics","category":"alerts"}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}":{"get":{"tags":["Incidents"],"summary":"Get incident details","description":"Retrieves detailed information about a specific incident including all correlated alerts.","operationId":"GetIncident","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentWithAlerts"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get an incident's details","category":"alerts","pinned":true},"x-o2-ratelimit":{"module":"Alerts","operation":"get"}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/acknowledge":{"post":{"tags":["Incidents"],"summary":"Acknowledge an incident","description":"Acknowledges the incident, every firing of its alerts and every on-call page for it. Allowed for root, admins and editors (edit access to any of its alerts with OpenFGA on) and members of a team it pages. `take_over` moves an acknowledgement held by someone else to the caller. Enterprise only.","operationId":"AcknowledgeIncident","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Optional; `take_over` moves someone else's acknowledgement","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemAckRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AckResponse"}}}},"403":{"description":"Refused, with who is on call and who can act","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActRefusal"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/events":{"get":{"tags":["Incidents"],"summary":"Get the event timeline of an incident","operationId":"GetIncidentEvents","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/events/comment":{"post":{"tags":["Incidents"],"summary":"Add a comment to an incident","operationId":"AddIncidentComment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/rca":{"post":{"tags":["Incidents"],"summary":"Trigger RCA analysis for an incident","description":"Starts a root cause analysis run for an incident and returns 202 with the run id as soon as the run exists; its investigation turn is launched in the background. A launch that fails (too many analyses running, agent unreachable) ends the run as `failed` with its error code. Follow the run through the run list and its thread. An optional JSON body `{guidance}` (1 to 2000 characters) is given to the agent with the first prompt; other fields are refused.","operationId":"TriggerIncidentRca","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}},{"name":"build_on_previous","in":"query","description":"Include the previous report; default false keeps the new investigation fresh.","required":false,"schema":{"type":"boolean"}}],"requestBody":{"description":"Optional guidance for the new run","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerRcaBody"}}},"required":true},"responses":{"202":{"description":"Analysis started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RcaStartedResponse"}}}},"400":{"description":"RCA not enabled, an analysis is already in progress, an invalid body (`error_code: invalid_body`, also for unknown fields) or invalid guidance (`error_code: invalid_guidance`)","content":{"application/json":{"schema":{"default":null}}}},"402":{"description":"AI credits exhausted","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"AI Assistant is not included in the license (`code: 40001`, `error_detail: ai_assistant`)","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}},"412":{"description":"Paid usage requires organization consent","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"RCA agent or billing state unavailable","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"update"}},"delete":{"tags":["Incidents"],"summary":"Cancel the in-flight RCA analysis for an incident","description":"Cancels the running root cause analysis: the run ends `cancelled`, its investigation turn is stopped, and the in-flight guard is released so a new analysis can be started immediately.","operationId":"CancelIncidentRca","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Analysis cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelRcaResponse"}}}},"400":{"description":"Analysis is not running","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"update"}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/rca/live_stream":{"get":{"tags":["Incidents"],"summary":"Stream the changes of the incident's analysis","description":"Server-sent events. `rca` carries the incident's analysis state; with `run_id`, `thread`, `summary` and `steering` carry the bodies of the run's GET routes. Each event is a full snapshot and goes out when its part changes. `error` reports a part that could not be read, as `{part, status, error_code, message}`. `end` closes the stream once the run (or, without `run_id`, the latest run) ended. A stream also closes after 300 s; reconnect to get every part again.","operationId":"GetIncidentRcaLiveStream","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"query","description":"The run whose thread, summary and steering to send; without it, only the incident's state.","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Event stream","content":{"text/event-stream":{"schema":{"type":"string"}}}},"404":{"description":"Incident or run not found","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"get"}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/rca/runs":{"get":{"tags":["Incidents"],"summary":"List the analysis runs of an incident","description":"Returns the incident's analysis runs, newest first, without report text. Page with `before` set to the last run id of the previous page. Reports from before analysis runs existed follow on the last page with `report_format: v1`.","operationId":"ListIncidentRcaRuns","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Page size (default 25, max 100)","required":false,"schema":{"type":["integer","null"],"format":"int64","minimum":0}},{"name":"before","in":"query","description":"Return runs older than this run id (the last run of the previous page)","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Analysis runs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListRcaRunsResponse"}}}},"404":{"description":"Incident not found","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"get"},"x-o2-mcp":{"enabled":true,"description":"List past incident RCA runs","category":"alerts"}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/rca/runs/{run_id}":{"get":{"tags":["Incidents"],"summary":"Get one analysis run of an incident","description":"Returns one analysis run of the incident, including its report and error.","operationId":"GetIncidentRcaRun","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","description":"Run ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Analysis run","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RcaRun"}}}},"404":{"description":"Run not found","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"get"}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/rca/runs/{run_id}/resume":{"post":{"tags":["Incidents"],"summary":"Resume a failed or cancelled analysis run","description":"Starts a new analysis run that keeps the finished steps of the incident's latest run, when that run failed or was cancelled, and redoes the step it stopped in. Returns 202 with the new run id as soon as the run exists; its investigation turn is launched in the background, and a launch that fails ends the run as `failed` with its error code. The body is empty.","operationId":"ResumeIncidentRcaRun","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","description":"Run ID of the failed or cancelled run","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Resumed run started","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RcaResumedResponse"}}}},"400":{"description":"RCA not enabled","content":{"application/json":{"schema":{"default":null}}}},"402":{"description":"AI credits exhausted","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"AI Assistant is not included in the license (`code: 40001`, `error_detail: ai_assistant`)","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown incident or run","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"`error_code`: `not_resumable`, `nothing_to_resume` or `run_in_flight`","content":{"application/json":{"schema":{"type":"object"}}}},"410":{"description":"`error_code: transcript_expired`: the earlier run's transcript is gone","content":{"application/json":{"schema":{"type":"object"}}}},"412":{"description":"Paid usage requires organization consent","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"RCA agent or billing state unavailable, or the earlier run's transcript could not be read in full (`error_code: history_unavailable`)","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/rca/runs/{run_id}/steer":{"post":{"tags":["Incidents"],"summary":"Send a message to a live analysis run","description":"Saves a responder message for the incident's live analysis run and hands it to the agent, which reads it after its current step. A `hypothesis_action` asks the agent to disprove, reopen or test one hypothesis first; the server writes its text. The author is the authenticated user. A 201 can carry a `rejected` record: it was saved but not sent.","operationId":"SteerIncidentRcaRun","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","description":"Run ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The message","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SteerRequestBody"}}},"required":true},"responses":{"201":{"description":"Message saved; `{steer, run_state}`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SteerOutcome"}}}},"400":{"description":"Invalid body (`error_code`: `invalid_body`, `invalid_text`, `invalid_kind`, `invalid_action`, `unknown_hypothesis`)","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"The user cannot run an analysis on this incident","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown incident or run","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"`error_code`: `run_not_steerable`, `run_closing` or `duplicate_action`","content":{"application/json":{"schema":{"type":"object"}}}},"429":{"description":"`error_code: rate_limited` with `retry_after_secs`","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"update"}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/rca/runs/{run_id}/steering":{"get":{"tags":["Incidents"],"summary":"Get the responder messages and the open question of an analysis run","description":"Returns the run's responder messages with their delivery state (queued, delivered, read, applied, declined, not read, rejected), the question the agent is waiting on, if any, and whether the caller can send a message now.","operationId":"GetIncidentRcaSteering","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","description":"Run ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Steering state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SteeringView"}}}},"404":{"description":"Run not found","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/rca/runs/{run_id}/summary":{"get":{"tags":["Incidents"],"summary":"Get the verdict, hypotheses and evidence of an analysis run","description":"Returns the summary of one analysis run of the incident: the verdict card, the causal timeline, the hypotheses, the verified evidence and the blind spots. A live run returns what the agent recorded so far. Pass the last `state_version` as `known_version` to get `not_modified` when nothing changed.","operationId":"GetIncidentRcaSummary","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","description":"Run ID","required":true,"schema":{"type":"string"}},{"name":"known_version","in":"query","description":"The `state_version` of the caller's copy; an equal version returns `not_modified`","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Run summary, or `{run_id, state_version, not_modified: true}`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RcaRunSummary"}}}},"404":{"description":"Run not found","content":{"application/json":{"schema":{"default":null}}}},"410":{"description":"The run's transcript expired (`error_code: transcript_expired`)","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"default":null}}}},"503":{"description":"The transcript could not be read in full (`error_code: history_unavailable`)","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/rca/runs/{run_id}/thread":{"get":{"tags":["Incidents"],"summary":"Get the investigation thread of an analysis run","description":"Returns the steps, notes and tool calls of one analysis run of the incident. Pass the last `state_version` as `known_version` to get `not_modified` when nothing changed. Tool input and output show only when the org setting `ai_rca_thread_tool_output` is on.","operationId":"GetIncidentRcaThread","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","description":"Run ID","required":true,"schema":{"type":"string"}},{"name":"known_version","in":"query","description":"The `state_version` of the caller's copy; an equal version returns `not_modified`","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Investigation thread, or `{not_modified: true, state_version}`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RcaThread"}}}},"404":{"description":"Run not found","content":{"application/json":{"schema":{"default":null}}}},"410":{"description":"The run's transcript expired (`error_code: transcript_expired`)","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"default":null}}}},"503":{"description":"The transcript could not be read in full (`error_code: history_unavailable`)","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"get"}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/unacknowledge":{"post":{"tags":["Incidents"],"summary":"Remove the acknowledgement of an incident","description":"Clears the acknowledgement of the incident and of its alerts' firings, and restarts the on-call pages it stopped at step 1. The incident goes back to open without a new analysis run. Enterprise only.","operationId":"UnacknowledgeIncident","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnackResponse"}}}},"403":{"description":"Refused, with who is on call and who can act","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActRefusal"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alerts/incidents/{incident_id}/update":{"patch":{"tags":["Incidents"],"summary":"Update incident fields","description":"Updates incident title, severity, or status. This endpoint is only available with enterprise features enabled.","operationId":"UpdateIncident","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Field to update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePayload"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Incident"}}}},"403":{"description":"Enterprise feature","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"description":"Update an incident's title or severity. Status changes (resolve, acknowledge, reopen) are NOT supported via this tool — they must be performed by a human in the UI.","category":"alerts"}}},"/api/v2/{org_id}/alerts/move":{"patch":{"tags":["Alerts"],"summary":"Move alerts between folders","description":"Moves one or more alerts from their current folder to a specified destination folder. Helps organize alerts into logical groups and manage access permissions when using role-based access control.","operationId":"MoveAlerts","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"From Folder ID (Required if RBAC enabled)","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Identifies alerts and the destination folder","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for `MoveAlerts` endpoint.","required":["alert_ids","dst_folder_id"],"properties":{"alert_ids":{"type":"array","items":{"type":"string"},"description":"IDs of the alerts to move."},"anomaly_config_ids":{"type":"array","items":{"type":"string"},"description":"IDs of anomaly detection configs to move. Defaults to empty when not\nprovided. Callers should always supply this to avoid per-ID DB lookups."},"dst_folder_id":{"type":"string","description":"Indicates the folder to which alerts should be moved."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Move alerts to another folder","category":"alerts"},"x-o2-ratelimit":{"module":"Alerts","operation":"update"}}},"/api/v2/{org_id}/alerts/tags":{"get":{"tags":["Alerts"],"summary":"List distinct alert tags","description":"Returns distinct tags across the alerts the caller can see, with occurrence counts, for autocomplete and filter facets.","operationId":"ListAlertTags","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"prefix","in":"query","description":"Optional case-insensitive prefix filter for autocomplete.","required":false,"schema":{"type":"string"},"style":"form"},{"name":"limit","in":"query","description":"Maximum tags to return. Defaults to 100, capped at 1000.","required":false,"schema":{"type":"integer","minimum":0},"style":"form"},{"name":"folder","in":"query","description":"Restrict to one folder, matching the list endpoint's scope.","required":false,"schema":{"type":"string"},"style":"form"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AlertTagCount"}}}}},"403":{"description":"Forbidden","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alerts/{alert_id}":{"get":{"tags":["Alerts"],"summary":"Get alert details","description":"Retrieves detailed information about a specific alert including its configuration, conditions, triggers, notification settings, and current status. Useful for viewing and understanding existing alert setups. Composite alerts return a composite-shaped body (alert_type=\"composite\", composite_condition, children, evaluation) rather than GetAlertResponseBody.","operationId":"GetAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID (Required if RBAC enabled)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Alert"},{"type":"object","properties":{"locked_target_names":{"type":"object","description":"Display names of the alert's locked workflows and on-call team, by id, for the edit form.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}}}}],"description":"HTTP response body for `GetAlert` endpoint."}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get alert details by ID","category":"alerts"},"x-o2-ratelimit":{"module":"Alerts","operation":"get"}},"put":{"tags":["Alerts"],"summary":"Update alert configuration","description":"Updates an existing alert's configuration including conditions, queries, thresholds, notification destinations, and scheduling. Allows users to modify alert behavior and settings as monitoring requirements change.","operationId":"UpdateAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID (Required if RBAC enabled)","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Alert data","content":{"application/json":{"schema":{"allOf":[{"oneOf":[{"type":"object","description":"Alert configuration for monitoring streams and triggering notifications.\n\nAn alert watches a stream (logs, metrics, or traces) using SQL or PromQL queries,\nand sends notifications to configured destinations when trigger conditions are met.","properties":{"context_attributes":{"type":["object","null"],"description":"Optional key-value attributes to include in alert notifications.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"creates_incident":{"type":"boolean","description":"When true, this alert routes notifications through the incident system\ninstead of sending direct alert notifications."},"description":{"type":"string","description":"Human-readable description of what this alert monitors.","example":"Fires when error count exceeds threshold in the specified time window"},"destinations":{"type":"array","items":{"type":"string"},"description":"List of destination names to notify when alert fires.\nDestinations must be pre-configured in the system.\nAccepts either `destinations` or `alert_destinations` as the JSON field name.","example":["slack-alerts","pagerduty"]},"enabled":{"type":"boolean","description":"Whether the alert is active. Disabled alerts are not evaluated."},"id":{"type":["string","null"],"description":"Unique identifier for the alert. Auto-generated on creation.","readOnly":true},"incident_title_template":{"type":["string","null"],"description":"Incident title template; the generated title is used when no variable resolves.","example":"{service_name} errors on {host}"},"is_real_time":{"type":"boolean","description":"If true, alert evaluates in real-time as data arrives.\nIf false, alert runs on a schedule defined by trigger_condition.frequency."},"keep_firing_for":{"type":"integer","format":"int64","description":"Seconds the condition must stay clear before the alert recovers.\n0 recovers on the first clear evaluation.","example":0},"last_edited_by":{"type":["string","null"],"description":"Username who last edited the alert.","readOnly":true},"last_satisfied_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of when alert condition was last satisfied.","readOnly":true},"last_triggered_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of when alert was last triggered.","readOnly":true},"name":{"type":"string","description":"Human-readable name for the alert. Must be unique within the organization.","example":"High Error Rate Alert"},"notify_on_recovery":{"type":"boolean","description":"Send one notification when this alert recovers; a multi-alert sends one per recovered\ngroup."},"oncall_team":{"type":["string","null"],"description":"On-call team (a team id) this alert pages, taking precedence over\nownership discovery. Omitted or `null` means \"work the owner out from the\nidentity dimensions\", which is the normal case.\n\nValidated at save against the on-call teams of the same org: a team id\nthat names nothing routes nowhere, and a page that routes nowhere is\nsilence rather than an error.\n\nSave is a full replace, like `tags` — sending the alert back without this\nfield clears the binding.","example":"2f9K3mXQpLrTgYw8vN1cBzHd0Ae"},"org_id":{"type":"string","description":"Organization ID. Usually set automatically from the request context."},"owner":{"type":["string","null"],"description":"Username of the alert owner."},"pending_period_sec":{"type":"integer","format":"int64","example":10},"priority":{"type":["integer","null"],"format":"int32","description":"Priority 1..=5 (P1 = most urgent), Feature 2 / PT-1.\n\nMutable configuration; display + propagation only — it does not affect\nwhen the alert fires. Omitted = unset.\n\n`value_type` is required because the enum serializes as an integer via\nserde `try_from`/`into`; without it the OpenAPI schema would advertise a\nstring enum and lie about the payload.","example":3,"minimum":0},"query_condition":{"$ref":"#/components/schemas/QueryCondition","description":"Query configuration: SQL query or PromQL expression to evaluate."},"recovery_destinations":{"type":"array","items":{"type":"string"},"description":"Where the recovery message goes. Empty = the firing's own destinations. Ticket closes are\nunaffected: a resolve must reach whatever the firing opened."},"row_template":{"type":"string","description":"Template for formatting individual rows in the alert message."},"row_template_type":{"$ref":"#/components/schemas/RowTemplateType","description":"Format type for the row template."},"runbook_url":{"type":["string","null"],"description":"Where the fix for this alert is written down.\n\nCopied onto every on-call response record the alert opens, so whoever is\nwoken is handed the link in the page instead of going to find it while\nthe thing is on fire.\n\nValidated at save: `http://` or `https://` with a host, or the save is\nrefused. A malformed link stored today is a dead click at 3am, and the\nmoment it is read is the worst possible moment to discover it.\n\nFull replace, like `oncall_team`.","example":"https://wiki.example.com/runbooks/checkout"},"scheduler_job_present":{"type":["boolean","null"],"description":"Whether a scheduler job exists for this alert (runtime status, not a\nstored field). Populated on the composite detail path; omitted otherwise.","readOnly":true},"stream_name":{"type":"string","description":"Name of the stream to monitor.","example":"default"},"stream_type":{"$ref":"#/components/schemas/StreamType","description":"Type of stream to monitor: logs, metrics, or traces."},"suppress_repeats":{"type":"boolean","description":"Notify once per state change instead of on every firing evaluation. Enterprise only."},"tags":{"type":"array","items":{"type":"string"},"description":"Selection tags (PT-6): `prod`, `service:checkout`. Normalized and\nvalidated on save; omitted when empty.","example":["prod","service:checkout"]},"template":{"type":["string","null"],"description":"Optional template name. When specified, this template is used for all\ndestinations instead of destination-level templates. This allows using\ndifferent templates for different alerts while reusing the same destinations."},"trigger_condition":{"$ref":"#/components/schemas/TriggerCondition","description":"Trigger configuration: when and how often to evaluate, thresholds."},"tz_offset":{"type":"integer","format":"int32","description":"Timezone offset in minutes. Negative values for western hemisphere."},"updated_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of last modification.","readOnly":true},"workflows":{"type":"array","items":{"type":"string"},"description":"workflows to trigger when alert triggers","example":["abcde12345"]}}}],"description":"Alert configuration fields (used for scheduled/realtime alerts)."},{"type":"object","properties":{"alert_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AlertTypeFilter","description":"Discriminates the alert type. When `\"anomaly_detection\"`, delegates to the\nanomaly config update path."}]},"anomaly_config":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/UpdateAnomalyAlertFields","description":"Anomaly-detection-specific fields to update (partial — only supplied fields\nare changed)."}]},"composite_condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CompositeCondition","description":"Composite-only boolean condition over stable child alert IDs."}]}}}],"description":"HTTP request body for `UpdateAlert` endpoint.\n\nUpdates an existing alert. Provide the full alert configuration — this replaces\nthe existing alert entirely (not a partial update). The request body is the same\nstructure as Alert.\n\nFor anomaly detection configs, set `alert_type = \"anomaly_detection\"` and supply\nanomaly-specific fields directly at the top level (flat). Only fields present in\nthe request body will be updated (partial update semantics for anomaly fields)."}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"description":"Update an existing alert","category":"alerts"}},"delete":{"tags":["Alerts"],"summary":"Delete alert","description":"Permanently removes an alert and all its configurations including conditions, triggers, and notification settings. This action cannot be undone and will stop all monitoring and notifications for the deleted alert. Also deletes composite alerts; returns 409 when the alert is referenced by one or more composite alerts.","operationId":"DeleteAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID (Required if RBAC enabled)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"409":{"description":"Referenced by composite alerts","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"delete"},"x-o2-mcp":{"description":"Delete an alert by ID","category":"alerts","requires_confirmation":true}}},"/api/v2/{org_id}/alerts/{alert_id}/ack":{"post":{"tags":["Alerts"],"summary":"Acknowledge an alert's current firing","description":"Acknowledges the problem behind the alert: its incident when the firing is in one, else the current firing of one group (or every firing group with `all_groups`). Repeat notifications stop until it clears; a level increase still notifies. Allowed for root, admins and editors (alert edit access with OpenFGA on) and members of a team the problem pages. Every on-call page of the problem stops, unless another group still fires unacknowledged. `take_over` moves an acknowledgement held by someone else to the caller.","operationId":"AckAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID of the alert, for the permission check","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"The group and firing to acknowledge","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AckRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AckResponse"}}}},"403":{"description":"Refused, with who is on call and who can act","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActRefusal"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"The group is not firing, or is on another firing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AckConflict"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"description":"Acknowledge an alert's current firing","category":"alerts"}}},"/api/v2/{org_id}/alerts/{alert_id}/acks":{"get":{"tags":["Alerts"],"summary":"List the acknowledgements in force","description":"Returns the acks in force for the alert's current firings, one per group.","operationId":"ListAlertAcks","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID of the alert, for the permission check","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AckListResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List an alert's acknowledgements in force","category":"alerts"},"x-o2-ratelimit":{"module":"Alerts","operation":"get"}}},"/api/v2/{org_id}/alerts/{alert_id}/clone":{"post":{"tags":["Alerts"],"summary":"Clone an alert or anomaly detection config","description":"Creates a copy of an existing alert or anomaly detection config. For anomaly configs, the clone starts untrained with counters reset. Provide an optional name and folder_id in the request body; a folder_id requires write access to that destination folder.","operationId":"CloneAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Source alert or anomaly config ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID (Required if RBAC enabled)","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Clone options","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for `CloneAlert` endpoint.","properties":{"folder_id":{"type":["string","null"],"description":"Optional folder ID to place the clone in. Defaults to the source folder."},"name":{"type":["string","null"],"description":"Optional new name for the cloned alert. Defaults to `<source_name>_copy`."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloneAlertAnswer"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Alerts","operation":"create"}}},"/api/v2/{org_id}/alerts/{alert_id}/composite-references":{"get":{"tags":["Alerts"],"summary":"List composite alerts referencing an alert","description":"Returns the composite alerts that reference the given alert as a child, plus the count of references hidden from the caller by permissions.","operationId":"GetCompositeReferences","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert or composite alert ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompositeReferencesResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Alerts","operation":"list"}}},"/api/v2/{org_id}/alerts/{alert_id}/composite-timeline":{"get":{"tags":["Alerts"],"summary":"Per-child status history for a composite alert","description":"Returns one status lane per child (plus the composite's own result) over a time window, read from each alert's durable level transitions. Children are ordered by display order (A/B/C).","operationId":"GetCompositeTimeline","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Composite alert ID","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Window start (micros). Defaults to 4h before `to`.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"to","in":"query","description":"Window end (micros). Defaults to now.","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for the composite status-timeline endpoint.","required":["from","to","children","result"],"properties":{"children":{"type":"array","items":{"$ref":"#/components/schemas/CompositeTimelineLane"},"description":"One lane per child, in the same display order as the detail response."},"from":{"type":"integer","format":"int64"},"result":{"$ref":"#/components/schemas/CompositeTimelineLane","description":"The composite's own result lane."},"to":{"type":"integer","format":"int64"}}}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"get"},"x-o2-mcp":{"description":"Composite alert per-child status timeline","category":"alerts"}}},"/api/v2/{org_id}/alerts/{alert_id}/enable":{"patch":{"tags":["Alerts"],"summary":"Enable or disable alert","description":"Toggles the active status of an alert to enable or disable its monitoring and notification functionality. When disabled, the alert will stop evaluating conditions and sending notifications until re-enabled.","operationId":"EnableAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"Set to `true` to enable the alert or `false` to disable the alert.","required":true,"schema":{"type":"boolean"},"style":"form"},{"name":"folder","in":"query","description":"Pass the folder id — required for rbac (enterprise), optional for oss","required":false,"schema":{"type":"string"},"style":"form"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnableAlertResponseBody"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"description":"Enable or disable an alert","category":"alerts"}}},"/api/v2/{org_id}/alerts/{alert_id}/export":{"post":{"tags":["Alerts"],"summary":"Export alert configuration","description":"Exports the complete configuration of a specific alert in a format suitable for backup, sharing, or importing into other environments. Includes all alert settings, conditions, and notification configurations.","operationId":"ExportAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID (Required if RBAC enabled)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Alert"},{"type":"object","properties":{"locked_target_names":{"type":"object","description":"Display names of the alert's locked workflows and on-call team, by id, for the edit form.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}}}}],"description":"HTTP response body for `GetAlert` endpoint."}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"get"},"x-o2-mcp":{"description":"Export alert as JSON","category":"alerts"}}},"/api/v2/{org_id}/alerts/{alert_id}/groups":{"get":{"tags":["Alerts"],"summary":"List a multi-alert's tracked groups","description":"Returns the per-group state rows of a multi-alert, most severe first, with the pre-cap group counts needed to render 'N of M groups firing'. Empty for alerts that have not opted in to per-group evaluation.","operationId":"ListAlertGroups","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for `ListAlertGroups`.","required":["list","capped","group_cap"],"properties":{"capped":{"type":"boolean","description":"True when the last evaluation observed more groups than the M-6 cap\ntracks, so `list` is a truncated view. Drives the cap banner — M-6\nforbids truncating silently."},"group_cap":{"type":"integer","description":"The cap in force, for the banner's wording.","minimum":0},"groups_firing":{"type":["integer","null"],"format":"int32"},"groups_firing_is_lower_bound":{"type":["boolean","null"]},"groups_observed":{"type":["integer","null"],"format":"int32","description":"Pre-cap totals from the rollup row, so the caller can render\n\"N of M groups firing\" without counting the (post-cap) list above."},"groups_observed_is_lower_bound":{"type":["boolean","null"]},"list":{"type":"array","items":{"$ref":"#/components/schemas/AlertGroupResponseItem"},"description":"Tracked groups, most severe first."}}}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false,"description":"List the per-group states of a multi-alert","category":"alerts"},"x-o2-ratelimit":{"module":"Alerts","operation":"get"}}},"/api/v2/{org_id}/alerts/{alert_id}/groups/transitions":{"get":{"tags":["Alerts"],"summary":"Per-group state history for a multi-alert","description":"Returns level/outcome transitions for a multi-alert, newest first, optionally scoped to one group (M-8). Reads the durable transitions table rather than the triggers stream, so history survives group reaping.","operationId":"ListAlertGroupTransitions","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"group_key","in":"query","description":"Restrict to one group. Omit for every group.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max rows (default 100, max 1000)","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for `ListAlertGroupTransitions`.","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/AlertGroupTransitionItem"}}}}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"get"},"x-o2-mcp":{"enabled":false,"description":"Per-group alert state history","category":"alerts"}}},"/api/v2/{org_id}/alerts/{alert_id}/mute":{"post":{"tags":["Alerts"],"summary":"Mute an alert or some of its groups","description":"Creates a one-time downtime that targets only this alert: until it clears (ended by the alert's clear, 24 hours at most), for 1 to 1440 minutes, or until an instant. `group_keys` mutes only those groups of a multi-alert; `all_groups` or no keys mutes the whole alert. Filed in `folder_id`, else the default downtimes folder. Allowed for admins and editors (alert edit access with OpenFGA on) and for members of the team of an open on-call response for the alert or its incident. Enterprise only.","operationId":"MuteAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID of the alert, for the permission check","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"How long, and which groups","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertMuteRequest"}}},"required":true},"responses":{"201":{"description":"Muted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertMuteResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Refused, with who is on call and who can act; or not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActRefusal"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Already muted, or the org's downtime cap is reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertMuteConflict"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Mute an alert or some of its groups","category":"alerts"},"x-o2-ratelimit":{"module":"Alerts","operation":"update"}}},"/api/v2/{org_id}/alerts/{alert_id}/mute/{downtime_id}/cancel":{"post":{"tags":["Alerts"],"summary":"End an alert's quick mute now","description":"Cancels a quick mute of this alert; the row stays for history. Same rule as mute.","operationId":"CancelAlertMute","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"downtime_id","in":"path","description":"Downtime ID of the quick mute","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID of the alert, for the permission check","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Downtime"}}}},"403":{"description":"Refused, with who is on call and who can act; or not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActRefusal"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Not a quick mute of this alert","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertMuteConflict"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"End an alert's quick mute now","category":"alerts"},"x-o2-ratelimit":{"module":"Alerts","operation":"update"}}},"/api/v2/{org_id}/alerts/{alert_id}/mute/{downtime_id}/extend":{"post":{"tags":["Alerts"],"summary":"Move the end of an alert's quick mute","description":"Changes when a quick mute of this alert ends: `minutes` added to the later of its end and now (from now for an until-it-clears mute, which then becomes timed), `until_clear`, or `ends_at`. `version` is the one the caller saw; a newer row answers 409 `version_changed` with the current end. Same rule as mute.","operationId":"ExtendAlertMute","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"downtime_id","in":"path","description":"Downtime ID of the quick mute","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID of the alert, for the permission check","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"The new end and the version seen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertMuteExtendRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertMuteExtendResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Refused, with who is on call and who can act; or not supported","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActRefusal"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"The version changed, or the downtime is not a quick mute of this alert","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertMuteConflict"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Move the end of an alert's quick mute","category":"alerts"},"x-o2-ratelimit":{"module":"Alerts","operation":"update"}}},"/api/v2/{org_id}/alerts/{alert_id}/retrain":{"patch":{"tags":["Alerts"],"summary":"Trigger retraining for an anomaly detection alert","description":"Triggers a model retrain for an anomaly detection alert. Returns 400 if called on a non-anomaly alert type.","operationId":"RetrainAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Anomaly detection alert ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Not an anomaly detection alert","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/alerts/{alert_id}/slo-preview":{"get":{"tags":["SLOs"],"summary":"Preview the uptime an alert would produce as an SLI source","description":"Returns the ledger intervals for the ribbon plus the achieved SLI and the\ncoverage behind it — the alert analogue of the time-slice preview. Computed\nby the same fold the ingest pass runs, so the preview cannot disagree with\nthe SLO it is previewing.","operationId":"PreviewAlertSli","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Source alert identifier","required":true,"schema":{"type":"string"}},{"name":"window_secs","in":"query","description":"Rolling window in seconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"slice_interval_secs","in":"query","description":"Slice width in seconds","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertSliPreview"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"SLOs","operation":"list"}}},"/api/v2/{org_id}/alerts/{alert_id}/trigger":{"patch":{"tags":["Alerts"],"summary":"Manually trigger alert","description":"Manually triggers an alert to test its functionality and notification delivery. Useful for testing alert configurations, verifying notification channels, and ensuring alerts work as expected before relying on them for monitoring. When a destination or the on-call page could not be delivered, the response also carries `warning` with the reason. For an anomaly detection alert it runs detection now and returns `message`, `claim_lost`, `ineligible`, `anomaly_id`, `anomalies_found`, `points_scored` and `anomalies`; `claim_lost: true` means another detection run for this alert is in progress, and `ineligible: true` means the detector is disabled or untrained (`message` says which), so nothing was scored.","operationId":"TriggerAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID (Required if RBAC enabled)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success; for an anomaly alert, the detection result (see description)","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Workflows is not in the license and the alert reached nobody else; `code` is 40001 and `error_detail` names the feature","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"description":"Manually trigger an alert","category":"alerts"}}},"/api/v2/{org_id}/alerts/{alert_id}/unack":{"post":{"tags":["Alerts"],"summary":"Remove the acknowledgement of an alert's firing","description":"Clears the acknowledgement of the problem behind the alert: its incident when the firing is in one, else the group's firing. Repeat notifications resume one silence interval after the unack, and the on-call pages the acknowledgement stopped restart at step 1. A no-op when nothing is acknowledged.","operationId":"UnackAlert","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"alert_id","in":"path","description":"Alert ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID of the alert, for the permission check","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"The group and firing to unacknowledge","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnackRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnackResponse"}}}},"403":{"description":"Refused, with who is on call and who can act","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActRefusal"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"description":"Remove the acknowledgement of an alert's firing","category":"alerts"}}},"/api/v2/{org_id}/downtimes":{"get":{"tags":["Downtimes"],"summary":"List downtimes","description":"Lists the downtimes in the folders the user may list, with their status, windows and match counts.","operationId":"ListDowntimes","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder_id","in":"query","description":"Absent means every folder the user may list.","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","description":"`scheduled`, `active`, `ended`, `ended_early` or `cancelled`.","required":false,"schema":{"type":"string"}},{"name":"repeat","in":"query","description":"`none`, `daily`, `weekly`, or `recurring` for both.","required":false,"schema":{"type":"string"}},{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"alert_id","in":"query","description":"Rows whose alerts target names this alert, or whose condition matches its dimensions.","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListDowntimesResponse"}}}},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Downtimes","operation":"list"},"x-o2-mcp":{"enabled":true}},"post":{"tags":["Downtimes"],"summary":"Create a downtime","description":"Creates a downtime. Quick mute uses this route with one target and specific ids.","operationId":"CreateDowntime","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Downtime definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DowntimeRequest"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDowntimeResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Downtimes","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/downtimes/move":{"patch":{"tags":["Downtimes"],"summary":"Move downtimes to another folder","operationId":"MoveDowntimes","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Ids and destination folder","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveDowntimesRequest"}}},"required":true},"responses":{"200":{"description":"Moved"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Downtimes","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/downtimes/preview":{"post":{"tags":["Downtimes"],"summary":"Preview what a downtime covers","description":"Lists, per module, what the targets match today, the alerts decided at fire time, and the items a resource refinement cannot decide. Entries are limited to resources the user may read; totals count everything.","operationId":"PreviewDowntime","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Condition and targets","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewResponse"}}}},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Downtimes","operation":"create"}}},"/api/v2/{org_id}/downtimes/resources":{"post":{"tags":["Downtimes"],"summary":"Resources behind a condition","description":"The values of a finer dimension, such as host, that co-occur with the condition, for refining a downtime to some resources.","operationId":"DowntimeResources","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Condition and the dimension to refine by","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcesRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcesResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Downtimes","operation":"create"}}},"/api/v2/{org_id}/downtimes/values":{"post":{"tags":["Downtimes"],"summary":"Suggested values of a dimension","description":"Values of one dimension for the condition value box and the resource picker, from the alerts, anomaly detections and SLOs, the service registry and, for a non-priority dimension, a one-hour search. `partial` is true when the search did not answer within 2 s.","operationId":"DowntimeValues","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The dimension, the typed prefix and the condition so far","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValuesRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValuesResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Downtimes","operation":"create"}}},"/api/v2/{org_id}/downtimes/{downtime_id}":{"get":{"tags":["Downtimes"],"summary":"Get a downtime","operationId":"GetDowntime","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"downtime_id","in":"path","description":"Downtime id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DowntimeDetail"}}}},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Downtimes","operation":"get"},"x-o2-mcp":{"enabled":true}},"put":{"tags":["Downtimes"],"summary":"Update a downtime","description":"Edits the condition, targets, schedule, reason and banner. The folder changes only through move.","operationId":"UpdateDowntime","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"downtime_id","in":"path","description":"Downtime id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Downtime definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DowntimeRequest"}}},"required":true},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Downtime"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Downtimes","operation":"update"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Downtimes"],"summary":"Delete an ended or cancelled downtime","operationId":"DeleteDowntime","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"downtime_id","in":"path","description":"Downtime id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Active, scheduled, or it corrected SLO slices","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Downtimes","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/v2/{org_id}/downtimes/{downtime_id}/cancel":{"post":{"tags":["Downtimes"],"summary":"End or cancel a downtime","description":"Ends an active window now, or calls off a scheduled one. The row stays for history.","operationId":"CancelDowntime","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"downtime_id","in":"path","description":"Downtime id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Downtime"}}}},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Downtimes","operation":"create"}}},"/api/v2/{org_id}/downtimes/{downtime_id}/extend":{"post":{"tags":["Downtimes"],"summary":"Extend an active downtime","description":"Moves the end of the active window by `by_secs` or to `until`, exactly one of them. A recurring downtime keeps its schedule; a one-time downtime named \"<name> (extended)\" is created from the end of the current window instead, and its id is returned as `created_id`.","operationId":"ExtendDowntime","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"downtime_id","in":"path","description":"Downtime id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The extension","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendDowntimeRequest"}}},"required":true},"responses":{"200":{"description":"Extended","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendDowntimeResponse"}}}},"400":{"description":"Not active, or an invalid extension","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"The downtime changed since it was read","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Downtimes","operation":"create"}}},"/api/v2/{org_id}/downtimes/{downtime_id}/test":{"post":{"tags":["Downtimes"],"summary":"Send a downtime's started message to its destinations","description":"Renders and sends the started message of the downtime's current or next window through the same path a real start uses, to the listed destinations of the downtime (all of them when the list is empty). Each destination gets one result.","operationId":"TestDowntimeNotifications","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"downtime_id","in":"path","description":"Downtime id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The destinations to test","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DowntimeTestRequest"}}},"required":true},"responses":{"200":{"description":"One result per destination","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DowntimeTestResult"}}}}},"403":{"description":"Forbidden or not enabled","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Downtimes","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/folders/{folder_type}":{"get":{"tags":["Folders"],"summary":"List organization folders","description":"Retrieves a list of all folders in the organization for the specified folder type. Users will only see folders they have access to when role-based access control is enabled.","operationId":"ListFolders","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder_type","in":"path","description":"Type of data the folder can contain","required":true,"schema":{"$ref":"#/components/schemas/FolderType"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for `ListFolder` endpoint.","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/Folder"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List all folders","category":"folders","summary_fields":["folderId","name","description"]},"x-o2-ratelimit":{"module":"Folders","operation":"list"}},"post":{"tags":["Folders"],"summary":"Create new folder","description":"Creates a new folder for organizing dashboards, alerts, or reports. Folders help users organize their content into logical groups and manage access permissions when using role-based access control.","operationId":"CreateFolder","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder_type","in":"path","description":"Type of data the folder can contain","required":true,"schema":{"$ref":"#/components/schemas/FolderType"}}],"requestBody":{"description":"Folder details","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for `CreateFolder` endpoint.","required":["name","description"],"properties":{"description":{"type":"string"},"icon":{"type":["string","null"]},"name":{"type":"string"}}},"example":{"name":"Infrastructure","description":"Traffic patterns and network performance of the infrastructure"}}},"required":true},"responses":{"200":{"description":"Folder created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder","description":"HTTP response body for `CreateFolder` endpoint."}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Folders","operation":"create"},"x-o2-mcp":{"description":"Create a new folder","category":"folders"}}},"/api/v2/{org_id}/folders/{folder_type}/name/{folder_name}":{"get":{"tags":["Folders"],"summary":"Get folder by name","description":"Retrieves detailed information about a specific folder by its name rather than ID. Useful when you know the folder name but not its unique identifier. Returns folder information for the specified folder type and name.","operationId":"GetFolderByName","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder_type","in":"path","description":"Type of data the folder can contain","required":true,"schema":{"$ref":"#/components/schemas/FolderType"}},{"name":"folder_name","in":"path","description":"Folder Name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder","description":"HTTP response body for `GetFolder` endpoint."}}}},"404":{"description":"Folder not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Folders","operation":"get"},"x-o2-mcp":{"description":"Get folder by name","category":"folders"}}},"/api/v2/{org_id}/folders/{folder_type}/{folder_id}":{"get":{"tags":["Folders"],"summary":"Get folder details","description":"Retrieves detailed information about a specific folder including its name, description, creation details, and metadata. Returns folder information for the specified folder type and ID.","operationId":"GetFolder","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder_type","in":"path","description":"Type of data the folder can contain","required":true,"schema":{"$ref":"#/components/schemas/FolderType"}},{"name":"folder_id","in":"path","description":"Folder ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder","description":"HTTP response body for `GetFolder` endpoint."}}}},"404":{"description":"Folder not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Folders","operation":"get"},"x-o2-mcp":{"description":"Get folder details by ID","category":"folders"}},"put":{"tags":["Folders"],"summary":"Update folder details","description":"Updates an existing folder's name, description, or other properties. Note that the default folder cannot be updated and folders containing content may have restrictions on certain changes.","operationId":"UpdateFolder","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder_type","in":"path","description":"Type of data the folder can contain","required":true,"schema":{"$ref":"#/components/schemas/FolderType"}},{"name":"folder_id","in":"path","description":"Folder name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Folder details","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","default":""},"folder_id":{"type":"string","default":""},"icon":{"type":["string","null"],"description":"Icon token shown beside the folder name — either a Unicode emoji\n(\"🚀\") or a registry reference (\"o2:redis\"). Stored opaquely; the\nbackend never interprets it. `None` means the folder has no icon.","default":null},"name":{"type":"string","default":""}}},"example":{"title":"Infra","description":"Traffic patterns and network performance of the infrastructure"}}},"required":true},"responses":{"200":{"description":"Folder updated","content":{"text/plain":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Folders","operation":"update"},"x-o2-mcp":{"description":"Update folder properties","category":"folders"}},"delete":{"tags":["Folders"],"summary":"Delete folder","description":"Permanently deletes a folder and removes it from the organization. The folder must be empty (no dashboards, alerts, or reports) before it can be deleted. The default folder cannot be deleted.","operationId":"DeleteFolder","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder_type","in":"path","description":"Type of data the folder can contain","required":true,"schema":{"$ref":"#/components/schemas/FolderType"}},{"name":"folder_id","in":"path","description":"Folder ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"NotFound","content":{"text/plain":{"schema":{"type":"string"}}}},"500":{"description":"Error","content":{"text/plain":{"schema":{"type":"string"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Folders","operation":"delete"},"x-o2-mcp":{"description":"Delete a folder by ID","category":"folders","requires_confirmation":true}}},"/api/v2/{org_id}/incidents/events":{"post":{"tags":["Incidents"],"summary":"Ingest events from an external alert source","operationId":"IngestExternalIncidentEvents","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Alert payload: one object, or an array of objects for the generic format","content":{"application/json":{"schema":{}}},"required":true},"responses":{"202":{"description":"Accepted; carries the accepted and rejected counts and the per-alert errors","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/incidents/events/{token}":{"post":{"tags":["Incidents"],"summary":"Ingest events using a token in the URL","operationId":"IngestExternalIncidentEventsWithToken","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"token","in":"path","description":"Integration token","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Alert payload: one object, or an array of objects for the generic format","content":{"application/json":{"schema":{}}},"required":true},"responses":{"202":{"description":"Accepted; carries the accepted and rejected counts and the per-alert errors","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[],"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/incidents/integrations":{"get":{"tags":["Incidents"],"summary":"List incident integrations","operationId":"ListIncidentIntegrations","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListIntegrationsResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"list"}},"post":{"tags":["Incidents"],"summary":"Create an incident integration","operationId":"CreateIncidentIntegration","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateIntegrationPayload"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationResponse"}}}},"409":{"description":"Name already exists in the org","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/incidents/integrations/{integration_id}":{"delete":{"tags":["Incidents"],"summary":"Delete an incident integration","operationId":"DeleteIncidentIntegration","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"integration_id","in":"path","description":"Integration id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"delete"}},"patch":{"tags":["Incidents"],"summary":"Update an incident integration","operationId":"UpdateIncidentIntegration","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"integration_id","in":"path","description":"Integration id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateIntegrationPayload"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"409":{"description":"Name already exists in the org","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/incidents/integrations/{integration_id}/enable":{"patch":{"tags":["Incidents"],"summary":"Enable or disable an incident integration","operationId":"SetIncidentIntegrationEnabled","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"integration_id","in":"path","description":"Integration id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetEnabledPayload"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/v2/{org_id}/incidents/integrations/{integration_id}/rotate":{"post":{"tags":["Incidents"],"summary":"Rotate the token of an incident integration","operationId":"RotateIncidentIntegrationToken","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"integration_id","in":"path","description":"Integration id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"update"}}},"/api/v2/{org_id}/incidents/integrations/{integration_id}/senders":{"get":{"tags":["Incidents"],"summary":"List senders seen by an incident integration","operationId":"ListIncidentIntegrationSenders","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"integration_id","in":"path","description":"Integration id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"list"}}},"/api/v2/{org_id}/reports":{"get":{"tags":["Reports"],"summary":"List dashboard reports (v2)","description":"Lists reports for the organization, optionally filtered by folder.","operationId":"ListReportsV2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID filter","required":false,"schema":{"type":"string"}},{"name":"dashboard_id","in":"query","description":"Dashboard ID filter","required":false,"schema":{"type":"string"}},{"name":"cache","in":"query","description":"Filter destination-less (cache) reports","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["orgId","dashboards","destinations"],"properties":{"createdAt":{"type":"string","format":"date-time"},"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/ReportDashboard"}},"description":{"type":"string"},"destinations":{"type":"array","items":{"$ref":"#/components/schemas/ReportDestination"}},"enabled":{"type":"boolean"},"frequency":{"$ref":"#/components/schemas/ReportFrequency","description":"Frequency of report generation. E.g. - Weekly."},"imagePreview":{"type":"boolean","description":"When `true` and the report type is PDF, a PNG screenshot is also captured and embedded\ninline in the email body alongside the PDF attachment."},"lastEditedBy":{"type":"string"},"message":{"type":"string","description":"Message to include in the email"},"name":{"type":"string"},"orgId":{"type":"string"},"owner":{"type":"string"},"start":{"type":"integer","format":"int64","description":"Start time of report generation in UNIX microseconds."},"timezone":{"type":"string"},"timezoneOffset":{"type":"integer","format":"int32","description":"Fixed timezone offset in minutes"},"title":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Reports","operation":"list"},"x-o2-mcp":{"enabled":true}},"post":{"tags":["Reports"],"summary":"Create dashboard report (v2)","description":"Creates a new automated dashboard report in the specified folder. Pass `?folder=<folder_id>` to place the report in a non-default folder.","operationId":"CreateReportV2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID (defaults to 'default')","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Report details","content":{"application/json":{"schema":{"type":"object","required":["orgId","dashboards","destinations"],"properties":{"createdAt":{"type":"string","format":"date-time"},"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/ReportDashboard"}},"description":{"type":"string"},"destinations":{"type":"array","items":{"$ref":"#/components/schemas/ReportDestination"}},"enabled":{"type":"boolean"},"frequency":{"$ref":"#/components/schemas/ReportFrequency","description":"Frequency of report generation. E.g. - Weekly."},"imagePreview":{"type":"boolean","description":"When `true` and the report type is PDF, a PNG screenshot is also captured and embedded\ninline in the email body alongside the PDF attachment."},"lastEditedBy":{"type":"string"},"message":{"type":"string","description":"Message to include in the email"},"name":{"type":"string"},"orgId":{"type":"string"},"owner":{"type":"string"},"start":{"type":"integer","format":"int64","description":"Start time of report generation in UNIX microseconds."},"timezone":{"type":"string"},"timezoneOffset":{"type":"integer","format":"int32","description":"Fixed timezone offset in minutes"},"title":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}}}}},"required":true},"responses":{"200":{"description":"Report created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Reports","operation":"create"}}},"/api/v2/{org_id}/reports/bulk":{"delete":{"tags":["Reports"],"summary":"Delete multiple dashboard reports by ID (v2)","operationId":"DeleteReportBulkV2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID (defaults to 'default')","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Report IDs (KSUIDs)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Reports","operation":"delete"}}},"/api/v2/{org_id}/reports/history":{"get":{"tags":["Reports"],"summary":"Get report run history","description":"Lists the runs of scheduled reports from the organization's triggers stream: scheduled and manual runs, their outcome, recipients and timing. The full path is /api/v2/{org_id}/reports/history.","operationId":"GetReportHistory","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"report_id","in":"query","description":"Report ID (KSUID); omit for every report","required":false,"schema":{"type":"string"}},{"name":"run_report_id","in":"query","description":"Exact run's report ID (KSUID); requires GET access to that report","required":false,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time in Unix microseconds (default: 7 days ago)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time in Unix microseconds (default: now)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"status","in":"query","description":"Repeatable: succeeded, error, skipped","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"trigger_source","in":"query","description":"scheduled or manual","required":false,"schema":{"type":"string"}},{"name":"is_cached","in":"query","description":"true for cache-warming runs, false for emailed runs","required":false,"schema":{"type":"boolean"}},{"name":"from","in":"query","description":"Pagination offset (default: 0)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"Page size (default: 100, max: 1000)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"retries","in":"query","description":"Exact retry index for a shared run link","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"sort_by","in":"query","description":"_timestamp, status, end_time or retries (default: _timestamp)","required":false,"schema":{"type":"string"}},{"name":"sort_order","in":"query","description":"asc or desc (default: desc)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["total","from","size","counts","hits"],"properties":{"counts":{"$ref":"#/components/schemas/ReportRunCounts"},"disabled_reason":{"type":["string","null"],"description":"Why the org records no run rows: own-org reporting off, remote mode or an expired trial."},"from":{"type":"integer","format":"int64"},"hits":{"type":"array","items":{"$ref":"#/components/schemas/ReportRunHit"}},"size":{"type":"integer","format":"int64"},"total":{"type":"integer","minimum":0}}}}}},"400":{"description":"Bad Request","content":{"application/json":{}}},"403":{"description":"Forbidden","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Reports","operation":"list"}}},"/api/v2/{org_id}/reports/move":{"patch":{"tags":["Reports"],"summary":"Move reports between folders (v2)","operationId":"MoveReports","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Source folder ID (defaults to 'default')","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Report IDs and destination folder","content":{"application/json":{"schema":{"type":"object","required":["report_ids","dst_folder_id"],"properties":{"dst_folder_id":{"type":"string"},"report_ids":{"type":"array","items":{"type":"string"}}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Reports","operation":"update"}}},"/api/v2/{org_id}/reports/{report_id}":{"get":{"tags":["Reports"],"summary":"Get dashboard report by ID (v2)","operationId":"GetReportV2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"report_id","in":"path","description":"Report ID (KSUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Report"},{"$ref":"#/components/schemas/LastRunFields"}],"description":"HTTP response body for the v2 `GetReport` endpoint: the report plus its last run."}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Reports","operation":"get"},"x-o2-mcp":{"enabled":true}},"put":{"tags":["Reports"],"summary":"Update dashboard report by ID (v2)","description":"Updates an existing report. Pass `?folder=<folder_id>` to move the report to a different folder at the same time.","operationId":"UpdateReportV2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"report_id","in":"path","description":"Report ID (KSUID)","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Move to this folder ID","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Report details","content":{"application/json":{"schema":{"type":"object","required":["orgId","dashboards","destinations"],"properties":{"createdAt":{"type":"string","format":"date-time"},"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/ReportDashboard"}},"description":{"type":"string"},"destinations":{"type":"array","items":{"$ref":"#/components/schemas/ReportDestination"}},"enabled":{"type":"boolean"},"frequency":{"$ref":"#/components/schemas/ReportFrequency","description":"Frequency of report generation. E.g. - Weekly."},"imagePreview":{"type":"boolean","description":"When `true` and the report type is PDF, a PNG screenshot is also captured and embedded\ninline in the email body alongside the PDF attachment."},"lastEditedBy":{"type":"string"},"message":{"type":"string","description":"Message to include in the email"},"name":{"type":"string"},"orgId":{"type":"string"},"owner":{"type":"string"},"start":{"type":"integer","format":"int64","description":"Start time of report generation in UNIX microseconds."},"timezone":{"type":"string"},"timezoneOffset":{"type":"integer","format":"int32","description":"Fixed timezone offset in minutes"},"title":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}}}}},"required":true},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Reports","operation":"update"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Reports"],"summary":"Delete dashboard report by ID (v2)","operationId":"DeleteReportV2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"report_id","in":"path","description":"Report ID (KSUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Reports","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/v2/{org_id}/reports/{report_id}/enable":{"patch":{"tags":["Reports"],"summary":"Enable or disable a report by ID (v2)","operationId":"EnableReportV2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"report_id","in":"path","description":"Report ID (KSUID)","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"true to enable, false to disable","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"propertyNames":{"type":"string"}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Reports","operation":"update"}}},"/api/v2/{org_id}/reports/{report_id}/trigger":{"put":{"tags":["Reports"],"summary":"Manually trigger a report by ID (v2)","operationId":"TriggerReportV2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"report_id","in":"path","description":"Report ID (KSUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Report sent; `run` is the history row of the run","content":{"application/json":{"schema":{"type":"object","description":"Reply to Run now: the run is returned before the stream copy becomes searchable.","required":["code","message","run"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"run":{"$ref":"#/components/schemas/ReportRunHit"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Send failed; `run` carries the error","content":{"application/json":{"schema":{"type":"object","description":"Reply to Run now: the run is returned before the stream copy becomes searchable.","required":["code","message","run"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"run":{"$ref":"#/components/schemas/ReportRunHit"}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Reports","operation":"update"}}},"/api/v2/{org_id}/synthetics/move":{"patch":{"tags":["Synthetics"],"summary":"Move synthetics to a different folder","operationId":"MoveSynthetics","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Source folder ID (for RBAC)","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"IDs and destination folder","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveSyntheticsRequestBody"}}},"required":true},"responses":{"200":{"description":"Moved"},"403":{"description":"Forbidden"},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/v2/{org_id}/workflows/move":{"patch":{"tags":["Workflows"],"summary":"Move workflows to a different folder","operationId":"MoveWorkflows","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"IDs and destination folder","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveWorkflowsRequestBody"}}},"required":true},"responses":{"200":{"description":"Moved"},"400":{"description":"No workflow ids, too many ids, or an empty destination folder","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden"},"404":{"description":"A workflow or the destination folder does not exist","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Workflows","operation":"update"}}},"/api/{org_id}/_bulk":{"post":{"tags":["Logs"],"summary":"Bulk ingest logs (Elasticsearch compatible)","description":"Ingests multiple log records in bulk using Elasticsearch-compatible NDJSON format. Each line contains either an index/create action followed by the document data. This endpoint provides high-throughput ingestion for applications migrating from or integrating with Elasticsearch.","operationId":"LogsIngestionBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Ingest data (ndjson)","content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkResponse"},"example":{"took":2,"errors":true,"items":[{"index":{"_index":"olympics","_id":1,"status":200,"error":{"type":"Too old data, only last 5 hours data can be ingested. Data discarded.","reason":"Too old data, only last 5 hours data can be ingested. Data discarded.","index_uuid":"1","shard":"1","index":"olympics"},"original_record":{"athlete":"CHASAPIS, Spiridon","city":"BER","country":"USA","discipline":"Swimming","event":"100M Freestyle For Sailors","gender":"Men","medal":"Silver","onemore":1,"season":"summer","sport":"Aquatics","year":1986}}}]}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/_hec":{"post":{"tags":["Logs"],"summary":"Ingest logs via Splunk HEC format","description":"Ingests log data using Splunk HTTP Event Collector (HEC) format, providing compatibility with Splunk forwarders and applications. This endpoint accepts the standard HEC JSON format, making it easy to migrate from or integrate with existing Splunk deployments.","operationId":"LogsIngestionHec","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Ingest data (hec)","content":{"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Failure","content":{"application/json":{"schema":{"type":"object","required":["text","code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"text":{"type":"string"}}},"example":{"text":"Invalid data format","code":400}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/_search":{"post":{"tags":["Search"],"summary":"Search data with SQL","description":"Executes SQL queries against log streams with support for complex search patterns, time range filtering, aggregations, and histogram generation. Supports advanced features like multi-stream searches, caching, and UI optimizations for dashboard visualizations.","operationId":"SearchSQL","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. one of: logs, metrics, traces. Defaults to logs.","required":false,"schema":{"type":"string"}},{"name":"is_ui_histogram","in":"query","description":"Whether to return histogram data for UI (default: false)","required":false,"schema":{"type":"boolean"}},{"name":"is_multi_stream_search","in":"query","description":"Indicate is search is for multi stream (default: false)","required":false,"schema":{"type":"boolean"}},{"name":"validate","in":"query","description":"Validate query fields against stream schema and User-Defined Schema (UDS). When enabled, returns error if queried fields are not in schema or not allowed by UDS (default: false)","required":false,"schema":{"type":"boolean"}}],"requestBody":{"description":"Search query","content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"agent_options":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchAgentOptions"}]},"clear_cache":{"type":"boolean"},"clusters":{"type":"array","items":{"type":"string"}},"encoding":{"$ref":"#/components/schemas/RequestEncoding"},"local_mode":{"type":["boolean","null"]},"query":{"$ref":"#/components/schemas/SearchQuery"},"regions":{"type":"array","items":{"type":"string"}},"search_event_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventContext"}]},"search_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventType"}]},"timeout":{"type":"integer","format":"int64"},"use_cache":{"type":"boolean"},"use_index":{"type":"boolean","description":"Set to false to skip the inverted index for this query.","default":true}}},"example":{"query":{"sql":"select * from k8s","start_time":1675182660872049,"end_time":1675185660872049,"from":0,"size":10}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"example":{"took":155,"hits":[{"_p":"F","_timestamp":1674213225158000,"kubernetes":{"container_hash":"dkr.ecr.us-west-2.amazonaws.com/openobserve@sha256:3dbbb0dc1eab2d5a3b3e4a75fd87d194e8095c92d7b2b62e7cdbd07020f54589","container_image":"dkr.ecr.us-west-2.amazonaws.com/openobserve:v0.0.3","container_name":"openobserve","docker_id":"eb0983bdb9ff9360d227e6a0b268fe3b24a0868c2c2d725a1516c11e88bf5789","host":"ip.us-east-2.compute.internal","namespace_name":"openobserve","pod_id":"35a0421f-9203-4d73-9663-9ff0ce26d409","pod_name":"openobserve-ingester-0"},"log":"[2023-01-20T11:13:45Z INFO  actix_web::middleware::logger] 10.2.80.192 \"POST /api/demo/_bulk HTTP/1.1\" 200 68","stream":"stderr"}],"total":27179431,"from":0,"size":1,"scan_size":28943}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search","operation":"get"},"x-o2-mcp":{"description":"Search data with SQL, you can use `match_all('foo')` to search with full text search, also you can use `str_match(field, 'bar')` to search in a specific field; start_time, end_time can't be zero, need to be a valid micro timestamp. Note: in summary mode only took/hits/total/from/size/columns/scan_size/function_error are returned; rows are never capped, so `size` is what controls how many you get. Tip: set agent_options.output_format='csv' to receive tabular hits as a compact csv block (~40% fewer tokens than json); 'md_table' for small result sets. Tip: set agent_options.mode='partition' when querying a large time range: the server scans time partitions one by one and stops early once enough rows are collected (less data scanned), and aggregation queries build up reusable cache partition by partition. Do NOT split the time range yourself and query partitions in a loop — one call does it server-side.","category":"search","pinned":true}}},"/api/{org_id}/_search_history":{"post":{"tags":["Search"],"summary":"Search query history","description":"Retrieves historical search queries and their execution details","operationId":"SearchHistory","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Search history request parameters","content":{"application/json":{"schema":{"type":"object","description":"Request parameters for querying search history","required":["start_time","end_time"],"properties":{"end_time":{"type":"integer","format":"int64","description":"end time in micro seconds"},"org_id":{"type":["string","null"],"description":"Organization ID to filter search history by"},"size":{"type":"integer","format":"int64","description":"Maximum number of search history records to return"},"start_time":{"type":"integer","format":"int64","description":"start time in micro seconds"},"stream_name":{"type":["string","null"],"description":"Name of the specific stream to filter by"},"stream_type":{"type":["string","null"],"description":"Type of stream to filter by (e.g., logs, metrics, traces)"},"trace_id":{"type":["string","null"],"description":"Trace ID to filter search history by"},"user_email":{"type":["string","null"],"description":"Email of the user to filter search history by"}}},"example":{"stream_name":"default","stream_type":"logs","min_ts":1632960000,"max_ts":1633046400,"trace_id":"7f7898fd19424c47ba830a6fa9b25e1f","size":100}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"example":{"took":40,"took_detail":{"total":40,"idx_took":0,"wait_in_queue":0},"hits":[{"cached_ratio":0,"end_time":15,"org_id":"default","scan_records":1,"scan_size":7.0,"sql":"SELECT COUNT(*) from \"default\"","start_time":0,"stream_name":"default","stream_type":"logs","took":0.056222333,"trace_id":"7f7898fd19424c47ba830a6fa9b25e1f","function":"."}],"total":3,"from":0,"size":20,"cached_ratio":0,"scan_size":0,"idx_scan_size":0,"scan_records":3,"trace_id":"2lsPBWjwZxUJ5ugvZ4jApESZEpk","is_partial":false,"result_cache_ratio":0}}}},"400":{"description":"Bad Request - Invalid parameters or body","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search","operation":"get"},"x-o2-mcp":{"description":"Get search history","category":"search"}}},"/api/{org_id}/_search_multi":{"post":{"tags":["Search"],"summary":"Search across multiple streams","description":"Executes SQL queries that can span across multiple data streams within the organization. This enables cross-stream analytics, joins, and aggregations to analyze data relationships and patterns across different log streams, metrics, or traces. The query engine automatically handles data from different streams and returns unified results.","operationId":"SearchSQLMultiStream","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"validate","in":"query","description":"Validate query fields against stream schema and User-Defined Schema (UDS). When enabled, returns error if queried fields are not in schema or not allowed by UDS","required":false,"schema":{"type":"boolean"}}],"requestBody":{"description":"Search query","content":{"application/json":{"schema":{"type":"object","required":["start_time","end_time"],"properties":{"clusters":{"type":"array","items":{"type":"string"}},"encoding":{"$ref":"#/components/schemas/RequestEncoding"},"end_time":{"type":"integer","format":"int64"},"from":{"type":"integer","format":"int64"},"index_type":{"type":"string"},"per_query_response":{"type":"boolean"},"query_fn":{"type":["string","null"]},"quick_mode":{"type":"boolean"},"regions":{"type":"array","items":{"type":"string"}},"search_event_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventContext"}]},"search_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventType"}]},"size":{"type":"integer","format":"int64"},"skip_wal":{"type":"boolean"},"sort_by":{"type":["string","null"]},"sql":{"type":"array","items":{"$ref":"#/components/schemas/SqlQuery"}},"start_time":{"type":"integer","format":"int64"},"timeout":{"type":"integer","format":"int64"},"track_total_hits":{"type":"boolean"},"use_index":{"type":"boolean","description":"Set to false to skip the inverted index for every query.","default":true},"uses_zo_fn":{"type":"boolean"}}},"example":{"query":{"sql":"select * from k8s ","start_time":1675182660872049,"end_time":1675185660872049,"from":0,"size":10}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiSearchResponse"},"example":{"took":155,"hits":[{"_p":"F","_timestamp":1674213225158000,"kubernetes":{"container_hash":"dkr.ecr.us-west-2.amazonaws.com/openobserve@sha256:3dbbb0dc1eab2d5a3b3e4a75fd87d194e8095c92d7b2b62e7cdbd07020f54589","container_image":"dkr.ecr.us-west-2.amazonaws.com/openobserve:v0.0.3","container_name":"openobserve","docker_id":"eb0983bdb9ff9360d227e6a0b268fe3b24a0868c2c2d725a1516c11e88bf5789","host":"ip.us-east-2.compute.internal","namespace_name":"openobserve","pod_id":"35a0421f-9203-4d73-9663-9ff0ce26d409","pod_name":"openobserve-ingester-0"},"log":"[2023-01-20T11:13:45Z INFO  actix_web::middleware::logger] 10.2.80.192 \"POST /api/demo/_bulk HTTP/1.1\" 200 68","stream":"stderr"}],"total":27179431,"from":0,"size":1,"scan_size":28943}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/_search_multi_stream":{"post":{"tags":["Search"],"summary":"Stream search results across multiple queries","description":"Executes multiple SQL queries and streams the results back in real-time using HTTP/2 server-sent events. This enables streaming of results from multiple independent queries simultaneously, ideal for multi-stream dashboards and complex analytics where you want to receive data as it becomes available from different data sources.","operationId":"SearchStreamMultiHttp2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Multi-stream search query","content":{"application/json":{"schema":{"type":"object","required":["start_time","end_time"],"properties":{"clusters":{"type":"array","items":{"type":"string"}},"encoding":{"$ref":"#/components/schemas/RequestEncoding"},"end_time":{"type":"integer","format":"int64"},"from":{"type":"integer","format":"int64"},"index_type":{"type":"string"},"per_query_response":{"type":"boolean"},"query_fn":{"type":["string","null"]},"quick_mode":{"type":"boolean"},"regions":{"type":"array","items":{"type":"string"}},"search_event_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventContext"}]},"search_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventType"}]},"size":{"type":"integer","format":"int64"},"skip_wal":{"type":"boolean"},"sort_by":{"type":["string","null"]},"sql":{"type":"array","items":{"$ref":"#/components/schemas/SqlQuery"}},"start_time":{"type":"integer","format":"int64"},"timeout":{"type":"integer","format":"int64"},"track_total_hits":{"type":"boolean"},"use_index":{"type":"boolean","description":"Set to false to skip the inverted index for every query.","default":true},"uses_zo_fn":{"type":"boolean"}}},"example":{"sql":["select * from \"alert_test\"","select * from \"addstream\""],"start_time":1759297137133000,"end_time":1759297197133000,"from":0,"size":50,"quick_mode":true,"streaming_output":false,"streaming_id":null}}},"required":true},"responses":{"200":{"description":"Success","content":{"text/event-stream":{}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/_search_partition":{"post":{"tags":["Search"],"summary":"Search partition data","description":"Executes search queries on partitioned log data with specified parameters","operationId":"SearchPartition","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. Must be one of: logs, metrics, traces. Defaults to logs if not specified.","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Search query","content":{"application/json":{"schema":{"type":"object","required":["sql","start_time","end_time"],"properties":{"clusters":{"type":"array","items":{"type":"string"}},"encoding":{"$ref":"#/components/schemas/RequestEncoding"},"end_time":{"type":"integer","format":"int64"},"histogram_interval":{"type":"integer","format":"int64"},"query_fn":{"type":["string","null"]},"regions":{"type":"array","items":{"type":"string"}},"sampling_ratio":{"type":["number","null"],"format":"double"},"search_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventType"}]},"sql":{"type":"string"},"start_time":{"type":"integer","format":"int64"},"streaming_output":{"type":"boolean"}}},"example":{"sql":"select * from k8s ","start_time":1675182660872049,"end_time":1675185660872049}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPartitionResponse"},"example":{"took":155,"file_num":10,"original_size":10240,"compressed_size":1024,"partitions":[[1674213225158000,1674213225158000],[1674213225158000,1674213225158000]]}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search","operation":"get"},"x-o2-mcp":{"description":"Get search partitions then you can call _search api by partitions to give the result looks faster","category":"search"}}},"/api/{org_id}/_search_partition_multi":{"post":{"tags":["Search"],"summary":"Search partition data across multiple streams","description":"Executes search queries across partitioned data in multiple log streams","operationId":"SearchPartitionMulti","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Search query","content":{"application/json":{"schema":{"type":"object","required":["sql","start_time","end_time"],"properties":{"clusters":{"type":"array","items":{"type":"string"}},"encoding":{"$ref":"#/components/schemas/RequestEncoding"},"end_time":{"type":"integer","format":"int64"},"histogram_interval":{"type":"integer","format":"int64"},"query_fn":{"type":["string","null"]},"regions":{"type":"array","items":{"type":"string"}},"sql":{"type":"array","items":{"type":"string"}},"start_time":{"type":"integer","format":"int64"},"streaming_output":{"type":"boolean"}}},"example":{"sql":"select * from k8s ","start_time":1675182660872049,"end_time":1675185660872049}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPartitionResponse"},"example":{"took":155,"file_num":10,"original_size":10240,"compressed_size":1024,"partitions":[[1674213225158000,1674213225158000],[1674213225158000,1674213225158000]]}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Search","operation":"create"}}},"/api/{org_id}/_search_stream":{"post":{"tags":["Search"],"summary":"Stream search results","description":"Executes a search query and streams the results back in real-time using HTTP/2 server-sent events. This is ideal for large result sets or long-running queries where you want to receive data as it becomes available rather than waiting for the complete response. Results are streamed as JSON objects separated by newlines.","operationId":"SearchStreamHttp2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"is_ui_histogram","in":"query","description":"Whether to return histogram data for UI","required":true,"schema":{"type":"boolean"}},{"name":"is_multi_stream_search","in":"query","description":"Indicate is search is for multi stream","required":true,"schema":{"type":"boolean"}}],"requestBody":{"description":"Search query","content":{"application/json":{"schema":{"type":"string"},"example":{"sql":"select * from logs LIMIT 10","start_time":1675182660872049,"end_time":1675185660872049}}},"required":true},"responses":{"200":{"description":"Success","content":{"text/event-stream":{}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Search","operation":"get"}}},"/api/{org_id}/_values_stream":{"post":{"tags":["Search"],"summary":"Get field values with HTTP/2 streaming","description":"Retrieves field values from logs using HTTP/2 streaming for real-time results","operationId":"ValuesStreamHttp2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Values query","content":{"application/json":{"schema":{"type":"string"},"example":{"sql":"select * from logs LIMIT 10","start_time":1675182660872049,"end_time":1675185660872049}}},"required":true},"responses":{"200":{"description":"Success","content":{"text/event-stream":{}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ai/chat":{"post":{"tags":["AI"],"summary":"Generate AI chat response","description":"Generates an AI-powered response to user queries and requests.","operationId":"Chat","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Prompt details","content":{"application/json":{"schema":{"type":"object","description":"AI chat request for conversational interactions with the OpenObserve AI assistant.\n\n# Example\n```json\n{\n  \"messages\": [{\"role\": \"user\", \"content\": \"Find errors in the last hour\"}],\n  \"context\": {\n    \"start_time\": 1768406781751488,\n    \"end_time\": 1768496804185872,\n    \"stream_name\": \"default\",\n    \"stream_type\": \"logs\"\n  }\n}\n```","required":["messages"],"properties":{"confirm_timeout_secs":{"type":["integer","null"],"format":"int32","description":"Seconds the agent waits for a tool approval before denying it (capped at 600).","minimum":0},"context":{"type":"object","description":"Contextual information for the AI assistant. Should include:\n- `start_time`: Start of the time range in microseconds (required for search queries)\n- `end_time`: End of the time range in microseconds (required for search queries)\n- `stream_name`: Current stream being viewed (optional)\n- `stream_type`: Type of stream - logs, metrics, traces (optional)\n\nThe frontend should pass the user's currently selected time range and stream context\nto enable the AI assistant to search within the relevant data scope."},"images":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ImageAttachment"},"description":"Optional image attachments for multimodal queries (max 2MB each, PNG/JPEG only)"},"messages":{"type":"array","items":{"type":"object"},"description":"Chat messages in the conversation."},"model":{"type":"string","description":"Optional model name override."},"provider":{"type":"string","description":"Optional provider name override."}}},"example":{"messages":[{"role":"user","content":"Write a SQL query to get the top 10 users by response time in the default stream"}]}}},"required":true},"responses":{"200":{"description":"Chat response","content":{"application/json":{"schema":{"type":"object","required":["role","content"],"properties":{"content":{"type":"string"},"role":{"$ref":"#/components/schemas/Role"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Subscription or additional credits required","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"O2 AI session owner unavailable","content":{"application/json":{"schema":{"type":"object"}}}},"412":{"description":"Paid overage consent required","content":{"application/json":{"schema":{"type":"object"}}}},"429":{"description":"Upstream AI rate limit exceeded","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}},"502":{"description":"Upstream AI service unavailable","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"Usage authorization unavailable","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Chat","operation":"create"}}},"/api/{org_id}/ai/chat_stream":{"post":{"tags":["AI"],"summary":"Generate streaming AI chat response","description":"Generates an AI response with real-time streaming for improved user experience. This endpoint redirects to the o2-sre-agent service for processing.","operationId":"ChatStream","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Prompt details","content":{"application/json":{"schema":{"type":"object","description":"AI chat request for conversational interactions with the OpenObserve AI assistant.\n\n# Example\n```json\n{\n  \"messages\": [{\"role\": \"user\", \"content\": \"Find errors in the last hour\"}],\n  \"context\": {\n    \"start_time\": 1768406781751488,\n    \"end_time\": 1768496804185872,\n    \"stream_name\": \"default\",\n    \"stream_type\": \"logs\"\n  }\n}\n```","required":["messages"],"properties":{"confirm_timeout_secs":{"type":["integer","null"],"format":"int32","description":"Seconds the agent waits for a tool approval before denying it (capped at 600).","minimum":0},"context":{"type":"object","description":"Contextual information for the AI assistant. Should include:\n- `start_time`: Start of the time range in microseconds (required for search queries)\n- `end_time`: End of the time range in microseconds (required for search queries)\n- `stream_name`: Current stream being viewed (optional)\n- `stream_type`: Type of stream - logs, metrics, traces (optional)\n\nThe frontend should pass the user's currently selected time range and stream context\nto enable the AI assistant to search within the relevant data scope."},"images":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ImageAttachment"},"description":"Optional image attachments for multimodal queries (max 2MB each, PNG/JPEG only)"},"messages":{"type":"array","items":{"type":"object"},"description":"Chat messages in the conversation."},"model":{"type":"string","description":"Optional model name override."},"provider":{"type":"string","description":"Optional provider name override."}}},"example":{"messages":[{"role":"user","content":"Write a SQL query to get the top 10 users by response time in the default stream"}]}}},"required":true},"responses":{"200":{"description":"Server-sent event stream","content":{"text/event-stream":{}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Subscription or additional credits required","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"O2 AI session owner unavailable","content":{"application/json":{"schema":{"type":"object"}}}},"412":{"description":"Paid overage consent required","content":{"application/json":{"schema":{"type":"object"}}}},"429":{"description":"Upstream AI rate limit exceeded","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}},"502":{"description":"Upstream AI service unavailable","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"Usage authorization unavailable","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Chat","operation":"create"}}},"/api/{org_id}/ai/chats":{"get":{"tags":["AI"],"summary":"List the caller's AI conversations","description":"The caller's own stored AI conversations in this organization, most recently active first, keyset-paginated.","operationId":"ListAiChats","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Page size (default 50, max 200)","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"cursor","in":"query","description":"`next_cursor` of the previous page","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"A page of conversations","content":{"application/json":{"schema":{"type":"object","required":["chats"],"properties":{"chats":{"type":"array","items":{"$ref":"#/components/schemas/ChatSummary"}},"next_cursor":{"type":["string","null"],"description":"Pass back as `cursor` for the next page; absent on the last page."}}}}}},"400":{"description":"Invalid cursor","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AI","operation":"list"}},"delete":{"tags":["AI"],"summary":"Delete all of the caller's AI conversations","description":"Deletes every conversation the caller owns in this organization, at once for every read. Stored events are physically removed by retention.","operationId":"DeleteAllAiChats","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AI","operation":"delete"}}},"/api/{org_id}/ai/chats/{session_id}":{"get":{"tags":["AI"],"summary":"Get one AI conversation","description":"The caller's stored conversation, reconstructed from its durable event history. With `known_seq` and `known_version` equal to the stored ones the body says `not_modified` and carries no turns. With an older `known_seq` only the turns past it come back, plus earlier turns whose status changed since `known_version`; with the same seq but another version, every turn does.","operationId":"GetAiChat","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"path","description":"Chat session ID","required":true,"schema":{"type":"string"}},{"name":"known_seq","in":"query","description":"Sequence of the caller's cached copy","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"known_version","in":"query","description":"`state_version` of the caller's cached copy","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"At most this many turns, the newest","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"The conversation","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ChatSummary"},{"type":"object","required":["state_version","not_modified","active_turn","has_more"],"properties":{"active_turn":{"type":"boolean","description":"A turn of this chat is running right now."},"has_more":{"type":"boolean","description":"Older turns were left out to honour `limit`."},"not_modified":{"type":"boolean","description":"True when `known_seq` and `known_version` are current; `turns` is then omitted."},"partial_from_seq":{"type":["integer","null"],"format":"int64","description":"Set when `turns` holds the turns past this seq plus older ones whose status changed."},"state_version":{"type":"string","description":"Changes whenever the committed seq, a turn's status or error, or `active_turn` changes."},"turns":{"type":["array","null"],"items":{"type":"object"},"description":"Per turn: the user's words, the UI frames, and `turn_id`/`status`/`error_code` if recorded."}}}]}}}},"404":{"description":"Unknown conversation","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"History temporarily unreadable","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AI","operation":"get"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["AI"],"summary":"Delete an AI conversation","description":"Deletes the caller's conversation: it disappears from every list and read at once. Its stored events are physically removed by the chat stream's retention.","operationId":"DeleteAiChat","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"path","description":"Chat session ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown conversation","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AI","operation":"delete"}},"patch":{"tags":["AI"],"summary":"Rename an AI conversation","description":"Sets the title of the caller's conversation. A title set here is never replaced by the automatically generated one.","operationId":"RenameAiChat","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"path","description":"Chat session ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["title"],"properties":{"title":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Renamed","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid title","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown conversation","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AI","operation":"update"}}},"/api/{org_id}/ai/chats/{session_id}/cancel":{"post":{"tags":["AI"],"summary":"Stop the AI turn running in a conversation","description":"Stops generation for a chat session. With server-side chat persistence enabled the browser no longer holds the connection to the agent, so disconnecting does not stop the turn — this does, and what was generated up to that point stays saved.","operationId":"CancelChat","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"path","description":"Chat session ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Send {}: the handler requires a JSON content type and ignores the body","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Cancellation forwarded","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid session ID or AI agent not configured","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"The conversation belongs to another user","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown conversation","content":{"application/json":{"schema":{"type":"object"}}}},"415":{"description":"The body is not JSON (send {})","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AI","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ai/chats/{session_id}/shares":{"get":{"tags":["AI"],"summary":"List the active shares of an AI conversation","operationId":"ListAiChatShares","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"path","description":"Chat session ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Active shares","content":{"application/json":{"schema":{"type":"object","required":["shares"],"properties":{"shares":{"type":"array","items":{"$ref":"#/components/schemas/ShareView"}}}}}}},"404":{"description":"Unknown conversation","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AI","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["AI"],"summary":"Share an AI conversation","description":"Creates a share link for the caller's conversation: a snapshot of its history as of now, or a live view of it, for org members or (when public chat links are enabled) anyone holding the link. Tool inputs and outputs are part of the share unless `redact_tools` is set, which is the default for public links. Public links must expire.","operationId":"CreateAiChatShare","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"path","description":"Chat session ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["mode","visibility"],"properties":{"expires_in_secs":{"type":["integer","null"],"format":"int64","description":"60 s to 365 days, absent = never; public shares need one within the public maximum."},"mode":{"type":"string","description":"`snapshot` or `live`."},"redact_tools":{"type":["boolean","null"],"description":"Hide tool inputs and outputs from readers; defaults to true for public shares."},"visibility":{"type":"string","description":"`org` or `public`."}},"additionalProperties":false}}},"required":true},"responses":{"201":{"description":"The new share","content":{"application/json":{"schema":{"type":"object","description":"A share as its owner sees it.","required":["id","mode","visibility","created_at","updated_at","access_count","session_id","title","redact_tools"],"properties":{"access_count":{"type":"integer","format":"int64"},"created_at":{"type":"integer","format":"int64"},"expires_at":{"type":["integer","null"],"format":"int64","description":"Microseconds since the epoch; absent when the share never expires."},"id":{"type":"string"},"last_accessed_at":{"type":["integer","null"],"format":"int64"},"mode":{"type":"string"},"owner_email":{"type":["string","null"],"description":"The creator's email; only in the org-wide admin listing."},"owner_name":{"type":["string","null"],"description":"The creator's display name (email when unnamed); only in the org-wide admin listing."},"redact_tools":{"type":"boolean","description":"Readers see assistant text and tool names, never tool inputs or outputs."},"session_id":{"type":"string"},"snapshot_seq":{"type":["integer","null"],"format":"int64"},"title":{"type":"string"},"token":{"type":["string","null"],"description":"Bearer secret of the link; absent on other creators' rows of the org-wide listing."},"updated_at":{"type":"integer","format":"int64"},"url_path":{"type":["string","null"],"description":"Path of the web page that shows the share; absent whenever `token` is."},"visibility":{"type":"string"}}}}}},"400":{"description":"Invalid request or nothing to share","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown conversation","content":{"application/json":{"schema":{"type":"object"}}}},"415":{"description":"The body is not JSON","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AI","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ai/confirm/{session_id}":{"post":{"tags":["AI"],"summary":"Confirm or reject a destructive AI tool action","description":"Forwards user confirmation or rejection to the o2-sre-agent service for a pending destructive tool call.","operationId":"ConfirmAction","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"path","description":"Chat session ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Confirmation payload","content":{"application/json":{"schema":{"type":"object"},"example":{"approved":true}}},"required":true},"responses":{"200":{"description":"Confirmation forwarded","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid session ID, malformed body, or AI agent not configured","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AI","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ai/feedback":{"post":{"tags":["AI"],"summary":"Submit feedback on an AI response","operationId":"SubmitAiFeedback","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Chat","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ai/shared/{token}":{"get":{"tags":["AI"],"summary":"Read a shared AI conversation","description":"The conversation behind a share link, cut at the share's sequence. With `known_seq` and `known_version` equal to the current `seq` and `state_version` the body says `not_modified` and carries no turns.","operationId":"GetSharedAiChat","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"token","in":"path","description":"Share token","required":true,"schema":{"type":"string"}},{"name":"known_seq","in":"query","description":"Sequence of the caller's cached copy","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"known_version","in":"query","description":"`state_version` of the cached copy","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"The shared conversation","content":{"application/json":{"schema":{"type":"object","required":["title","mode","seq","state_version","active_turn","created_at","shared_at","not_modified","redact_tools","truncated"],"properties":{"active_turn":{"type":"boolean","description":"A turn of a live share is running; poll until it is false."},"created_at":{"type":"integer","format":"int64","description":"When the chat was started (micros)."},"mode":{"type":"string"},"not_modified":{"type":"boolean","description":"True when `known_seq` and `known_version` are current; `turns` is then omitted."},"owner_name":{"type":["string","null"],"description":"The owner's display name; never their email on a public link."},"redact_tools":{"type":"boolean","description":"Tool inputs and outputs are left out of `turns`."},"seq":{"type":"integer","format":"int64","description":"Last committed event the share shows; pass back as `known_seq`."},"shared_at":{"type":"integer","format":"int64","description":"When the share was created (micros)."},"state_version":{"type":"string","description":"Changes with `seq`, turn statuses and share settings; send back as `known_version`."},"title":{"type":"string"},"truncated":{"type":"boolean","description":"The oldest turns were left out to keep the response within the server's size cap."},"turns":{"type":["array","null"],"items":{"type":"object"},"description":"Same shape as `GET /ai/chats/{session_id}` returns, without `user_message_id`."}}}}}},"404":{"description":"Unknown, revoked or expired share","content":{"application/json":{"schema":{"type":"object"}}}},"429":{"description":"Too many shared reads in flight; retry","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"History temporarily unreadable","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AI","operation":"get"}}},"/api/{org_id}/ai/shared/{token}/fork":{"post":{"tags":["AI"],"summary":"Continue a shared AI conversation as your own","description":"Creates a new conversation owned by the caller. Nothing is copied now: its first turn carries the shared transcript as context. Send `{}` as JSON.","operationId":"ForkSharedAiChat","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"token","in":"path","description":"Share token","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Send {}: the handler requires a JSON content type and ignores the body","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"201":{"description":"The new conversation","content":{"application/json":{"schema":{"type":"object","required":["session_id","title"],"properties":{"session_id":{"type":"string"},"title":{"type":"string"}}}}}},"403":{"description":"Not allowed to start conversations","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown, revoked or expired share","content":{"application/json":{"schema":{"type":"object"}}}},"415":{"description":"The body is not JSON","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AI","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ai/shares":{"get":{"tags":["AI"],"summary":"List the caller's active AI conversation shares","description":"The caller's active shares across their conversations; with `all=true`, every active share in the organization, for organization admins only.","operationId":"ListMyAiChatShares","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"all","in":"query","description":"List every active share in the org (admins)","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Active shares","content":{"application/json":{"schema":{"type":"object","required":["shares"],"properties":{"shares":{"type":"array","items":{"$ref":"#/components/schemas/ShareView"}}}}}}},"403":{"description":"`all=true` from a non-admin","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AI","operation":"list"}}},"/api/{org_id}/ai/shares/{share_id}":{"delete":{"tags":["AI"],"summary":"Revoke an AI conversation share","description":"Revokes a share at once for every reader. Allowed to its creator and to organization admins.","operationId":"RevokeAiChatShare","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"share_id","in":"path","description":"Share ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Revoked","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown share","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AI","operation":"delete"},"x-o2-mcp":{"enabled":false}},"patch":{"tags":["AI"],"summary":"Change an AI conversation share","description":"Changes the mode, expiry or tool redaction of one of the caller's shares, or moves a snapshot share to the conversation's latest history.","operationId":"UpdateAiChatShare","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"share_id","in":"path","description":"Share ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"expires_in_secs":{"type":["integer","null"],"format":"int64","description":"A number sets a new expiry from now; `null` removes the expiry."},"mode":{"type":["string","null"]},"redact_tools":{"type":["boolean","null"]},"refresh_snapshot":{"type":"boolean","description":"Moves a snapshot share to the chat's latest committed history."}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"The updated share","content":{"application/json":{"schema":{"type":"object","description":"A share as its owner sees it.","required":["id","mode","visibility","created_at","updated_at","access_count","session_id","title","redact_tools"],"properties":{"access_count":{"type":"integer","format":"int64"},"created_at":{"type":"integer","format":"int64"},"expires_at":{"type":["integer","null"],"format":"int64","description":"Microseconds since the epoch; absent when the share never expires."},"id":{"type":"string"},"last_accessed_at":{"type":["integer","null"],"format":"int64"},"mode":{"type":"string"},"owner_email":{"type":["string","null"],"description":"The creator's email; only in the org-wide admin listing."},"owner_name":{"type":["string","null"],"description":"The creator's display name (email when unnamed); only in the org-wide admin listing."},"redact_tools":{"type":"boolean","description":"Readers see assistant text and tool names, never tool inputs or outputs."},"session_id":{"type":"string"},"snapshot_seq":{"type":["integer","null"],"format":"int64"},"title":{"type":"string"},"token":{"type":["string","null"],"description":"Bearer secret of the link; absent on other creators' rows of the org-wide listing."},"updated_at":{"type":"integer","format":"int64"},"url_path":{"type":["string","null"],"description":"Path of the web page that shows the share; absent whenever `token` is."},"visibility":{"type":"string"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown share","content":{"application/json":{"schema":{"type":"object"}}}},"415":{"description":"The body is not JSON","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AI","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ai/toolsets":{"get":{"tags":["AI"],"summary":"List AI toolsets","description":"Lists AI toolsets for the org with optional filtering. Only available in enterprise deployments.","operationId":"ListAiToolsets","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"name","in":"query","description":"Substring filter on name (case-insensitive)","required":false,"schema":{"type":"string"}},{"name":"kind","in":"query","description":"Exact filter on kind: mcp | cli | skill | generic","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum number of results","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"List of toolsets","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolsetListResponse"}}}},"400":{"description":"Invalid query parameters, such as a negative limit"},"403":{"description":"Feature not supported","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AI","operation":"list"}},"post":{"tags":["AI"],"summary":"Create an AI toolset","description":"Creates a new AI toolset (MCP server, CLI tool, skill, or generic config). The `data` field is encrypted at rest using per-org envelope encryption. Only available in enterprise deployments.","operationId":"CreateAiToolset","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Toolset configuration","content":{"application/json":{"schema":{"type":"object","description":"Request body for creating or updating a toolset.","required":["name","kind"],"properties":{"data":{"description":"Kind-specific JSON config. Must be valid for the given `kind`.\nMay be omitted for `generic` toolsets with no credentials."},"description":{"type":["string","null"]},"kind":{"$ref":"#/components/schemas/ToolsetKind"},"name":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Toolset created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolsetResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{}}},"409":{"description":"Toolset with this name already exists","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AI","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ai/toolsets/{id}":{"get":{"tags":["AI"],"summary":"Get an AI toolset","description":"Retrieves a single AI toolset by its id. Only available in enterprise deployments.","operationId":"GetAiToolset","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Toolset id (KSUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Toolset details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolsetResponse"}}}},"403":{"description":"Feature not supported","content":{"application/json":{}}},"404":{"description":"Toolset not found","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AI","operation":"get"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["AI"],"summary":"Update an AI toolset","description":"Updates the description and/or data of an existing AI toolset. When `data` is provided it fully replaces the existing config. Only available in enterprise deployments.","operationId":"UpdateAiToolset","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Toolset id (KSUID)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Fields to update","content":{"application/json":{"schema":{"type":"object","description":"Request body for updating an existing toolset.","properties":{"data":{"description":"Kind-specific JSON config. When present it fully replaces the existing\n`data` (no partial merge)."},"description":{"type":["string","null"]}}}}},"required":true},"responses":{"200":{"description":"Toolset updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolsetResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{}}},"404":{"description":"Toolset not found","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AI","operation":"update"}},"delete":{"tags":["AI"],"summary":"Delete an AI toolset","description":"Permanently deletes an AI toolset. Only available in enterprise deployments.","operationId":"DeleteAiToolset","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Toolset id (KSUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Toolset deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Feature not supported","content":{"application/json":{}}},"404":{"description":"Toolset not found","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AI","operation":"delete"}}},"/api/{org_id}/ai/usage":{"get":{"tags":["AI"],"summary":"Get AI credit usage for an organization","description":"Returns current AI credit usage, mode, and remaining credits.","operationId":"GetAiUsage","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiUsageResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/alerts/deduplication/semantic-groups":{"get":{"tags":["Alerts"],"summary":"Get semantic field groups for an organization","operationId":"GetSemanticGroups","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FieldAlias"}}}}},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Alerts","operation":"list"}},"put":{"tags":["Alerts"],"summary":"Save semantic field groups for an organization","description":"Merges provided groups with existing ones:\n- Groups with matching IDs are updated (replaced)\n- New groups (no matching ID) are added\n- Existing groups not in the request are preserved","operationId":"SaveSemanticGroups","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Semantic groups to save (merged with existing)","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FieldAlias"}}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"description":"Bad request - Invalid semantic groups"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Alerts","operation":"update"}}},"/api/{org_id}/alerts/deduplication/semantic-groups/preview-diff":{"post":{"tags":["Alerts"],"summary":"Preview diff between imported semantic groups and current DB state","description":"This endpoint compares the provided semantic groups with what's currently stored\nand returns a diff showing additions, modifications, and unchanged groups.\nThe UI can use this to show users what will change before they commit.","operationId":"PreviewSemanticGroupsDiff","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Semantic groups to compare","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FieldAlias"}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SemanticGroupDiff"}}}},"400":{"description":"Bad request - Invalid semantic groups"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Alerts","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/alerts/destinations":{"get":{"tags":["Alerts"],"summary":"List alert destinations","description":"Retrieves a list of all alert destinations configured for an organization. Optionally filter by module type (alert or pipeline) to get specific destination categories. Returns destination names, types, and basic configuration details to help administrators manage notification routing and review available delivery options. Destinations the caller may not PUT come with the URL cut to its origin and header values and credential metadata blanked.","operationId":"ListDestinations","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"module","in":"query","description":"Destination module filter, none, alert, or pipeline","required":false,"schema":{"type":"string"}},{"name":"include_usage","in":"query","description":"When true, each destination carries the consumers that reference it","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/SlackAppFields","description":"The `slack_app` fields, flat on the body; absent for every other type."},{"type":"object","properties":{"aws_region":{"type":["string","null"],"description":"AWS region for SNS destinations. Required when `type` is `sns`."},"destination_type_name":{"type":["string","null"],"description":"Specific destination type identifier (e.g., \"openobserve\", \"splunk\", \"elasticsearch\")."},"emails":{"type":"array","items":{"type":"string"},"description":"Email recipients for Email destinations. Required when `type` is `email`."},"headers":{"type":["object","null"],"description":"Optional HTTP headers for webhook requests; values read back blank without PUT.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"metadata":{"type":"object","description":"Optional key-value metadata; without PUT, values outside the known plain keys read blank.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"method":{"$ref":"#/components/schemas/HTTPType","description":"HTTP method for HTTP destinations. Typically \"post\" for webhooks."},"name":{"type":"string","description":"Unique name for this destination. Must be unique within the organization.","example":"my_alert_webhook"},"output_format":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HTTPOutputFormat","description":"Output format for HTTP destinations (json or text). Default is json."}]},"skip_tls_verify":{"type":"boolean","description":"Whether to skip TLS certificate verification for HTTP destinations."},"sns_topic_arn":{"type":["string","null"],"description":"SNS topic ARN for SNS destinations. Required when `type` is `sns`."},"template":{"type":["string","null"],"description":"REQUIRED for alert destinations. Name of the template to use for formatting alert messages.\nUse \"Default\" for the built-in default template. Without a template, the destination\nbecomes a pipeline destination and cannot be used with alerts.","example":"Default"},"type":{"$ref":"#/components/schemas/DestinationType","description":"Destination type: `http` (webhook), `email`, or `sns`. Default is `http`."},"url":{"type":"string","description":"Webhook URL, required for `http`; without PUT, its origin, or empty for a keyed host.","example":"https://example.com/webhook"},"uses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DestinationUseResponse"},"description":"Every consumer referencing this destination; present only when `include_usage=true`."}}}],"description":"Alert destination configuration for sending notifications when alerts trigger.\n\nIMPORTANT: The `template` field is REQUIRED to create an alert destination.\nWithout a template, the destination becomes a pipeline destination and cannot be used with\nalerts.\n\n# Example - Creating an HTTP alert destination\n```json\n{\n  \"name\": \"my_alert_webhook\",\n  \"url\": \"https://example.com/webhook\",\n  \"method\": \"post\",\n  \"type\": \"http\",\n  \"template\": \"Default\",\n  \"skip_tls_verify\": false\n}\n```\n\n# Example - Creating an Email alert destination\n```json\n{\n  \"name\": \"my_email_dest\",\n  \"type\": \"email\",\n  \"emails\": [\"alerts@example.com\", \"team@example.com\"],\n  \"template\": \"Default\"\n}\n```"}}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Destinations","operation":"list"},"x-o2-mcp":{"description":"List all alert destinations","category":"alerts","summary_fields":["name","type","template"]}},"post":{"tags":["Alerts"],"summary":"Create alert or pipeline destination","description":"Creates a new alert destination configuration for an organization. Destinations define where alert notifications are sent when alert conditions are met, including webhooks, email addresses, and SNS topics.\n\nIMPORTANT: The `template` field is REQUIRED to create an alert destination. Use 'Default' for the built-in template. For pipeline destinations, this includes external systems like OpenObserve, Splunk, Elasticsearch, etc. Use the 'module' query parameter to specify destination type: 'alert' (default) or 'pipeline'.\n\nWithout a template, the destination becomes a pipeline destination and cannot be used with alerts.\n\nExample HTTP destination:\n\n```json\n{\"name\": \"my_webhook\", \"url\": \"https://example.com/webhook\", \"method\": \"post\", \"type\": \"http\", \"template\": \"Default\"}\n```\n\nExample Email destination:\n```json\n{\"name\": \"my_email\", \"type\": \"email\", \"emails\": [\"alerts@example.com\"], \"template\": \"Default\"}\n```","operationId":"CreateDestination","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"module","in":"query","description":"Destination module type: 'alert' (default) or 'pipeline'","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Alert destination data. The 'template' field is required (use 'Default' for the built-in template).","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SlackAppFields","description":"The `slack_app` fields, flat on the body; absent for every other type."},{"type":"object","properties":{"aws_region":{"type":["string","null"],"description":"AWS region for SNS destinations. Required when `type` is `sns`."},"destination_type_name":{"type":["string","null"],"description":"Specific destination type identifier (e.g., \"openobserve\", \"splunk\", \"elasticsearch\")."},"emails":{"type":"array","items":{"type":"string"},"description":"Email recipients for Email destinations. Required when `type` is `email`."},"headers":{"type":["object","null"],"description":"Optional HTTP headers for webhook requests; values read back blank without PUT.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"metadata":{"type":"object","description":"Optional key-value metadata; without PUT, values outside the known plain keys read blank.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"method":{"$ref":"#/components/schemas/HTTPType","description":"HTTP method for HTTP destinations. Typically \"post\" for webhooks."},"name":{"type":"string","description":"Unique name for this destination. Must be unique within the organization.","example":"my_alert_webhook"},"output_format":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HTTPOutputFormat","description":"Output format for HTTP destinations (json or text). Default is json."}]},"skip_tls_verify":{"type":"boolean","description":"Whether to skip TLS certificate verification for HTTP destinations."},"sns_topic_arn":{"type":["string","null"],"description":"SNS topic ARN for SNS destinations. Required when `type` is `sns`."},"template":{"type":["string","null"],"description":"REQUIRED for alert destinations. Name of the template to use for formatting alert messages.\nUse \"Default\" for the built-in default template. Without a template, the destination\nbecomes a pipeline destination and cannot be used with alerts.","example":"Default"},"type":{"$ref":"#/components/schemas/DestinationType","description":"Destination type: `http` (webhook), `email`, or `sns`. Default is `http`."},"url":{"type":"string","description":"Webhook URL, required for `http`; without PUT, its origin, or empty for a keyed host.","example":"https://example.com/webhook"},"uses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DestinationUseResponse"},"description":"Every consumer referencing this destination; present only when `include_usage=true`."}}}],"description":"Alert destination configuration for sending notifications when alerts trigger.\n\nIMPORTANT: The `template` field is REQUIRED to create an alert destination.\nWithout a template, the destination becomes a pipeline destination and cannot be used with\nalerts.\n\n# Example - Creating an HTTP alert destination\n```json\n{\n  \"name\": \"my_alert_webhook\",\n  \"url\": \"https://example.com/webhook\",\n  \"method\": \"post\",\n  \"type\": \"http\",\n  \"template\": \"Default\",\n  \"skip_tls_verify\": false\n}\n```\n\n# Example - Creating an Email alert destination\n```json\n{\n  \"name\": \"my_email_dest\",\n  \"type\": \"email\",\n  \"emails\": [\"alerts@example.com\", \"team@example.com\"],\n  \"template\": \"Default\"\n}\n```"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create alert/pipeline destination, alert destination must have a template","category":"alerts"},"x-o2-ratelimit":{"module":"Destinations","operation":"create"}}},"/api/{org_id}/alerts/destinations/bulk":{"delete":{"tags":["Alerts"],"summary":"Delete multiple alert destination","description":"Removes multiple alert destination configuration from the organization. The destinations must not be in use by any alert, pipeline, synthetic check, escalation policy, team channel, composite alert, workflow, or anomaly detection config before deletion. Once deleted, any alerts previously configured to use these destination will need to be updated with alternative notification methods to continue functioning.","operationId":"DeleteAlertDestinationBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Destination ids","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Destinations","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/alerts/destinations/jira/setup":{"post":{"tags":["Alerts"],"summary":"Look up Jira data for the destination form","description":"Checks Jira credentials and returns the projects, issue types or create-screen fields the Jira destination form needs, or creates one test issue. Nothing is stored.","operationId":"JiraDestinationSetup","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Jira credentials and the lookup to run","content":{"application/json":{"schema":{"type":"object","description":"Body of `POST /{org_id}/alerts/destinations/jira/setup`. No `Debug`: it carries the token.","required":["url","deployment","token","action"],"properties":{"action":{"type":"string","description":"`connect`, `issue_types`, `fields` or `test_issue`."},"deployment":{"type":"string","description":"`cloud` or `data_center`."},"destination":{"type":["string","null"],"description":"A saved destination in this org whose token is used when `token` is empty."},"email":{"type":"string"},"fields":{"type":"object"},"issue_type_id":{"type":"string"},"priority_id":{"type":"string"},"project_key":{"type":"string"},"token":{"type":"string"},"url":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Destinations","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/alerts/destinations/prebuilt":{"get":{"tags":["Alerts"],"summary":"List prebuilt alert destination templates","description":"Retrieves a list of prebuilt alert destination templates that can be used as starting points for creating alert destinations. These templates include popular services like Slack, Microsoft Teams, PagerDuty, Discord, and generic webhooks with preconfigured settings. Users can customize these templates with their own URLs and credentials to quickly set up alert notifications.","operationId":"ListPrebuiltDestinations","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/SlackAppFields","description":"The `slack_app` fields, flat on the body; absent for every other type."},{"type":"object","properties":{"aws_region":{"type":["string","null"],"description":"AWS region for SNS destinations. Required when `type` is `sns`."},"destination_type_name":{"type":["string","null"],"description":"Specific destination type identifier (e.g., \"openobserve\", \"splunk\", \"elasticsearch\")."},"emails":{"type":"array","items":{"type":"string"},"description":"Email recipients for Email destinations. Required when `type` is `email`."},"headers":{"type":["object","null"],"description":"Optional HTTP headers for webhook requests; values read back blank without PUT.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"metadata":{"type":"object","description":"Optional key-value metadata; without PUT, values outside the known plain keys read blank.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"method":{"$ref":"#/components/schemas/HTTPType","description":"HTTP method for HTTP destinations. Typically \"post\" for webhooks."},"name":{"type":"string","description":"Unique name for this destination. Must be unique within the organization.","example":"my_alert_webhook"},"output_format":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HTTPOutputFormat","description":"Output format for HTTP destinations (json or text). Default is json."}]},"skip_tls_verify":{"type":"boolean","description":"Whether to skip TLS certificate verification for HTTP destinations."},"sns_topic_arn":{"type":["string","null"],"description":"SNS topic ARN for SNS destinations. Required when `type` is `sns`."},"template":{"type":["string","null"],"description":"REQUIRED for alert destinations. Name of the template to use for formatting alert messages.\nUse \"Default\" for the built-in default template. Without a template, the destination\nbecomes a pipeline destination and cannot be used with alerts.","example":"Default"},"type":{"$ref":"#/components/schemas/DestinationType","description":"Destination type: `http` (webhook), `email`, or `sns`. Default is `http`."},"url":{"type":"string","description":"Webhook URL, required for `http`; without PUT, its origin, or empty for a keyed host.","example":"https://example.com/webhook"},"uses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DestinationUseResponse"},"description":"Every consumer referencing this destination; present only when `include_usage=true`."}}}],"description":"Alert destination configuration for sending notifications when alerts trigger.\n\nIMPORTANT: The `template` field is REQUIRED to create an alert destination.\nWithout a template, the destination becomes a pipeline destination and cannot be used with\nalerts.\n\n# Example - Creating an HTTP alert destination\n```json\n{\n  \"name\": \"my_alert_webhook\",\n  \"url\": \"https://example.com/webhook\",\n  \"method\": \"post\",\n  \"type\": \"http\",\n  \"template\": \"Default\",\n  \"skip_tls_verify\": false\n}\n```\n\n# Example - Creating an Email alert destination\n```json\n{\n  \"name\": \"my_email_dest\",\n  \"type\": \"email\",\n  \"emails\": [\"alerts@example.com\", \"team@example.com\"],\n  \"template\": \"Default\"\n}\n```"}}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Destinations","operation":"get"},"x-o2-mcp":{"enabled":false,"description":"List prebuilt alert destination templates","category":"alerts"}}},"/api/{org_id}/alerts/destinations/slack/oauth/exchange":{"post":{"tags":["Alerts"],"summary":"Exchange the Slack OAuth code","operationId":"ExchangeSlackDestinationOAuth","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackOAuthExchangeRequest"}}},"required":true},"responses":{"200":{"description":"Connected Slack incoming webhook","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackOAuthConnection"}}}},"400":{"description":"Invalid or rejected authorization"},"502":{"description":"Slack authorization service failure"},"503":{"description":"Slack OAuth is not configured"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Destinations","operation":"create"}}},"/api/{org_id}/alerts/destinations/slack/oauth/start":{"post":{"tags":["Alerts"],"summary":"Start Slack OAuth for a destination","operationId":"StartSlackDestinationOAuth","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Slack authorization URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlackOAuthStartResponse"}}}},"500":{"description":"Internal server error"},"503":{"description":"Slack OAuth is not configured"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Destinations","operation":"create"}}},"/api/{org_id}/alerts/destinations/test":{"post":{"tags":["Alerts"],"summary":"Test alert destination","description":"Tests an alert destination configuration. For HTTP destinations, sends a test HTTP request to the specified endpoint. For email destinations, validates SMTP configuration and recipient permissions, then sends a test email. This allows users to verify that their destination configuration is correct before saving it.","operationId":"TestDestination","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Test request data","content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":["string","null"]},"headers":{"type":["object","null"],"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"method":{"type":["string","null"]},"recipients":{"type":["array","null"],"items":{"type":"string"},"description":"Email recipients for email destination testing"},"skipTlsVerify":{"type":["boolean","null"]},"slackApp":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SlackAppFields","description":"The `slack_app` target under test, with the destination body's snake_case fields."}]},"template":{"type":["string","null"],"description":"Template a `slack_app` test renders on a sample alert; the org default when absent."},"type":{"$ref":"#/components/schemas/DestinationType","description":"Destination type: \"http\" (default) or \"email\""},"url":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["success"],"properties":{"error":{"type":["string","null"]},"responseBody":{"type":["string","null"]},"statusCode":{"type":["integer","null"],"format":"int32","minimum":0},"success":{"type":"boolean"}}}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Destinations","operation":"create"},"x-o2-mcp":{"enabled":false,"description":"Test alert destination connectivity","category":"alerts"}}},"/api/{org_id}/alerts/destinations/{destination_name}":{"get":{"tags":["Alerts"],"summary":"Get alert destination","description":"Retrieves the configuration details for a specific alert destination: delivery method, notification settings and other configuration parameters. Callers without PUT on the destination get the URL cut to its origin and header values and credential metadata blanked.","operationId":"GetDestination","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"destination_name","in":"path","description":"Destination name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SlackAppFields","description":"The `slack_app` fields, flat on the body; absent for every other type."},{"type":"object","properties":{"aws_region":{"type":["string","null"],"description":"AWS region for SNS destinations. Required when `type` is `sns`."},"destination_type_name":{"type":["string","null"],"description":"Specific destination type identifier (e.g., \"openobserve\", \"splunk\", \"elasticsearch\")."},"emails":{"type":"array","items":{"type":"string"},"description":"Email recipients for Email destinations. Required when `type` is `email`."},"headers":{"type":["object","null"],"description":"Optional HTTP headers for webhook requests; values read back blank without PUT.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"metadata":{"type":"object","description":"Optional key-value metadata; without PUT, values outside the known plain keys read blank.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"method":{"$ref":"#/components/schemas/HTTPType","description":"HTTP method for HTTP destinations. Typically \"post\" for webhooks."},"name":{"type":"string","description":"Unique name for this destination. Must be unique within the organization.","example":"my_alert_webhook"},"output_format":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HTTPOutputFormat","description":"Output format for HTTP destinations (json or text). Default is json."}]},"skip_tls_verify":{"type":"boolean","description":"Whether to skip TLS certificate verification for HTTP destinations."},"sns_topic_arn":{"type":["string","null"],"description":"SNS topic ARN for SNS destinations. Required when `type` is `sns`."},"template":{"type":["string","null"],"description":"REQUIRED for alert destinations. Name of the template to use for formatting alert messages.\nUse \"Default\" for the built-in default template. Without a template, the destination\nbecomes a pipeline destination and cannot be used with alerts.","example":"Default"},"type":{"$ref":"#/components/schemas/DestinationType","description":"Destination type: `http` (webhook), `email`, or `sns`. Default is `http`."},"url":{"type":"string","description":"Webhook URL, required for `http`; without PUT, its origin, or empty for a keyed host.","example":"https://example.com/webhook"},"uses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DestinationUseResponse"},"description":"Every consumer referencing this destination; present only when `include_usage=true`."}}}],"description":"Alert destination configuration for sending notifications when alerts trigger.\n\nIMPORTANT: The `template` field is REQUIRED to create an alert destination.\nWithout a template, the destination becomes a pipeline destination and cannot be used with\nalerts.\n\n# Example - Creating an HTTP alert destination\n```json\n{\n  \"name\": \"my_alert_webhook\",\n  \"url\": \"https://example.com/webhook\",\n  \"method\": \"post\",\n  \"type\": \"http\",\n  \"template\": \"Default\",\n  \"skip_tls_verify\": false\n}\n```\n\n# Example - Creating an Email alert destination\n```json\n{\n  \"name\": \"my_email_dest\",\n  \"type\": \"email\",\n  \"emails\": [\"alerts@example.com\", \"team@example.com\"],\n  \"template\": \"Default\"\n}\n```"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get destination details","category":"alerts"},"x-o2-ratelimit":{"module":"Destinations","operation":"get"}},"put":{"tags":["Alerts"],"summary":"Update alert or pipeline destination","description":"Updates an existing destination configuration. For alert destinations, allows modification of settings such as webhook URLs, authentication credentials, notification channels, and other delivery parameters. For pipeline destinations, allows updating external system endpoints, output formats, and metadata. Use the 'module' query parameter to specify destination type: 'alert' (default) or 'pipeline'.","operationId":"UpdateDestination","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"destination_name","in":"path","description":"Destination name","required":true,"schema":{"type":"string"}},{"name":"module","in":"query","description":"Destination module type: 'alert' (default) or 'pipeline'","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Destination data","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SlackAppFields","description":"The `slack_app` fields, flat on the body; absent for every other type."},{"type":"object","properties":{"aws_region":{"type":["string","null"],"description":"AWS region for SNS destinations. Required when `type` is `sns`."},"destination_type_name":{"type":["string","null"],"description":"Specific destination type identifier (e.g., \"openobserve\", \"splunk\", \"elasticsearch\")."},"emails":{"type":"array","items":{"type":"string"},"description":"Email recipients for Email destinations. Required when `type` is `email`."},"headers":{"type":["object","null"],"description":"Optional HTTP headers for webhook requests; values read back blank without PUT.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"metadata":{"type":"object","description":"Optional key-value metadata; without PUT, values outside the known plain keys read blank.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"method":{"$ref":"#/components/schemas/HTTPType","description":"HTTP method for HTTP destinations. Typically \"post\" for webhooks."},"name":{"type":"string","description":"Unique name for this destination. Must be unique within the organization.","example":"my_alert_webhook"},"output_format":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HTTPOutputFormat","description":"Output format for HTTP destinations (json or text). Default is json."}]},"skip_tls_verify":{"type":"boolean","description":"Whether to skip TLS certificate verification for HTTP destinations."},"sns_topic_arn":{"type":["string","null"],"description":"SNS topic ARN for SNS destinations. Required when `type` is `sns`."},"template":{"type":["string","null"],"description":"REQUIRED for alert destinations. Name of the template to use for formatting alert messages.\nUse \"Default\" for the built-in default template. Without a template, the destination\nbecomes a pipeline destination and cannot be used with alerts.","example":"Default"},"type":{"$ref":"#/components/schemas/DestinationType","description":"Destination type: `http` (webhook), `email`, or `sns`. Default is `http`."},"url":{"type":"string","description":"Webhook URL, required for `http`; without PUT, its origin, or empty for a keyed host.","example":"https://example.com/webhook"},"uses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DestinationUseResponse"},"description":"Every consumer referencing this destination; present only when `include_usage=true`."}}}],"description":"Alert destination configuration for sending notifications when alerts trigger.\n\nIMPORTANT: The `template` field is REQUIRED to create an alert destination.\nWithout a template, the destination becomes a pipeline destination and cannot be used with\nalerts.\n\n# Example - Creating an HTTP alert destination\n```json\n{\n  \"name\": \"my_alert_webhook\",\n  \"url\": \"https://example.com/webhook\",\n  \"method\": \"post\",\n  \"type\": \"http\",\n  \"template\": \"Default\",\n  \"skip_tls_verify\": false\n}\n```\n\n# Example - Creating an Email alert destination\n```json\n{\n  \"name\": \"my_email_dest\",\n  \"type\": \"email\",\n  \"emails\": [\"alerts@example.com\", \"team@example.com\"],\n  \"template\": \"Default\"\n}\n```"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Destinations","operation":"update"},"x-o2-mcp":{"description":"Update alert destination","category":"alerts"}},"delete":{"tags":["Alerts"],"summary":"Delete alert destination","description":"Removes an alert destination configuration from the organization. The destination must not be in use by any alert, pipeline, synthetic check, escalation policy, team channel, composite alert, workflow, or anomaly detection config before deletion. Once deleted, any alerts previously configured to use this destination will need to be updated with alternative notification methods to continue functioning.","operationId":"DeleteAlertDestination","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"destination_name","in":"path","description":"Destination name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Destinations","operation":"delete"},"x-o2-mcp":{"description":"Delete alert destination","category":"alerts","requires_confirmation":true}}},"/api/{org_id}/alerts/destinations/{destination_name}/test_send":{"post":{"tags":["Alerts"],"summary":"Test-send a content template to a real destination","description":"Renders a content-template definition (draft, via `definition`, or saved, via `template_name`) against a deterministic synthetic sample and DISPATCHES it to the named destination's real channel, with every title/subject prefixed `[TEST] `. Requires destination write permission. Rate-capped per user (`ZO_ALERT_TEST_SEND_PER_MINUTE`, default 6/min) — returns 429 when exceeded.","operationId":"TestSendNotification","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"destination_name","in":"path","description":"Destination name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Test-send request data","content":{"application/json":{"schema":{"type":"object","properties":{"definition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ContentSpec","description":"A draft content-template spec to test-send. Exactly one of\n`definition` / `template_name` must be set."}]},"kind":{"$ref":"#/components/schemas/NotificationKind","description":"Which producer's sample to render with; absent means alert."},"template_name":{"type":["string","null"],"description":"The name of an already-saved template to test-send. Exactly one of\n`definition` / `template_name` must be set."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["success","message"],"properties":{"message":{"type":"string"},"success":{"type":"boolean"}}}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Destinations","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/alerts/slo-eligible":{"get":{"tags":["SLOs"],"summary":"List alerts usable as an SLI source","description":"Lives under `/alerts` rather than `/slos` because it answers a question\nabout alerts, and is authorized as one. Ineligible alerts are returned\nrather than hidden: \"your alert is not in the list\" is not an explanation,\nand every reason here has a remedy the user can apply before saving —\nwhich is the whole point of the endpoint (S-16 §5.1, §5.4).","operationId":"ListSloEligibleAlerts","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"SLOs","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/alerts/templates":{"get":{"tags":["Templates"],"summary":"List alert templates","description":"Retrieves a list of all alert notification templates configured for an organization. Returns template names, types, and basic metadata to help administrators manage notification formatting options. Templates provide reusable formatting configurations that ensure consistent alert notifications across different channels and destinations.","operationId":"ListTemplates","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"applies_to","in":"query","required":false,"schema":{"type":["string","null"]}},{"name":"type","in":"query","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"applies_to":{"type":["array","null"],"items":{"type":"string"},"description":"Kinds the template is meant for; [] is every kind. Absent on update keeps the stored list."},"body":{"type":"string"},"isDefault":{"type":["boolean","null"]},"isPrebuilt":{"type":"boolean","description":"True for system-managed prebuilt templates (those whose name starts\nwith `prebuilt_`). The public API refuses updates and deletes for\nthese, so the UI should render them as read-only."},"kind":{"type":["string","null"],"description":"Template kind: \"custom\" (default) or \"content\". Absent on write means\n\"unspecified\" — create defaults to custom, update preserves the\nstored kind (sticky-kind rule, design §6.2)."},"name":{"type":"string"},"title":{"type":"string"},"type":{"$ref":"#/components/schemas/DestinationType","description":"Indicates whether the body is\nhttp or email body"}}}}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Templates","operation":"list"},"x-o2-mcp":{"description":"List all alert templates","category":"alerts","summary_fields":["name","type","isDefault","title"]}},"post":{"tags":["Templates"],"summary":"Create alert template","description":"Creates a new alert notification template for an organization. Templates define the format and content of alert notifications, including message structure, variable substitutions, and styling options. Templates can be reused across multiple alert destinations to maintain consistent notification formatting and branding across different channels.","operationId":"CreateTemplate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Template data","content":{"application/json":{"schema":{"type":"object","properties":{"applies_to":{"type":["array","null"],"items":{"type":"string"},"description":"Kinds the template is meant for; [] is every kind. Absent on update keeps the stored list."},"body":{"type":"string"},"isDefault":{"type":["boolean","null"]},"isPrebuilt":{"type":"boolean","description":"True for system-managed prebuilt templates (those whose name starts\nwith `prebuilt_`). The public API refuses updates and deletes for\nthese, so the UI should render them as read-only."},"kind":{"type":["string","null"],"description":"Template kind: \"custom\" (default) or \"content\". Absent on write means\n\"unspecified\" — create defaults to custom, update preserves the\nstored kind (sticky-kind rule, design §6.2)."},"name":{"type":"string"},"title":{"type":"string"},"type":{"$ref":"#/components/schemas/DestinationType","description":"Indicates whether the body is\nhttp or email body"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create alert template","category":"alerts"},"x-o2-ratelimit":{"module":"Templates","operation":"create"}}},"/api/{org_id}/alerts/templates/bulk":{"delete":{"tags":["Templates"],"summary":"Delete multiple alert template","description":"Removes multiple alert notification template from the organization. The templates must not be in use by any active destinations before deletion. Once deleted, any destinations previously using these templates will need to be updated with alternative templates to continue formatting notifications properly.","operationId":"DeleteAlertTemplateBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Template names","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Templates","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/alerts/templates/preview":{"post":{"tags":["Templates"],"summary":"Preview an alert template","description":"Renders a draft content-template definition for a chosen channel against a deterministic synthetic sample, returning both the real wire payload the send path would produce and a normalized preview model for card rendering. Uses the exact same resolve/render code path as sending a live notification, so the preview is guaranteed to match production output for the same input.","operationId":"PreviewTemplate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Preview request","content":{"application/json":{"schema":{"type":"object","required":["definition","channel"],"properties":{"channel":{"type":"string","description":"\"slack\" | \"teams_adaptivecard\" | \"teams_messagecard\" | \"email\" |\n\"webhook\" | \"discord\" | \"pagerduty\" | \"opsgenie\" | \"servicenow\" | \"sns\""},"definition":{"$ref":"#/components/schemas/ContentSpec"},"kind":{"$ref":"#/components/schemas/NotificationKind","description":"Which producer's sample to render with; absent means alert."},"sample":{"description":"Reserved for the Phase-1b alert-driven sample source; ignored in 1a."},"severity":{"type":["string","null"],"description":"\"critical\" | \"warning\" | \"ok\" | \"no_data\" | \"single_level\" (default)"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePreviewResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Templates","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/alerts/templates/system/prebuilt":{"get":{"tags":["Templates"],"summary":"Get system prebuilt templates","description":"Retrieves all system-defined prebuilt templates. These templates are provided by OpenObserve for common notification destinations like Slack, Microsoft Teams, Email, PagerDuty, etc. System templates are read-only and serve as the foundation for prebuilt alert destinations. This endpoint returns the complete template configurations including body, type, and metadata. Requires LIST permission on templates.","operationId":"GetSystemTemplates","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"applies_to":{"type":["array","null"],"items":{"type":"string"},"description":"Kinds the template is meant for; [] is every kind. Absent on update keeps the stored list."},"body":{"type":"string"},"isDefault":{"type":["boolean","null"]},"isPrebuilt":{"type":"boolean","description":"True for system-managed prebuilt templates (those whose name starts\nwith `prebuilt_`). The public API refuses updates and deletes for\nthese, so the UI should render them as read-only."},"kind":{"type":["string","null"],"description":"Template kind: \"custom\" (default) or \"content\". Absent on write means\n\"unspecified\" — create defaults to custom, update preserves the\nstored kind (sticky-kind rule, design §6.2)."},"name":{"type":"string"},"title":{"type":"string"},"type":{"$ref":"#/components/schemas/DestinationType","description":"Indicates whether the body is\nhttp or email body"}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Templates","operation":"list"},"x-o2-mcp":{"description":"Get system prebuilt templates","category":"alerts","summary_fields":["name","type","isDefault","title"]}}},"/api/{org_id}/alerts/templates/{template_name}":{"get":{"tags":["Templates"],"summary":"Get alert template","description":"Retrieves the configuration and content of a specific alert notification template. Returns the template structure including message format, variable definitions, styling options, and other formatting parameters. Used for reviewing existing templates and understanding notification formats before making modifications.","operationId":"GetTemplate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"template_name","in":"path","description":"Template name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Template"},{"type":"object","required":["used_by"],"properties":{"used_by":{"$ref":"#/components/schemas/UsedBy"}}}],"description":"One template with where it is referenced."}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get template details","category":"alerts"},"x-o2-ratelimit":{"module":"Templates","operation":"get"}},"put":{"tags":["Templates"],"summary":"Update alert template","description":"Updates an existing alert notification template. Allows modification of template content, formatting, variable placeholders, and styling options. Changes to templates will apply to all future alert notifications that use this template, providing a centralized way to update notification formats across multiple alerts and destinations.","operationId":"UpdateTemplate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"template_name","in":"path","description":"Template name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Template data","content":{"application/json":{"schema":{"type":"object","properties":{"applies_to":{"type":["array","null"],"items":{"type":"string"},"description":"Kinds the template is meant for; [] is every kind. Absent on update keeps the stored list."},"body":{"type":"string"},"isDefault":{"type":["boolean","null"]},"isPrebuilt":{"type":"boolean","description":"True for system-managed prebuilt templates (those whose name starts\nwith `prebuilt_`). The public API refuses updates and deletes for\nthese, so the UI should render them as read-only."},"kind":{"type":["string","null"],"description":"Template kind: \"custom\" (default) or \"content\". Absent on write means\n\"unspecified\" — create defaults to custom, update preserves the\nstored kind (sticky-kind rule, design §6.2)."},"name":{"type":"string"},"title":{"type":"string"},"type":{"$ref":"#/components/schemas/DestinationType","description":"Indicates whether the body is\nhttp or email body"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Templates","operation":"update"},"x-o2-mcp":{"description":"Update alert template","category":"alerts"}},"delete":{"tags":["Templates"],"summary":"Delete alert template","description":"Removes an alert notification template from the organization. The template must not be in use by any active destinations before deletion. Once deleted, any destinations previously using this template will need to be updated with alternative templates to continue formatting notifications properly.","operationId":"DeleteAlertTemplate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"template_name","in":"path","description":"Template name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete alert template","category":"alerts","requires_confirmation":true},"x-o2-ratelimit":{"module":"Templates","operation":"delete"}}},"/api/{org_id}/annotation_queues":{"get":{"tags":["AnnotationQueues"],"summary":"List Annotation Queues","description":"Lists the Annotation Queues in the organization and their pinned Score Config versions.","operationId":"ListAnnotationQueues","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/AnnotationQueueResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"list"}},"post":{"tags":["AnnotationQueues"],"summary":"Create an Annotation Queue","description":"Creates an Annotation Queue whose rubric is pinned to immutable Score Config row IDs.","operationId":"CreateAnnotationQueue","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Annotation Queue payload","content":{"application/json":{"schema":{"type":"object","required":["name","scoreConfigRowIds"],"properties":{"description":{"type":["string","null"]},"name":{"type":"string"},"scoreConfigRowIds":{"type":"array","items":{"type":"string"}},"targetDatasetId":{"type":["string","null"]}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","orgId","name","allowedRefTypes","scoreConfigs","reviewedCount","totalCount","createdBy","createdAt","updatedBy","updatedAt"],"properties":{"allowedRefTypes":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string"},"name":{"type":"string"},"orgId":{"type":"string"},"reviewedCount":{"type":"integer","format":"int64","description":"Number of non-archived Queue Items whose review is complete.","minimum":0},"scoreConfigs":{"type":"array","items":{"$ref":"#/components/schemas/PinnedScoreConfigResponseBody"}},"targetDatasetId":{"type":["string","null"]},"targetDatasetName":{"type":["string","null"]},"totalCount":{"type":"integer","format":"int64","description":"Number of non-archived Queue Items participating in review progress.","minimum":0},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"create"}}},"/api/{org_id}/annotation_queues/items":{"get":{"tags":["AnnotationQueues"],"summary":"List Annotation Queue Items","description":"Lists queue memberships across every visible Annotation Queue in the organization. Each membership is returned independently, even when queues reference the same target.","operationId":"ListAnnotationQueueItems","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"queue_id","in":"query","description":"Return memberships from one Annotation Queue only.","required":false,"schema":{"type":"string"}},{"name":"queue_status","in":"query","description":"Queue workflow status. Supported values are `pending` and `reviewed`.","required":false,"schema":{"type":"string"}},{"name":"scope","in":"query","description":"Item scope. Supported values are `span`, `trace`, and `session`.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/AnnotationQueueItemResponseBody"}}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"list"}}},"/api/{org_id}/annotation_queues/{queue_id}":{"get":{"tags":["AnnotationQueues"],"summary":"Get an Annotation Queue","operationId":"GetAnnotationQueue","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"queue_id","in":"path","description":"Annotation Queue ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","orgId","name","allowedRefTypes","scoreConfigs","reviewedCount","totalCount","createdBy","createdAt","updatedBy","updatedAt"],"properties":{"allowedRefTypes":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string"},"name":{"type":"string"},"orgId":{"type":"string"},"reviewedCount":{"type":"integer","format":"int64","description":"Number of non-archived Queue Items whose review is complete.","minimum":0},"scoreConfigs":{"type":"array","items":{"$ref":"#/components/schemas/PinnedScoreConfigResponseBody"}},"targetDatasetId":{"type":["string","null"]},"targetDatasetName":{"type":["string","null"]},"totalCount":{"type":"integer","format":"int64","description":"Number of non-archived Queue Items participating in review progress.","minimum":0},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"get"}},"put":{"tags":["AnnotationQueues"],"summary":"Update an Annotation Queue","description":"Replaces the Queue rubric when the submitted physical Score Config binding set is still current.","operationId":"UpdateAnnotationQueue","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"queue_id","in":"path","description":"Annotation Queue ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Annotation Queue payload","content":{"application/json":{"schema":{"type":"object","required":["name","expectedScoreConfigRowIds","scoreConfigRowIds"],"properties":{"description":{"type":["string","null"]},"expectedScoreConfigRowIds":{"type":"array","items":{"type":"string"},"description":"Exact physical Score Config row-ID set rendered by the edit form."},"name":{"type":"string"},"scoreConfigRowIds":{"type":"array","items":{"type":"string"},"description":"Desired replacement physical Score Config row-ID set."},"targetDatasetId":{"type":["string","null"]}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","orgId","name","allowedRefTypes","scoreConfigs","reviewedCount","totalCount","createdBy","createdAt","updatedBy","updatedAt"],"properties":{"allowedRefTypes":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string"},"name":{"type":"string"},"orgId":{"type":"string"},"reviewedCount":{"type":"integer","format":"int64","description":"Number of non-archived Queue Items whose review is complete.","minimum":0},"scoreConfigs":{"type":"array","items":{"$ref":"#/components/schemas/PinnedScoreConfigResponseBody"}},"targetDatasetId":{"type":["string","null"]},"targetDatasetName":{"type":["string","null"]},"totalCount":{"type":"integer","format":"int64","description":"Number of non-archived Queue Items participating in review progress.","minimum":0},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"update"}},"delete":{"tags":["AnnotationQueues"],"summary":"Delete an Annotation Queue","operationId":"DeleteAnnotationQueue","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"queue_id","in":"path","description":"Annotation Queue ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/annotation_queues/{queue_id}/items":{"post":{"tags":["AnnotationQueues"],"summary":"Add a discovered item to an Annotation Queue","description":"Adds a discovered span, trace, or session to one Annotation Queue. Returns a conflict when the same reference is already in the Queue.","operationId":"EnqueueAnnotationQueueItem","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"queue_id","in":"path","description":"Destination Annotation Queue ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Discovered item reference","content":{"application/json":{"schema":{"type":"object","required":["refType","refId","refTraceStartTime"],"properties":{"refId":{"type":"string","description":"Span, trace, or session identifier, according to `refType`."},"refTraceId":{"type":["string","null"],"description":"Owning trace ID. Required only when `refType` is `span`."},"refTraceStartTime":{"type":"integer","format":"int64","description":"Reference trace start time in microseconds. Required for every scope and\nused as the lower bound for Workbench score/annotation searches."},"refType":{"type":"string","description":"Discovered object scope: `span`, `trace`, or `session`."}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","orgId","queueId","refType","refId","refTraceStartTime","status","createdAt","updatedAt"],"properties":{"archivedAt":{"type":["integer","null"],"format":"int64"},"createdAt":{"type":"integer","format":"int64"},"id":{"type":"string"},"inputPreview":{"type":["string","null"],"description":"Bounded first-user-turn excerpt captured at enqueue; null when unavailable."},"orgId":{"type":"string"},"queueId":{"type":"string"},"queueName":{"type":["string","null"]},"refId":{"type":"string"},"refTraceId":{"type":["string","null"]},"refTraceStartTime":{"type":"integer","format":"int64"},"refType":{"type":"string"},"reviewedAt":{"type":["integer","null"],"format":"int64"},"status":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Annotation Queue not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Item is already queued in this Annotation Queue","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"create"}},"delete":{"tags":["AnnotationQueues"],"summary":"Clear selected Annotation Queue Items","description":"Permanently removes selected QueueItem workflow rows. Existing immutable review Scores in _llm_scores are retained.","operationId":"ClearAnnotationQueueItems","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"queue_id","in":"path","description":"Annotation Queue ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Selected Queue Item IDs","content":{"application/json":{"schema":{"type":"object","required":["itemIds"],"properties":{"itemIds":{"type":"array","items":{"type":"string"},"description":"Queue Item IDs selected for this bulk action."}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["clearedCount"],"properties":{"clearedCount":{"type":"integer","format":"int64","minimum":0}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Annotation Queue not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/annotation_queues/{queue_id}/items/archive":{"post":{"tags":["AnnotationQueues"],"summary":"Archive selected Annotation Queue Items","description":"Soft-removes selected Queue Items from the active workflow by setting archivedAt. Existing review Scores in _llm_scores are retained.","operationId":"ArchiveAnnotationQueueItems","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"queue_id","in":"path","description":"Annotation Queue ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Selected Queue Item IDs","content":{"application/json":{"schema":{"type":"object","required":["itemIds"],"properties":{"itemIds":{"type":"array","items":{"type":"string"},"description":"Queue Item IDs selected for this bulk action."}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["archivedCount"],"properties":{"archivedCount":{"type":"integer","format":"int64","minimum":0}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Annotation Queue not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"update"}}},"/api/{org_id}/annotation_queues/{queue_id}/items/{queue_item_id}":{"get":{"tags":["AnnotationQueues"],"summary":"Get one hydrated Annotation Queue Item","description":"Uses the Queue Item's stored trace start time through now to load its latest machine Scores, resolve the source trace stream, and hydrate its business input, output, and trace context.","operationId":"GetAnnotationQueueItem","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"queue_id","in":"path","description":"Annotation Queue ID","required":true,"schema":{"type":"string"}},{"name":"queue_item_id","in":"path","description":"Annotation Queue Item ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["item","sourceStream","content","machineScores","reviews"],"properties":{"content":{"$ref":"#/components/schemas/AnnotationQueueItemContentResponseBody"},"item":{"$ref":"#/components/schemas/AnnotationQueueItemResponseBody"},"machineScores":{"type":"array","items":{"$ref":"#/components/schemas/AnnotationQueueMachineScoreResponseBody"}},"reviews":{"type":"array","items":{"$ref":"#/components/schemas/QueueReviewSubmissionResponseBody"}},"sourceStream":{"type":"string"}}}}}},"404":{"description":"Queue or Queue Item not found","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Score lookup or source hydration failed","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"get"}}},"/api/{org_id}/annotation_queues/{queue_id}/items/{queue_item_id}/push_to_dataset":{"post":{"tags":["Datasets"],"summary":"Distill a reviewed Queue Item into a selected Dataset","operationId":"PushAnnotationQueueItemToDataset","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"queue_id","in":"path","description":"Annotation Queue ID","required":true,"schema":{"type":"string"}},{"name":"queue_item_id","in":"path","description":"Annotation Queue Item ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Selected Dataset and adjudicated Dataset Item payload","content":{"application/json":{"schema":{"type":"object","required":["datasetId","reviewSubmissionId","expectedOutput"],"properties":{"datasetId":{"type":"string","description":"User-selected destination Dataset."},"expectedOutput":{"description":"Explicit human-finalized golden; never inferred from an ordinary score."},"metadata":{},"reviewSubmissionId":{"type":"string","description":"Logical `_llm_scores` N/N submission selected as adjudication evidence."},"tags":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["created","item"],"properties":{"created":{"type":"boolean","description":"False when an idempotent trace/annotation push returns the existing item."},"item":{"$ref":"#/components/schemas/DatasetItemResponseBody"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Datasets","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/annotation_queues/{queue_id}/items/{queue_item_id}/reviews":{"get":{"tags":["AnnotationQueues"],"summary":"List complete Workbench reviews from _llm_scores","description":"Reads the authoritative annotation Score events, collapses idempotent retries, groups them by review submission ID, and omits incomplete N/N groups.","operationId":"ListAnnotationQueueItemReviews","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"queue_id","in":"path","description":"Annotation Queue ID","required":true,"schema":{"type":"string"}},{"name":"queue_item_id","in":"path","description":"Annotation Queue Item ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Complete review submissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListQueueReviewsResponseBody"}}}},"404":{"description":"Queue or Queue Item not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"list"}},"post":{"tags":["AnnotationQueues"],"summary":"Submit one complete N/N Workbench review","description":"Validates exact pinned Score Config coverage, writes the immutable review to _llm_scores, and then advances the QueueItem workflow projection to reviewed.","operationId":"ReviewAnnotationQueueItem","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"queue_id","in":"path","description":"Annotation Queue ID","required":true,"schema":{"type":"string"}},{"name":"queue_item_id","in":"path","description":"Annotation Queue Item ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Complete N/N review","content":{"application/json":{"schema":{"type":"object","required":["submissionId","sourceStream","scores"],"properties":{"comments":{"type":["string","null"]},"metadata":{},"scores":{"type":"array","items":{"$ref":"#/components/schemas/AnnotationScoreRequestBody"}},"sourceStream":{"type":"string"},"submissionId":{"type":"string","description":"Client-generated idempotency key shared by all N Score events. Reuse it\nonly when retrying the identical logical submission."},"targetMetadata":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AnnotationTargetMetadataRequestBody"}]}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["annotationId","scoreIds","annotatedAt"],"properties":{"annotatedAt":{"type":"integer","format":"int64"},"annotationId":{"type":"string"},"scoreIds":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Incomplete or invalid review","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Queue or Queue Item not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Stale bindings or archived Queue Item","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"AnnotationQueues","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/annotations":{"post":{"tags":["Annotations"],"summary":"Annotate a span, trace, or session","description":"Validates values against immutable Score Config versions and writes one annotation-source event per Score to the _llm_scores stream.","operationId":"AnnotateTarget","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Target and typed Score values","content":{"application/json":{"schema":{"type":"object","required":["scope","targetId","refTimestamp","sourceStream","scores"],"properties":{"metadata":{},"refTimestamp":{"type":"integer","format":"int64","description":"Original evaluated object's timestamp in microseconds."},"scope":{"type":"string","description":"Evaluated target scope: span, trace, or session."},"scores":{"type":"array","items":{"$ref":"#/components/schemas/AnnotationScoreRequestBody"}},"sessionId":{"type":["string","null"],"description":"Optional parent context for span/trace annotations."},"sourceStream":{"type":"string","description":"Trace stream containing the evaluated target."},"targetId":{"type":"string","description":"Span ID, trace ID, or session ID according to `scope`."},"targetMetadata":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AnnotationTargetMetadataRequestBody","description":"Agent identity copied from the selected target when available."}]},"traceId":{"type":["string","null"],"description":"Required for span annotations; optional context for trace annotations."}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["annotationId","scoreIds","annotatedAt"],"properties":{"annotatedAt":{"type":"integer","format":"int64"},"annotationId":{"type":"string"},"scoreIds":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Invalid target, Score Config, or Score value","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"A selected Score Config is not visible","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Annotations","operation":"create"}}},"/api/{org_id}/announcements":{"get":{"tags":["Announcements"],"summary":"Get active announcement banners","description":"Returns the announcement banners that are active right now for this organization, most severe first. Banners are authored on the meta organization; the per-banner organization allowlist is applied server-side. Also returns the server clock and the next instant the set changes, so clients can correct for clock skew and refresh on the exact boundary rather than waiting out a poll interval. Returns an empty list when nothing is configured.","operationId":"GetAnnouncements","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get active announcement banners","category":"system"},"x-o2-ratelimit":{"module":"Settings","operation":"get"}}},"/api/{org_id}/announcements/config":{"get":{"tags":["Announcements"],"summary":"Get authored announcement banner configuration","description":"Retrieves the announcement banner JSON exactly as it was authored, for editing. Only accessible from the meta organization. Unlike the read endpoint, this returns every configured banner including scheduled and expired ones, with timestamps in their original authored form, plus the `revision` to send back when saving.","operationId":"GetAnnouncementsConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name (must be meta org)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"get"},"x-o2-mcp":{"description":"Get authored announcement banner config","category":"system"}},"put":{"tags":["Announcements"],"summary":"Configure announcement banners","description":"Replaces the announcement banner configuration. Only accessible from the meta organization. The body is validated and normalized before storage: timestamps must be RFC 3339 with a UTC offset, and relative durations are resolved to absolute instants at write time. An empty banner list removes every banner. Validation errors name the offending banner index and field. A body carrying the `revision` it was read at is refused with 409 when the config has been saved since.","operationId":"SetAnnouncementsConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name (must be meta org)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Announcement banner configuration","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Configure announcement banners","category":"system"},"x-o2-ratelimit":{"module":"Settings","operation":"create"}}},"/api/{org_id}/anomaly_detection":{"get":{"tags":["Anomaly Detection"],"summary":"List all anomaly detection configurations for an organization","operationId":"ListAnomalyConfigs","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AnomalyConfigResponse"}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Anomaly Detection","operation":"list"},"x-o2-mcp":{"description":"List anomaly detection configs","category":"anomaly_detection"}},"post":{"tags":["Anomaly Detection"],"summary":"Create a new anomaly detection configuration","operationId":"CreateAnomalyConfig","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Anomaly detection configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAnomalyConfigRequest"}}},"required":true},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnomalyConfigResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create an anomaly detection config","category":"anomaly_detection"},"x-o2-ratelimit":{"module":"Anomaly Detection","operation":"create"}}},"/api/{org_id}/anomaly_detection/history":{"get":{"tags":["Anomaly Detection"],"summary":"Bulk anomaly detection history","description":"Returns recent detection history for all anomaly configs in one request.","operationId":"GetAllAnomalyHistory","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max hits to return per config (default 20, max 100)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"start_time","in":"query","description":"Start time in Unix timestamp microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time in Unix timestamp microseconds","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{}}},"400":{"description":"start_time is not before end_time","content":{"application/json":{}}},"403":{"description":"The caller's alert listing was refused","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Recent detection history for all anomaly detection configs","category":"anomaly_detection"},"x-o2-ratelimit":{"module":"Anomaly Detection","operation":"list"}}},"/api/{org_id}/anomaly_detection/{config_id}":{"get":{"tags":["Anomaly Detection"],"summary":"Get a specific anomaly detection configuration","operationId":"GetAnomalyConfig","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"config_id","in":"path","description":"Anomaly config identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnomalyConfigResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Anomaly Detection","operation":"get"},"x-o2-mcp":{"description":"Get an anomaly detection config by ID","category":"anomaly_detection"}},"put":{"tags":["Anomaly Detection"],"summary":"Update an existing anomaly detection configuration","operationId":"UpdateAnomalyConfig","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"config_id","in":"path","description":"Anomaly config identifier","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Updated configuration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAnomalyConfigRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnomalyConfigResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Update an anomaly detection config","category":"anomaly_detection"},"x-o2-ratelimit":{"module":"Anomaly Detection","operation":"update"}},"delete":{"tags":["Anomaly Detection"],"summary":"Delete an anomaly detection configuration","operationId":"DeleteAnomalyConfig","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"config_id","in":"path","description":"Anomaly config identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Anomaly Detection","operation":"delete"},"x-o2-mcp":{"description":"Delete an anomaly detection config by ID","category":"anomaly_detection","requires_confirmation":true}}},"/api/{org_id}/anomaly_detection/{config_id}/detect":{"post":{"tags":["Anomaly Detection"],"summary":"Trigger manual detection for a configuration","operationId":"DetectAnomalies","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"config_id","in":"path","description":"Anomaly config identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Run anomaly detection now for a config","category":"anomaly_detection"},"x-o2-ratelimit":{"module":"Anomaly Detection","operation":"create"}}},"/api/{org_id}/anomaly_detection/{config_id}/history":{"get":{"tags":["Anomaly Detection"],"summary":"Get detection history for a configuration","operationId":"GetDetectionHistory","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"config_id","in":"path","description":"Anomaly config identifier","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum number of results","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DetectionHistoryItem"}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Anomaly Detection","operation":"list"}}},"/api/{org_id}/anomaly_detection/{config_id}/train":{"post":{"tags":["Anomaly Detection"],"summary":"Trigger manual training for a configuration","operationId":"TrainAnomalyModel","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"config_id","in":"path","description":"Anomaly config identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Start training the model for an anomaly detection config","category":"anomaly_detection"},"x-o2-ratelimit":{"module":"Anomaly Detection","operation":"create"}},"delete":{"tags":["Anomaly Detection"],"summary":"Cancel an in-progress training run","operationId":"CancelAnomalyTraining","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"config_id","in":"path","description":"Anomaly config identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Training cancelled"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Anomaly Detection","operation":"delete"},"x-o2-mcp":{"description":"Cancel in-progress training for an anomaly detection config","category":"anomaly_detection","requires_confirmation":true}}},"/api/{org_id}/aws-marketplace/activation-status":{"get":{"tags":["AWS Marketplace"],"summary":"Check AWS Marketplace subscription activation status","description":"Poll this endpoint to check if AWS Marketplace subscription is activated. Requires admin role.","operationId":"GetAwsMarketplaceActivationStatus","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"customer_id","in":"query","description":"Optional AWS Marketplace customer identifier for verification","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad Request (customer_id mismatch)","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden (not admin)","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/aws-marketplace/link-subscription":{"post":{"tags":["AWS Marketplace"],"summary":"Link AWS Marketplace subscription to organization","description":"Exchanges AWS Marketplace token for customer info and creates pending subscription","operationId":"LinkAwsMarketplaceSubscription","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkSubscriptionResponse"}}}},"400":{"description":"Bad Request (token expired, invalid)","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden (not admin)","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict (already subscribed)","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/azure-marketplace/link-subscription":{"post":{"tags":["Azure Marketplace"],"summary":"Link Azure Marketplace subscription to organization","description":"Processes the token provided by azure and links the subscription to organization","operationId":"LinkAzureMarketplaceSubscription","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkSubscriptionRequest"}}},"required":true},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Bad Request (token expired, invalid)","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden (not admin)","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict (already subscribed)","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/billing_group/invites":{"get":{"tags":["Organizations"],"summary":"List invites for and from the org for billing groups","description":"List invites for and from the org for billing groups","operationId":"ListBillingGroupInvites","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Invites for and from the org","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InviteResponseItem"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Organizations"],"summary":"invite an org as a billing group member","description":"invite an org as a billing group member","operationId":"BillingGroupInvite","parameters":[{"name":"org_id","in":"path","description":"Inviter Organization id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"invite request body","content":{"application/json":{"schema":{"type":"object","required":["org_id"],"properties":{"org_id":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/billing_group/invites/{token}/accept":{"post":{"tags":["Organizations"],"summary":"accept an invite as a billing group member","description":"accept an invite as a billing group member","operationId":"AcceptBillingGroupInvite","parameters":[{"name":"org_id","in":"path","description":"Invitee Organization id","required":true,"schema":{"type":"string"}},{"name":"token","in":"path","description":"invite token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/billing_group/invites/{token}/reject":{"delete":{"tags":["Organizations"],"summary":"reject an invite as a billing group member","description":"reject an invite as a billing group member","operationId":"RejectBillingGroupInvite","parameters":[{"name":"org_id","in":"path","description":"Invitee Organization id","required":true,"schema":{"type":"string"}},{"name":"token","in":"path","description":"invite token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/billing_group/members":{"get":{"tags":["Organizations"],"summary":"get info about members of own billing group","description":"get info about members of own billing group","operationId":"GetBIllingGRoupMembers","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Members of the billing group","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/MemberResponseItem"}}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/billing_group/members/{member_org_id}":{"delete":{"tags":["Organizations"],"summary":"remove a member org from own billing group","description":"remove a member org from own billing group, the member becomes a free org","operationId":"RemoveBillingGroupMember","parameters":[{"name":"org_id","in":"path","description":"Payer Organization id","required":true,"schema":{"type":"string"}},{"name":"member_org_id","in":"path","description":"Member Organization id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/billing_group/membership":{"get":{"tags":["Organizations"],"summary":"get info about own billing group membership","description":"get info about own billing group membership","operationId":"GetBIllingGRoupMembership","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Billing group membership of the org","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MembershipResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Billings","operation":"list"}},"delete":{"tags":["Organizations"],"summary":"leave own billing group as a member","description":"leave own billing group as a member, the org becomes a free org","operationId":"LeaveBillingGroup","parameters":[{"name":"org_id","in":"path","description":"Member Organization id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Billings","operation":"delete"}}},"/api/{org_id}/billings/billing_portal":{"get":{"tags":["Billings"],"summary":"Create customer billing portal session","description":"Creates a Stripe customer portal session for managing subscription and billing","operationId":"CreateBillingPortalSession","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeBillingPortalSession"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/billings/checkout_session_detail":{"get":{"tags":["Billings"],"summary":"Process checkout session detail after payment","description":"Processes successful checkout session details and updates subscription status","operationId":"ProcessSessionDetail","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"query","description":"Checkout session id","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","description":"Checkout status; anything but success is rejected","required":true,"schema":{"type":"string"}},{"name":"plan","in":"query","description":"Subscribed plan","required":true,"schema":{"type":"string"}}],"responses":{"302":{"description":"Redirects to the billing plans page: under 1024 bytes it is in Location and the body is empty; at 1024 bytes or more there is no Location and the body is a text/html refresh page to it","headers":{"Location":{"schema":{"type":"string"},"description":"Billing plans page, absent on the HTML fallback"}},"content":{"text/html":{"schema":{"type":"string"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/billings/data_usage/{usage_date}":{"get":{"tags":["Billings"],"summary":"Get organization usage data","description":"Retrieves detailed usage metrics and statistics for the specified organization","operationId":"GetUsageData","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"usage_date","in":"path","description":"Organization usage query range","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["price_details"],"properties":{"price_details":{"type":["object","null"],"description":"Upcoming and past metering details; null for an org without Stripe billing."}}}}}},"404":{"description":"Organization usage not found","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Billings","operation":"get"}}},"/api/{org_id}/billings/hosted_subscription_url":{"get":{"tags":["Billings"],"summary":"Get subscription URL for checkout session","description":"Creates a checkout session URL for subscription upgrades and billing management","operationId":"GetSubscriptionUrl","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"plan","in":"query","description":"Subscription plan","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StripeCheckoutSession"}}}},"302":{"description":"Redirects to the checkout URL: under 1024 bytes it is in Location and the body is empty; at 1024 bytes or more there is no Location and the body is a text/html refresh page to it","headers":{"Location":{"schema":{"type":"string"},"description":"Checkout URL, absent on the HTML fallback"}},"content":{"text/html":{"schema":{"type":"string"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Billings","operation":"list"}}},"/api/{org_id}/billings/invoices":{"get":{"tags":["Billings"],"summary":"List organization billing invoices","description":"Retrieves all billing invoices for the specified organization","operationId":"ListInvoices","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListInvoicesResponseBody"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/billings/list_subscription":{"get":{"tags":["Billings"],"summary":"List organization subscription details","description":"Gets current subscription information and billing details for the organization","operationId":"ListSubscription","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListSubscriptionResponseBody"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/billings/unsubscribe":{"get":{"tags":["Billings"],"summary":"Unsubscribe from current billing plan","description":"Cancels the current subscription at the end of the billing cycle","operationId":"Unsubscribe","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Billings","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/cipher_keys":{"get":{"tags":["Keys"],"summary":"List encryption keys","description":"Retrieves a list of all encryption keys available within the organization. Returns key names and metadata without exposing sensitive key material. Helps administrators manage encryption keys, audit key usage, and ensure proper key lifecycle management. Only available in enterprise deployments for enhanced security and compliance.","operationId":"ListCipherKeys","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"list all keys in the org","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Cipher Keys","operation":"list"}},"post":{"tags":["Keys"],"summary":"Create encryption key","description":"Creates a new encryption key for data encryption and decryption operations. The key is securely stored and validated before being made available for use. Key names cannot contain ':' characters. Only available in enterprise deployments for enhanced data security and compliance requirements.","operationId":"CreateCipherKey","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Key data to add","content":{"application/json":{"schema":{"type":"object","required":["name","key"],"properties":{"key":{"type":"object"},"name":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Cipher Keys","operation":"create"}}},"/api/{org_id}/cipher_keys/bulk":{"delete":{"tags":["Keys"],"summary":"Delete multiple encryption key","description":"Permanently removes multiple encryption key from the organization. This action cannot be undone and will prevent any future data decryption operations that depend on this key. Ensure all data encrypted with this key is either migrated or no longer needed before deletion. Only available in enterprise deployments for enhanced security management.","operationId":"DeleteCipherKeysBulk","parameters":[{"name":"org_id","in":"path","description":"name of the organization from which delete","required":true,"schema":{"type":"string"},"example":"default"}],"requestBody":{"description":"Key name list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Cipher Keys","operation":"delete"}}},"/api/{org_id}/cipher_keys/{key_name}":{"get":{"tags":["Keys"],"summary":"Get encryption key details","description":"Retrieves the configuration and metadata for a specific encryption key by name. Returns key information without exposing sensitive key material. Used for managing and auditing encryption keys within the organization. Only available in enterprise deployments for enhanced security management.","operationId":"GetCipherKey","parameters":[{"name":"key_name","in":"path","description":"Name of the key to retrieve","required":true,"schema":{"type":"string"},"example":"test_key"},{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Key info","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Key not found","content":{"text/plain":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Cipher Keys","operation":"get"}},"put":{"tags":["Keys"],"summary":"Update encryption key","description":"Updates the configuration and parameters of an existing encryption key. The key is validated after updates to ensure it remains functional for encryption and decryption operations. Changes are applied atomically to maintain data security and consistency. Only available in enterprise deployments for enhanced security management.","operationId":"UpdateCipherKey","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"key_name","in":"path","description":"name of the key to update","required":true,"schema":{"type":"string"},"example":"test_key"}],"requestBody":{"description":"updated key data","content":{"application/json":{"schema":{"type":"object","required":["name","key"],"properties":{"key":{"type":"object"},"name":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Cipher Keys","operation":"update"}},"delete":{"tags":["Keys"],"summary":"Delete encryption key","description":"Permanently removes an encryption key from the organization. This action cannot be undone and will prevent any future data decryption operations that depend on this key. Ensure all data encrypted with this key is either migrated or no longer needed before deletion. Only available in enterprise deployments for enhanced security management.","operationId":"DeleteCipherKey","parameters":[{"name":"key_name","in":"path","description":"name of the key to delete","required":true,"schema":{"type":"string"},"example":"test_key"},{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Cipher Keys","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/cluster/info":{"get":{"tags":["Organizations"],"summary":"Get cluster information","description":"Retrieves comprehensive information about the OpenObserve cluster organized by regions and clusters, including workload information, pending jobs, and resource utilization metrics. Essential for monitoring cluster performance and identifying bottlenecks.","operationId":"GetMetaOrganizationClusterInfo","parameters":[{"name":"org_id","in":"path","description":"Must be '_meta'","required":true,"schema":{"type":"string"}},{"name":"regions","in":"query","description":"Optional comma-separated list of regions to filter by (e.g., 'us-east-1,us-west-2')","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"Response struct for cluster info\n\nContains a three-level hierarchy with a flat format:\n1. Regions at the top level as object keys\n2. Clusters within each region as object keys","required":["regions"],"properties":{"regions":{"type":"object"}}}}}},"403":{"description":"Forbidden - Not the _meta organization","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Clusters","operation":"get"}}},"/api/{org_id}/config":{"get":{"tags":["Meta"],"summary":"Get the configuration for an organization","operationId":"GetOrgConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Settings","operation":"get"}}},"/api/{org_id}/dashboards":{"get":{"tags":["Dashboards"],"summary":"List organization dashboards","description":"Retrieves a list of dashboards within the organization, with optional filtering by folder and pagination support","operationId":"ListDashboards","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Optional folder ID filter parameter\n\nIf neither `folder` nor any other filter parameter are set then this\nwill search for all dashboards in the \"default\" folder.\n\nIf `folder` is not set and another filter parameter, such as `title`, is\nset then this will search for dashboards in all folders.","required":false,"schema":{"type":"string"},"style":"form"},{"name":"title","in":"query","description":"The optional case-insensitive title substring with which to filter\ndashboards.","required":false,"schema":{"type":"string"},"style":"form"},{"name":"pageSize","in":"query","description":"The optional number of dashboards to retrieve. If not set then all\ndashboards that match the query parameters will be returned.\n\nCurrently this parameter is only untilized by the API when the `title`\nparameter is also set.","required":false,"schema":{"type":"integer","format":"int64","minimum":0},"style":"form"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for `ListDashboards` endpoint.","required":["dashboards"],"properties":{"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/ListDashboardsResponseBodyItem"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"list"},"x-o2-mcp":{"description":"List all dashboards in organization","category":"dashboards","summary_fields":["dashboard_id","title","description","owner","folder_name"]}},"post":{"tags":["Dashboards"],"summary":"Create new dashboard","description":"Creates a new dashboard with specified title, description, and visualization panels. The dashboard will be saved in the specified folder","operationId":"CreateDashboard","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID where the dashboard will be created. Used for RBAC checks in enterprise version. Defaults to 'default' if not specified","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Dashboard details","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"}],"description":"HTTP request body for the `CreateDashboard`/`UpdateDashboard` endpoints."},"example":{"title":"Network Traffic Overview","description":"Traffic patterns and network performance of the infrastructure"}}},"required":true},"responses":{"201":{"description":"Dashboard created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard","description":"HTTP response body for `CreateDashboard`/`UpdateDashboard` endpoints."}}}},"404":{"description":"Folder not found","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create a dashboard with visualization panels. LAYOUT: 192-column grid with {x, y, w, h, i} where x=column(0-191), y=row, w=width, h=height, i=panel_id. Common widths: full=192, half=96, third=64. PANEL QUERIES: Each panel query needs 'fields' with x/y/z arrays populated EVEN when customQuery=true. AXIS RULES: x=dimension/time field, y=metric field(s), z=only for heatmaps(color intensity)/stacked-charts(breakdown field)/geo-maps(value). For most charts (line/area/bar/pie), leave z=[]. Use SELECT aliases as column values. Example: 'SELECT histogram(_timestamp) as ts, COUNT(*) as cnt' needs x=[{label:'ts',alias:'ts',column:'ts',aggregationFunction:null}], y=[{label:'cnt',alias:'cnt',column:'cnt',aggregationFunction:null}], z=[]. FILTER: The 'filter' field in 'fields' MUST be an object (NOT an array). Use: {type:'list',values:[],logicalOperator:'AND',filterType:'list'} for no filters.","category":"dashboards"},"x-o2-ratelimit":{"module":"Dashboards","operation":"create"}}},"/api/{org_id}/dashboards/bulk":{"delete":{"tags":["Dashboards"],"summary":"Delete multiple dashboard","description":"Permanently deletes multiple dashboard and all their associated panels and configurations. This action cannot be undone","operationId":"DeleteDashboardBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID where the dashboards are located. Required for RBAC permission checks in enterprise version","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Dashboard ids","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"},"example":{"ids":["1","2","3"]}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}},"403":{"description":"Unauthorized Access","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Dashboards","operation":"delete"}}},"/api/{org_id}/dashboards/move":{"patch":{"tags":["Dashboards"],"summary":"Move multiple dashboards","description":"Moves multiple dashboards to a specified destination folder in a single batch operation. Useful for organizing dashboards efficiently","operationId":"MoveDashboards","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Identifies dashboards and the destination folder","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for `MoveDashboards` endpoint.","required":["dashboard_ids","dst_folder_id"],"properties":{"dashboard_ids":{"type":"array","items":{"type":"string"},"description":"IDs of the dashboards to move."},"dst_folder_id":{"type":"string","description":"Indicates the folder to which dashboard should be moved."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"update"},"x-o2-mcp":{"description":"Move multiple dashboards to folder","category":"dashboards"}}},"/api/{org_id}/dashboards/{dashboard_id}":{"get":{"tags":["Dashboards"],"summary":"Get dashboard details","description":"Retrieves complete details of a specific dashboard including its panels, queries, and visualization configurations","operationId":"GetDashboard","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID where the dashboard is located. Used for RBAC permission checks in enterprise version","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard","description":"HTTP response body for `CreateDashboard`/`UpdateDashboard` endpoints."}}}},"403":{"description":"Unauthorized Access","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Dashboard not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"get"},"x-o2-mcp":{"description":"Get dashboard details by ID","category":"dashboards"}},"put":{"tags":["Dashboards"],"summary":"Update existing dashboard","description":"Updates an existing dashboard with new content, panels, or settings. Supports concurrent edit conflict detection using hash values","operationId":"UpdateDashboard","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID where the dashboard is located","required":true,"schema":{"type":"string"}},{"name":"hash","in":"query","description":"Hash value for conflict detection. Required when updating an existing dashboard to prevent concurrent edit conflicts","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Dashboard details","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"}],"description":"HTTP request body for the `CreateDashboard`/`UpdateDashboard` endpoints."}}},"required":true},"responses":{"200":{"description":"Dashboard updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dashboard","description":"HTTP response body for `CreateDashboard`/`UpdateDashboard` endpoints."}}}},"404":{"description":"Dashboard not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict: Failed to save due to concurrent changes","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failed to update the dashboard","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Update an existing dashboard","category":"dashboards"},"x-o2-ratelimit":{"module":"Dashboards","operation":"update"}},"delete":{"tags":["Dashboards"],"summary":"Delete dashboard","description":"Permanently deletes a dashboard and all its associated panels and configurations. This action cannot be undone","operationId":"DeleteDashboard","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID where the dashboard is located. Used for RBAC permission checks in enterprise version","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Unauthorized Access","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete a dashboard by ID","category":"dashboards","requires_confirmation":true},"x-o2-ratelimit":{"module":"Dashboards","operation":"delete"}}},"/api/{org_id}/dashboards/{dashboard_id}/annotations":{"get":{"tags":["Dashboards"],"summary":"Get timed annotations for dashboard","description":"Retrieves timed annotations for dashboard panels within a specified time range","operationId":"GetAnnotations","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard id","required":true,"schema":{"type":"string"}},{"name":"panels","in":"query","description":"Commas separated list of panels","required":false,"schema":{"type":"string"},"style":"form"},{"name":"start_time","in":"query","description":"Time in microseconds","required":true,"schema":{"type":"integer","format":"int64"},"style":"form"},{"name":"end_time","in":"query","description":"Time in microseconds","required":true,"schema":{"type":"integer","format":"int64"},"style":"form"}],"responses":{"200":{"description":"Timed annotations retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TimedAnnotation"}}}}},"400":{"description":"Invalid query parameters","content":{"application/json":{}}},"500":{"description":"Failed to get timed annotations","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"list"},"x-o2-mcp":{"description":"Get annotations","category":"dashboards","summary_fields":["annotation_id","title","start_time","end_time","tags","panels"]}},"post":{"tags":["Dashboards"],"summary":"Create timed annotations for dashboard","description":"Creates new timed annotations for specific panels within a dashboard","operationId":"CreateAnnotations","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Timed annotation request payload","content":{"application/json":{"schema":{"type":"object","required":["timed_annotations"],"properties":{"timed_annotations":{"type":"array","items":{"$ref":"#/components/schemas/TimedAnnotation"}}}}}},"required":true},"responses":{"200":{"description":"Timed annotations created successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TimedAnnotation"}}}}},"500":{"description":"Failed to create timed annotations","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"create"},"x-o2-mcp":{"description":"Create time annotations","category":"dashboards","summary_fields":["annotation_id","title","start_time","end_time","tags","panels"]}},"delete":{"tags":["Dashboards"],"summary":"Delete timed annotations from dashboard","description":"Removes timed annotations from dashboard panels based on specified criteria","operationId":"DeleteAnnotations","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Timed annotation delete request payload","content":{"application/json":{"schema":{"type":"object","required":["annotation_ids"],"properties":{"annotation_ids":{"type":"array","items":{"type":"string"}}}}}},"required":true},"responses":{"200":{"description":"Timed annotations deleted successfully"},"500":{"description":"Failed to delete timed annotations","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"delete"},"x-o2-mcp":{"description":"Delete annotations","category":"dashboards","requires_confirmation":true}}},"/api/{org_id}/dashboards/{dashboard_id}/annotations/panels/{timed_annotation_id}":{"delete":{"tags":["Dashboards"],"summary":"Remove timed annotation from panel","description":"Removes a specific timed annotation from a dashboard panel","operationId":"RemoveTimedAnnotationFromPanel","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"timed_annotation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"IDs of dashboard panels from which to remove the timed annotation","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}},"required":true},"responses":{"200":{"description":"Removed timed annotation from dashboard panels successfully"},"500":{"description":"Failed to remove timed annotation from panels","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"delete"},"x-o2-mcp":{"description":"Remove annotation from panel","category":"dashboards","requires_confirmation":true}}},"/api/{org_id}/dashboards/{dashboard_id}/annotations/{timed_annotation_id}":{"put":{"tags":["Dashboards"],"summary":"Update timed annotation","description":"Updates an existing timed annotation with new content or metadata","operationId":"UpdateAnnotations","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"timed_annotation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Timed annotation update request payload","content":{"application/json":{"schema":{"type":"object","properties":{"annotation_id":{"type":["string","null"],"default":null},"end_time":{"type":["integer","null"],"format":"int64","default":null},"panels":{"type":"array","items":{"type":"string"},"default":[]},"start_time":{"type":"integer","format":"int64","default":0},"tags":{"type":"array","items":{"type":"string"},"default":[]},"text":{"type":["string","null"],"default":null},"title":{"type":"string","default":""}}}}},"required":true},"responses":{"200":{"description":"Timed annotations updated successfully"},"500":{"description":"Failed to update timed annotations","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Update annotations","category":"dashboards"},"x-o2-ratelimit":{"module":"Dashboards","operation":"update"}}},"/api/{org_id}/dashboards/{dashboard_id}/panels":{"post":{"tags":["Dashboards"],"summary":"Add a panel to a dashboard","description":"Add a panel to an existing dashboard. Layout auto-computed if not specified. Returns new hash for chaining.","operationId":"AddPanel","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID where the dashboard is located","required":false,"schema":{"type":"string"}},{"name":"hash","in":"query","description":"Hash value for conflict detection","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Panel to add","content":{"application/json":{"schema":{"type":"object","description":"Request body for AddPanel and UpdatePanel endpoints.","required":["panel"],"properties":{"panel":{"$ref":"#/components/schemas/Panel"},"tabId":{"type":["string","null"]}}}}},"required":true},"responses":{"200":{"description":"Panel added","content":{"application/json":{"schema":{"type":"object","description":"Response body for AddPanel and UpdatePanel endpoints.","required":["panel","hash","tabId"],"properties":{"hash":{"type":"string"},"panel":{"$ref":"#/components/schemas/Panel"},"tabId":{"type":"string"}}}}}},"400":{"description":"Unsupported dashboard version","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Dashboard or tab not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Panel ID already exists or hash conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Add a panel to an existing dashboard. Layout auto-computed. Returns new hash for chaining.","category":"dashboards"},"x-o2-ratelimit":{"module":"Dashboards","operation":"update"}}},"/api/{org_id}/dashboards/{dashboard_id}/panels/{panel_id}":{"put":{"tags":["Dashboards"],"summary":"Update a single panel in a dashboard","description":"Update a single panel in a dashboard by panel ID. Preserves layout if not explicitly set.","operationId":"UpdatePanel","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard ID","required":true,"schema":{"type":"string"}},{"name":"panel_id","in":"path","description":"Panel ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID where the dashboard is located","required":false,"schema":{"type":"string"}},{"name":"hash","in":"query","description":"Hash value for conflict detection","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Panel data to update","content":{"application/json":{"schema":{"type":"object","description":"Request body for AddPanel and UpdatePanel endpoints.","required":["panel"],"properties":{"panel":{"$ref":"#/components/schemas/Panel"},"tabId":{"type":["string","null"]}}}}},"required":true},"responses":{"200":{"description":"Panel updated","content":{"application/json":{"schema":{"type":"object","description":"Response body for AddPanel and UpdatePanel endpoints.","required":["panel","hash","tabId"],"properties":{"hash":{"type":"string"},"panel":{"$ref":"#/components/schemas/Panel"},"tabId":{"type":"string"}}}}}},"400":{"description":"Unsupported dashboard version","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Dashboard, tab, or panel not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Hash conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Update a single panel in a dashboard by panel ID. Preserves layout if not explicitly set.","category":"dashboards"},"x-o2-ratelimit":{"module":"Dashboards","operation":"update"}},"delete":{"tags":["Dashboards"],"summary":"Delete a single panel from a dashboard","description":"Delete a single panel from a dashboard by panel ID.","operationId":"DeletePanel","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard ID","required":true,"schema":{"type":"string"}},{"name":"panel_id","in":"path","description":"Panel ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID where the dashboard is located","required":false,"schema":{"type":"string"}},{"name":"hash","in":"query","description":"Hash value for conflict detection","required":true,"schema":{"type":"string"}},{"name":"tabId","in":"query","description":"Tab ID to search for the panel","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Panel deleted","content":{"application/json":{"schema":{"type":"object","description":"Response body for DeletePanel endpoint.","required":["hash","panelId"],"properties":{"hash":{"type":"string"},"panelId":{"type":"string"}}}}}},"400":{"description":"Unsupported dashboard version","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Dashboard, tab, or panel not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Hash conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"update"},"x-o2-mcp":{"description":"Delete a single panel from a dashboard by panel ID.","category":"dashboards","requires_confirmation":true}}},"/api/{org_id}/dashboards/{dashboard_id}/public_links":{"get":{"tags":["Public Dashboards"],"summary":"List public links of a dashboard","operationId":"ListPublicDashboardLinks","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLinkList"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Public Dashboards"],"summary":"Create a public link for a dashboard","operationId":"CreatePublicDashboardLink","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDashboardConfig"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLinkView"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/dashboards/{dashboard_id}/public_links/{link_id}":{"get":{"tags":["Public Dashboards"],"summary":"Get a public dashboard link","operationId":"GetPublicDashboardLink","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard id","required":true,"schema":{"type":"string"}},{"name":"link_id","in":"path","description":"Link id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLinkView"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Dashboards","operation":"get"}},"put":{"tags":["Public Dashboards"],"summary":"Update a public dashboard link","operationId":"UpdatePublicDashboardLink","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard id","required":true,"schema":{"type":"string"}},{"name":"link_id","in":"path","description":"Link id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicDashboardConfig"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLinkView"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["Public Dashboards"],"summary":"Delete a public dashboard link","operationId":"DeletePublicDashboardLink","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard id","required":true,"schema":{"type":"string"}},{"name":"link_id","in":"path","description":"Link id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Dashboards","operation":"delete"}}},"/api/{org_id}/dashboards/{dashboard_id}/public_links/{link_id}/pause":{"post":{"tags":["Public Dashboards"],"summary":"Pause a public dashboard link","operationId":"PausePublicDashboardLink","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard id","required":true,"schema":{"type":"string"}},{"name":"link_id","in":"path","description":"Link id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLinkView"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/dashboards/{dashboard_id}/public_links/{link_id}/refresh":{"post":{"tags":["Public Dashboards"],"summary":"Refresh the data of a public dashboard link","operationId":"RefreshPublicDashboardLink","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard id","required":true,"schema":{"type":"string"}},{"name":"link_id","in":"path","description":"Link id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLinkView"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Dashboards","operation":"update"}}},"/api/{org_id}/dashboards/{dashboard_id}/public_links/{link_id}/resume":{"post":{"tags":["Public Dashboards"],"summary":"Resume a public dashboard link","operationId":"ResumePublicDashboardLink","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard id","required":true,"schema":{"type":"string"}},{"name":"link_id","in":"path","description":"Link id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLinkView"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Dashboards","operation":"update"}}},"/api/{org_id}/dashboards/{dashboard_id}/public_links/{link_id}/status":{"get":{"tags":["Public Dashboards"],"summary":"Get the status of a public dashboard link","operationId":"GetPublicDashboardLinkStatus","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard id","required":true,"schema":{"type":"string"}},{"name":"link_id","in":"path","description":"Link id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkStatusReport"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/dashboards/{dashboard_id}/public_links/{link_id}/take_over":{"post":{"tags":["Public Dashboards"],"summary":"Take over ownership of a public dashboard link","operationId":"TakeOverPublicDashboardLink","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard id","required":true,"schema":{"type":"string"}},{"name":"link_id","in":"path","description":"Link id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TakeOverRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLinkView"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/datasets":{"get":{"tags":["Datasets"],"summary":"List Datasets","operationId":"ListDatasets","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/DatasetResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Datasets","operation":"list"}},"post":{"tags":["Datasets"],"summary":"Create a Dataset","operationId":"CreateDataset","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Dataset payload","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"name":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","orgId","name","tags","globalVersion","writeVersion","itemCount","sources","createdBy","createdAt","updatedBy","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"globalVersion":{"type":"integer","format":"int64","description":"Per-row MVCC counter: the value an Experiment pins and a Snapshot reads."},"id":{"type":"string"},"itemCount":{"type":"integer","format":"int64","description":"Live (non-deleted) Items, counted once per logical Item rather than once\nper stored revision."},"name":{"type":"string"},"orgId":{"type":"string"},"sources":{"$ref":"#/components/schemas/DatasetSourceCountsResponseBody"},"tags":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"writeVersion":{"type":"integer","format":"int64","description":"The Dataset version to display: one per write request."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Datasets","operation":"create"}}},"/api/{org_id}/datasets/{dataset_id}":{"get":{"tags":["Datasets"],"summary":"Get a Dataset","operationId":"GetDataset","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dataset_id","in":"path","description":"Dataset ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","orgId","name","tags","globalVersion","writeVersion","itemCount","sources","createdBy","createdAt","updatedBy","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"globalVersion":{"type":"integer","format":"int64","description":"Per-row MVCC counter: the value an Experiment pins and a Snapshot reads."},"id":{"type":"string"},"itemCount":{"type":"integer","format":"int64","description":"Live (non-deleted) Items, counted once per logical Item rather than once\nper stored revision."},"name":{"type":"string"},"orgId":{"type":"string"},"sources":{"$ref":"#/components/schemas/DatasetSourceCountsResponseBody"},"tags":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"writeVersion":{"type":"integer","format":"int64","description":"The Dataset version to display: one per write request."}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Datasets","operation":"get"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["Datasets"],"summary":"Update a Dataset","operationId":"UpdateDataset","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dataset_id","in":"path","description":"Dataset ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Dataset payload","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"name":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","orgId","name","tags","globalVersion","writeVersion","itemCount","sources","createdBy","createdAt","updatedBy","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"globalVersion":{"type":"integer","format":"int64","description":"Per-row MVCC counter: the value an Experiment pins and a Snapshot reads."},"id":{"type":"string"},"itemCount":{"type":"integer","format":"int64","description":"Live (non-deleted) Items, counted once per logical Item rather than once\nper stored revision."},"name":{"type":"string"},"orgId":{"type":"string"},"sources":{"$ref":"#/components/schemas/DatasetSourceCountsResponseBody"},"tags":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"writeVersion":{"type":"integer","format":"int64","description":"The Dataset version to display: one per write request."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Datasets","operation":"update"}},"delete":{"tags":["Datasets"],"summary":"Delete an empty, unused Dataset","operationId":"DeleteDataset","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dataset_id","in":"path","description":"Dataset ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Datasets","operation":"delete"}}},"/api/{org_id}/datasets/{dataset_id}/items":{"get":{"tags":["Datasets"],"summary":"List the current Dataset Item snapshot","description":"Returns the latest immutable row for every logical Dataset Item, excluding soft-deleted items unless include_deleted=true.","operationId":"ListDatasetItems","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dataset_id","in":"path","description":"Dataset ID","required":true,"schema":{"type":"string"}},{"name":"includeDeleted","in":"query","description":"Include the latest tombstone for deleted logical items. Defaults to false.","required":false,"schema":{"type":"boolean"}},{"name":"from","in":"query","description":"Zero-based result offset. Defaults to 0.","required":false,"schema":{"type":"integer","minimum":0}},{"name":"size","in":"query","description":"Page size from 1 through 100. Defaults to 20.","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["list","total","from","size","hasMore"],"properties":{"from":{"type":"integer","minimum":0},"hasMore":{"type":"boolean"},"list":{"type":"array","items":{"$ref":"#/components/schemas/DatasetItemResponseBody"}},"size":{"type":"integer","minimum":0},"total":{"type":"integer","format":"int64","minimum":0}}}}}},"400":{"description":"Invalid page size","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Dataset not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Datasets","operation":"list"}},"put":{"tags":["Datasets"],"summary":"Create or update Dataset Cases under client-supplied identity","description":"Identity comes from `logicalId` alone and is never inferred from content. An item that names an existing Case must carry the `ifRowId` it read; a superseded revision returns 409 and writes nothing. A deleted Case returns 409 unless the item sets `restore`. The whole batch and its idempotency record commit together.","operationId":"UpsertDatasetItems","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dataset_id","in":"path","description":"Dataset ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Dataset Cases to ensure","content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"idempotencyKey":{"type":["string","null"],"description":"Client-generated key, scoped to this organization and Dataset. Repeating\nit with identical content replays the first response."},"items":{"type":"array","items":{"$ref":"#/components/schemas/UpsertDatasetItemBody"}}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["items","datasetVersion","replayed"],"properties":{"datasetVersion":{"type":"integer","format":"int64"},"items":{"type":"array","items":{"$ref":"#/components/schemas/UpsertedDatasetItemBody"}},"replayed":{"type":"boolean","description":"True when the response was replayed from a stored idempotency record."}}}}}},"400":{"description":"Invalid upsert request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Dataset not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Stale revision, deleted Case, or idempotency conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Datasets","operation":"update"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Datasets"],"summary":"Add a manual or telemetry-backed Dataset Item","operationId":"PushDatasetItem","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dataset_id","in":"path","description":"Dataset ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Dataset Item payload","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Add a user-authored golden directly from the Dataset detail page.","required":["input","entryPoint"],"properties":{"entryPoint":{"type":"string","enum":["manual"]},"expectedOutput":{},"input":{},"metadata":{},"tags":{"type":"array","items":{"type":"string"}}}},{"type":"object","description":"Add a trace/span golden from telemetry detail. The service retrieves and\npurifies the business input using this immutable reference.","required":["refType","refId","sourceStream","refTraceStartTime","entryPoint"],"properties":{"entryPoint":{"type":"string","enum":["telemetry"]},"expectedOutput":{},"metadata":{},"refId":{"type":"string"},"refTraceStartTime":{"type":"integer","format":"int64","description":"Positive microsecond lower bound used to retrieve the reference."},"refType":{"$ref":"#/components/schemas/TelemetryDatasetItemRefType"},"sourceStream":{"type":"string","description":"Trace stream containing the immutable reference."},"tags":{"type":"array","items":{"type":"string"}}}}]}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["created","item"],"properties":{"created":{"type":"boolean","description":"False when an idempotent trace/annotation push returns the existing item."},"item":{"$ref":"#/components/schemas/DatasetItemResponseBody"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Datasets","operation":"update"}}},"/api/{org_id}/datasets/{dataset_id}/items/import":{"post":{"tags":["Datasets"],"summary":"Import Dataset Items from CSV","operationId":"ImportDatasetItems","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dataset_id","in":"path","description":"Dataset ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"CSV file, at most 10 MiB","content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"CSV file; only one is accepted per request."}}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["filename","importedCount","skippedCount"],"properties":{"filename":{"type":"string"},"importedCount":{"type":"integer","format":"int64","minimum":0},"skippedCount":{"type":"integer","format":"int64","minimum":0}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Datasets","operation":"update"}}},"/api/{org_id}/datasets/{dataset_id}/items/{item_id}":{"get":{"tags":["Datasets"],"summary":"Get every version of a Dataset Item","description":"Returns every immutable row for one logical Dataset Item in ascending Dataset global-version order, including its tombstone when deleted.","operationId":"GetDatasetItemVersions","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dataset_id","in":"path","description":"Dataset ID","required":true,"schema":{"type":"string"}},{"name":"item_id","in":"path","description":"Logical Dataset Item ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/DatasetItemResponseBody"}}}}}}},"404":{"description":"Dataset or Dataset Item not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Datasets","operation":"get"}},"put":{"tags":["Datasets"],"summary":"Append a new Dataset Item version","description":"Replaces the user-authored fields by appending an immutable row with the same logical Item ID and the next Dataset global version. Source provenance is preserved.","operationId":"UpdateDatasetItem","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dataset_id","in":"path","description":"Dataset ID","required":true,"schema":{"type":"string"}},{"name":"item_id","in":"path","description":"Logical Dataset Item ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Replacement Dataset Item fields","content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"expectedOutput":{},"input":{},"metadata":{},"tags":{"type":"array","items":{"type":"string"}}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["rowId","logicalId","orgId","datasetId","input","globalVersion","writeVersion","isDeleted","source","tags","updatedBy","updatedAt"],"properties":{"adjudicatedAt":{"type":["integer","null"],"format":"int64"},"adjudicatedBy":{"type":["string","null"]},"datasetId":{"type":"string"},"expectedOutput":{},"globalVersion":{"type":"integer","format":"int64"},"importFilename":{"type":["string","null"]},"input":{},"isDeleted":{"type":"boolean"},"logicalId":{"type":"string"},"metadata":{},"orgId":{"type":"string"},"queueId":{"type":["string","null"]},"reviewSubmissionId":{"type":["string","null"]},"rowId":{"type":"string"},"source":{"$ref":"#/components/schemas/DatasetItemSourceResponseBody"},"sourceRef":{"type":["string","null"]},"sourceSpanId":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"writeVersion":{"type":"integer","format":"int64","description":"The Dataset version of the write request that stored this row."}}}}}},"400":{"description":"Invalid Dataset Item","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Dataset or Dataset Item not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Datasets","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["Datasets"],"summary":"Soft-delete a Dataset Item","description":"Appends an immutable tombstone with the same logical Item ID and the next Dataset global version.","operationId":"DeleteDatasetItem","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dataset_id","in":"path","description":"Dataset ID","required":true,"schema":{"type":"string"}},{"name":"item_id","in":"path","description":"Logical Dataset Item ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["rowId","logicalId","orgId","datasetId","input","globalVersion","writeVersion","isDeleted","source","tags","updatedBy","updatedAt"],"properties":{"adjudicatedAt":{"type":["integer","null"],"format":"int64"},"adjudicatedBy":{"type":["string","null"]},"datasetId":{"type":"string"},"expectedOutput":{},"globalVersion":{"type":"integer","format":"int64"},"importFilename":{"type":["string","null"]},"input":{},"isDeleted":{"type":"boolean"},"logicalId":{"type":"string"},"metadata":{},"orgId":{"type":"string"},"queueId":{"type":["string","null"]},"reviewSubmissionId":{"type":["string","null"]},"rowId":{"type":"string"},"source":{"$ref":"#/components/schemas/DatasetItemSourceResponseBody"},"sourceRef":{"type":["string","null"]},"sourceSpanId":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"writeVersion":{"type":"integer","format":"int64","description":"The Dataset version of the write request that stored this row."}}}}}},"404":{"description":"Dataset or Dataset Item not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Datasets","operation":"delete"}}},"/api/{org_id}/datasets/{dataset_id}/rows":{"get":{"tags":["Datasets"],"summary":"Read the row set of a pinned Dataset Snapshot","description":"Resolves the Dataset's MVCC history at row-level `version` and returns one page of live rows. Alternatively, `write_version` W resolves to the highest row version among rows whose write version is at or below W; write versions and row versions are separate counters. Omitting both reads the current Snapshot. The response's `snapshotVersion` is always a row-level pin key: use it as the Experiment's `datasetVersion`. Existing pins and `version` reads retain their original semantics.","operationId":"GetDatasetSnapshotRows","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dataset_id","in":"path","description":"Dataset ID","required":true,"schema":{"type":"string"}},{"name":"version","in":"query","description":"Row-level Snapshot/pin key. When both this and `write_version` are\nomitted, reads the Dataset's current row version.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"write_version","in":"query","description":"Displayed write version W to pin. Resolves to the highest row version\namong rows whose write version is at or below W (labels and row versions\nare separate counters); cannot be combined with `version`. Use the\nreturned `snapshotVersion` as the Experiment's `datasetVersion`.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"from","in":"query","description":"Zero-based result offset. Defaults to 0.","required":false,"schema":{"type":"integer","minimum":0}},{"name":"size","in":"query","description":"Page size from 1 through 100. Defaults to 20.","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["rows","snapshotVersion","total","from","size","hasMore"],"properties":{"from":{"type":"integer","minimum":0},"hasMore":{"type":"boolean"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/DatasetItemResponseBody"}},"size":{"type":"integer","minimum":0},"snapshotVersion":{"type":"integer","format":"int64","description":"The version actually resolved, which a caller that omitted `version`\nneeds in order to pin the same Snapshot again."},"total":{"type":"integer","format":"int64","minimum":0}}}}}},"400":{"description":"Invalid page size or snapshot version","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Dataset not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Datasets","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/db_monitoring/activity":{"get":{"tags":["Traces"],"summary":"Database Monitoring: sampled active sessions and wait-event breakdown","description":"Sampled sessions from the server-vantage query_sample feed, with SQL-computed wait-event and state breakdowns over the full window.","operationId":"GetDbMonitoringActivity","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream","in":"query","description":"Server-vantage logs stream: '_o2_dbm_server' (default) or 'dbm_server_logs'; any other value is a 400","required":false,"schema":{"type":"string"}},{"name":"system","in":"query","description":"Database engine filter","required":false,"schema":{"type":"string"}},{"name":"instance","in":"query","description":"Database instance filter","required":false,"schema":{"type":"string"}},{"name":"database","in":"query","description":"Database name filter (alias: namespace)","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max sampled sessions returned (default 100)","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"},"x-o2-mcp":{"description":"Sampled active database sessions and wait-event breakdown","category":"db_monitoring"}}},"/api/{org_id}/db_monitoring/badges":{"get":{"tags":["Traces"],"summary":"Database Monitoring: all tab badges in one read","description":"One envelope carrying the databases, queries, activity, deadlocks, blocking and table-health response bodies for the window, read concurrently; members are null when their read failed. When the client-vantage answer is exactly zero, the server-vantage fallback members (server_queries, server_samples) are included too.","operationId":"GetDbMonitoringBadges","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"system","in":"query","description":"Database system filter","required":false,"schema":{"type":"string"}},{"name":"instance","in":"query","description":"Database instance filter","required":false,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Database/schema filter","required":false,"schema":{"type":"string"}},{"name":"env","in":"query","description":"Environment filter (trace-vantage slices only)","required":false,"schema":{"type":"string"}},{"name":"service","in":"query","description":"Calling service filter (trace-vantage slices only)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"}}},"/api/{org_id}/db_monitoring/blocking":{"get":{"tags":["Traces"],"summary":"Database Monitoring: blocking samples and root-blocker chains","description":"Canonical blocking samples plus server-assembled transitive blocking chains with the root blocker identified.","operationId":"GetDbMonitoringBlocking","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream","in":"query","description":"Server-vantage logs stream: '_o2_dbm_server' (default) or 'dbm_server_logs'; any other value is a 400","required":false,"schema":{"type":"string"}},{"name":"system","in":"query","description":"Database engine filter","required":false,"schema":{"type":"string"}},{"name":"instance","in":"query","description":"Database instance filter","required":false,"schema":{"type":"string"}},{"name":"database","in":"query","description":"Database name filter (alias: namespace)","required":false,"schema":{"type":"string"}},{"name":"search","in":"query","description":"Free text over statements and applications","required":false,"schema":{"type":"string"}},{"name":"min_wait_seconds","in":"query","description":"Minimum blocked wait to include","required":false,"schema":{"type":"number","format":"double"}},{"name":"limit","in":"query","description":"Max samples (default 100)","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Database blocking samples and root-blocker chains","category":"db_monitoring"},"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"}}},"/api/{org_id}/db_monitoring/databases":{"get":{"tags":["Traces"],"summary":"Database Monitoring: databases overview","description":"Per-(system, instance, namespace) rollup totals with calling services, merged with a bounded live tail over the un-rolled-up spans.","operationId":"GetDbMonitoringDatabases","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream","in":"query","description":"Trace stream filter","required":false,"schema":{"type":"string"}},{"name":"system","in":"query","description":"Database system filter","required":false,"schema":{"type":"string"}},{"name":"service","in":"query","description":"Calling service filter","required":false,"schema":{"type":"string"}},{"name":"baseline_start_time","in":"query","description":"Δ baseline window start (microseconds); returns baseline_hits in the same response","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"baseline_end_time","in":"query","description":"Δ baseline window end (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"include_breakdown","in":"query","description":"Also return the per-instance schema→service split as `breakdown` (one entry per instance), folded from the query_stats rows this window already read","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"},"x-o2-mcp":{"description":"List monitored databases with call totals, latency and calling services","category":"db_monitoring"}}},"/api/{org_id}/db_monitoring/deadlocks":{"get":{"tags":["Traces"],"summary":"Database Monitoring: deadlock events","description":"Canonical deadlock events with assembled participants and per-query-shape ranking.","operationId":"GetDbMonitoringDeadlocks","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream","in":"query","description":"Server-vantage logs stream: '_o2_dbm_server' (default) or 'dbm_server_logs'; any other value is a 400","required":false,"schema":{"type":"string"}},{"name":"system","in":"query","description":"Database engine filter","required":false,"schema":{"type":"string"}},{"name":"instance","in":"query","description":"Database instance filter","required":false,"schema":{"type":"string"}},{"name":"database","in":"query","description":"Database name filter (alias: namespace)","required":false,"schema":{"type":"string"}},{"name":"search","in":"query","description":"Free text over participant statements, applications and objects","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max raw records scanned (default 100)","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"},"x-o2-mcp":{"description":"Database deadlock events with participants","category":"db_monitoring"}}},"/api/{org_id}/db_monitoring/instance_metrics":{"get":{"tags":["Traces"],"summary":"Database Monitoring: instance health from the collector's metric streams","description":"Connection saturation, cache hit ratio, replication lag and deadlock counts for every database instance the org's collector reports on, swept from the metric streams in ONE query. The stream list and the SQL are server-constructed: this endpoint takes no stream or query parameter, so a `db_monitoring` grant buys database health columns and not general metrics access.","operationId":"GetDbMonitoringInstanceMetrics","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Database instance health: connections, cache hit ratio, replication lag, deadlocks","category":"db_monitoring"},"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"}}},"/api/{org_id}/db_monitoring/instances":{"get":{"tags":["Traces"],"summary":"Database Monitoring: every database instance the org knows","description":"The distinct (engine, instance) identities the server-vantage stream carries in the window, across EVERY feed — sessions, blocking, deadlocks, table stats and statement lists. Feeds the scope filter's instance picker, which must offer instances that have no rows on the current tab.","operationId":"GetDbMonitoringInstances","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream","in":"query","description":"Server-vantage logs stream: '_o2_dbm_server' (default) or 'dbm_server_logs'; any other value is a 400","required":false,"schema":{"type":"string"}},{"name":"system","in":"query","description":"Restrict to one engine","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"},"x-o2-mcp":{"description":"List database instances known to the org","category":"db_monitoring"}}},"/api/{org_id}/db_monitoring/queries":{"get":{"tags":["Traces"],"summary":"Database Monitoring: top queries","description":"Top query fingerprints with merged stats and _other remainder, merged with a bounded live tail over the un-rolled-up spans.","operationId":"GetDbMonitoringQueries","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream","in":"query","description":"Trace stream filter","required":false,"schema":{"type":"string"}},{"name":"system","in":"query","description":"Database system filter","required":false,"schema":{"type":"string"}},{"name":"instance","in":"query","description":"Database instance filter","required":false,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Database namespace filter","required":false,"schema":{"type":"string"}},{"name":"env","in":"query","description":"Environment filter","required":false,"schema":{"type":"string"}},{"name":"service","in":"query","description":"Calling service filter","required":false,"schema":{"type":"string"}},{"name":"stmt_class","in":"query","description":"Statement class filter (default 'query'; 'all' disables)","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","description":"Sort key (whitelist; default total_time_ns)","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max rows (default 100)","required":false,"schema":{"type":"integer","minimum":0}},{"name":"search","in":"query","description":"Free-text search over normalized query text","required":false,"schema":{"type":"string"}},{"name":"include_server_fallback","in":"query","description":"When the client-vantage answer is an exact zero, also run the database-reported list and return it as `server_fallback` (with per-section forbidden/read-failed flags)","required":false,"schema":{"type":"boolean"}},{"name":"fingerprint","in":"query","description":"Narrows the `server_fallback` section to one statement (the query-detail row lookup). Does not filter the client-vantage rows.","required":false,"schema":{"type":"string"}},{"name":"baseline_start_time","in":"query","description":"Δ baseline window start (microseconds); returns baseline_hits under the same filters and sort","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"baseline_end_time","in":"query","description":"Δ baseline window end (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List top database query fingerprints with call counts and latency","category":"db_monitoring"},"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"}}},"/api/{org_id}/db_monitoring/query/endpoints":{"get":{"tags":["Traces"],"summary":"Database Monitoring: calling endpoints for a query","description":"Aggregates raw DB spans for one fingerprint joined to their trace root spans, grouped per calling service + endpoint.","operationId":"GetDbMonitoringQueryEndpoints","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fingerprint","in":"query","description":"Query fingerprint (required)","required":true,"schema":{"type":"string"}},{"name":"stream","in":"query","description":"Trace stream name (required)","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"system","in":"query","description":"Database system — the rest of the join key; without it a fingerprint shared by two engines returns their callers fused into one row","required":false,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Database/schema — the rest of the join key (see `system`)","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max rows (default 50)","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Missing fingerprint/stream","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"},"x-o2-mcp":{"description":"Services and endpoints that call one database query fingerprint","category":"db_monitoring"}}},"/api/{org_id}/db_monitoring/query/history":{"get":{"tags":["Traces"],"summary":"Database Monitoring: per-query time series","description":"Per-window series for one query fingerprint, distinguishing below-top-N windows from zero, with bounded raw-span backfill and a live-tail point.","operationId":"GetDbMonitoringQueryHistory","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fingerprint","in":"query","description":"Query fingerprint (required)","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream","in":"query","description":"Trace stream filter","required":false,"schema":{"type":"string"}},{"name":"system","in":"query","description":"Database system filter","required":false,"schema":{"type":"string"}},{"name":"instance","in":"query","description":"Database instance filter","required":false,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Database namespace filter","required":false,"schema":{"type":"string"}},{"name":"env","in":"query","description":"Environment filter","required":false,"schema":{"type":"string"}},{"name":"service","in":"query","description":"Calling service filter","required":false,"schema":{"type":"string"}},{"name":"include_endpoints","in":"query","description":"Also return the FR-5 calling-endpoints aggregation as `endpoints`, run against the trace stream this handler already resolves","required":false,"schema":{"type":"boolean"}},{"name":"endpoints_limit","in":"query","description":"Max endpoint rows when include_endpoints is set (default 50, max 500)","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Missing fingerprint","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Time series of calls and latency for one database query fingerprint","category":"db_monitoring"},"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"}}},"/api/{org_id}/db_monitoring/query/insights":{"get":{"tags":["Traces"],"summary":"Database Monitoring: plans + server counters for a query","description":"The query-detail page's server-vantage pair in one response: `plans` (the /query/plans envelope) and `server_metrics` (the /query/server_metrics envelope), each nullable with its own read-failed flag.","operationId":"GetDbMonitoringQueryInsights","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fingerprint","in":"query","description":"Query fingerprint (required)","required":true,"schema":{"type":"string"}},{"name":"stream","in":"query","description":"Server-vantage logs stream: '_o2_dbm_server' (default) or 'dbm_server_logs'; any other value is a 400","required":false,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"engine","in":"query","description":"Server-metrics join key: database engine. Omit and `server_metrics` is null.","required":false,"schema":{"type":"string"}},{"name":"database","in":"query","description":"Server-metrics join key: database name. Required for engines whose records carry one.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Missing fingerprint","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Captured plans and server-side counters for one database query fingerprint","category":"db_monitoring"},"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"}}},"/api/{org_id}/db_monitoring/query/plans":{"get":{"tags":["Traces"],"summary":"Database Monitoring: captured query plans for a query","description":"Distinct GENERIC, NULL-BOUND EXPLAIN plans captured for one query fingerprint, with first and last seen. Not the plan Postgres executed, and carries no per-plan latency.","operationId":"GetDbMonitoringQueryPlans","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/db_monitoring/query/server_metrics":{"get":{"tags":["Traces"],"summary":"Database Monitoring: server-side counters for a query","description":"The database's OWN counters (pg_stat_statements / events_statements_summary_by_digest) for one query fingerprint, joined on (engine, database, fingerprint). Reports a MEAN and never a percentile, and withholds numbers when more than one instance is a candidate.","operationId":"GetDbMonitoringQueryServerMetrics","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fingerprint","in":"query","description":"Query fingerprint (required)","required":true,"schema":{"type":"string"}},{"name":"engine","in":"query","description":"Database engine (required)","required":true,"schema":{"type":"string"}},{"name":"database","in":"query","description":"Database name. Required for engines whose records carry one.","required":false,"schema":{"type":"string"}},{"name":"stream","in":"query","description":"Server-vantage logs stream: '_o2_dbm_server' (default) or 'dbm_server_logs'; any other value is a 400","required":false,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"}}},"/api/{org_id}/db_monitoring/samples":{"get":{"tags":["Traces"],"summary":"Database Monitoring: slowest database calls in the window","description":"The slowest raw DB spans across all systems, instances and queries in the window, with trace ids for pivoting. Client-observed, completed calls only.","operationId":"GetDbMonitoringSamples","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream","in":"query","description":"Trace stream filter","required":false,"schema":{"type":"string"}},{"name":"system","in":"query","description":"Database system filter","required":false,"schema":{"type":"string"}},{"name":"instance","in":"query","description":"Database instance filter","required":false,"schema":{"type":"string"}},{"name":"namespace","in":"query","description":"Database/schema filter","required":false,"schema":{"type":"string"}},{"name":"env","in":"query","description":"Deployment environment filter","required":false,"schema":{"type":"string"}},{"name":"service","in":"query","description":"Calling service filter","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max spans (default 100, max 500)","required":false,"schema":{"type":"integer","minimum":0}},{"name":"fingerprint","in":"query","description":"Scope the ranking to one query fingerprint — the slowest executions of THAT statement","required":false,"schema":{"type":"string"}},{"name":"include_server_fallback","in":"query","description":"When the client-vantage answer is an exact zero, also run the database-reported list and return it as `server_fallback`","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Slowest database calls in a window, with trace ids","category":"db_monitoring"},"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"}}},"/api/{org_id}/db_monitoring/server_queries":{"get":{"tags":["Traces"],"summary":"Database Monitoring: statements as reported by the databases themselves","description":"Per-statement counters (pg_stat_statements / events_statements_summary_by_digest) aggregated over the window, ranked by call count. Server-vantage: measured inside the database across every client, disjoint from the trace-derived /queries list. Reports a MEAN and never a percentile.","operationId":"GetDbMonitoringServerQueries","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream","in":"query","description":"Server-vantage logs stream: '_o2_dbm_server' (default) or 'dbm_server_logs'; any other value is a 400","required":false,"schema":{"type":"string"}},{"name":"system","in":"query","description":"Database engine filter","required":false,"schema":{"type":"string"}},{"name":"instance","in":"query","description":"Database instance filter","required":false,"schema":{"type":"string"}},{"name":"database","in":"query","description":"Database name filter (alias: namespace)","required":false,"schema":{"type":"string"}},{"name":"fingerprint","in":"query","description":"Narrow to one statement — the query-detail row lookup on a deployment with no traced traffic. Omit for the ranked browse list.","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max statements returned (default 50, cap 200)","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Statements ranked by the database's own counters (pg_stat_statements etc.)","category":"db_monitoring"},"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"}}},"/api/{org_id}/db_monitoring/server_samples":{"get":{"tags":["Traces"],"summary":"Database Monitoring: slowest executions captured by the database's own logging","description":"Single executions with their measured in-engine durations — from log_min_duration_statement completed-statement lines and Postgres auto_explain records — ranked slowest first. A threshold-filtered capture: rows describe only the executions the database chose to log.","operationId":"GetDbMonitoringServerSamples","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream","in":"query","description":"Server-vantage logs stream: '_o2_dbm_server' or 'dbm_server_logs'; any other value is a 400. When absent BOTH are read and merged","required":false,"schema":{"type":"string"}},{"name":"system","in":"query","description":"Database engine filter","required":false,"schema":{"type":"string"}},{"name":"instance","in":"query","description":"Database instance filter","required":false,"schema":{"type":"string"}},{"name":"database","in":"query","description":"Database name filter (alias: namespace)","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max executions returned (default 100, cap 500)","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Slowest executions captured by the database's own logging","category":"db_monitoring"},"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"}}},"/api/{org_id}/db_monitoring/table_health":{"get":{"tags":["Traces"],"summary":"Database Monitoring: table size, bloat and vacuum state","description":"Newest snapshot per relation from the table-stats server-vantage feed (pg_table_stats / mysql_table_stats / mariadb_table_stats). Scan and vacuum counters are LIFETIME totals since the last statistics reset; tuple counts and bloat percentage are planner estimates. Postgres, MySQL and MariaDB.","operationId":"GetDbMonitoringTableHealth","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream","in":"query","description":"Server-vantage logs stream: '_o2_dbm_server' (default) or 'dbm_server_logs'; any other value is a 400","required":false,"schema":{"type":"string"}},{"name":"system","in":"query","description":"Database engine filter","required":false,"schema":{"type":"string"}},{"name":"instance","in":"query","description":"Database instance filter","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max relations returned (default 100)","required":false,"schema":{"type":"integer","minimum":0}},{"name":"include_indexes","in":"query","description":"Also return the index-health section (index_hits, disclosures) in the same response","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"DB Monitoring","operation":"list"},"x-o2-mcp":{"description":"Database table size, bloat and vacuum state","category":"db_monitoring"}}},"/api/{org_id}/discovery":{"get":{"tags":["Discovery"],"summary":"List unhealthy scored LLM targets","description":"Resolves the latest score evaluation and score dimension, applies the current active Score Config thresholds, derives issue or multiple quality, applies visible queue memberships, returns exact totals for every native scope, pages the requested scope, and hydrates scope-specific context for that page.","operationId":"ListDiscoveryItems","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"scope","in":"query","description":"Target scope: `span`, `trace`, or `session`.","required":true,"schema":{"type":"string"},"example":"trace"},{"name":"queue_status","in":"query","description":"Queue membership filter. Defaults to `not_enqueued`; also supports\n`enqueued`, `pending`, `reviewed`, and `all`.","required":false,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Inclusive target timestamp lower bound, in microseconds.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"Exclusive target timestamp upper bound, in microseconds.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"from","in":"query","description":"Zero-based result offset. Defaults to 0.","required":false,"schema":{"type":"integer","minimum":0}},{"name":"size","in":"query","description":"Page size from 1 through 100. Defaults to 20.","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["list","total","scopeTotals","from","size","hasMore"],"properties":{"from":{"type":"integer","minimum":0},"hasMore":{"type":"boolean"},"list":{"type":"array","items":{"$ref":"#/components/schemas/DiscoveryItemResponseBody"}},"scopeTotals":{"$ref":"#/components/schemas/DiscoveryScopeTotalsResponseBody"},"size":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0}}}}}},"400":{"description":"Invalid discovery request or search query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Unable to resolve visible Annotation Queues","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"408":{"description":"Discovery query timed out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"429":{"description":"Discovery query cancelled or rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Discovery query failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"503":{"description":"Discovery query service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Discovery","operation":"list"}}},"/api/{org_id}/domain_management":{"get":{"tags":["Domain Management"],"summary":"Get domain management configuration","description":"Retrieves the current domain management configuration for custom domain settings and SSL certificate management. Only accessible by the meta organization for security and control purposes. Returns domain configuration including DNS settings, certificate status, and routing configurations for enterprise domain management.","operationId":"GetDomainManagementConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name (must be meta org)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainManagementResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Settings","operation":"list"}},"put":{"tags":["Domain Management"],"summary":"Configure domain management settings","description":"Updates the domain management configuration for custom domain settings, SSL certificates, and DNS routing. Only accessible by the meta organization for security and administrative control. Allows configuration of custom domains, certificate management, and traffic routing for enterprise deployments with custom branding and domain requirements.","operationId":"SetDomainManagementConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name (must be meta org)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Domain management configuration","content":{"application/json":{"schema":{"type":"object","description":"Request body for creating/updating domain management configuration","required":["domains"],"properties":{"blocked_domains":{"type":"array","items":{"type":"string"},"description":"Whole domains to block (external SSO identities only)."},"blocked_emails":{"type":"array","items":{"type":"string"},"description":"Exact emails to block from all access (external SSO identities only). Block wins over\nallow."},"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainConfigRequest"},"description":"List of domain configurations"},"enabled":{"type":"boolean","description":"Whether domain restrictions are enabled"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainOperationResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/enable_org_storage":{"put":{"tags":["Organizations"],"summary":"Enable Org storage for an org","description":"Enables org level storage for an org.","operationId":"EnableOrgStorage","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Enable org storage request","content":{"application/json":{"schema":{"type":"object","required":["org_id"],"properties":{"org_id":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Organizations","operation":"update"}}},"/api/{org_id}/enrichment_tables/status":{"get":{"tags":["Functions"],"summary":"Get all enrichment table statuses for an organization","description":"Get the status of all enrichment tables (both file and URL-based) for an organization in a single request","operationId":"GetAllEnrichmentTableStatuses","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Statuses retrieved","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/EnrichmentTableUrlJob"}},"propertyNames":{"type":"string"}}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"type":"string"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error","content":{"text/plain":{"schema":{"type":"string"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Enrichment Table","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/enrichment_tables/{table_name}":{"post":{"tags":["Functions"],"summary":"Create or update enrichment table","description":"Creates a new enrichment table or updates existing table data for log enrichment","operationId":"CreateUpdateEnrichmentTable","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"table_name","in":"path","description":"Table name","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Saved enrichment table","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create/update enrichment table","category":"enrichment"},"x-o2-ratelimit":{"module":"Enrichment Table","operation":"create"}}},"/api/{org_id}/enrichment_tables/{table_name}/url":{"post":{"tags":["Functions"],"summary":"Create enrichment table from URL","description":"Creates a new enrichment table by fetching CSV data from a public URL. The process runs asynchronously in the background.","operationId":"CreateEnrichmentTableFromUrl","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"table_name","in":"path","description":"Table name","required":true,"schema":{"type":"string"}},{"name":"append","in":"query","description":"Whether to append data to existing table (default: false)","required":false,"schema":{"type":"boolean"}}],"requestBody":{"description":"URL for the CSV file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichmentTableUrlRequest"}}},"required":true},"responses":{"202":{"description":"Job created successfully","content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request","content":{"text/plain":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error","content":{"text/plain":{"schema":{"type":"string"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create table from URL","category":"enrichment"},"x-o2-ratelimit":{"module":"Enrichment Table","operation":"create"}}},"/api/{org_id}/eval_jobs":{"get":{"tags":["EvalJobs"],"summary":"List online eval jobs","description":"Lists online eval jobs in the organization. Optionally filterable by status.","operationId":"ListEvalJobs","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","description":"Filter by status (draft, active, paused, archived)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for listing Online Eval Jobs.","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/EvalJobResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"EvalJobs","operation":"list"}},"post":{"tags":["EvalJobs"],"summary":"Create online eval job (draft)","description":"Creates a new online eval job in draft state. Activate it later via the activate endpoint to begin reconciliation.","operationId":"CreateEvalJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Eval job payload","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for creating or updating an Online Eval Job.","required":["name","stream","streamType","filterCondition","scorers","samplingMode","samplingValue"],"properties":{"description":{"type":["string","null"]},"filterCondition":{},"inputMapping":{"type":["object","null"]},"name":{"type":"string"},"samplingMode":{"type":"string"},"samplingValue":{},"scorers":{"type":"array","items":{"$ref":"#/components/schemas/ScorerRefForm"}},"sessionConfig":{"type":["object","null"]},"spanSelectorBindings":{"type":"object"},"spanSelectors":{"type":"array","items":{"type":"object"}},"stream":{"type":"string"},"streamType":{"type":"string"},"targetScope":{"type":"string"},"traceConfig":{"type":["object","null"]}}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a single Online Eval Job.","required":["id","orgId","name","stream","streamType","targetScope","filterCondition","scorers","spanSelectors","spanSelectorBindings","samplingMode","samplingValue","status","version","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"filterCondition":{},"health":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EvalJobHealthBody","description":"Measured health; absent for jobs that are not active or paused, or not yet measured."}]},"id":{"type":"string"},"inputMapping":{"type":["object","null"]},"name":{"type":"string"},"orgId":{"type":"string"},"pipelineId":{"type":["string","null"]},"samplingMode":{"type":"string"},"samplingValue":{},"scorers":{"type":"array","items":{"$ref":"#/components/schemas/ScorerRefForm"}},"sessionConfig":{"type":["object","null"]},"spanSelectorBindings":{"type":"object"},"spanSelectors":{"type":"array","items":{"type":"object"}},"status":{"type":"string"},"stream":{"type":"string"},"streamType":{"type":"string"},"targetScope":{"type":"string"},"traceConfig":{"type":["object","null"]},"updatedAt":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int32"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"EvalJobs","operation":"create"}}},"/api/{org_id}/eval_jobs/{job_id}":{"get":{"tags":["EvalJobs"],"summary":"Get eval job by id","description":"Retrieves a single online eval job by id.","operationId":"GetEvalJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Eval job id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a single Online Eval Job.","required":["id","orgId","name","stream","streamType","targetScope","filterCondition","scorers","spanSelectors","spanSelectorBindings","samplingMode","samplingValue","status","version","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"filterCondition":{},"health":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EvalJobHealthBody","description":"Measured health; absent for jobs that are not active or paused, or not yet measured."}]},"id":{"type":"string"},"inputMapping":{"type":["object","null"]},"name":{"type":"string"},"orgId":{"type":"string"},"pipelineId":{"type":["string","null"]},"samplingMode":{"type":"string"},"samplingValue":{},"scorers":{"type":"array","items":{"$ref":"#/components/schemas/ScorerRefForm"}},"sessionConfig":{"type":["object","null"]},"spanSelectorBindings":{"type":"object"},"spanSelectors":{"type":"array","items":{"type":"object"}},"status":{"type":"string"},"stream":{"type":"string"},"streamType":{"type":"string"},"targetScope":{"type":"string"},"traceConfig":{"type":["object","null"]},"updatedAt":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int32"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"EvalJobs","operation":"get"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["EvalJobs"],"summary":"Update eval job","description":"Updates the editable fields of an online eval job and bumps its version. The associated pipeline is re-reconciled if the job is active.","operationId":"UpdateEvalJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Eval job id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Eval job payload","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for creating or updating an Online Eval Job.","required":["name","stream","streamType","filterCondition","scorers","samplingMode","samplingValue"],"properties":{"description":{"type":["string","null"]},"filterCondition":{},"inputMapping":{"type":["object","null"]},"name":{"type":"string"},"samplingMode":{"type":"string"},"samplingValue":{},"scorers":{"type":"array","items":{"$ref":"#/components/schemas/ScorerRefForm"}},"sessionConfig":{"type":["object","null"]},"spanSelectorBindings":{"type":"object"},"spanSelectors":{"type":"array","items":{"type":"object"}},"stream":{"type":"string"},"streamType":{"type":"string"},"targetScope":{"type":"string"},"traceConfig":{"type":["object","null"]}}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a single Online Eval Job.","required":["id","orgId","name","stream","streamType","targetScope","filterCondition","scorers","spanSelectors","spanSelectorBindings","samplingMode","samplingValue","status","version","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"filterCondition":{},"health":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EvalJobHealthBody","description":"Measured health; absent for jobs that are not active or paused, or not yet measured."}]},"id":{"type":"string"},"inputMapping":{"type":["object","null"]},"name":{"type":"string"},"orgId":{"type":"string"},"pipelineId":{"type":["string","null"]},"samplingMode":{"type":"string"},"samplingValue":{},"scorers":{"type":"array","items":{"$ref":"#/components/schemas/ScorerRefForm"}},"sessionConfig":{"type":["object","null"]},"spanSelectorBindings":{"type":"object"},"spanSelectors":{"type":"array","items":{"type":"object"}},"status":{"type":"string"},"stream":{"type":"string"},"streamType":{"type":"string"},"targetScope":{"type":"string"},"traceConfig":{"type":["object","null"]},"updatedAt":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int32"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"EvalJobs","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["EvalJobs"],"summary":"Delete eval job","description":"Deletes the online eval job and its associated evaluation pipeline.","operationId":"DeleteEvalJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Eval job id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"EvalJobs","operation":"delete"}}},"/api/{org_id}/eval_jobs/{job_id}/activate":{"post":{"tags":["EvalJobs"],"summary":"Activate eval job","description":"Transitions an eval job to the active state. Allowed from draft or paused.","operationId":"ActivateEvalJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Eval job id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for status-transition endpoints (activate/pause/resume/archive).","required":["id","status","updatedAt"],"properties":{"id":{"type":"string"},"pipelineId":{"type":["string","null"]},"status":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"}}}}}},"400":{"description":"Invalid state transition","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"EvalJobs","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/eval_jobs/{job_id}/archive":{"post":{"tags":["EvalJobs"],"summary":"Archive eval job","description":"Archives the eval job. Archived jobs are retained for audit but no longer evaluated.","operationId":"ArchiveEvalJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Eval job id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for status-transition endpoints (activate/pause/resume/archive).","required":["id","status","updatedAt"],"properties":{"id":{"type":"string"},"pipelineId":{"type":["string","null"]},"status":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"EvalJobs","operation":"create"}}},"/api/{org_id}/eval_jobs/{job_id}/manual_eval":{"post":{"tags":["EvalJobs"],"summary":"Manually evaluate a target","description":"Creates durable evaluation tasks for an explicit target, bypassing automatic target sampling. The worker hydrates source telemetry using the request's authoritative microsecond time range.","operationId":"ManualEvalJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Eval job id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Manual evaluation target payload","content":{"application/json":{"schema":{"type":"object","description":"Request body for manually evaluating an explicit target with a job's scorers.","required":["targetId","startTime","endTime"],"properties":{"endTime":{"type":"integer","format":"int64","description":"Exclusive source telemetry window end, in microseconds."},"reason":{"type":["string","null"]},"sessionId":{"type":["string","null"]},"spanId":{"type":["string","null"]},"startTime":{"type":"integer","format":"int64","description":"Inclusive source telemetry window start, in microseconds."},"targetId":{"type":"string"},"traceId":{"type":["string","null"]},"variables":{"type":"object"}}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"Response body for manual evaluation task creation.","required":["jobId","targetScope","targetId","tasksCreated"],"properties":{"jobId":{"type":"string"},"targetId":{"type":"string"},"targetScope":{"type":"string"},"tasksCreated":{"type":"integer","minimum":0}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"EvalJobs","operation":"create"}}},"/api/{org_id}/eval_jobs/{job_id}/pause":{"post":{"tags":["EvalJobs"],"summary":"Pause eval job","description":"Transitions an active eval job to the paused state.","operationId":"PauseEvalJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Eval job id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for status-transition endpoints (activate/pause/resume/archive).","required":["id","status","updatedAt"],"properties":{"id":{"type":"string"},"pipelineId":{"type":["string","null"]},"status":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"}}}}}},"400":{"description":"Invalid state transition","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"EvalJobs","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/eval_jobs/{job_id}/resume":{"post":{"tags":["EvalJobs"],"summary":"Resume eval job","description":"Resumes a paused eval job by transitioning it back to active.","operationId":"ResumeEvalJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Eval job id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for status-transition endpoints (activate/pause/resume/archive).","required":["id","status","updatedAt"],"properties":{"id":{"type":"string"},"pipelineId":{"type":["string","null"]},"status":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"}}}}}},"400":{"description":"Invalid state transition","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"EvalJobs","operation":"create"}}},"/api/{org_id}/experiments":{"get":{"tags":["Experiments"],"operationId":"ListExperiments","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"includeSummary","in":"query","required":false,"schema":{"type":["boolean","null"]}},{"name":"datasetId","in":"query","required":false,"schema":{"type":["string","null"]}},{"name":"promptId","in":"query","required":false,"schema":{"type":["string","null"]}},{"name":"promptVersion","in":"query","required":false,"schema":{"type":["integer","null"],"format":"int32"}},{"name":"contentHash","in":"query","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentViewResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Experiments","operation":"list"}},"post":{"tags":["Experiments"],"operationId":"CreateExperiment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["name","datasetId","datasetVersion","task","scorers"],"properties":{"confirmCostEstimate":{"type":"boolean","description":"Acknowledges a cost estimate above the organization's warning\nthreshold. Without it, such a request is refused with `412`."},"datasetFilter":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DatasetSnapshotFilterBody"}]},"datasetId":{"type":"string"},"datasetVersion":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"idempotencyKey":{"type":["string","null"]},"metadata":{},"name":{"type":"string"},"scorers":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentScorerRefBody"}},"task":{"$ref":"#/components/schemas/ExperimentTaskBody"},"trialCount":{"type":"integer","format":"int32","description":"Trials per Dataset Case. Omitted means one, which is the contract's\ndefault and the only value a caller who has not thought about\ndispersion should get.","minimum":0}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["experiment","preview","created"],"properties":{"created":{"type":"boolean"},"experiment":{"$ref":"#/components/schemas/ExperimentResponseBody"},"preview":{"$ref":"#/components/schemas/ExperimentPreviewResponseBody"}}}}}},"400":{"description":"Invalid Experiment definition","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"A referenced Dataset, Scorer, Prompt, Provider or Remote Task is not accessible","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Idempotency conflict","content":{"application/json":{"schema":{"default":null}}}},"412":{"description":"Cost estimate is above the warning threshold and was not confirmed","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Experiments","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/experiments/compare":{"get":{"tags":["Experiments"],"summary":"Compare two Experiments over the honest intersection of their pinned rows.","operationId":"CompareExperiments","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"baselineId","in":"query","required":true,"schema":{"type":"string"}},{"name":"candidateId","in":"query","required":true,"schema":{"type":"string"}},{"name":"threshold","in":"query","required":false,"schema":{"type":["number","null"],"format":"double"}},{"name":"outcomeDimensions","in":"query","description":"Comma-separated dimension IDs; omitted selects every eligible Score column (cost and\nlatency gate only when listed), empty selects none.","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Baseline/candidate comparison","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentComparisonResponseBody"}}}},"400":{"description":"Invalid threshold, outcome dimensions, or cross-dataset comparison"},"403":{"description":"One or both Experiments are not accessible"},"404":{"description":"One or both Experiments were not found"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Experiments","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/experiments/preview":{"post":{"tags":["Experiments"],"operationId":"PreviewExperiment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"sampleSize","in":"query","required":false,"schema":{"type":["integer","null"],"minimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["name","datasetId","datasetVersion","task","scorers"],"properties":{"confirmCostEstimate":{"type":"boolean","description":"Acknowledges a cost estimate above the organization's warning\nthreshold. Without it, such a request is refused with `412`."},"datasetFilter":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DatasetSnapshotFilterBody"}]},"datasetId":{"type":"string"},"datasetVersion":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"idempotencyKey":{"type":["string","null"]},"metadata":{},"name":{"type":"string"},"scorers":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentScorerRefBody"}},"task":{"$ref":"#/components/schemas/ExperimentTaskBody"},"trialCount":{"type":"integer","format":"int32","description":"Trials per Dataset Case. Omitted means one, which is the contract's\ndefault and the only value a caller who has not thought about\ndispersion should get.","minimum":0}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["datasetId","datasetVersion","rowCount","trialCount","slotCount","pinnedScorers","applicability","sampleSlots"],"properties":{"applicability":{"$ref":"#/components/schemas/ExperimentApplicabilityPreviewBody"},"costEstimate":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentCostEstimateBody","description":"Order-of-magnitude cost of running this plan, and whether creating it\nrequires `confirmCostEstimate`."}]},"datasetId":{"type":"string"},"datasetVersion":{"type":"integer","format":"int64"},"pinnedScorers":{"type":"array","items":{"$ref":"#/components/schemas/PinnedExperimentScorerBody"}},"rowCount":{"type":"integer","format":"int64","minimum":0},"sampleSlots":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentSlotBody"}},"slotCount":{"type":"integer","format":"int64","minimum":0},"trialCount":{"type":"integer","format":"int32","minimum":0}}}}}},"400":{"description":"Invalid Experiment definition","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"A referenced Dataset, Scorer, Prompt, Provider or Remote Task is not accessible","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Dataset or scorer not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Experiments","operation":"create"}}},"/api/{org_id}/experiments/{experiment_id}":{"get":{"tags":["Experiments"],"operationId":"GetExperiment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}},{"name":"sampleSize","in":"query","required":false,"schema":{"type":["integer","null"],"minimum":0}},{"name":"resultPage","in":"query","required":false,"schema":{"type":["integer","null"],"minimum":0}},{"name":"resultPageSize","in":"query","required":false,"schema":{"type":["integer","null"],"minimum":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["experiment","preview","results"],"properties":{"experiment":{"$ref":"#/components/schemas/ExperimentViewResponseBody"},"preview":{"$ref":"#/components/schemas/ExperimentPreviewResponseBody"},"results":{"$ref":"#/components/schemas/ExperimentResultsResponseBody"}}}}}},"404":{"description":"Experiment not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Experiments","operation":"get"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Experiments"],"summary":"Delete an Experiment early and start its asynchronous cleanup.","operationId":"DeleteExperiment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Experiment marked unavailable; cleanup started"},"403":{"description":"Experiment is not accessible"},"404":{"description":"Experiment not found"},"409":{"description":"Experiment lifecycle changed concurrently"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Experiments","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/experiments/{experiment_id}/baseline":{"put":{"tags":["Experiments"],"summary":"Make this Experiment the organization's Baseline for its Dataset.","operationId":"SetExperimentBaseline","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Baseline moved to this Experiment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentBaselineResponseBody"}}}},"403":{"description":"Experiment is not accessible"},"404":{"description":"Experiment not found"},"409":{"description":"Experiment is not eligible to be a Baseline"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Experiments","operation":"update"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Experiments"],"summary":"Give up the Baseline without choosing a replacement.","operationId":"ClearExperimentBaseline","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Experiment is no longer the Baseline","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResponseBody"}}}},"403":{"description":"Experiment is not accessible"},"404":{"description":"Experiment not found"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true,"requires_confirmation":true},"x-o2-ratelimit":{"module":"Experiments","operation":"delete"}}},"/api/{org_id}/experiments/{experiment_id}/cancel":{"post":{"tags":["Experiments"],"summary":"Cancel a running Experiment. Repeating the request after cancellation is a no-op.","operationId":"CancelExperiment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Experiment cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResponseBody"}}}},"404":{"description":"Experiment not found"},"409":{"description":"Invalid or concurrent lifecycle transition"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Experiments","operation":"create"}}},"/api/{org_id}/experiments/{experiment_id}/clone":{"post":{"tags":["Experiments"],"summary":"Clone a sealed Experiment into a new pending definition with isolated\nevidence, applying any pin the request overrides.","operationId":"CloneExperiment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Sealed (completed or cancelled) source Experiment ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"Every pin a clone may change, in the same shape the create body uses.\n\nA clone inherits its source's definition, so every field is optional: an\nabsent one keeps what the source pinned, and an empty body is still a\nverbatim copy. `description`, `datasetFilter` and `metadata` are nullable on\nan Experiment, so an explicit `null` clears them rather than meaning\n\"absent\".","properties":{"confirmCostEstimate":{"type":"boolean","description":"Acknowledges a cost estimate above the organization's warning\nthreshold. Without it, such a request is refused with `412`."},"datasetFilter":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DatasetSnapshotFilterBody"}]},"datasetId":{"type":["string","null"]},"datasetVersion":{"type":["integer","null"],"format":"int64"},"description":{"type":["string","null"]},"idempotencyKey":{"type":["string","null"],"description":"Makes a retried clone replay its first result instead of running the\nExperiment a second time."},"metadata":{},"name":{"type":["string","null"],"description":"Defaults to `<source name> (copy)`."},"scorers":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ExperimentScorerRefBody"}},"task":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentTaskBody"}]},"trialCount":{"type":["integer","null"],"format":"int32","description":"Trials per Dataset Case, between 1 and the configured maximum.","minimum":0}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Pending clone created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResponseBody"}}}},"400":{"description":"Invalid Experiment definition after overrides","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"A referenced Dataset, Scorer, Prompt, Provider or Remote Task is not accessible","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Experiment, Dataset or scorer not found"},"409":{"description":"Only sealed Experiments can be cloned, or the idempotency key describes a different clone"},"412":{"description":"Cost estimate is above the warning threshold and was not confirmed","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Experiments","operation":"create"}}},"/api/{org_id}/experiments/{experiment_id}/finalize":{"post":{"tags":["Experiments"],"summary":"Conclude a client-driven Experiment","description":"Sets the Experiment completed only when every Slot has a terminal execution record. Otherwise it returns 409 naming how many Slots are still missing.","operationId":"FinalizeExperiment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","orgId","name","datasetId","datasetVersion","datasetWriteVersion","task","scorers","trialCount","executionStatus","deadlineAt","lifecycleVersion","retryCount","isBaseline","createdBy","createdAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"datasetFilter":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DatasetSnapshotFilterBody"}]},"datasetId":{"type":"string"},"datasetName":{"type":["string","null"],"description":"Resolved from the Dataset the experiment pinned, so callers do not have\nto fetch the Dataset list just to label a run. None when it was deleted."},"datasetVersion":{"type":"integer","format":"int64","description":"The pinned `global_version`: the row cut every Slot reads."},"datasetWriteVersion":{"type":"integer","format":"int64","description":"The Dataset version to display for that pin: one per write request."},"deadlineAt":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"executionCompletedAt":{"type":["integer","null"],"format":"int64"},"executionStatus":{"$ref":"#/components/schemas/ExperimentStatusBody"},"executionStatusReason":{"type":["string","null"]},"id":{"type":"string"},"idempotencyKey":{"type":["string","null"]},"isBaseline":{"type":"boolean","description":"The organization's Baseline for this Dataset. At most one Experiment per\norganization and Dataset carries it."},"lifecycleVersion":{"type":"integer","format":"int64"},"metadata":{},"name":{"type":"string"},"orgId":{"type":"string"},"promptContentHash":{"type":["string","null"]},"promptId":{"type":["string","null"]},"promptName":{"type":["string","null"]},"promptVersion":{"type":["integer","null"],"format":"int32"},"retryCount":{"type":"integer","format":"int32","minimum":0},"scorers":{"type":"array","items":{"$ref":"#/components/schemas/PinnedExperimentScorerBody"}},"task":{"$ref":"#/components/schemas/ExperimentTaskBody"},"trialCount":{"type":"integer","format":"int32","minimum":0}}}}}},"404":{"description":"Experiment not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Slots are still missing a terminal execution record","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Experiments","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/experiments/{experiment_id}/records":{"post":{"tags":["Experiments"],"summary":"Report client-executed Slot results and self-reported Scores","description":"Each record and Score is validated on its own and reported on its own, so a valid part succeeds when another part of the same batch fails. Every record must repeat the Experiment's taskFingerprint. Re-sending an already accepted part is harmless; after the Experiment is sealed only an exact duplicate is accepted, and anything new or changed conflicts.","operationId":"SubmitExperimentRecords","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"records":{"type":"array","items":{"$ref":"#/components/schemas/ClientExecutionRecordBody"}},"scores":{"type":"array","items":{"$ref":"#/components/schemas/ClientScoreBody"}}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["records","scores","acceptedRecords","rejectedRecords","acceptedScores","rejectedScores"],"properties":{"acceptedRecords":{"type":"integer","minimum":0},"acceptedScores":{"type":"integer","minimum":0},"records":{"type":"array","items":{"$ref":"#/components/schemas/PartResultBody"}},"rejectedRecords":{"type":"integer","minimum":0},"rejectedScores":{"type":"integer","minimum":0},"scores":{"type":"array","items":{"$ref":"#/components/schemas/PartResultBody"}}}}}}},"400":{"description":"Batch too large, or the Experiment does not run an SDK Task","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Experiment not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"The Experiment is sealed and a submitted part is new or changed","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Experiments","operation":"create"}}},"/api/{org_id}/experiments/{experiment_id}/retry":{"post":{"tags":["Experiments"],"summary":"Retry an Experiment that failed. Repeating a successful retry request is a no-op.","operationId":"RetryExperiment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Failed Experiment returned to running","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResponseBody"}}}},"403":{"description":"A referenced Dataset, Scorer, Prompt, Provider or Remote Task is not accessible"},"404":{"description":"Experiment not found"},"409":{"description":"Invalid or concurrent lifecycle transition"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Experiments","operation":"create"}}},"/api/{org_id}/experiments/{experiment_id}/rows":{"get":{"tags":["Experiments"],"summary":"List pinned Dataset cases with trial-level evidence reduced to row aggregates.","operationId":"ListExperimentResultRows","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"sort","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ExperimentResultRowSortBody"}},{"name":"highDispersionOnly","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Pinned result rows","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentResultRowPageResponseBody"}}}},"400":{"description":"Invalid pagination"},"403":{"description":"Experiment is not accessible"},"404":{"description":"Experiment not found"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Experiments","operation":"list"}}},"/api/{org_id}/experiments/{experiment_id}/rows/{row_id}":{"get":{"tags":["Experiments"],"summary":"Load one pinned dataset row and every trial's current execution and score evidence.","operationId":"GetExperimentRowDetail","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}},{"name":"row_id","in":"path","description":"Pinned dataset row ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Pinned row detail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperimentRowDetailResponseBody"}}}},"403":{"description":"Experiment is not accessible"},"404":{"description":"Experiment or pinned row not found"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Experiments","operation":"get"}}},"/api/{org_id}/experiments/{experiment_id}/rows/{row_id}/trials/{trial_index}/retry":{"post":{"tags":["Experiments"],"summary":"Retry one selected slot of a failed Experiment.","operationId":"RetryExperimentSlot","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}},{"name":"row_id","in":"path","description":"Pinned dataset row ID","required":true,"schema":{"type":"string"}},{"name":"trial_index","in":"path","description":"Zero-based trial index","required":true,"schema":{"type":"integer","format":"int32","minimum":0}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryExperimentSlotRequestBody"}}},"required":true},"responses":{"202":{"description":"Selected slot retry queued"},"400":{"description":"Invalid idempotency key"},"403":{"description":"Experiment or one of its references is not accessible"},"404":{"description":"Experiment, row, or trial not found"},"409":{"description":"Experiment lifecycle, active slot retry, or idempotency conflict"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Experiments","operation":"create"}}},"/api/{org_id}/experiments/{experiment_id}/slots":{"get":{"tags":["Experiments"],"summary":"Page through the Experiment's immutable Slot set","description":"Returns the exact Slots the Experiment pinned at creation, in cohort order, with the Dataset input, expected output, and metadata each one carries. A client-driven run iterates this rather than re-deriving the set from the Dataset, where the snapshot filter could drift.","operationId":"ListExperimentSlots","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"experiment_id","in":"path","description":"Experiment ID","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":["integer","null"],"minimum":0}},{"name":"size","in":"query","required":false,"schema":{"type":["integer","null"],"minimum":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"One page of the immutable Slot set, in pinned cohort order.","required":["slots","total","from","size","hasMore"],"properties":{"from":{"type":"integer","minimum":0},"hasMore":{"type":"boolean"},"size":{"type":"integer","minimum":0},"slots":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentSlotBody"}},"total":{"type":"integer","format":"int64","minimum":0}}}}}},"400":{"description":"Invalid page size","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Experiment not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Experiments","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/extend_trial_period":{"put":{"tags":["Organizations"],"summary":"Extend organization trial period","description":"Extends the trial period for a specified organization to a new end date. This administrative endpoint allows extending trial periods for organizations, giving them more time to evaluate the service before requiring a paid subscription.","operationId":"ExtendTrialPeriod","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Extend free trial request","content":{"application/json":{"schema":{"type":"object","required":["org_id","new_end_date"],"properties":{"new_end_date":{"type":"integer","format":"int64"},"org_id":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"text/plain":{"schema":{"type":"string"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/external_contract":{"put":{"tags":["Organizations"],"summary":"Extend an external contract end date","operationId":"ExtendExternalContract","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Extend external contract request","content":{"application/json":{"schema":{"type":"object","required":["org_id","new_end_date"],"properties":{"new_end_date":{"type":"integer","format":"int64"},"org_id":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"update"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Organizations"],"summary":"Create an external contract subscription for an organization","operationId":"CreateExternalContract","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Create external contract request","content":{"application/json":{"schema":{"type":"object","required":["org_id","end_date"],"properties":{"end_date":{"type":"integer","format":"int64"},"org_id":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Organizations","operation":"create"}}},"/api/{org_id}/external_contract/{target_org_id}":{"delete":{"tags":["Organizations"],"summary":"Revoke an external contract","operationId":"RevokeExternalContract","parameters":[{"name":"org_id","in":"path","description":"Meta organization id","required":true,"schema":{"type":"string"}},{"name":"target_org_id","in":"path","description":"Target organization id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/fleet/audit":{"get":{"tags":["Fleet"],"summary":"One page of the fleet audit trail, newest first, from the last 30 days or a period","operationId":"ListFleetAudit","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Epoch milliseconds; defaults to 30 days before `to`.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"to","in":"query","description":"Epoch milliseconds, exclusive; defaults to now.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"fleet","in":"query","description":"Only this fleet's events, which leaves out org-wide ones.","required":false,"schema":{"type":"string"}},{"name":"module","in":"query","required":false,"schema":{"$ref":"#/components/schemas/AuditModule"}},{"name":"q","in":"query","description":"Matches the actor or the target, ignoring case.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditList"}}}},"400":{"description":"Invalid period or filter","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"list"}}},"/api/{org_id}/fleet/collectors":{"get":{"tags":["Fleet"],"summary":"List the org's collectors, or one fleet's, one page at a time","operationId":"ListFleetCollectors","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fleet","in":"query","description":"Lists one fleet's collectors.","required":false,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectorList"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"list"}}},"/api/{org_id}/fleet/collectors/{id}":{"get":{"tags":["Fleet"],"summary":"Get one collector with its assignment, delivery evidence and history","operationId":"GetFleetCollector","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Collector instance UID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectorDetail"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"get"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Fleet"],"summary":"Delete a collector's row; a live host with a valid token reappears on its next heartbeat","operationId":"DeleteFleetCollector","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Collector instance UID","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true,"requires_confirmation":true},"x-o2-ratelimit":{"module":"Fleet","operation":"delete"}},"patch":{"tags":["Fleet"],"summary":"Set a collector's nickname; an empty name falls back to the host name","operationId":"RenameFleetCollector","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Collector instance UID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameCollectorRequest"}}},"required":true},"responses":{"200":{"description":"The renamed collector","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Collector"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/fleet/collectors/{id}/redeliver":{"post":{"tags":["Fleet"],"summary":"Rewrite the collector's assignment at a new revision to force a fresh apply","operationId":"RedeliverFleetCollector","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Collector instance UID","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Rewritten","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Redelivered"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Nothing assigned","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"create"}}},"/api/{org_id}/fleet/collectors/{id}/restart":{"post":{"tags":["Fleet"],"summary":"Queue a restart command, sent with the collector's next message","operationId":"RestartFleetCollector","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Collector instance UID","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestartQueued"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"The collector is offline or does not accept restart commands","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"create"}}},"/api/{org_id}/fleet/configs":{"get":{"tags":["Fleet"],"summary":"List the org's collector configurations","operationId":"ListFleetConfigs","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetConfigList"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"list"},"x-o2-mcp":{"enabled":true}},"post":{"tags":["Fleet"],"summary":"Create a configuration with its first draft","operationId":"CreateFleetConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateConfigRequest"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetConfigDetail"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Id exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"create"}}},"/api/{org_id}/fleet/configs/validate":{"post":{"tags":["Fleet"],"summary":"Validate a configuration's YAML without saving it","operationId":"ValidateFleetConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateRequest"}}},"required":true},"responses":{"200":{"description":"The issues found, also when there are errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationResult"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/fleet/configs/{id}":{"get":{"tags":["Fleet"],"summary":"Get a configuration with its draft and version history; the draft YAML is masked without fleet_configs PUT or POST","operationId":"GetFleetConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Configuration id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetConfigDetail"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"get"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Fleet"],"summary":"Delete a configuration and all its versions","operationId":"DeleteFleetConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Configuration id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Referenced; the body's `references` holds the counts","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true,"requires_confirmation":true},"x-o2-ratelimit":{"module":"Fleet","operation":"delete"}}},"/api/{org_id}/fleet/configs/{id}/draft":{"put":{"tags":["Fleet"],"summary":"Replace a configuration's draft","operationId":"SaveFleetConfigDraft","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Configuration id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveDraftRequest"}}},"required":true},"responses":{"200":{"description":"Saved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftSaved"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/fleet/configs/{id}/versions":{"post":{"tags":["Fleet"],"summary":"Publish the YAML as the configuration's next version","operationId":"PublishFleetConfigVersion","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Configuration id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishRequest"}}},"required":true},"responses":{"201":{"description":"Published","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Published"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Published concurrently","content":{"application/json":{"schema":{"type":"object"}}}},"422":{"description":"Validation errors","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationFailed"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"create"}}},"/api/{org_id}/fleet/configs/{id}/versions/{version}":{"get":{"tags":["Fleet"],"summary":"Get one published version's YAML and hash; the YAML is masked without fleet_configs PUT or POST","operationId":"GetFleetConfigVersion","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Configuration id","required":true,"schema":{"type":"string"}},{"name":"version","in":"path","description":"Version number","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigVersion"}}}},"400":{"description":"Invalid version","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"get"}}},"/api/{org_id}/fleet/fleets":{"get":{"tags":["Fleet"],"summary":"The fleets the caller may list; state is null where the caller may not read the fleet","operationId":"ListFleets","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetList"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"list"}},"post":{"tags":["Fleet"],"summary":"Create a fleet; roles grant access to it, as for dashboard folders","operationId":"CreateFleet","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFleetRequest"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Fleet"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Name exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"create"}}},"/api/{org_id}/fleet/fleets/{fleet_id}":{"get":{"tags":["Fleet"],"summary":"Get one fleet with its versions, counts and setting overrides","operationId":"GetFleet","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fleet_id","in":"path","description":"Fleet id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Fleet"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"get"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Fleet"],"summary":"Delete an empty fleet; the default fleet is never deleted","operationId":"DeleteFleet","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fleet_id","in":"path","description":"Fleet id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted"},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Still referenced, with the counts in `references`; the default fleet; or changing","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}},"patch":{"tags":["Fleet"],"summary":"Rename a fleet","operationId":"RenameFleet","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fleet_id","in":"path","description":"Fleet id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameFleetRequest"}}},"required":true},"responses":{"200":{"description":"Renamed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Fleet"}}}},"400":{"description":"Invalid, or the default fleet","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Name exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/fleet/fleets/{fleet_id}/desired":{"put":{"tags":["Fleet"],"summary":"Change a fleet's desired version, which starts a rollout; an already desired version returns its rollout","operationId":"SetFleetDesired","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fleet_id","in":"path","description":"Fleet id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetDesiredRequest"}}},"required":true},"responses":{"200":{"description":"The rollout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rollout"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Fleet, configuration or version not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"A cluster upgrade is in progress, or desired keeps changing","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/fleet/fleets/{fleet_id}/desired/preview":{"post":{"tags":["Fleet"],"summary":"The phases a desired-version change would run for the fleet's current size; changes nothing","operationId":"PreviewFleetDesired","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fleet_id","in":"path","description":"Fleet id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetDesiredRequest"}}},"required":true},"responses":{"200":{"description":"The plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanPreview"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Fleet not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"create"}}},"/api/{org_id}/fleet/fleets/{fleet_id}/settings":{"get":{"tags":["Fleet"],"summary":"A fleet's setting overrides; a null field inherits the organization default","operationId":"GetFleetOverrides","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fleet_id","in":"path","description":"Fleet id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetSettings"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"list"},"x-o2-mcp":{"enabled":true}},"put":{"tags":["Fleet"],"summary":"Replace a fleet's setting overrides","operationId":"UpdateFleetOverrides","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fleet_id","in":"path","description":"Fleet id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetSettings"}}},"required":true},"responses":{"200":{"description":"The overrides as stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetSettings"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"update"}}},"/api/{org_id}/fleet/pipelines":{"get":{"tags":["Fleet"],"summary":"Throughput and issues per OTel pipeline of each readable fleet for the Pipelines page","operationId":"GetFleetPipelines","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"window","in":"query","required":false,"schema":{"$ref":"#/components/schemas/FlowWindow"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelinesResponse"}}}},"400":{"description":"Invalid window","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"list"}}},"/api/{org_id}/fleet/rollouts":{"get":{"tags":["Fleet"],"summary":"List the org's rollouts, or one fleet's, newest first","operationId":"ListFleetRollouts","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"fleet","in":"query","description":"Lists one fleet's rollouts.","required":false,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RolloutList"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/fleet/rollouts/{id}":{"get":{"tags":["Fleet"],"summary":"Get one rollout with its phases, members, halt and events","operationId":"GetFleetRollout","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Rollout id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rollout"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"get"}}},"/api/{org_id}/fleet/rollouts/{id}/resume":{"post":{"tags":["Fleet"],"summary":"Continue a halted rollout from its halted phase","operationId":"ResumeFleetRollout","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Rollout id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The rollout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rollout"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Not halted, or the halt does not offer this exit","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"create"}}},"/api/{org_id}/fleet/rollouts/{id}/rollback":{"post":{"tags":["Fleet"],"summary":"Roll back to stable, or to the placeholder without one, and mark this rollout rolled back","operationId":"RollbackFleetRollout","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Rollout id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The rollout to stable, or this rollout when the fleet has no stable version","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rollout"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Not halted, or the halt does not offer this exit","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"create"}}},"/api/{org_id}/fleet/rollouts/{id}/skip":{"post":{"tags":["Fleet"],"summary":"Exclude the failing collectors from a halted rollout and continue it","operationId":"SkipFleetRolloutCollectors","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Rollout id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkipRequest"}}},"required":true},"responses":{"200":{"description":"The rollout","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rollout"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Not halted, or the halt does not offer this exit","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/fleet/settings":{"get":{"tags":["Fleet"],"summary":"The org's fleet settings: target collector version, restricted components and fleet defaults","operationId":"GetFleetSettings","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Settings"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"list"},"x-o2-mcp":{"enabled":true}},"put":{"tags":["Fleet"],"summary":"Replace the org's fleet settings","operationId":"UpdateFleetSettings","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Settings"}}},"required":true},"responses":{"200":{"description":"The settings as stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Settings"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"update"}}},"/api/{org_id}/fleet/summary":{"get":{"tags":["Fleet"],"summary":"Collector counts by status and version","operationId":"GetFleetSummary","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetSummary"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"list"}}},"/api/{org_id}/fleet/tokens":{"get":{"tags":["Fleet"],"summary":"List enrollment tokens; a token's value only on fleets the caller may PUT","operationId":"ListFleetTokens","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenList"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"list"}},"post":{"tags":["Fleet"],"summary":"Create an enrollment token placing collectors in a fleet","operationId":"CreateFleetToken","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTokenRequest"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedToken"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Fleet not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Name exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Fleet","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/fleet/tokens/{id}/revoke":{"post":{"tags":["Fleet"],"summary":"Revoke an enrollment token and disconnect its collectors","operationId":"RevokeFleetToken","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Token id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrollmentToken"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Fleet","operation":"create"}}},"/api/{org_id}/folders":{"get":{"tags":["Folders"],"summary":"List all folders (deprecated)","description":"Retrieves all dashboard folders for the organization - this endpoint is deprecated","operationId":"ListFoldersDeprecated","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for `ListFolder` endpoint.","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/Folder"}}}}}}}},"deprecated":true,"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Folders","operation":"list"}},"post":{"tags":["Folders"],"summary":"Create a new folder (deprecated)","description":"Creates a new dashboard folder - this endpoint is deprecated","operationId":"CreateFolderDeprecated","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Folder details","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for `CreateFolder` endpoint.","required":["name","description"],"properties":{"description":{"type":"string"},"icon":{"type":["string","null"]},"name":{"type":"string"}}},"example":{"name":"Infrastructure","description":"Traffic patterns and network performance of the infrastructure"}}},"required":true},"responses":{"200":{"description":"Folder created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder","description":"HTTP response body for `CreateFolder` endpoint."}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"deprecated":true,"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Folders","operation":"create"}}},"/api/{org_id}/folders/dashboards/{dashboard_id}":{"put":{"tags":["Dashboards"],"summary":"Move dashboard to folder","description":"Moves a dashboard from one folder to another within the organization. The dashboard content remains unchanged","operationId":"MoveDashboard","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"dashboard_id","in":"path","description":"Dashboard ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"MoveDashboard details","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for `MoveDashboard` endpoint.","required":["from","to"],"properties":{"from":{"type":"string"},"to":{"type":"string"}}},"example":{"from":"Source folder id","to":"Destination folder id"}}},"required":true},"responses":{"200":{"description":"Dashboard Moved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Dashboard not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"update"},"x-o2-mcp":{"description":"Move dashboard to another folder","category":"dashboards"}}},"/api/{org_id}/folders/name/{folder_name}":{"get":{"tags":["Folders"],"summary":"Get folder by name (deprecated)","description":"Retrieves a folder using its name instead of ID - this endpoint is deprecated","operationId":"GetFolderByNameDeprecated","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder_name","in":"path","description":"Folder Name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder","description":"HTTP response body for `GetFolder` endpoint."}}}},"404":{"description":"Folder not found","content":{"application/json":{"schema":{"default":null}}}}},"deprecated":true,"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Folders","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/folders/{folder_id}":{"get":{"tags":["Folders"],"summary":"Get folder by ID (deprecated)","description":"Retrieves a specific folder by its identifier - this endpoint is deprecated","operationId":"GetFolderDeprecated","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder_id","in":"path","description":"Folder ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folder","description":"HTTP response body for `GetFolder` endpoint."}}}},"404":{"description":"Folder not found","content":{"application/json":{"schema":{"default":null}}}}},"deprecated":true,"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Folders","operation":"get"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["Folders"],"summary":"Update an existing folder (deprecated)","description":"Updates folder details like name and description - this endpoint is deprecated","operationId":"UpdateFolderDeprecated","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder_id","in":"path","description":"Folder name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Folder details","content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","default":""},"folder_id":{"type":"string","default":""},"icon":{"type":["string","null"],"description":"Icon token shown beside the folder name — either a Unicode emoji\n(\"🚀\") or a registry reference (\"o2:redis\"). Stored opaquely; the\nbackend never interprets it. `None` means the folder has no icon.","default":null},"name":{"type":"string","default":""}}},"example":{"title":"Infra","description":"Traffic patterns and network performance of the infrastructure"}}},"required":true},"responses":{"200":{"description":"Folder updated","content":{"text/plain":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"deprecated":true,"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Folders","operation":"update"}},"delete":{"tags":["Folders"],"summary":"Delete a folder (deprecated)","description":"Removes a folder and all its contents - this endpoint is deprecated","operationId":"DeleteFolderDeprecated","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder_id","in":"path","description":"Folder ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"deprecated":true,"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Folders","operation":"delete"}}},"/api/{org_id}/functions":{"get":{"tags":["Functions"],"summary":"List organization functions","description":"Retrieves all custom transformation functions available in the organization, including their VRL code, configuration parameters, and current usage status. Shows function metadata such as creation date, last modified time, and pipeline dependencies to help administrators manage data transformation logic across the organization.","operationId":"listFunctions","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/Transform"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List all functions","category":"functions","summary_fields":["name","transType","streams"]},"x-o2-ratelimit":{"module":"Functions","operation":"list"}},"post":{"tags":["Functions"],"summary":"Create new function","description":"Creates a new custom transformation function using VRL (Vector Remap Language) code. Functions can be used in data ingestion pipelines to transform, enrich, or filter incoming log, metric, and trace data. Support complex data transformations, field extraction, format conversion, and conditional processing to standardize data before storage and indexing.","operationId":"createFunction","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Function data","content":{"application/json":{"schema":{"type":"object","required":["function"],"properties":{"function":{"type":"string"},"name":{"type":"string"},"numArgs":{"type":"integer","format":"int32","minimum":0},"params":{"type":"string"},"streams":{"type":["array","null"],"items":{"$ref":"#/components/schemas/StreamOrder"}},"transType":{"type":["integer","null"],"format":"int32","minimum":0}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create a VRL (Vector Remap Language) function","category":"functions"},"x-o2-ratelimit":{"module":"Functions","operation":"create"}}},"/api/{org_id}/functions/bulk":{"delete":{"tags":["Functions"],"summary":"Delete multiple function","description":"Permanently deletes multiple custom transformation functions from the organization. The functions must not be in use by active pipelines unless the force parameter is specified. Once deleted, any pipelines previously using this function will need to be updated with alternative transformation logic to continue functioning properly.","operationId":"deleteFunctionBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Function names to delete","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Functions","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/functions/test":{"post":{"tags":["Functions"],"summary":"Validate VRL function syntax","description":"Validates VRL (Vector Remap Language) transformation function syntax by testing it against sample events. Returns validation results with any syntax errors or successful transformation output. Use this to verify VRL code is correct before creating or updating a function. Accepts function code, sample events to test against, and optional trans_type (0 for VRL, 1 for JS).","operationId":"testFunction","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Test run function","content":{"application/json":{"schema":{"type":"object","required":["function","events"],"properties":{"events":{"type":"array","items":{}},"function":{"type":"string"},"trans_type":{"type":["integer","null"],"format":"int32","minimum":0}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestVRLResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"category":"functions"},"x-o2-ratelimit":{"module":"Functions","operation":"create"}}},"/api/{org_id}/functions/{name}":{"get":{"tags":["Functions"],"summary":"Get function pipeline dependencies","description":"Lists all data processing pipelines that currently use the specified transformation function. Returns pipeline names, types, and usage details to help administrators understand the impact scope before making changes to the function. Essential for change management and ensuring data processing continuity during function updates.","operationId":"functionPipelineDependency","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Function name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/Transform"}}}}}}},"404":{"description":"Function not found","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Check function dependencies","category":"functions"},"x-o2-ratelimit":{"module":"Functions","operation":"get"}},"put":{"tags":["Functions"],"summary":"Update function","description":"Updates an existing transformation function with new VRL code, parameters, or configuration settings. Changes take effect immediately and apply to all data processing pipelines currently using this function. Test function changes thoroughly before deployment to avoid data transformation errors in production pipelines.","operationId":"updateFunction","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Function name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Function data","content":{"application/json":{"schema":{"type":"object","required":["function"],"properties":{"function":{"type":"string"},"name":{"type":"string"},"numArgs":{"type":"integer","format":"int32","minimum":0},"params":{"type":"string"},"streams":{"type":["array","null"],"items":{"$ref":"#/components/schemas/StreamOrder"}},"transType":{"type":["integer","null"],"format":"int32","minimum":0}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFunctionAnswer"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Update a VRL function","category":"functions"},"x-o2-ratelimit":{"module":"Functions","operation":"update"}},"delete":{"tags":["Functions"],"summary":"Delete function","description":"Permanently deletes a custom transformation function from the organization. The function must not be in use by active pipelines unless the force parameter is specified. Once deleted, any pipelines previously using this function will need to be updated with alternative transformation logic to continue functioning properly.","operationId":"deleteFunction","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Function name","required":true,"schema":{"type":"string"}},{"name":"force","in":"query","description":"Force delete function regardless pipeline dependencies","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete a function","category":"functions","requires_confirmation":true},"x-o2-ratelimit":{"module":"Functions","operation":"delete"}}},"/api/{org_id}/gen_ai/agents":{"get":{"tags":["GenAI Settings"],"operationId":"ListGenAiAgents","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Optional inclusive lower bound for agent activity in microseconds.","required":false,"schema":{"type":["integer","null"],"format":"int64"}},{"name":"end_time","in":"query","description":"Optional inclusive upper bound for agent activity in microseconds.","required":false,"schema":{"type":["integer","null"],"format":"int64"}},{"name":"from","in":"query","description":"Zero-based offset into the filtered result set.","required":false,"schema":{"type":"integer","minimum":0}},{"name":"size","in":"query","description":"Maximum number of agents to return.","required":false,"schema":{"type":"integer","minimum":0}},{"name":"source_stream","in":"query","description":"Optional stream name filter. Must be paired with `source_stream_type`.","required":false,"schema":{"type":["string","null"]}},{"name":"source_stream_type","in":"query","description":"Optional stream type filter. Must be paired with `source_stream`.","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Discovered Gen-AI agents","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenAiAgentListResponse"}}}},"400":{"description":"Invalid time range"},"401":{"description":"Unauthorized"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"GenAI Settings","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/gen_ai/data_health":{"get":{"tags":["GenAI Settings"],"summary":"AI data health checks","description":"Counts LLM spans with no model price, no agent identity, zero duration, or no session id in a trace stream and window. Pass include_samples=true for sample trace ids per failing check. Results are cached for about a minute; pass refresh=true to recompute.","operationId":"GetGenAiDataHealth","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"query","description":"Trace stream to check.","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Window start, microseconds.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"Window end, microseconds.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"agent","in":"query","description":"Only spans of this agent name (`gen_ai_agent_name`); ignored when `agent_id` is set.","required":false,"schema":{"type":"string"}},{"name":"agent_id","in":"query","description":"Only spans of this agent id (`gen_ai_agent_id`). Agents that emit only an id are\nlisted with the id as their name, so the id is the filter that matches their spans.","required":false,"schema":{"type":"string"}},{"name":"env","in":"query","description":"Only spans of this environment (`gen_ai_agent_env`).","required":false,"schema":{"type":"string"}},{"name":"version","in":"query","description":"Only spans of this agent version (`gen_ai_agent_version`).","required":false,"schema":{"type":"string"}},{"name":"refresh","in":"query","description":"Skip the short server-side cache.","required":false,"schema":{"type":"boolean"}},{"name":"include_samples","in":"query","description":"Also return up to three recent trace ids per failing check; off by default, one query each.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Data health checks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataHealthResponse"}}}},"400":{"description":"Invalid query"},"403":{"description":"Forbidden"},"429":{"description":"Search not allowed for the organization"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"AI data health: count LLM spans with no model price, no agent identity, zero duration or no session id in a trace stream; pass agent to scope to one app","category":"traces"},"x-o2-ratelimit":{"module":"Traces","operation":"list"}}},"/api/{org_id}/groups":{"get":{"tags":["Groups"],"summary":"List organization groups","description":"Retrieves a list of all user groups in the organization. Users will only see groups they have permissions to view when role-based access control is active. Useful for managing group-based permissions and understanding organizational structure. Requires enterprise features to be enabled.","operationId":"ListGroups","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Groups","operation":"list"},"x-o2-mcp":{"enabled":true}},"post":{"tags":["Groups"],"summary":"Create user group","description":"Creates a new user group with specified users and roles. Groups allow efficient management of permissions by assigning roles to groups instead of individual users. Requires enterprise features to be enabled.","operationId":"CreateGroup","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"UserGroup","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"roles":{"type":["array","null"],"items":{"type":"string"},"uniqueItems":true},"users":{"type":["array","null"],"items":{"type":"string"},"uniqueItems":true}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Invalid group name or user id","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Groups","operation":"create"}}},"/api/{org_id}/groups/bulk":{"delete":{"tags":["Groups"],"summary":"Delete multiple user group","description":"Permanently removes multiple user groups from the organization. Users in those groups will lose group-based permissions but retain any directly assigned roles. This action cannot be undone. Requires enterprise features to be enabled.","operationId":"DeleteGroupBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"user group names","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}},"400":{"description":"Invalid group name","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Groups","operation":"delete"}}},"/api/{org_id}/groups/{group_name}":{"get":{"tags":["Groups"],"summary":"Get group details","description":"Retrieves detailed information about a specific user group including its members, assigned roles, and configuration. Useful for understanding group composition and permissions. Requires enterprise features to be enabled.","operationId":"GetGroup","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"group_name","in":"path","description":"Group name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"roles":{"type":["array","null"],"items":{"type":"string"},"uniqueItems":true},"users":{"type":["array","null"],"items":{"type":"string"},"uniqueItems":true}}}}}},"400":{"description":"Invalid group name","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Groups","operation":"get"}},"put":{"tags":["Groups"],"summary":"Update user group","description":"Updates an existing user group by adding or removing users and roles. Allows dynamic management of group membership and permissions to maintain proper access control. Requires enterprise features to be enabled.","operationId":"UpdateGroup","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"group_name","in":"path","description":"Group name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"UserGroupRequest","content":{"application/json":{"schema":{"type":"object","properties":{"add_roles":{"type":["array","null"],"items":{"type":"string"},"uniqueItems":true},"add_users":{"type":["array","null"],"items":{"type":"string"},"uniqueItems":true},"remove_roles":{"type":["array","null"],"items":{"type":"string"},"uniqueItems":true},"remove_users":{"type":["array","null"],"items":{"type":"string"},"uniqueItems":true}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Invalid group name, user id or role name","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Groups","operation":"update"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Groups"],"summary":"Delete user group","description":"Permanently removes a user group from the organization. Users in the group will lose group-based permissions but retain any directly assigned roles. This action cannot be undone. Requires enterprise features to be enabled.","operationId":"DeleteGroup","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"group_name","in":"path","description":"Group name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Invalid group name","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Groups","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/ingest/metrics/_json":{"post":{"tags":["Metrics"],"summary":"Ingest metrics via JSON","description":"Ingests metrics data using JSON format. Accepts an array of metric objects containing metric name, type (counter, gauge, histogram, or summary), labels, timestamp, and value. This endpoint is ideal for custom applications and systems that generate metrics in JSON format rather than protocol buffers.","operationId":"MetricsIngestionJson","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Ingest data (json array)","content":{"application/json":{"schema":{"type":"string"},"example":[{"__name__":"metrics stream name","__type__":"counter / gauge / histogram / summary","label_name1":"label_value1","label_name2":"label_value2","_timestamp":1687175143,"value":1.2}]}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestionResponse"},"example":{"code":200,"status":[{"name":"up","successful":3,"failed":0}]}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ingest/recent_rejections":{"get":{"tags":["Ingestion"],"summary":"Recent rejected ingest requests","description":"One entry per rejection reason seen in the last hour, newest first; tracked is false once the org has data","operationId":"GetRecentIngestRejections","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecentRejections"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Ingestion","operation":"list"}}},"/api/{org_id}/ingestion-tokens":{"get":{"tags":["Organizations"],"summary":"List org-level ingestion tokens","description":"Returns all org-level ingestion tokens for the organization. Requires Admin or Root role.","operationId":"ListOrgIngestionTokens","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OrgIngestionToken"}}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Ingestion Token","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Organizations"],"summary":"Create a new org-level ingestion token","description":"Creates a new named ingestion token at the org level. Requires Admin or Root role. The full token value is returned once.","operationId":"CreateOrgIngestionToken","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"name":{"type":"string"},"splunk_token":{"type":"boolean","description":"Also mint a Splunk HEC token for this credential."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/OrgIngestionToken"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Ingestion Token","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ingestion-tokens/{name}":{"patch":{"tags":["Organizations"],"summary":"Enable or disable an org-level ingestion token","description":"Enables or disables the specified named ingestion token. Disabled tokens cannot be used for ingestion. Requires Admin or Root role.","operationId":"EnableDisableOrgIngestionToken","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Token name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"At least one of the two fields must be present.","properties":{"enabled":{"type":["boolean","null"]},"splunk_token":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SplunkTokenAction"}]}}}}},"required":true},"responses":{"200":{"description":"Success; `message` holds the JSON-encoded {message, splunk_token}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Ingestion Token","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/invites":{"get":{"tags":["Organizations"],"summary":"Get pending organization invites","description":"Retrieves a list of all pending invitations for the organization. Shows invitations that have been sent but not yet accepted, allowing administrators to track and manage the invitation process for new team members.","operationId":"GetOrganizationMemberInvites","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["email","first_name","last_name","role","status","expires_at","is_external","token"],"properties":{"email":{"type":"string"},"expires_at":{"type":"integer","format":"int64"},"first_name":{"type":"string"},"is_external":{"type":"boolean"},"last_name":{"type":"string"},"role":{"type":"string"},"status":{"$ref":"#/components/schemas/InviteStatus"},"token":{"type":"string"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Organizations"],"summary":"Invite users to organization","description":"Sends invitations to one or more users to join the organization. Invited users will receive email invitations with links to accept and join the organization with the specified roles and permissions.","operationId":"InviteOrganizationMembers","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Emails to invite and the role they join with","content":{"application/json":{"schema":{"type":"object","required":["role"],"properties":{"invites":{"type":"array","items":{"type":"string"}},"role":{"$ref":"#/components/schemas/UserRole"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"data":{"$ref":"#/components/schemas/OrganizationInviteResponseData"},"message":{"type":"string"}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Organizations","operation":"create"}}},"/api/{org_id}/invites/{token}":{"delete":{"tags":["Organizations"],"summary":"Delete an organization invite","operationId":"RemoveOrganizationInvite","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"token","in":"path","description":"invitation token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Organizations","operation":"delete"}}},"/api/{org_id}/kv":{"get":{"tags":["KV"],"summary":"List keys from key-value store","description":"Retrieves a list of all keys stored in the organization's key-value store. You can optionally filter keys by providing a prefix to only return keys that start with specific characters. This is useful for organizing related configuration settings or browsing available stored data.","operationId":"ListKVKeys","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"prefix","in":"query","description":"Key prefix","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Key Values","operation":"list"},"x-o2-mcp":{"description":"List all keys","category":"kv-store","summary_fields":[]}}},"/api/{org_id}/kv/{key}":{"get":{"tags":["KV"],"summary":"Get value from key-value store","description":"Retrieves the stored value for a specific key from the organization's key-value store. Returns the raw text value if the key exists, or a 404 error if the key is not found. Useful for storing and retrieving configuration settings, application state, or other simple data.","operationId":"GetKVValue","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"key","in":"path","description":"Key name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"NotFound","content":{"text/plain":{"schema":{"type":"string"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get value by key","category":"kv-store"},"x-o2-ratelimit":{"module":"Key Values","operation":"get"}},"post":{"tags":["KV"],"summary":"Store value in key-value store","description":"Stores a text value under the specified key in the organization's key-value store. Creates a new key if it doesn't exist, or updates the existing value. The key-value store is perfect for configuration settings, feature flags, application state, and other simple data that needs to persist across sessions.","operationId":"SetKVValue","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"key","in":"path","description":"Key name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Value of the key","content":{"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Success","content":{"text/plain":{"schema":{"type":"string"}}}},"500":{"description":"Failure","content":{"text/plain":{"schema":{"type":"string"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Set key-value pair","category":"kv-store"},"x-o2-ratelimit":{"module":"Key Values","operation":"create"}},"delete":{"tags":["KV"],"summary":"Delete key from key-value store","description":"Permanently removes a key and its associated value from the organization's key-value store. Returns a success response if the key was deleted, or a 404 error if the key doesn't exist. This operation cannot be undone, so use carefully when cleaning up unused configuration or application data.","operationId":"RemoveKVValue","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"key","in":"path","description":"Key name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"NotFound","content":{"text/plain":{"schema":{"type":"string"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete key-value pair","category":"kv-store","requires_confirmation":true},"x-o2-ratelimit":{"module":"Key Values","operation":"delete"}}},"/api/{org_id}/llm/models":{"get":{"tags":["LLM"],"summary":"List all model pricing definitions","description":"Returns all model pricing definitions for the organization, including inherited definitions from the meta org.","operationId":"ListModelPricing","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ModelPricingDefinition"}}}}},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"LLM","operation":"list"}},"post":{"tags":["LLM"],"summary":"Create a new model pricing definition","description":"Create a new model pricing definition with regex match pattern and per-token pricing.","operationId":"CreateModelPricing","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Model pricing definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelPricingDefinition"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelPricingDefinition"}}}},"400":{"description":"Bad request"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"LLM","operation":"create"}}},"/api/{org_id}/llm/models/built-in":{"get":{"tags":["LLM"],"summary":"Get built-in community model pricing definitions","description":"Fetches standard model pricing from the configured community source (GitHub). Results are cached on the frontend.","operationId":"GetBuiltInModelPricing","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"search","in":"query","description":"Filter by name","required":false,"schema":{"type":"string"}},{"name":"metadata_only","in":"query","description":"Return seed/sync metadata without loading the catalogue","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuiltInModelPricingResponse"}}}},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"LLM","operation":"list"}}},"/api/{org_id}/llm/models/refresh-built-in":{"post":{"tags":["LLM"],"summary":"Refresh built-in model pricing from upstream source","description":"Triggers an immediate sync of built-in model pricing definitions from the configured GitHub source.","operationId":"RefreshBuiltInModelPricing","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncResult"}}}},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"LLM","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/llm/models/test":{"post":{"tags":["LLM"],"summary":"Test which pricing definition matches a model name and calculate cost","description":"Simulates the pricing lookup for a given model name and optional usage data, returning the matched definition, selected tier, and cost breakdown. With `match_pattern`, also lists the known models that pattern would price if saved as a rule in this organization.","operationId":"TestModelMatch","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Model name and optional usage to test","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestModelMatchRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestModelMatchResponse"}}}},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"LLM","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/llm/models/unpriced":{"get":{"tags":["LLM"],"summary":"List models seen in traces with no price or an approximate one","description":"Models in the stream's spans that ingest marked unpriced or approximately priced during the window, with spans, tokens and recorded cost. Historical gaps remain after adding an exact price and are marked priced_now; old costs are not backfilled. Spans with tokens but no model name are listed as one row with a null model.","operationId":"ListUnpricedModels","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"query","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnpricedModelsResponse"}}}},"400":{"description":"Invalid query"},"403":{"description":"Forbidden"},"429":{"description":"Search not allowed for the organization"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"LLM","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/llm/models/{model_id}":{"get":{"tags":["LLM"],"summary":"Get a model pricing definition by ID","description":"#{\"ratelimit_module\":\"ModelPricing\", \"ratelimit_module_operation\":\"get\"}#","operationId":"GetModelPricing","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"model_id","in":"path","description":"Model pricing definition ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelPricingDefinition"}}}},"404":{"description":"Not found"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"LLM","operation":"get"}},"put":{"tags":["LLM"],"summary":"Update a model pricing definition","description":"#{\"ratelimit_module\":\"ModelPricing\", \"ratelimit_module_operation\":\"update\"}#","operationId":"UpdateModelPricing","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"model_id","in":"path","description":"Model pricing definition ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Updated model pricing definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelPricingDefinition"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelPricingDefinition"}}}},"400":{"description":"Bad request"},"404":{"description":"Not found"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"LLM","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["LLM"],"summary":"Delete a model pricing definition","description":"#{\"ratelimit_module\":\"ModelPricing\", \"ratelimit_module_operation\":\"delete\"}#","operationId":"DeleteModelPricing","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"model_id","in":"path","description":"Model pricing definition ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not found"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"LLM","operation":"delete"}}},"/api/{org_id}/loki/api/v1/push":{"post":{"tags":["Logs"],"summary":"Ingest logs via Loki API (deprecated)","description":"This endpoint is deprecated and will be removed in a future release. Ingests log data using Grafana Loki-compatible API format. Supports both JSON and Protocol Buffers content types with optional compression (gzip for JSON, snappy for Protobuf). Stream names are extracted from the 'stream_name' label in stream metadata. Provides seamless migration path from Loki deployments to OpenObserve while maintaining API compatibility.","operationId":"LogsIngestionLoki","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Loki-compatible log push data in JSON format. Stream names are extracted from 'stream_name' label in the stream labels. Also supports Protobuf format (application/x-protobuf) with optional compression (gzip for JSON, snappy for Protobuf)","content":{"application/json":{"schema":{"type":"object","description":"Internal Loki JSON types for native Loki push API format\nLoki push request - matches native JSON format exactly","required":["streams"],"properties":{"streams":{"type":"array","items":{"$ref":"#/components/schemas/LokiStream"},"description":"Array of log streams, each containing labels and log entries"}}},"example":{"streams":[{"stream":{"stream_name":"application_logs","service":"api","environment":"production"},"values":[["1609459200000000000","API request processed successfully"],["1609459201000000000","Database connection established",{"trace_id":"abc123","span_id":"def456"}]]}]}}},"required":true},"responses":{"204":{"description":"Success - logs ingested successfully"},"400":{"description":"Bad Request - Possible causes: empty stream data, invalid labels format (e.g., empty labels), invalid timestamp format (e.g., non-numeric timestamp), unsupported content type (only application/json and application/x-protobuf supported), unsupported content encoding (only gzip for JSON and snappy for Protobuf), protobuf decode errors, JSON parsing errors, or compression/decompression failures","content":{"text/plain":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error - Server error during log processing","content":{"text/plain":{"schema":{"type":"string"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/mcp":{"post":{"tags":["MCP"],"summary":"Handler for MCP POST requests (single request/response)","description":"Dual-era (MCP 2025-11-25 + 2026-07-28) Streamable HTTP transport:\n- Requests with `id` → 200 with JSON or SSE response\n- Notifications (no `id`) → 202 Accepted, no body\n- Validates protocol version and the 2026-07-28 request metadata headers (`Mcp-Method`,\n  `Mcp-Name`) on modern requests\n- Maps modern JSON-RPC errors to HTTP status codes (unsupported version → 400, unknown method →\n  404)","operationId":"MCPRequest","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"MCP request payload","content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","method"],"properties":{"id":{},"jsonrpc":{"type":"string"},"method":{"type":"string"},"params":{}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{}}},"202":{"description":"Accepted (notification, no response body)"},"400":{"description":"Bad Request (unsupported protocol version or header mismatch)"},"404":{"description":"Not Found (unknown method, 2026-07-28 requests)"},"500":{"description":"Internal Server Error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"mcp","operation":"post"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/member_subscription/{invite_token}":{"put":{"tags":["Organizations"],"summary":"Accept organization invitation","description":"Accepts a pending organization invitation using the invitation token received via email. This adds the user to the organization with the roles and permissions specified in the original invitation.","operationId":"AcceptOrganizationInvite","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"invite_token","in":"path","description":"The token sent to the user","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Organizations","operation":"update"}}},"/api/{org_id}/metrics/usage":{"get":{"tags":["Metrics"],"summary":"How much each metric is used","description":"Counts, per metric, the dashboards, alerts, SLOs and scheduled pipelines the caller can read whose queries reference it, in one scan of the org","operationId":"GetOrgMetricUsage","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgMetricUsage"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Metrics","operation":"list"}}},"/api/{org_id}/metrics/{metric_name}/usage":{"get":{"tags":["Metrics"],"summary":"Where a metric is used","description":"Lists the dashboards, alerts, SLOs and scheduled pipelines the caller can read whose queries reference the metric","operationId":"GetMetricUsage","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"metric_name","in":"path","description":"Metric name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricUsage"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Metrics","operation":"list"}}},"/api/{org_id}/node/list":{"get":{"tags":["Organizations"],"summary":"Get cluster node list","description":"Retrieves a hierarchical list of all nodes in the OpenObserve cluster organized by regions and clusters, with detailed information about each node including versions and roles. Useful for monitoring cluster health and managing distributed deployments.","operationId":"GetMetaOrganizationNodeList","parameters":[{"name":"org_id","in":"path","description":"Must be '_meta'","required":true,"schema":{"type":"string"}},{"name":"regions","in":"query","description":"Optional comma-separated list of regions to filter by (e.g., 'us-east-1,us-west-2')","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"allOf":[{"type":"object"}],"description":"Response struct for node listing with nested hierarchy\n\nContains a three-level hierarchy with a flat format:\n1. Regions at the top level as object keys\n2. Clusters within each region as object keys\n3. Nodes as arrays directly under each cluster"}}}},"403":{"description":"Forbidden - Not the _meta organization","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Clusters","operation":"list"}}},"/api/{org_id}/oncall/analytics/causes":{"get":{"tags":["OnCall"],"summary":"Counts per resolution cause over a window","operationId":"OnCallCauseAnalytics","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"query","description":"Restrict to one team; omit for the whole org","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Window start (microseconds); defaults to 30 days before `to`","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"to","in":"query","description":"Window end (microseconds); defaults to now","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Window inverted or too long","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/contacts/{user_email}":{"get":{"tags":["OnCall"],"summary":"How to reach one person","operationId":"GetOnCallContact","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"user_email","in":"path","description":"The person's email","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"get"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["OnCall"],"summary":"Set or clear a person's contact methods","operationId":"SetOnCallContact","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"user_email","in":"path","description":"The person's email","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetContactRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Not a dialable number","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["OnCall"],"summary":"Forget a person's contact methods","operationId":"DeleteOnCallContact","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"user_email","in":"path","description":"The person's email","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"delete"}}},"/api/{org_id}/oncall/contacts/{user_email}/verify":{"post":{"tags":["OnCall"],"summary":"Text a verification code to a person's saved phone","operationId":"SendOnCallContactCode","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"user_email","in":"path","description":"The person's email","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Code sent"},"400":{"description":"No phone saved, no provider, or the number cannot receive texts","content":{"application/json":{"schema":{"type":"object"}}}},"429":{"description":"Too many codes; carries retry_after_secs","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"The provider could not send now","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/contacts/{user_email}/verify/confirm":{"post":{"tags":["OnCall"],"summary":"Verify a person's phone with the code texted to it","operationId":"ConfirmOnCallContactCode","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"user_email","in":"path","description":"The person's email","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmContactCodeRequest"}}},"required":true},"responses":{"200":{"description":"Verified; carries phone_verified_at","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Wrong, expired or missing code","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"create"}}},"/api/{org_id}/oncall/coverage-gaps":{"get":{"tags":["OnCall"],"summary":"Teams that would page nobody right now","operationId":"ListOnCallCoverageGaps","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Ask about this instant (microseconds) instead of now","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"Max teams returned (default 100, max 200); `total` is never truncated","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/incidents/{incident_id}/responses":{"get":{"tags":["OnCall"],"summary":"The on-call records that paged for an incident","operationId":"OnCallResponsesForIncident","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"incident_id","in":"path","description":"Incident ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OnCallResponse"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/my/deliveries":{"get":{"tags":["OnCall"],"summary":"Every page addressed to the caller, and whether it landed","operationId":"ListMyOnCallDeliveries","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"unread_only","in":"query","description":"Only rows the caller has not marked read (default false)","required":false,"schema":{"type":"boolean"}},{"name":"from","in":"query","description":"Window start (microseconds), inclusive","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"to","in":"query","description":"Window end (microseconds), exclusive","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"Page size (default 100, max 200)","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"offset","in":"query","description":"Rows to skip","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/my/deliveries/read":{"post":{"tags":["OnCall"],"summary":"Mark pages read, or unread again","operationId":"MarkMyOnCallDeliveriesRead","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkReadRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Too many ids","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/my/teams":{"get":{"tags":["OnCall"],"summary":"The caller's teams, and whether they are on call","operationId":"ListMyOnCallTeams","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Answer for this instant (microseconds) instead of now","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"list"}}},"/api/{org_id}/oncall/ownership":{"get":{"tags":["OnCall"],"summary":"List ownership rules","operationId":"ListOnCallOwnershipRules","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"query","description":"Restrict to one team","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OwnershipRule"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["OnCall"],"summary":"Give a team ownership of an identity-dimension path","operationId":"CreateOnCallOwnershipRule","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOwnershipRuleRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipRule"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"create"}}},"/api/{org_id}/oncall/ownership/stats":{"get":{"tags":["OnCall"],"summary":"Ownership rules with pages caught, last match and a health verdict","operationId":"ListOnCallOwnershipRuleStats","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"query","description":"Restrict to one team","required":false,"schema":{"type":"string"}},{"name":"days","in":"query","description":"History window (default 30, max 366)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"Page size (default 50, max 200)","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"offset","in":"query","description":"Rules to skip","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipStatsBody"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"list"}}},"/api/{org_id}/oncall/ownership/{rule_id}":{"put":{"tags":["OnCall"],"summary":"Repoint an ownership rule at a team, a path, or both","operationId":"UpdateOnCallOwnershipRule","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"rule_id","in":"path","description":"Rule ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOwnershipRuleRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnershipRule"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["OnCall"],"summary":"Delete an ownership rule","operationId":"DeleteOnCallOwnershipRule","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"rule_id","in":"path","description":"Rule ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"delete"}}},"/api/{org_id}/oncall/responses":{"get":{"tags":["OnCall"],"summary":"List open response records","operationId":"ListOnCallResponses","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"query","description":"Restrict to one team","required":false,"schema":{"type":"string"}},{"name":"include_resolved","in":"query","description":"Include closed records (default false)","required":false,"schema":{"type":"boolean"}},{"name":"source_id","in":"query","description":"Every firing of one subject","required":false,"schema":{"type":"string"}},{"name":"subject_type","in":"query","description":"`alert` / `incident` — pairs with `source_id`","required":false,"schema":{"type":"string"}},{"name":"ownership_path","in":"query","description":"Identity-dimension path, e.g. `k8s-cluster=prod`","required":false,"schema":{"type":"string"}},{"name":"cause","in":"query","description":"Resolution cause, e.g. `noisy_threshold`; implies closed records","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Page size (default 100, max 200)","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"offset","in":"query","description":"Rows to skip","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}},"400":{"description":"Unknown filter value","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/responses/escalation":{"get":{"tags":["OnCall"],"summary":"Where the escalation ladder has got to, for many records","operationId":"OnCallEscalationProgressBatch","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_ids","in":"query","description":"Comma-separated response record IDs (at most 200)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"More than 200 ids","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/responses/{response_id}":{"get":{"tags":["OnCall"],"summary":"Get a response record and its timeline","operationId":"GetOnCallResponse","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"get"}}},"/api/{org_id}/oncall/responses/{response_id}/acknowledge":{"post":{"tags":["OnCall"],"summary":"Acknowledge a page's problem","description":"Acknowledges the problem the page is for (its incident, else every firing group of its alert), which stops every page of it. `take_over` moves an acknowledgement held by someone else to the caller. Returns the page record with the acknowledgement under `ack`.","operationId":"AcknowledgeOnCallResponse","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Optional","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemAckRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Refused, with who is on call and who can act","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActRefusal"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/responses/{response_id}/confirm-recovery":{"post":{"tags":["OnCall"],"summary":"An impacted team confirms its own service has recovered","description":"An impacted team confirms its own service has recovered. The last confirmation closes the originating incident.","operationId":"ConfirmOnCallRecovery","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmRecoveryRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnCallResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"create"}}},"/api/{org_id}/oncall/responses/{response_id}/deliveries":{"get":{"tags":["OnCall"],"summary":"What was attempted for a page, and whether it landed","operationId":"ListOnCallDeliveries","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Page size (default 100, max 200)","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"offset","in":"query","description":"Rows to skip","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/responses/{response_id}/escalate":{"post":{"tags":["OnCall"],"summary":"Wake the next rung now, without waiting for the timer","operationId":"EscalateOnCallResponse","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscalateRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"create"}}},"/api/{org_id}/oncall/responses/{response_id}/escalation":{"get":{"tags":["OnCall"],"summary":"Where the escalation ladder has got to","operationId":"OnCallEscalationProgress","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscalationProgress"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/responses/{response_id}/handoff":{"post":{"tags":["OnCall"],"summary":"Hand a page to somebody else","operationId":"HandoffOnCallResponse","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HandoffRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnCallResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"create"}}},"/api/{org_id}/oncall/responses/{response_id}/history":{"get":{"tags":["OnCall"],"summary":"Past firings of the same alert","operationId":"GetOnCallResponseHistory","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max records (default 10)","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OnCallResponse"}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"list"}}},"/api/{org_id}/oncall/responses/{response_id}/notes":{"post":{"tags":["OnCall"],"summary":"Add a note to a response record","operationId":"AddOnCallNote","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddNoteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/responses/{response_id}/prior-causes":{"get":{"tags":["OnCall"],"summary":"What previous firings of this subject turned out to be","operationId":"OnCallPriorCauses","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CauseGroup"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/responses/{response_id}/promote":{"post":{"tags":["OnCall"],"summary":"Promote a response record to an incident","operationId":"PromoteOnCallResponseToIncident","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"No such record","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Already an incident","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"create"}}},"/api/{org_id}/oncall/responses/{response_id}/report":{"get":{"tags":["OnCall"],"summary":"The full agent report this page carried","operationId":"OnCallResponseReport","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"list"}}},"/api/{org_id}/oncall/responses/{response_id}/resolve":{"post":{"tags":["OnCall"],"summary":"Resolve a response record","operationId":"ResolveOnCallResponse","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnCallResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/responses/{response_id}/snooze":{"post":{"tags":["OnCall"],"summary":"Quiet a response record without claiming it","operationId":"SnoozeOnCallResponse","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnoozeRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnCallResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"create"}}},"/api/{org_id}/oncall/responses/{response_id}/unacknowledge":{"post":{"tags":["OnCall"],"summary":"Remove the acknowledgement of a page's problem","description":"Clears the acknowledgement of the problem the page is for, on every record, and restarts the pages it stopped at step 1. Returns the page record with the unacknowledgement under `ack`.","operationId":"UnacknowledgeOnCallResponse","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Refused, with who is on call and who can act","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActRefusal"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/responses/{response_id}/unsnooze":{"post":{"tags":["OnCall"],"summary":"End a snooze now, so paging continues from the current step","operationId":"UnsnoozeOnCallResponse","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"response_id","in":"path","description":"Response record ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnCallResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"create"}}},"/api/{org_id}/oncall/routing/config":{"get":{"tags":["OnCall"],"summary":"Get the org's routing configuration","operationId":"GetOnCallRoutingConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["OnCall"],"summary":"Nominate or clear the org's default on-call team","operationId":"SetOnCallRoutingConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetRoutingConfigRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"update"}}},"/api/{org_id}/oncall/routing/preview":{"post":{"tags":["OnCall"],"summary":"Show which team a set of dimensions would page","operationId":"PreviewOnCallRouting","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewRoutingRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/schedule-presets":{"get":{"tags":["OnCall"],"summary":"The catalogue of schedule presets","operationId":"ListOnCallSchedulePresets","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PresetDescriptor"}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"list"}}},"/api/{org_id}/oncall/teams":{"get":{"tags":["OnCall"],"summary":"List on-call teams","operationId":"ListOnCallTeams","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Team"}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"list"}},"post":{"tags":["OnCall"],"summary":"Create an on-call team","operationId":"CreateOnCallTeam","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTeamRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/context":{"get":{"tags":["OnCall"],"summary":"Policy, who is on call and schedule for many teams","operationId":"ListOnCallTeamContext","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_ids","in":"query","description":"Comma-separated team IDs (at most 200; `include_mine` teams are not counted)","required":false,"schema":{"type":"string"}},{"name":"include_mine","in":"query","description":"Also answer for the caller's own teams (default false)","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"More than 200 listed teams","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}":{"get":{"tags":["OnCall"],"summary":"Get an on-call team","operationId":"GetOnCallTeam","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"get"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["OnCall"],"summary":"Update an on-call team","operationId":"UpdateOnCallTeam","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTeamRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"update"}},"delete":{"tags":["OnCall"],"summary":"Delete an on-call team","operationId":"DeleteOnCallTeam","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"delete"}}},"/api/{org_id}/oncall/teams/{team_id}/channel":{"get":{"tags":["OnCall"],"summary":"Get where a team is talked to","operationId":"GetOnCallTeamChannel","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamChannelResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["OnCall"],"summary":"Set where a team is talked to","operationId":"SetOnCallTeamChannel","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTeamChannelRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamChannelResponse"}}}},"400":{"description":"Not one of the team's webhook destinations","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Team not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/config-risks":{"get":{"tags":["OnCall"],"summary":"Actionable problems with a team's paging configuration","operationId":"ListOnCallTeamConfigRisks","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","description":"How far ahead to look for a coverage gap (default 7, max 31)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"Most severe first (default 50, max 200)","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/escalation-preview":{"get":{"tags":["OnCall"],"summary":"Resolve a team's ladder against right now, sending nothing","operationId":"GetOnCallEscalationPreview","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}},{"name":"priority","in":"query","description":"`P1`–`P5` (default `P1`)","required":false,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Resolve at this instant (micros) instead of now","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscalationPreview"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"list"}}},"/api/{org_id}/oncall/teams/{team_id}/load":{"get":{"tags":["OnCall"],"summary":"Per-person paging load and rotation fairness","operationId":"GetOnCallTeamLoad","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","description":"Window, backwards and forwards (default 30, max 366; the forward half is capped at 31 days by the schedule resolver)","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamLoad"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/members":{"get":{"tags":["OnCall"],"summary":"List a team's members","operationId":"ListOnCallTeamMembers","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TeamMember"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["OnCall"],"summary":"Add a member to a team","operationId":"AddOnCallTeamMember","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMembersRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TeamMember"}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"create"}},"delete":{"tags":["OnCall"],"summary":"Remove a member from a team","operationId":"RemoveOnCallTeamMember","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}},{"name":"user_email","in":"query","description":"Member email","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"delete"}}},"/api/{org_id}/oncall/teams/{team_id}/on-call":{"get":{"tags":["OnCall"],"summary":"Who is on call for a team","operationId":"GetWhoIsOnCall","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}},{"name":"at","in":"query","description":"Resolve at this instant (microseconds) instead of now","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OnCallPosition"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/overrides":{"get":{"tags":["OnCall"],"summary":"List a team's covers","operationId":"ListOnCallOverrides","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Window start (microseconds); requires `to`","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"to","in":"query","description":"Window end (microseconds); requires `from`","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleOverride"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["OnCall"],"summary":"Arrange cover for a bounded window","operationId":"CreateOnCallOverride","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOverrideRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleOverride"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"No such team","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/overrides/{override_id}":{"delete":{"tags":["OnCall"],"summary":"Cancel a cover","operationId":"DeleteOnCallOverride","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}},{"name":"override_id","in":"path","description":"Override ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"No such override","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"delete"}}},"/api/{org_id}/oncall/teams/{team_id}/overview":{"get":{"tags":["OnCall"],"summary":"A team's header figures and recent paging record","operationId":"GetOnCallTeamOverview","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","description":"Window for the summary (default 7, max 366)","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamOverview"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/policy":{"get":{"tags":["OnCall"],"summary":"Get a team's escalation policy","operationId":"GetOnCallPolicy","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyView"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["OnCall"],"summary":"Replace a team's escalation policy","operationId":"SetOnCallPolicy","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPolicyRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EscalationPolicy"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/reachability":{"get":{"tags":["OnCall"],"summary":"Whether a page would reach each member of a team","operationId":"GetOnCallTeamReachability","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamReachability"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/resolved-schedule":{"get":{"tags":["OnCall"],"summary":"The resolved schedule across a window, gaps included","operationId":"GetResolvedOnCallSchedule","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Window start (microseconds)","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"to","in":"query","description":"Window end (microseconds), at most 31 days after `from`","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"rotation_id","in":"query","description":"Rotation id or name; defaults to the team's primary","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CoverageSegment"}}}}},"400":{"description":"Window inverted or too long","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"list"}}},"/api/{org_id}/oncall/teams/{team_id}/resolved-schedule/preview":{"post":{"tags":["OnCall"],"summary":"The resolved schedule an unsaved rotation would produce, without saving it","operationId":"PreviewResolvedOnCallSchedule","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewResolvedScheduleRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CoverageSegment"}}}}},"400":{"description":"Window inverted or too long","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/schedule":{"get":{"tags":["OnCall"],"summary":"Get a team's schedule","operationId":"GetOnCallSchedule","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":["object","null"]}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["OnCall"],"summary":"Replace a team's schedule","operationId":"SetOnCallSchedule","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetScheduleRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/schedule/from-preset":{"post":{"tags":["OnCall"],"summary":"Build shift rules from a template, replacing a chosen rotation's or adding a rotation","operationId":"ApplyOnCallSchedulePreset","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FromPresetRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"No such team","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/slack/test":{"post":{"tags":["OnCall"],"summary":"Post a test message to a team's Slack channel","operationId":"TestOnCallTeamSlackChannel","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"Team ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamSlackTestResponse"}}}},"404":{"description":"Team not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/teams/{team_id}/test-page":{"post":{"tags":["OnCall"],"summary":"Prove this team's paging configuration reaches a human","operationId":"SendOnCallTestPage","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"team_id","in":"path","description":"On-call team ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestPageRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"create"}}},"/api/{org_id}/oncall/unavailability":{"get":{"tags":["OnCall"],"summary":"When people are away","operationId":"ListOnCallUnavailability","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"user_email","in":"query","description":"Whose absences; defaults to the caller when no window is given","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Window start (microseconds); requires `to`","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"to","in":"query","description":"Window end (microseconds); requires `from`","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Unavailability"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["OnCall"],"summary":"Record that somebody is away","operationId":"CreateOnCallUnavailability","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUnavailabilityRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailability"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/unavailability/{unavailability_id}":{"delete":{"tags":["OnCall"],"summary":"Withdraw an absence","operationId":"DeleteOnCallUnavailability","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"unavailability_id","in":"path","description":"Unavailability ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"No such absence","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"delete"}}},"/api/{org_id}/oncall/unrouted":{"get":{"tags":["OnCall"],"summary":"Signals that fired and that no team owned","operationId":"ListOnCallUnroutedSignals","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"include_dismissed","in":"query","description":"Include dismissed and already-covered entries (default false)","required":false,"schema":{"type":"boolean"}},{"name":"landing","in":"query","description":"`default_team` for gaps the default team is absorbing, `nobody` for gaps that paged no one; omit for both","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Page size (default 100, max 200)","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/oncall/unrouted/{signal_id}":{"delete":{"tags":["OnCall"],"summary":"Dismiss an entry from the unrouted queue","operationId":"DismissOnCallUnroutedSignal","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"signal_id","in":"path","description":"Unrouted queue entry ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/org_cleanup_tasks/{target_org_id}":{"get":{"tags":["Organizations"],"summary":"List cleanup tasks of a deleted organization","operationId":"ListOrgCleanupTasks","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"target_org_id","in":"path","description":"Target org id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CleanupTaskView"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/org_cleanup_tasks/{target_org_id}/retry":{"post":{"tags":["Organizations"],"summary":"Retry cleanup of a deleted organization","operationId":"RetryOrgCleanup","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"target_org_id","in":"path","description":"Target org id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/organizations":{"get":{"tags":["Organizations"],"summary":"Get all organizations (meta only)","description":"Retrieves a comprehensive list of all organizations in the system with detailed information including subscription types, trial periods, and creation dates. Only accessible through the '_meta' organization, and only to the root user or a member of '_meta'.","operationId":"GetAllOrganizations","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"page_size","in":"query","description":"Maximum number of organizations to return (default 100)","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AllOrgListDetails"}}}}}}},"403":{"description":"The caller is neither the root user nor a member of '_meta'","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"list"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["Organizations"],"summary":"Start deleting an organization","operationId":"InitiateOrgDeletion","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/organizations/assume_service_account":{"post":{"tags":["Organizations"],"summary":"Assume a service account in a target organization","description":"This endpoint allows meta service accounts to obtain temporary session tokens\nfor accessing a target organization as a specific service account. The session\nautomatically expires after the specified duration.\n\n# Security\n- Only meta service accounts can call this endpoint\n- The service account must exist in both _meta and target organization\n- The service account must have the appropriate role in the target organization\n- Maximum session duration is capped at 24 hours\n\n# Example\n```bash\ncurl -X POST http://localhost:5080/api/_meta/assume_service_account \\\n  -H \"Authorization: Bearer <meta_sa_token>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"org_id\": \"customer1\",\n    \"service_account\": \"tenant_admin_sa\",\n    \"duration_seconds\": 3600\n  }'\n```","operationId":"AssumeServiceAccount","parameters":[{"name":"org_id","in":"path","description":"Organization name (must be _meta)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Assume service account request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssumeServiceAccountRequest"}}},"required":true},"responses":{"200":{"description":"Session created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssumeServiceAccountResponse"}}}},"400":{"description":"Invalid request"},"403":{"description":"Not authorized or service account not assigned"},"500":{"description":"Internal server error"},"501":{"description":"Not available in non-enterprise builds"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Assume service account identity","category":"users"},"x-o2-ratelimit":{"module":"Organizations","operation":"create"}}},"/api/{org_id}/organizations/{target_org_id}/resurrect":{"post":{"tags":["Organizations"],"summary":"Cancel the deletion of an organization","operationId":"ResurrectOrg","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"target_org_id","in":"path","description":"Target org id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Organizations","operation":"update"}}},"/api/{org_id}/overview":{"get":{"tags":["Organizations"],"summary":"Get organization overview","description":"Returns the streams, alerts, pipelines and license limits sections the Overview page needs in one call. Each section carries its own status (ok, error, locked or forbidden), so one failing section never fails the response, and results only include objects the caller may see. Responses are cached briefly per caller.","operationId":"GetOrganizationOverview","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"top","in":"query","description":"Rows per list (top streams per type, firing alerts). Default 5, clamped to 1..20.","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"refresh","in":"query","description":"Set true (or 1) to skip the short-lived cache and rebuild now.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Summary","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/passcode":{"get":{"tags":["Organizations"],"summary":"Get user's ingestion token","description":"Retrieves the current ingestion token (passcode) for the authenticated user within the specified organization. This token is used to authenticate data ingestion requests and can be used with various ingestion endpoints. Requires Admin or Root role.","operationId":"GetOrganizationUserIngestToken","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/IngestionPasscode"}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Ingestion Token","operation":"get"}},"put":{"tags":["Organizations"],"summary":"Update user's ingestion token","description":"Generates a new ingestion token (passcode) for the authenticated user within the specified organization. The old token will be invalidated and all ingestion processes using the old token will need to be updated with the new token. Requires Admin or Root role.","operationId":"UpdateOrganizationUserIngestToken","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/IngestionPasscode"}}}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Ingestion Token","operation":"update"}}},"/api/{org_id}/password_complexity":{"get":{"tags":["Organizations"],"summary":"Get password complexity requirements","description":"Returns only what a password must look like — length bounds, required character classes, and the special-character set. Readable by any authenticated user in any organization, because the caller who most needs it is one who has just been forced to reset their password and holds no settings permission. Rotation, reuse and lockout settings are never included.","operationId":"GetPasswordComplexity","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordComplexity"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"get"},"x-o2-mcp":{"description":"Get password complexity requirements","category":"system"}}},"/api/{org_id}/pipelines":{"get":{"tags":["Pipelines"],"summary":"List organization pipelines","description":"Retrieves all data processing pipelines configured for the organization, including their status and associated triggers","operationId":"listPipelines","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/Pipeline"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Pipeline","operation":"list"},"x-o2-mcp":{"description":"List all pipelines","category":"pipelines","summary_fields":["pipeline_id","name","description","enabled"]}},"put":{"tags":["Pipelines"],"summary":"Update pipeline","description":"Updates an existing data processing pipeline with new transformation rules, routing configurations, or other settings","operationId":"updatePipeline","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Pipeline data","content":{"application/json":{"schema":{"type":"object","required":["name","nodes","edges"],"properties":{"description":{"type":"string"},"edges":{"type":"array","items":{"$ref":"#/components/schemas/Edge"}},"enabled":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/PipelineKind"},"name":{"type":"string"},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/Node"}},"org":{"type":"string"},"pipeline_id":{"type":"string"},"source":{"$ref":"#/components/schemas/PipelineSource"},"version":{"type":"integer","format":"int32"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"The pipeline is running or changed, refresh and retry","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Pipeline","operation":"update"},"x-o2-mcp":{"description":"Update an existing pipeline. Uses the same schema as createPipeline - include pipeline_id and version from the existing pipeline. See createPipeline for full node/edge structure documentation.","category":"pipelines"}},"post":{"tags":["Pipelines"],"summary":"Create new pipeline","description":"Creates a new data processing pipeline with specified transformations and routing rules. Pipelines define how incoming data is processed before storage","operationId":"createPipeline","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Pipeline data","content":{"application/json":{"schema":{"type":"object","required":["name","nodes","edges"],"properties":{"description":{"type":"string"},"edges":{"type":"array","items":{"$ref":"#/components/schemas/Edge"}},"enabled":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/PipelineKind"},"name":{"type":"string"},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/Node"}},"org":{"type":"string"},"pipeline_id":{"type":"string"},"source":{"$ref":"#/components/schemas/PipelineSource"},"version":{"type":"integer","format":"int32"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"The pipeline is running, retry after the run ends","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Pipeline","operation":"create"},"x-o2-mcp":{"description":"Create a data pipeline for processing and transforming data streams.\n\nPIPELINE STRUCTURE:\n- name: Pipeline name (required, lowercase)\n- source: { \"source_type\": \"realtime\" } for real-time pipelines\n- nodes: Array of processing nodes (required)\n- edges: Array of connections between nodes (required)\n\nNODE STRUCTURE (each node requires):\n- id: Unique identifier (use UUID format)\n- io_type: MUST be one of: \"input\" (source stream), \"output\" (destination stream), \"default\" (processing node like function/condition)\n- position: { \"x\": number, \"y\": number } for visual layout\n- data: Node configuration (structure depends on node_type)\n\nNODE DATA TYPES:\n1. Stream node (input/output): { \"node_type\": \"stream\", \"org_id\": \"default\", \"stream_name\": \"your_stream\", \"stream_type\": \"logs\"|\"metrics\"|\"traces\" }\n2. Function node: { \"node_type\": \"function\", \"name\": \"function_name\", \"after_flatten\": true|false }\n3. Condition node (MUST use version 2): { \"node_type\": \"condition\", \"version\": 2, \"conditions\": <group> }\n\nCONDITION FORMAT (version 2):\nThe conditions field is a group containing a flat array of items. Each item has a logicalOperator field (AND/OR) — this is the boolean connector BEFORE that item. The first item's logicalOperator is ignored but must be present (use AND). AND has higher precedence than OR. Use nested groups for explicit parentheses.\n- Group: { \"filterType\": \"group\", \"logicalOperator\": \"AND\", \"conditions\": [...] }\n- Condition: { \"filterType\": \"condition\", \"column\": \"field\", \"operator\": \"<op>\", \"value\": \"val\", \"logicalOperator\": \"AND\"|\"OR\" }\n- Operators: =, !=, >, >=, <, <=, contains, not_contains, is_null, is_not_null, is_empty, is_not_empty (null/empty checks ignore \"value\"; pass an empty string. is_empty matches null OR empty string)\n\nEXAMPLE - status = \"error\" AND (level > 5 OR source = \"nginx\"):\n{ \"node_type\": \"condition\", \"version\": 2, \"conditions\": { \"filterType\": \"group\", \"logicalOperator\": \"AND\", \"conditions\": [{ \"filterType\": \"condition\", \"column\": \"status\", \"operator\": \"=\", \"value\": \"error\", \"logicalOperator\": \"AND\" }, { \"filterType\": \"group\", \"logicalOperator\": \"AND\", \"conditions\": [{ \"filterType\": \"condition\", \"column\": \"level\", \"operator\": \">\", \"value\": \"5\", \"logicalOperator\": \"OR\" }, { \"filterType\": \"condition\", \"column\": \"source\", \"operator\": \"=\", \"value\": \"nginx\", \"logicalOperator\": \"OR\" }] }] } }\n\nEDGE STRUCTURE:\n- id: Format \"e{source_id}-{target_id}\"\n- source: Source node id\n- target: Target node id\n\nEXAMPLE - Simple pipeline with function:\n{\n  \"name\": \"my_pipeline\",\n  \"source\": { \"source_type\": \"realtime\" },\n  \"nodes\": [\n    { \"id\": \"input-1\", \"io_type\": \"input\", \"position\": {\"x\": 100, \"y\": 100}, \"data\": {\"node_type\": \"stream\", \"org_id\": \"default\", \"stream_name\": \"source_stream\", \"stream_type\": \"logs\"} },\n    { \"id\": \"func-1\", \"io_type\": \"default\", \"position\": {\"x\": 100, \"y\": 200}, \"data\": {\"node_type\": \"function\", \"name\": \"my_function\", \"after_flatten\": true} },\n    { \"id\": \"output-1\", \"io_type\": \"output\", \"position\": {\"x\": 100, \"y\": 300}, \"data\": {\"node_type\": \"stream\", \"org_id\": \"default\", \"stream_name\": \"dest_stream\", \"stream_type\": \"logs\"} }\n  ],\n  \"edges\": [\n    { \"id\": \"einput-1-func-1\", \"source\": \"input-1\", \"target\": \"func-1\" },\n    { \"id\": \"efunc-1-output-1\", \"source\": \"func-1\", \"target\": \"output-1\" }\n  ]\n}","category":"pipelines"}}},"/api/{org_id}/pipelines/backfill":{"get":{"tags":["Pipelines"],"summary":"List all backfill jobs for an organization","description":"Returns a list of all backfill jobs in the specified organization.","operationId":"ListBackfillJobs","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of backfill jobs","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BackfillJobStatus"}}}}},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List all backfill jobs","category":"pipelines","summary_fields":["job_id","pipeline_id","pipeline_name","status","progress_percent","enabled"]},"x-o2-ratelimit":{"module":"Pipeline","operation":"list"}}},"/api/{org_id}/pipelines/bulk":{"delete":{"tags":["Pipelines"],"summary":"Delete multiple pipelines","description":"Permanently deletes multiple data processing pipelines. This will stop any ongoing data transformations using these pipelines","operationId":"deletePipelineBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Pipeline data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Pipeline","operation":"delete"}}},"/api/{org_id}/pipelines/bulk/enable":{"post":{"tags":["Pipelines"],"summary":"Enable or disable pipeline in bulk","description":"Enables or disables data processing pipelines in bulk. Disabled pipelines will not process incoming data until re-enabled","operationId":"enablePipelineBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"Enable or disable pipeline","required":true,"schema":{"type":"boolean"}}],"requestBody":{"description":"Pipeline id list","content":{"application/json":{"schema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string"}}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineBulkEnableResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Pipeline","operation":"update"}}},"/api/{org_id}/pipelines/history":{"get":{"tags":["Pipelines"],"summary":"Get pipeline execution history","description":"Retrieves the execution history of pipelines for the organization. This endpoint queries the organization's own triggers stream to provide details about when pipelines were triggered, their status, and execution details.","operationId":"GetPipelineHistory","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"pipeline_id","in":"query","description":"Filter by specific pipeline id","required":false,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time in Unix timestamp microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time in Unix timestamp microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"from","in":"query","description":"Pagination offset (default: 0)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"Number of results to return (default: 100, max: 1000)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sort_by","in":"query","description":"Field to sort by: timestamp, pipeline_name, status, is_realtime, is_silenced, start_time, end_time, duration, retries, delay_in_secs, evaluation_took_in_secs, source_node, query_took, is_partial (default: timestamp)","required":false,"schema":{"type":"string"}},{"name":"sort_order","in":"query","description":"Sort order: asc or desc (default: desc)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{}}},"403":{"description":"Forbidden","content":{"application/json":{}}},"500":{"description":"Internal Server Error","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Pipeline","operation":"list"}}},"/api/{org_id}/pipelines/streams":{"get":{"tags":["Pipelines"],"summary":"Get streams with pipelines","description":"Retrieves a list of streams that have associated data processing pipelines, showing the relationship between streams and their transformation rules","operationId":"getStreamsWithPipeline","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/Pipeline"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Pipeline","operation":"list"},"x-o2-mcp":{"description":"List streams using pipelines","category":"pipelines"}}},"/api/{org_id}/pipelines/{pipeline_id}":{"get":{"tags":["Pipelines"],"summary":"Get pipeline by ID","description":"Retrieves the details of a specific data processing pipeline by its ID, including its status, trigger info, and any recent errors","operationId":"getPipeline","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"pipeline_id","in":"path","description":"Pipeline ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["name","nodes","edges"],"properties":{"description":{"type":"string"},"edges":{"type":"array","items":{"$ref":"#/components/schemas/Edge"}},"enabled":{"type":"boolean"},"last_error":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PipelineErrorInfo"}]},"name":{"type":"string"},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/Node"}},"org":{"type":"string"},"paused_at":{"type":["integer","null"],"format":"int64"},"pipeline_id":{"type":"string"},"source":{"$ref":"#/components/schemas/PipelineSource"},"version":{"type":"integer","format":"int32"}}}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get pipeline details by ID","category":"pipelines"},"x-o2-ratelimit":{"module":"Pipeline","operation":"get"}},"delete":{"tags":["Pipelines"],"summary":"Delete pipeline","description":"Permanently deletes a data processing pipeline. This will stop any ongoing data transformations using this pipeline","operationId":"deletePipeline","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"pipeline_id","in":"path","description":"Pipeline ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete a pipeline","category":"pipelines","requires_confirmation":true},"x-o2-ratelimit":{"module":"Pipeline","operation":"delete"}}},"/api/{org_id}/pipelines/{pipeline_id}/backfill":{"post":{"tags":["Pipelines"],"summary":"Create a backfill job","description":"Creates a new backfill job to fill gaps in summary streams.","operationId":"CreateBackfillJob","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}},{"name":"pipeline_id","in":"path","description":"Pipeline ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Backfill parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillRequest"},"example":{"start_time":1704067200000000,"end_time":1704153600000000,"chunk_period_minutes":60,"delay_between_chunks_secs":5,"delete_before_backfill":false}}},"required":true},"responses":{"200":{"description":"Backfill job created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillResponse"}}}},"400":{"description":"Bad request"},"404":{"description":"Pipeline not found"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Pipeline","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/pipelines/{pipeline_id}/backfill/{job_id}":{"get":{"tags":["Pipelines"],"summary":"Get backfill job status","description":"Returns the status of a specific backfill job.","operationId":"GetBackfillJob","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}},{"name":"pipeline_id","in":"path","description":"Pipeline ID","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Backfill job ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Backfill job status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillJobStatus"}}}},"404":{"description":"Job not found"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Pipeline","operation":"get"},"x-o2-mcp":{"enabled":true}},"put":{"tags":["Pipelines"],"summary":"Update an existing backfill job","operationId":"UpdateBackfillJob","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}},{"name":"pipeline_id","in":"path","description":"Pipeline ID","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Backfill job ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Backfill job parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillRequest"}}},"required":true},"responses":{"200":{"description":"Backfill job updated successfully"},"400":{"description":"Bad request"},"404":{"description":"Backfill job not found"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Pipeline","operation":"update"}},"delete":{"tags":["Pipelines"],"summary":"Delete a backfill job","description":"Deletes a backfill job permanently.","operationId":"DeleteBackfillJob","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}},{"name":"pipeline_id","in":"path","description":"Pipeline ID","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Backfill job ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Backfill job deleted successfully"},"404":{"description":"Job not found"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Pipeline","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/pipelines/{pipeline_id}/backfill/{job_id}/enable":{"put":{"tags":["Pipelines"],"summary":"Enable or disable a backfill job","description":"Enables (resumes) or disables (pauses) a backfill job.","operationId":"EnableBackfillJob","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}},{"name":"pipeline_id","in":"path","description":"Pipeline ID","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Backfill job ID","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"Enable (true) or disable (false) the backfill job","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Backfill job status updated successfully"},"400":{"description":"Bad request"},"404":{"description":"Job not found"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Pipeline","operation":"update"}}},"/api/{org_id}/pipelines/{pipeline_id}/enable":{"put":{"tags":["Pipelines"],"summary":"Enable or disable pipeline","description":"Enables or disables a data processing pipeline. Disabled pipelines will not process incoming data until re-enabled","operationId":"enablePipeline","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"pipeline_id","in":"path","description":"Pipeline ID","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"Enable or disable pipeline","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Pipeline","operation":"update"},"x-o2-mcp":{"description":"Enable or disable a pipeline","category":"pipelines"}}},"/api/{org_id}/playground/run":{"post":{"tags":["Playground"],"operationId":"RunPlaygroundCell","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["column"],"properties":{"column":{"$ref":"#/components/schemas/PlaygroundColumnBody"},"row":{"$ref":"#/components/schemas/PlaygroundRowBody"}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"Server-Sent Events carrying the model's answer","content":{"text/event-stream":{}}},"400":{"description":"Column or row is not runnable","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Provider is not visible to the caller","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Provider not found","content":{"application/json":{"schema":{"default":null}}}},"429":{"description":"The provider rate limited the request","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"The request could not be started","content":{"application/json":{"schema":{"default":null}}}},"502":{"description":"The provider failed before streaming","content":{"application/json":{"schema":{"default":null}}}},"504":{"description":"The provider timed out before streaming","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Playground","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/playground/score":{"post":{"tags":["Playground"],"operationId":"ScorePlaygroundCell","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["scorerIds","output"],"properties":{"expectedOutput":{},"input":{},"metadata":{},"output":{"type":"string"},"scorerIds":{"type":"array","items":{"type":"string"},"description":"Scorers are resolved at their latest version. Pinning belongs to the\nmoment a column is promoted to an Experiment, not to a draft."}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["results"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/ScoreResultBody"},"description":"One entry per requested scorer, in the order they were asked for. A\nscorer that could not run reports why instead of vanishing."}}}}}},"400":{"description":"Too many scorers named","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"A scorer provider is not visible to the caller","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"A referenced scorer does not exist","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Scorer resolution failed","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Playground","operation":"create"}}},"/api/{org_id}/playground/snapshots":{"post":{"tags":["Playground"],"operationId":"SharePlaygroundSnapshot","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["payload"],"properties":{"parentSnapshotId":{"type":["string","null"],"description":"The snapshot this one was forked from, if any. A parent that has since\nbeen purged is accepted: lineage is a weak reference."},"payload":{"description":"The whole workbench by value: columns, rows, results and scores. Stored\nverbatim, so anything the client sends survives a round trip."}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","payload","createdBy","createdAt","lastAccessedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"id":{"type":"string"},"lastAccessedAt":{"type":"integer","format":"int64"},"parentSnapshotId":{"type":["string","null"]},"payload":{}}}}}},"400":{"description":"Payload is malformed or over a workbench limit","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Playground","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/playground/snapshots/{snapshot_id}":{"get":{"tags":["Playground"],"operationId":"GetPlaygroundSnapshot","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"snapshot_id","in":"path","description":"Snapshot id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","payload","createdBy","createdAt","lastAccessedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"id":{"type":"string"},"lastAccessedAt":{"type":"integer","format":"int64"},"parentSnapshotId":{"type":["string","null"]},"payload":{}}}}}},"404":{"description":"Snapshot not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Playground","operation":"get"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/prometheus/api/v1/format_query":{"get":{"tags":["Metrics"],"summary":"Format Prometheus query","description":"Formats and prettifies a Prometheus query expression. Returns the query in a standardized, readable format which helps with query validation, debugging, and ensuring consistent query formatting across applications.","operationId":"PrometheusFormatQuery","parameters":[{"name":"query","in":"query","description":"Prometheus expression query string.","required":true,"schema":{"type":"string"}},{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFuncResponse_String"},"example":{"status":"success","data":"foo / bar"}}}},"400":{"description":"The query does not parse","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Metrics","operation":"get"},"x-o2-mcp":{"description":"Format PromQL query","category":"metrics"}},"post":{"tags":["Metrics"],"summary":"Format a PromQL expression with form parameters","operationId":"PrometheusFormatQueryPost","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"query","in":"query","description":"PromQL expression; the extractor rejects a request without it, and a non-empty form value wins","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Form fields; they win over the same fields in the query string","content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFuncResponse_String"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Metrics","operation":"get"}}},"/api/{org_id}/prometheus/api/v1/label/{label_name}/values":{"get":{"tags":["Metrics"],"summary":"Get label values","description":"Returns values for a label within the specified time range. Labels other than __name__ require match[] to identify a metric; requests without a metric return 400 because querying all metrics streams is unsupported.","operationId":"PrometheusLabelValues","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"label_name","in":"path","description":"Label name","required":true,"schema":{"type":"string"}},{"name":"match[]","in":"query","description":"Series selector argument that selects the series from which to read the label values","required":true,"schema":{"type":"string"}},{"name":"start","in":"query","description":"<rfc3339 | unix_timestamp>: Start timestamp, optional, defaults to 24 hours before end (all time for __name__)","required":false,"schema":{"type":"string"}},{"name":"end","in":"query","description":"<rfc3339 | unix_timestamp>: End timestamp","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFuncResponse_Vec_String"},"example":{"status":"success","data":["node","prometheus"]}}}},"400":{"description":"Invalid parameters or match[] does not identify a metric","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"No permission to read metrics","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get Prometheus label values","category":"metrics"},"x-o2-ratelimit":{"module":"Metrics","operation":"get"}}},"/api/{org_id}/prometheus/api/v1/labels":{"get":{"tags":["Metrics"],"summary":"Get metric label names","description":"Returns a list of label names available in the metric data within the specified time range. Optionally filter by series selector to get labels for specific metrics. Useful for building dynamic queries and understanding data structure.","operationId":"PrometheusLabels","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"match[]","in":"query","description":"Series selector argument that selects the series from which to read the label names","required":true,"schema":{"type":"string"}},{"name":"start","in":"query","description":"<rfc3339 | unix_timestamp>: Start timestamp","required":false,"schema":{"type":"string"}},{"name":"end","in":"query","description":"<rfc3339 | unix_timestamp>: End timestamp","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFuncResponse_Vec_String"},"example":{"status":"success","data":["__name__","call","code","config","dialer_name","endpoint","event","goversion","handler","instance","interval","job","le","listener_name","name","quantile","reason","role","scrape_job","slice","version"]}}}},"400":{"description":"Invalid match[] or time range","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"No permission to read metrics","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get Prometheus label names, must have start and end time","category":"metrics"},"x-o2-ratelimit":{"module":"Metrics","operation":"get"}},"post":{"tags":["Metrics"],"summary":"List Prometheus labels with form parameters","operationId":"PrometheusLabelsPost","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Form fields; they win over the same fields in the query string","content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","description":"Request a list of label names.","properties":{"end":{"type":["string","null"],"description":"End timestamp."},"match[]":{"type":["string","null"],"description":"Series selector argument that selects the series from which to read\nthe label names.\n\nNOTE: Prometheus API allows passing any number of `match[]` arguments,\nbut we requires that exactly one is passed."},"start":{"type":["string","null"],"description":"Start timestamp."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFuncResponse_Vec_String"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Metrics","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/prometheus/api/v1/metadata":{"get":{"tags":["Metrics"],"summary":"Get metric metadata","description":"Retrieves metadata information about metrics including their type, help text, and units. Provides essential information for understanding metric semantics and proper usage in queries and visualizations.","operationId":"PrometheusMetadata","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum number of metrics to return","required":true,"schema":{"type":"string"}},{"name":"metric","in":"query","description":"A metric name to filter metadata for. All metric metadata is retrieved if left empty","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFuncResponse_HashMap_String_Vec_MetadataObject"},"example":{"status":"success","data":{"cortex_ring_tokens":[{"type":"gauge","help":"Number of tokens in the ring","unit":""}],"http_requests_total":[{"type":"counter","help":"Number of HTTP requests","unit":""},{"type":"counter","help":"Amount of HTTP requests","unit":""}]}}}}},"403":{"description":"No permission to read metrics","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Metrics","operation":"get"},"x-o2-mcp":{"description":"Get Prometheus metadata","category":"metrics"}}},"/api/{org_id}/prometheus/api/v1/parse_tree":{"post":{"tags":["Metrics"],"summary":"Parse a PromQL query into a tree","description":"Parses a PromQL query and returns OpenObserve's JSON tree of it: selectors and matrices (with any offset), calls, aggregates (by or without), binary operations including a plain or, numbers and parentheses, with every other construct marked unsupported. Distinct from Prometheus's parse_query, whose response shape differs.","operationId":"PrometheusParseTree","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The query to parse","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestParseTree"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"status":"success","data":{"type":"selector","name":"up","matchers":[]}}}}},"400":{"description":"The query does not parse","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Metrics","operation":"get"}}},"/api/{org_id}/prometheus/api/v1/query":{"get":{"tags":["Metrics"],"summary":"Execute Prometheus instant query","description":"Executes a Prometheus instant query at a single point in time. Returns current values for metrics matching the query expression. Compatible with Prometheus instant query API for seamless integration with existing monitoring tools.","operationId":"PrometheusQuery","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"query","in":"query","description":"Prometheus expression query string","required":true,"schema":{"type":"string"}},{"name":"time","in":"query","description":"<rfc3339 | unix_timestamp>: Evaluation timestamp. Optional","required":false,"schema":{"type":"string"}},{"name":"timeout","in":"query","description":"Evaluation timeout","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrometheusQueryResponse"},"example":{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"prometheus","instance":"localhost:9090"},"value":[1435781451.781,"1"]},{"metric":{"__name__":"up","job":"node","instance":"localhost:9100"},"value":[1435781451.781,"0"]}]}}}}},"400":{"description":"Invalid query or time","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"No permission on the metric stream","content":{"application/json":{"schema":{"default":null}}}},"429":{"description":"Search disabled after exceeding the licensed ingestion limit, or rate limited","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Metrics","operation":"get"},"x-o2-mcp":{"description":"Execute PromQL instant query","category":"metrics"}},"post":{"tags":["Metrics"],"summary":"Execute Prometheus instant query with form parameters","operationId":"PrometheusQueryPost","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Form fields; they win over the same fields in the query string","content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","description":"Instant query.","properties":{"query":{"type":["string","null"],"description":"PromQL expression."},"time":{"type":["string","null"],"description":"Evaluation timestamp. Defaults to current server time."},"timeout":{"type":["string","null"],"description":"Evaluation timeout."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrometheusQueryResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Metrics","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/prometheus/api/v1/query_exemplars":{"get":{"tags":["Metrics"],"summary":"Query Prometheus exemplars","description":"Queries exemplars for metrics within a specified time range. Exemplars are references to trace data that are associated with specific metric data points, enabling correlation between metrics and traces for observability workflows.","operationId":"PrometheusQueryExemplars","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"query","in":"query","description":"Prometheus expression query string; an empty one fails to parse","required":true,"schema":{"type":"string"}},{"name":"start","in":"query","description":"<rfc3339 | unix_timestamp>: Start timestamp, inclusive; defaults to now","required":false,"schema":{"type":"string"}},{"name":"end","in":"query","description":"<rfc3339 | unix_timestamp>: End timestamp, inclusive; defaults to now","required":false,"schema":{"type":"string"}},{"name":"step","in":"query","description":"Query resolution step width in duration format or float number of seconds","required":false,"schema":{"type":"string"}},{"name":"timeout","in":"query","description":"Evaluation timeout","required":false,"schema":{"type":"string"}},{"name":"use_cache","in":"query","description":"Use the result cache","required":false,"schema":{"type":"boolean"}},{"name":"search_type","in":"query","description":"Search event type the query is recorded under","required":false,"schema":{"type":"string"}},{"name":"regions","in":"query","description":"Comma-separated regions to query; all when empty","required":false,"schema":{"type":"string"}},{"name":"clusters","in":"query","description":"Comma-separated clusters to query; all when empty","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrometheusExemplarsResponse"},"example":{"status":"success","data":[{"seriesLabels":{"__name__":"test_exemplar_metric_total","instance":"localhost:8090","job":"prometheus","service":"bar"},"exemplars":[{"labels":{"trace_id":"EpTxMJ40fUus7aGY"},"value":"6","timestamp":1600096945.479}]},{"seriesLabels":{"__name__":"test_exemplar_metric_total","instance":"localhost:8090","job":"prometheus","service":"foo"},"exemplars":[{"labels":{"trace_id":"Olp9XHlq763ccsfa"},"value":"19","timestamp":1600096955.479},{"labels":{"trace_id":"hCtjygkIHwAN9vs4"},"value":"20","timestamp":1600096965.489}]}]}}}},"400":{"description":"Invalid query, time range, step or search type","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"No permission on the metric stream","content":{"application/json":{"schema":{"default":null}}}},"429":{"description":"Search disabled after exceeding the licensed ingestion limit, or rate limited","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Metrics","operation":"get"}},"post":{"tags":["Metrics"],"summary":"Query Prometheus exemplars with form parameters","operationId":"PrometheusQueryExemplarsPost","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Form fields; they win over the same fields in the query string","content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","description":"Range query.","properties":{"clusters":{"type":["string","null"]},"end":{"type":["string","null"],"description":"End timestamp, inclusive."},"query":{"type":["string","null"],"description":"PromQL expression."},"regions":{"type":["string","null"]},"search_type":{"type":["string","null"]},"start":{"type":["string","null"],"description":"Start timestamp, inclusive."},"step":{"type":["string","null"],"description":"Query resolution step width in `duration` format or float number of\nseconds."},"timeout":{"type":["string","null"],"description":"Evaluation timeout."},"use_cache":{"type":["boolean","null"],"description":"Use cache."},"use_streaming":{"type":["boolean","null"],"description":"Use streaming output."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrometheusExemplarsResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Metrics","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/prometheus/api/v1/query_range":{"get":{"tags":["Metrics"],"summary":"Execute Prometheus range query","description":"Executes a Prometheus range query over a specified time period. Returns time series data with multiple data points for metrics matching the query expression. Compatible with Prometheus range query API for time series analysis and visualization.","operationId":"PrometheusRangeQuery","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"query","in":"query","description":"Prometheus expression query string","required":true,"schema":{"type":"string"}},{"name":"start","in":"query","description":"<rfc3339 | unix_timestamp>: Start timestamp, inclusive","required":true,"schema":{"type":"string"}},{"name":"end","in":"query","description":"<rfc3339 | unix_timestamp>: End timestamp, inclusive","required":true,"schema":{"type":"string"}},{"name":"step","in":"query","description":"Query resolution step width in duration format or float number of seconds","required":false,"schema":{"type":"string"}},{"name":"timeout","in":"query","description":"Evaluation timeout","required":false,"schema":{"type":"string"}},{"name":"use_streaming","in":"query","description":"Answer with a server-sent event stream instead of JSON","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"JSON result, or a server-sent event stream when use_streaming is true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrometheusQueryResponse"},"example":{"status":"success","data":{"resultType":"matrix","result":[{"metric":{"__name__":"up","job":"prometheus","instance":"localhost:9090"},"values":[[1435781430.781,"1"],[1435781445.781,"1"],[1435781460.781,"1"]]},{"metric":{"__name__":"up","job":"node","instance":"localhost:9091"},"values":[[1435781430.781,"0"],[1435781445.781,"0"],[1435781460.781,"1"]]}]}}},"text/event-stream":{}}},"400":{"description":"Invalid query, time range, step or search type","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"No permission on the metric stream","content":{"application/json":{"schema":{"default":null}}}},"429":{"description":"Search disabled after exceeding the licensed ingestion limit, or rate limited","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Execute PromQL range query","category":"metrics","pinned":true},"x-o2-ratelimit":{"module":"Metrics","operation":"get"}},"post":{"tags":["Metrics"],"summary":"Execute Prometheus range query with form parameters","operationId":"PrometheusRangeQueryPost","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Form fields; they win over the same fields in the query string","content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","description":"Range query.","properties":{"clusters":{"type":["string","null"]},"end":{"type":["string","null"],"description":"End timestamp, inclusive."},"query":{"type":["string","null"],"description":"PromQL expression."},"regions":{"type":["string","null"]},"search_type":{"type":["string","null"]},"start":{"type":["string","null"],"description":"Start timestamp, inclusive."},"step":{"type":["string","null"],"description":"Query resolution step width in `duration` format or float number of\nseconds."},"timeout":{"type":["string","null"],"description":"Evaluation timeout."},"use_cache":{"type":["boolean","null"],"description":"Use cache."},"use_streaming":{"type":["boolean","null"],"description":"Use streaming output."}}}}},"required":true},"responses":{"200":{"description":"JSON result, or a server-sent event stream when use_streaming is true","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrometheusQueryResponse"}},"text/event-stream":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Metrics","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/prometheus/api/v1/series":{"get":{"tags":["Metrics"],"summary":"Find metric series","description":"Finds time series that match given label matchers. Returns the unique combinations of metric names and labels that exist in the specified time range. Useful for discovering available metrics and their label combinations.","operationId":"PrometheusSeries","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"match[]","in":"query","description":"<series_selector>: Series selector argument that selects the series to return","required":true,"schema":{"type":"string"}},{"name":"start","in":"query","description":"<rfc3339 | unix_timestamp>: Start timestamp, optional, defaults to 24 hours before end","required":false,"schema":{"type":"string"}},{"name":"end","in":"query","description":"<rfc3339 | unix_timestamp>: End timestamp, optional, defaults to now","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"status":"success","data":[{"__name__":"up","job":"prometheus","instance":"localhost:9090"},{"__name__":"up","job":"node","instance":"localhost:9091"},{"__name__":"process_start_time_seconds","job":"prometheus","instance":"localhost:9090"}]}}}},"400":{"description":"Invalid match[] or time range","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"No permission on the metric stream","content":{"application/json":{"schema":{"default":null}}}},"429":{"description":"Search disabled after exceeding the licensed ingestion limit, or rate limited","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Metrics","operation":"get"},"x-o2-mcp":{"description":"Get Prometheus series, start and end time are optional (default: last 24 hours)","category":"metrics"}},"post":{"tags":["Metrics"],"summary":"Find Prometheus series with form parameters","operationId":"PrometheusSeriesPost","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Form fields; they win over the same fields in the query string","content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","description":"Request a list of time series that match a certain label set.","properties":{"end":{"type":["string","null"],"description":"End timestamp."},"match[]":{"type":["string","null"],"description":"Series selector argument that selects the series to return.\n\nNOTE: Prometheus API allows passing multiple `match[]` arguments,\nbut we only supports a single one."},"start":{"type":["string","null"],"description":"Start timestamp."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Metrics","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/prometheus/api/v1/write":{"post":{"tags":["Metrics"],"summary":"Ingest Prometheus metrics","description":"Receives Prometheus metrics data via remote write protocol. Accepts protobuf-encoded WriteRequest payloads containing time series data and stores them for querying. Compatible with standard Prometheus remote write configuration.","operationId":"PrometheusRemoteWrite","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"prometheus WriteRequest","content":{"application/x-protobuf":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Ingested; empty body"},"400":{"description":"Not a protobuf body, the payload cannot be ingested, or part of it was not written","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/prompts":{"get":{"tags":["Prompts"],"operationId":"list_prompts","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"includeArchived","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"folderId","in":"query","description":"`folder` is the name the permission check reads, so a caller scoped to one\nfolder must use it; `folderId` only filters.","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/PromptResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Prompts","operation":"list"},"x-o2-mcp":{"enabled":true}},"post":{"tags":["Prompts"],"operationId":"create_prompt","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder the permission check authorizes; must name the folder in the body. Defaults to the default folder.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["name","type","payload","commitMessage"],"properties":{"commitMessage":{"type":"string"},"config":{"$ref":"#/components/schemas/PromptConfig"},"description":{"type":["string","null"]},"folderId":{"type":"string"},"name":{"type":"string"},"payload":{},"source":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string"}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["prompt","version","created","replayed"],"properties":{"created":{"type":"boolean"},"prompt":{"$ref":"#/components/schemas/PromptResponseBody"},"replayed":{"type":"boolean"},"version":{"$ref":"#/components/schemas/PromptVersionResponseBody"}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Prompts","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/prompts/match":{"post":{"tags":["Prompts"],"operationId":"match_prompts","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder the permission check authorizes. Defaults to the default folder.","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["type","payload"],"properties":{"config":{"$ref":"#/components/schemas/PromptConfig"},"payload":{},"type":{"type":"string"}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["matches"],"properties":{"matches":{"type":"array","items":{"$ref":"#/components/schemas/PromptMatchResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Prompts","operation":"create"}}},"/api/{org_id}/prompts/resolve":{"get":{"tags":["Prompts"],"operationId":"resolve_prompt","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"name","in":"query","description":"Prompt name.","required":true,"schema":{"type":"string"}},{"name":"label","in":"query","description":"Movable label to resolve. Defaults to `production` when both `label`\nand `version` are omitted.","required":false,"schema":{"type":["string","null"]}},{"name":"version","in":"query","description":"Immutable prompt version to resolve.","required":false,"schema":{"type":["integer","null"],"format":"int32"}},{"name":"folder","in":"query","description":"Optional folder assertion. A mismatch returns the prompt with an HTTP\n`Warning` header.","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"","headers":{"Warning":{"schema":{"type":"string"},"description":"Folder assertion mismatch"}},"content":{"application/json":{"schema":{"type":"object","required":["prompt","version"],"properties":{"label":{"type":["string","null"]},"prompt":{"$ref":"#/components/schemas/PromptResponseBody"},"version":{"$ref":"#/components/schemas/PromptVersionResponseBody"}}}}}},"304":{"description":""}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Prompts","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/prompts/settings":{"get":{"tags":["Prompts"],"operationId":"get_prompt_settings","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["protectedLabels"],"properties":{"protectedLabels":{"type":"array","items":{"type":"string"},"uniqueItems":true},"webhook":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PromptWebhookSettingsResponseBody"}]}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Prompts","operation":"list"}},"put":{"tags":["Prompts"],"operationId":"update_prompt_settings","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"protectedLabels":{"type":"array","items":{"type":"string"},"uniqueItems":true},"webhook":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PromptWebhookSettingsRequestBody"}]}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["protectedLabels"],"properties":{"protectedLabels":{"type":"array","items":{"type":"string"},"uniqueItems":true},"webhook":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PromptWebhookSettingsResponseBody"}]}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Prompts","operation":"update"}}},"/api/{org_id}/prompts/settings/secret":{"put":{"tags":["Prompts"],"operationId":"update_prompt_secret","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["secret"],"properties":{"secret":{"type":"string"}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["secretConfigured"],"properties":{"secretConfigured":{"type":"boolean"}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Prompts","operation":"update"}}},"/api/{org_id}/prompts/{entity_id}":{"get":{"tags":["Prompts"],"operationId":"get_prompt","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["entityId","name","folderId","type","tags","status","latestVersion","createdBy","createdAt","updatedBy","updatedAt","labels"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"folderId":{"type":"string"},"labels":{"type":"array","items":{"$ref":"#/components/schemas/PromptLabelResponseBody"}},"latestVersion":{"type":"integer","format":"int32"},"name":{"type":"string"},"status":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Prompts","operation":"get"}},"patch":{"tags":["Prompts"],"operationId":"update_prompt","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":["string","null"]},"folderId":{"type":["string","null"]},"tags":{"type":["array","null"],"items":{"type":"string"}}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["entityId","name","folderId","type","tags","status","latestVersion","createdBy","createdAt","updatedBy","updatedAt","labels"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"folderId":{"type":"string"},"labels":{"type":"array","items":{"$ref":"#/components/schemas/PromptLabelResponseBody"}},"latestVersion":{"type":"integer","format":"int32"},"name":{"type":"string"},"status":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Prompts","operation":"update"}}},"/api/{org_id}/prompts/{entity_id}/activity":{"get":{"tags":["Prompts"],"operationId":"list_prompt_activity","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["activity"],"properties":{"activity":{"type":"array","items":{"$ref":"#/components/schemas/PromptActivityResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Prompts","operation":"list"}}},"/api/{org_id}/prompts/{entity_id}/archive":{"post":{"tags":["Prompts"],"operationId":"archive_prompt","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["entityId","name","folderId","type","tags","status","latestVersion","createdBy","createdAt","updatedBy","updatedAt","labels"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"folderId":{"type":"string"},"labels":{"type":"array","items":{"$ref":"#/components/schemas/PromptLabelResponseBody"}},"latestVersion":{"type":"integer","format":"int32"},"name":{"type":"string"},"status":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Prompts","operation":"create"}}},"/api/{org_id}/prompts/{entity_id}/labels/{label}":{"put":{"tags":["Prompts"],"operationId":"move_prompt_label","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"label","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["version"],"properties":{"ifVersion":{"type":["integer","null"],"format":"int32"},"version":{"type":"integer","format":"int32"}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["name","updatedBy","updatedAt"],"properties":{"deletedAt":{"type":["integer","null"],"format":"int64"},"name":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"version":{"type":["integer","null"],"format":"int32"}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Prompts","operation":"update"}},"delete":{"tags":["Prompts"],"operationId":"delete_prompt_label","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"label","in":"path","required":true,"schema":{"type":"string"}},{"name":"ifVersion","in":"query","required":false,"schema":{"type":["integer","null"],"format":"int32"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["name","updatedBy","updatedAt"],"properties":{"deletedAt":{"type":["integer","null"],"format":"int64"},"name":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"version":{"type":["integer","null"],"format":"int32"}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true,"requires_confirmation":true},"x-o2-ratelimit":{"module":"Prompts","operation":"delete"}}},"/api/{org_id}/prompts/{entity_id}/versions":{"get":{"tags":["Prompts"],"operationId":"list_prompt_versions","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["versions"],"properties":{"versions":{"type":"array","items":{"$ref":"#/components/schemas/PromptVersionResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Prompts","operation":"list"},"x-o2-mcp":{"enabled":true}},"post":{"tags":["Prompts"],"operationId":"create_prompt_version","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"if_head","in":"query","required":false,"schema":{"type":["integer","null"],"format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["payload","commitMessage"],"properties":{"baseHash":{"type":["string","null"]},"baseVersion":{"type":["integer","null"],"format":"int32"},"commitMessage":{"type":"string"},"config":{"$ref":"#/components/schemas/PromptConfig"},"payload":{},"source":{"type":"string"}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["prompt","version","created","replayed"],"properties":{"created":{"type":"boolean"},"prompt":{"$ref":"#/components/schemas/PromptResponseBody"},"replayed":{"type":"boolean"},"version":{"$ref":"#/components/schemas/PromptVersionResponseBody"}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Prompts","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/prompts/{entity_id}/versions/{version}":{"get":{"tags":["Prompts"],"operationId":"get_prompt_version","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"version","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","entityId","version","payload","config","commitMessage","source","contentHash","createdBy","createdAt"],"properties":{"baseVersion":{"type":["integer","null"],"format":"int32"},"commitMessage":{"type":"string"},"config":{"$ref":"#/components/schemas/PromptConfig"},"contentHash":{"type":"string"},"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"entityId":{"type":"string"},"id":{"type":"string"},"payload":{},"source":{"type":"string"},"version":{"type":"integer","format":"int32"}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Prompts","operation":"get"}}},"/api/{org_id}/providers":{"get":{"tags":["Providers"],"summary":"List LLM providers","description":"Lists all configured LLM providers for the organization. Auth credentials are masked in responses.","operationId":"ListProviders","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for listing Providers.","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/ProviderResponseBody"}}}}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Providers","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Providers"],"summary":"Create LLM provider","description":"Creates a new LLM provider configuration. The auth_config field is write-once and cannot be retrieved after creation.","operationId":"CreateProvider","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Provider configuration","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for creating/updating a Provider.","required":["name","providerType","authConfig"],"properties":{"authConfig":{},"availableModels":{"type":"array","items":{"type":"string"}},"defaultModel":{"type":"string"},"endpoint":{"type":["string","null"]},"isDefault":{"type":"boolean"},"name":{"type":"string"},"providerType":{"type":"string"},"rateLimits":{"type":["object","null"]}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a Provider (auth_config masked).","required":["id","orgId","name","providerType","resolvedEndpoint","defaultModel","availableModels","authConfigMasked","isDefault","createdAt","updatedAt"],"properties":{"authConfigMasked":{"type":"boolean","description":"API key / auth config is masked in responses."},"availableModels":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"integer","format":"int64"},"defaultModel":{"type":"string"},"endpoint":{"type":["string","null"],"description":"Null for a provider on the built-in default, so the form field stays empty."},"id":{"type":"string"},"isDefault":{"type":"boolean"},"name":{"type":"string"},"orgId":{"type":"string"},"providerType":{"type":"string"},"rateLimits":{"type":["object","null"]},"resolvedEndpoint":{"type":"string","description":"The URL actually called, with the default filled in when `endpoint` is null."},"updatedAt":{"type":"integer","format":"int64"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Providers","operation":"create"}}},"/api/{org_id}/providers/test":{"post":{"tags":["Providers"],"summary":"Test an inline LLM provider configuration","description":"Tests connectivity using the submitted provider configuration directly, without persisting it — useful for validating settings before creating or updating the provider.","operationId":"TestProviderConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Provider configuration to test","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ProviderRequestBody"},{"type":"object","properties":{"providerId":{"type":["string","null"]}}}],"description":"HTTP request body for testing a Provider without persisting changes."}}},"required":true},"responses":{"200":{"description":"Connection succeeded","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Invalid configuration or connection failed","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Providers","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/providers/{provider_id}":{"get":{"tags":["Providers"],"summary":"Get LLM provider by ID","description":"Retrieves a single LLM provider. The auth_config is masked.","operationId":"GetProvider","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"provider_id","in":"path","description":"Provider ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a Provider (auth_config masked).","required":["id","orgId","name","providerType","resolvedEndpoint","defaultModel","availableModels","authConfigMasked","isDefault","createdAt","updatedAt"],"properties":{"authConfigMasked":{"type":"boolean","description":"API key / auth config is masked in responses."},"availableModels":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"integer","format":"int64"},"defaultModel":{"type":"string"},"endpoint":{"type":["string","null"],"description":"Null for a provider on the built-in default, so the form field stays empty."},"id":{"type":"string"},"isDefault":{"type":"boolean"},"name":{"type":"string"},"orgId":{"type":"string"},"providerType":{"type":"string"},"rateLimits":{"type":["object","null"]},"resolvedEndpoint":{"type":"string","description":"The URL actually called, with the default filled in when `endpoint` is null."},"updatedAt":{"type":"integer","format":"int64"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Providers","operation":"get"}},"put":{"tags":["Providers"],"summary":"Update LLM provider","description":"Updates an existing LLM provider configuration.","operationId":"UpdateProvider","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"provider_id","in":"path","description":"Provider ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Updated provider configuration","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for creating/updating a Provider.","required":["name","providerType","authConfig"],"properties":{"authConfig":{},"availableModels":{"type":"array","items":{"type":"string"}},"defaultModel":{"type":"string"},"endpoint":{"type":["string","null"]},"isDefault":{"type":"boolean"},"name":{"type":"string"},"providerType":{"type":"string"},"rateLimits":{"type":["object","null"]}}}}},"required":true},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a Provider (auth_config masked).","required":["id","orgId","name","providerType","resolvedEndpoint","defaultModel","availableModels","authConfigMasked","isDefault","createdAt","updatedAt"],"properties":{"authConfigMasked":{"type":"boolean","description":"API key / auth config is masked in responses."},"availableModels":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"integer","format":"int64"},"defaultModel":{"type":"string"},"endpoint":{"type":["string","null"],"description":"Null for a provider on the built-in default, so the form field stays empty."},"id":{"type":"string"},"isDefault":{"type":"boolean"},"name":{"type":"string"},"orgId":{"type":"string"},"providerType":{"type":"string"},"rateLimits":{"type":["object","null"]},"resolvedEndpoint":{"type":"string","description":"The URL actually called, with the default filled in when `endpoint` is null."},"updatedAt":{"type":"integer","format":"int64"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Providers","operation":"update"}},"delete":{"tags":["Providers"],"summary":"Delete LLM provider","description":"Permanently deletes the LLM provider configuration.","operationId":"DeleteProvider","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"provider_id","in":"path","description":"Provider ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Providers","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/public_dashboards":{"get":{"tags":["Public Dashboards"],"summary":"List public dashboard links of an organization","operationId":"ListOrgPublicDashboardLinks","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLinkList"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Dashboards","operation":"list"}}},"/api/{org_id}/public_dashboards/status":{"get":{"tags":["Public Dashboards"],"summary":"Get the status of public dashboard links","operationId":"ListPublicDashboardLinkStatuses","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"ids","in":"query","description":"Comma-separated link ids","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkStatusList"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/query_functions":{"get":{"tags":["Search"],"summary":"GET /api/{org_id}/query_functions","description":"Returns every function this organisation can call: the DataFusion registry\n(including the JSON family), the O2 UDFs, the SQL-rewriter aliases, and the\norg's own VRL transforms.","operationId":"QueryFunctions","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryFunctionsResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/query_history":{"get":{"tags":["Query History"],"summary":"List query history","description":"Lists the caller's query history, most recently run first. With count_only=true it answers {\"count\": n} (QueryHistoryCountResponse), the number of entries the filters match. Empty, or a count of 0, when ZO_QUERY_HISTORY_ENABLED is false.","operationId":"ListQueryHistory","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"source","in":"query","description":"Comma list of sources (logs, traces, metrics, dbm, profiles); omitted means metrics.","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","description":"`ok` or `error`.","required":false,"schema":{"type":"string"}},{"name":"stream","in":"query","description":"Exact stream name the entry ran on.","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Case-insensitive substring of the query text or the stream names.","required":false,"schema":{"type":"string"}},{"name":"starred","in":"query","description":"Only starred (`true`) or only unstarred (`false`) entries.","required":false,"schema":{"type":"boolean"}},{"name":"ran_from","in":"query","description":"Entries last run at or after this time, in microseconds.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"ran_to","in":"query","description":"Entries last run at or before this time, in microseconds.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"limit","in":"query","description":"Defaults to 50, at most 200.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"offset","in":"query","description":"Entries to skip, for paging. Defaults to 0, at most 9223372036854775807.","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"count_only","in":"query","description":"Answer `{\"count\": n}`, the number of entries the filters match, instead of the entries.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"The entries, or with count_only=true the count","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryHistoryListResponse"}}}},"400":{"description":"Unknown source or status, or an offset above 9223372036854775807","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Query History","operation":"list"}},"post":{"tags":["Query History"],"summary":"Record a query history entry","description":"Records a query the caller ran. A run with the same source and query_key as an existing entry of the caller merges into it: the run count goes up and the latest run time, context and status replace the old ones. Stores nothing and answers 204 when ZO_QUERY_HISTORY_ENABLED is false.","operationId":"RecordQueryHistory","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Query and its context","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryHistoryRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryHistoryEntry"}}}},"204":{"description":"Query history is disabled; nothing was stored"},"400":{"description":"Unknown source or status, query empty, query or context too large, too many streams, or an empty stream name or one with a comma (the message lists them)","content":{"application/json":{"schema":{"default":null}}}},"413":{"description":"Request body larger than 128 KB"},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Query History","operation":"create"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["Query History"],"summary":"Clear the caller's query history","description":"Deletes the caller's query history entries for the given sources, or all sources. Starred entries are kept unless include_starred is true.","operationId":"ClearQueryHistory","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"source","in":"query","description":"One source or a comma-separated list; all sources when omitted.","required":false,"schema":{"type":"string"}},{"name":"include_starred","in":"query","description":"Also delete starred entries. Defaults to false.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryHistoryClearResponse"}}}},"400":{"description":"Unknown source","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Query History","operation":"delete"}}},"/api/{org_id}/query_history/{id}":{"delete":{"tags":["Query History"],"summary":"Delete a query history entry","description":"Deletes one of the caller's query history entries.","operationId":"DeleteQueryHistory","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Entry id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Query History","operation":"delete"}},"patch":{"tags":["Query History"],"summary":"Star or unstar a query history entry","description":"Starred entries are kept until deleted. A user can star at most 200 entries per organization, shared across every source (logs, traces, metrics, dbm, profiles).","operationId":"StarQueryHistory","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Entry id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Starred flag","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryHistoryStarRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryHistoryEntry"}}}},"400":{"description":"Starred entry limit reached","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"default":null}}}},"413":{"description":"Request body larger than 128 KB"},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Query History","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/query_manager/cancel":{"put":{"tags":["Search"],"summary":"Cancel running queries","operationId":"CancelQueries","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Queries to cancel","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"A query to cancel and the org it runs in.","required":["trace_id","org_id"],"properties":{"org_id":{"type":"string"},"trace_id":{"type":"string"}}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["trace_id","is_success"],"properties":{"is_success":{"type":"boolean"},"trace_id":{"type":"string"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/query_manager/status":{"get":{"tags":["Search"],"summary":"List running queries","operationId":"GetQueryManagerStatus","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryStatusResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/quota/{feature}/paid_overage":{"get":{"tags":["Organizations"],"summary":"GetPaidOverageStatus","operationId":"GetPaidOverageStatus","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"feature","in":"path","description":"Cumulative quota feature; currently ai_credits","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cumulative paid-overage state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaidOverageStatus"}}}},"400":{"description":"Unknown or unsupported quota feature"},"503":{"description":"Billing or quota state unavailable"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"list"},"x-o2-mcp":{"enabled":true}},"put":{"tags":["Organizations"],"summary":"SetPaidOverageStatus","operationId":"SetPaidOverageStatus","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"feature","in":"path","description":"Cumulative quota feature; currently ai_credits","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaidOverageUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Updated cumulative paid-overage state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaidOverageStatus"}}}},"400":{"description":"Unknown or unsupported quota feature"},"403":{"description":"Only organization administrators may change consent"},"409":{"description":"Organization is not eligible for paid overage"},"503":{"description":"Billing or quota state unavailable"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Organizations","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/quota/{pool}/usage_limit":{"put":{"tags":["Organizations"],"summary":"Set an organization's allowance for one quota pool","operationId":"SetQuotaUsageLimit","parameters":[{"name":"org_id","in":"path","description":"Must be _meta","required":true,"schema":{"type":"string"}},{"name":"pool","in":"path","description":"ai_credits | synthetics_browser_steps | synthetics_protocol_steps | synthetics_status_protocol (the pre-split key `synthetics_steps` is accepted as an alias for the protocol pool)","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"`limit` is the pool's new ceiling, not an increment (spent 40 of 50, +20 => 70).","required":["org_id","limit"],"properties":{"limit":{"type":"integer","format":"int64","minimum":0},"org_id":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Updated pool usage","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolUsageResponse"}}}},"400":{"description":"Unknown pool"},"401":{"description":"Unauthorized"},"404":{"description":"Organization not found"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Organizations","operation":"update"}}},"/api/{org_id}/ratelimit/api_modules":{"get":{"tags":["Ratelimit"],"summary":"List API modules","description":"Retrieves all available API modules that can have rate limiting rules applied. Used for configuring rate limits at the module level","operationId":"listApiModule","parameters":[{"name":"org_id","in":"path","description":"Organization Name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Ratelimit","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ratelimit/module_list":{"get":{"tags":["Ratelimit"],"summary":"List module rate limit rules","description":"Retrieves rate limiting rules applied at the organization module level, including thresholds and configurations for different API groups","operationId":"listModuleRatelimitRule","parameters":[{"name":"org_id","in":"path","description":"Organization Name","required":true,"schema":{"type":"string"}},{"name":"org_id","in":"query","description":"Organization Name","required":true,"schema":{"type":"string"}},{"name":"interval","in":"query","description":"Time interval: second/minute/hour (default: second)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Ratelimit","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/ratelimit/role_list":{"get":{"tags":["Ratelimit"],"summary":"List role-based rate limit rules","description":"Retrieves rate limiting rules applied to specific user roles within the organization, showing how different roles have different API usage limits","operationId":"listRoleRatelimitRule","parameters":[{"name":"org_id","in":"path","description":"Organization Name","required":true,"schema":{"type":"string"}},{"name":"org_id","in":"query","description":"Organization Name","required":true,"schema":{"type":"string"}},{"name":"user_role","in":"query","description":"User Role Name","required":true,"schema":{"type":"string"}},{"name":"interval","in":"query","description":"Time interval: second/minute/hour (default: second)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Ratelimit","operation":"list"}}},"/api/{org_id}/ratelimit/update":{"put":{"tags":["Ratelimit"],"summary":"Update rate limit rules","description":"Updates rate limiting rules for modules or user roles. Allows setting custom thresholds for different API operations and groups","operationId":"UpdateRatelimitRule","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"org_id","in":"query","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"update_type","in":"query","description":"Update Type","required":true,"schema":{"type":"string"}},{"name":"user_role","in":"query","description":"UserRole name","required":false,"schema":{"type":"string"}},{"name":"interval","in":"query","description":"Time interval: second/minute/hour (default: second)","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"json array","content":{"application/json":{"schema":{"type":"string"},"example":{"Key Values":{"list":0,"create":0,"delete":0,"get":0},"Service Accounts":{"update":0,"list":0,"create":0,"delete":0,"get":0}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Ratelimit","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/re_patterns":{"get":{"tags":["RePattern"],"summary":"List all regex patterns for organization","description":"Lists all regex patterns available within the specified organization","operationId":"ListRegexPatterns","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"list all patterns in the org","content":{"application/json":{"schema":{"type":"object","required":["patterns"],"properties":{"patterns":{"type":"array","items":{"$ref":"#/components/schemas/PatternInfo"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RePatterns","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["RePattern"],"summary":"Create a new regex pattern","description":"Stores a new regular expression pattern for log processing and data extraction","operationId":"SaveRegexPattern","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"re_pattern to add","content":{"application/json":{"schema":{"type":"object","required":["name","description","pattern"],"properties":{"description":{"type":"string"},"name":{"type":"string"},"pattern":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RePatterns","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/re_patterns/built-in":{"get":{"tags":["RePattern"],"summary":"Get built-in regex patterns from GitHub","description":"Fetches curated regex patterns from the pyWhat project on GitHub. Supports search and tag filtering. Uses frontend caching only.","operationId":"ListBuiltInRegexPatterns","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"search","in":"query","description":"Search query to filter patterns by name, description, or tags","required":false,"schema":{"type":"string"}},{"name":"tags","in":"query","description":"Filter patterns by specific tags","required":false,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Built-in patterns list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuiltInPatternsResponse"}}}},"500":{"description":"Failed to fetch patterns","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"RePatterns","operation":"list"}}},"/api/{org_id}/re_patterns/bulk":{"delete":{"tags":["RePattern"],"summary":"Delete regex pattern in bulk","description":"Removes multiple regex patterns from the system using its identifiers","operationId":"DeleteRegexPatternsBulk","parameters":[{"name":"org_id","in":"path","description":"org id of for the patterns to delete","required":true,"schema":{"type":"string"},"example":"default"}],"requestBody":{"description":"re_patterns to delete","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"RePatterns","operation":"delete"}}},"/api/{org_id}/re_patterns/test":{"post":{"tags":["RePattern"],"summary":"Test regex pattern against sample data","description":"Tests a regex pattern against sample input strings to validate pattern matching","operationId":"TestRegexPattern","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"re_pattern to test and strings to test against","content":{"application/json":{"schema":{"type":"object","required":["pattern","test_records"],"properties":{"pattern":{"type":"string"},"policy":{"type":["string","null"]},"test_records":{"type":"array","items":{"type":"string"}}}}}},"required":true},"responses":{"200":{"description":"array of strings","content":{"application/json":{"schema":{"type":"object","required":["results"],"properties":{"results":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RePatterns","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/re_patterns/{pattern_id}":{"get":{"tags":["RePattern"],"summary":"Get regex pattern by ID","description":"Retrieves a specific regex pattern using its unique identifier","operationId":"GetRegexPattern","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"pattern_id","in":"path","description":"id of the pattern to retrieve","required":true,"schema":{"type":"string"},"example":"12345"}],"responses":{"200":{"description":"Pattern info","content":{"application/json":{"schema":{"type":"object","required":["id","name","description","pattern","created_at","updated_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"description":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"pattern":{"type":"string"},"updated_at":{"type":"integer","format":"int64"}}}}}},"404":{"description":"Pattern not found","content":{"text/plain":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"RePatterns","operation":"get"}},"put":{"tags":["RePattern"],"summary":"Update regex pattern by ID","description":"Modifies an existing regex pattern's configuration and rules","operationId":"UpdateRegexPattern","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"pattern_id","in":"path","description":"id of the pattern to update","required":true,"schema":{"type":"string"},"example":"12345"}],"requestBody":{"description":"updated pattern data","content":{"application/json":{"schema":{"type":"object","required":["name","description","pattern"],"properties":{"description":{"type":"string"},"name":{"type":"string"},"pattern":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RePatterns","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["RePattern"],"summary":"Delete regex pattern by ID","description":"Removes a regex pattern from the system using its identifier","operationId":"DeleteRegexPattern","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"pattern_id","in":"path","description":"id of the pattern to delete","required":true,"schema":{"type":"string"},"example":"12345"}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"RePatterns","operation":"delete"}}},"/api/{org_id}/rename":{"put":{"tags":["Organizations"],"summary":"Rename organization","description":"Changes the display name of an organization. The organization identifier remains unchanged, but the human-readable name is updated. This helps with organization management and branding without affecting API integrations or data access.","operationId":"RenameOrganization","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Organization new name","content":{"application/json":{"schema":{"type":"object","required":["new_name"],"properties":{"new_name":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"identifier":{"type":"string"},"name":{"type":"string","description":"Only alphanumeric characters (A-Z, a-z, 0-9), spaces, and underscores are allowed"},"org_type":{"type":"string"},"service_account":{"type":["string","null"],"description":"Optional service account email to add to the organization\nWhen specified, only this service account will be added (not the API caller)"}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Organizations","operation":"update"}}},"/api/{org_id}/reports":{"get":{"tags":["Reports"],"summary":"List dashboard reports","description":"Retrieves a list of all dashboard reports configured for the organization. Optionally filter by folder or dashboard to get specific report subsets. Returns report metadata including schedules, status, destinations, and execution history to help administrators manage automated reporting and monitor delivery performance.","operationId":"ListReports","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["orgId","dashboards","destinations"],"properties":{"createdAt":{"type":"string","format":"date-time"},"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/ReportDashboard"}},"description":{"type":"string"},"destinations":{"type":"array","items":{"$ref":"#/components/schemas/ReportDestination"}},"enabled":{"type":"boolean"},"frequency":{"$ref":"#/components/schemas/ReportFrequency","description":"Frequency of report generation. E.g. - Weekly."},"imagePreview":{"type":"boolean","description":"When `true` and the report type is PDF, a PNG screenshot is also captured and embedded\ninline in the email body alongside the PDF attachment."},"lastEditedBy":{"type":"string"},"message":{"type":"string","description":"Message to include in the email"},"name":{"type":"string"},"orgId":{"type":"string"},"owner":{"type":"string"},"start":{"type":"integer","format":"int64","description":"Start time of report generation in UNIX microseconds."},"timezone":{"type":"string"},"timezoneOffset":{"type":"integer","format":"int32","description":"Fixed timezone offset in minutes"},"title":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Reports","operation":"list"},"x-o2-mcp":{"description":"List all reports","category":"dashboards","summary_fields":["name","description","enabled","folder_name"]}},"post":{"tags":["Reports"],"summary":"Create dashboard report","description":"Creates a new automated dashboard report configuration. Reports can be scheduled to automatically generate and distribute dashboard snapshots via email or other notification channels. Includes support for custom time ranges, recipient lists, delivery schedules, and output formats to keep stakeholders informed of key metrics and trends.","operationId":"CreateReport","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Report details","content":{"application/json":{"schema":{"type":"object","required":["orgId","dashboards","destinations"],"properties":{"createdAt":{"type":"string","format":"date-time"},"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/ReportDashboard"}},"description":{"type":"string"},"destinations":{"type":"array","items":{"$ref":"#/components/schemas/ReportDestination"}},"enabled":{"type":"boolean"},"frequency":{"$ref":"#/components/schemas/ReportFrequency","description":"Frequency of report generation. E.g. - Weekly."},"imagePreview":{"type":"boolean","description":"When `true` and the report type is PDF, a PNG screenshot is also captured and embedded\ninline in the email body alongside the PDF attachment."},"lastEditedBy":{"type":"string"},"message":{"type":"string","description":"Message to include in the email"},"name":{"type":"string"},"orgId":{"type":"string"},"owner":{"type":"string"},"start":{"type":"integer","format":"int64","description":"Start time of report generation in UNIX microseconds."},"timezone":{"type":"string"},"timezoneOffset":{"type":"integer","format":"int32","description":"Fixed timezone offset in minutes"},"title":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}}},"example":{"title":"Network Traffic Overview","description":"Traffic patterns and network performance of the infrastructure"}}},"required":true},"responses":{"201":{"description":"Report created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Reports","operation":"create"},"x-o2-mcp":{"description":"Create a scheduled report","category":"dashboards"}}},"/api/{org_id}/reports/bulk":{"delete":{"tags":["Reports"],"summary":"Delete multiple dashboard reports","description":"Removes multiple dashboard reports configuration from the organization. This action cancels any scheduled report deliveries and permanently removes the report configuration. Recipients will no longer receive automated report deliveries, and the report configuration cannot be recovered once deleted.","operationId":"DeleteReportBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Reports to delete","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Reports","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/reports/{name}":{"get":{"tags":["Reports"],"summary":"Get dashboard report","description":"Retrieves the complete configuration and details for a specific dashboard report. Returns report parameters including schedule settings, dashboard selection, recipient lists, delivery options, and execution status. Used for reviewing existing report configurations before making modifications or troubleshooting delivery issues.","operationId":"GetReport","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Report name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["orgId","dashboards","destinations"],"properties":{"createdAt":{"type":"string","format":"date-time"},"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/ReportDashboard"}},"description":{"type":"string"},"destinations":{"type":"array","items":{"$ref":"#/components/schemas/ReportDestination"}},"enabled":{"type":"boolean"},"frequency":{"$ref":"#/components/schemas/ReportFrequency","description":"Frequency of report generation. E.g. - Weekly."},"imagePreview":{"type":"boolean","description":"When `true` and the report type is PDF, a PNG screenshot is also captured and embedded\ninline in the email body alongside the PDF attachment."},"lastEditedBy":{"type":"string"},"message":{"type":"string","description":"Message to include in the email"},"name":{"type":"string"},"orgId":{"type":"string"},"owner":{"type":"string"},"start":{"type":"integer","format":"int64","description":"Start time of report generation in UNIX microseconds."},"timezone":{"type":"string"},"timezoneOffset":{"type":"integer","format":"int32","description":"Fixed timezone offset in minutes"},"title":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}}}}}},"404":{"description":"Report not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Reports","operation":"get"},"x-o2-mcp":{"description":"Get report details","category":"dashboards"}},"put":{"tags":["Reports"],"summary":"Update dashboard report","description":"Updates an existing dashboard report configuration. Allows modification of report parameters including schedule, recipients, dashboard selection, time ranges, and delivery options. Changes take effect on the next scheduled execution, ensuring report distribution continues with updated settings and content selection.","operationId":"UpdateReport","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Report name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Report details","content":{"application/json":{"schema":{"type":"object","required":["orgId","dashboards","destinations"],"properties":{"createdAt":{"type":"string","format":"date-time"},"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/ReportDashboard"}},"description":{"type":"string"},"destinations":{"type":"array","items":{"$ref":"#/components/schemas/ReportDestination"}},"enabled":{"type":"boolean"},"frequency":{"$ref":"#/components/schemas/ReportFrequency","description":"Frequency of report generation. E.g. - Weekly."},"imagePreview":{"type":"boolean","description":"When `true` and the report type is PDF, a PNG screenshot is also captured and embedded\ninline in the email body alongside the PDF attachment."},"lastEditedBy":{"type":"string"},"message":{"type":"string","description":"Message to include in the email"},"name":{"type":"string"},"orgId":{"type":"string"},"owner":{"type":"string"},"start":{"type":"integer","format":"int64","description":"Start time of report generation in UNIX microseconds."},"timezone":{"type":"string"},"timezoneOffset":{"type":"integer","format":"int32","description":"Fixed timezone offset in minutes"},"title":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}}}}},"required":true},"responses":{"200":{"description":"Report updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Report not found","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failed to update the report","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Reports","operation":"update"},"x-o2-mcp":{"description":"Update a report","category":"dashboards"}},"delete":{"tags":["Reports"],"summary":"Delete dashboard report","description":"Removes a dashboard report configuration from the organization. This action cancels any scheduled report deliveries and permanently removes the report configuration. Recipients will no longer receive automated report deliveries, and the report configuration cannot be recovered once deleted.","operationId":"DeleteReport","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Report name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete a report","category":"dashboards","requires_confirmation":true},"x-o2-ratelimit":{"module":"Reports","operation":"delete"}}},"/api/{org_id}/reports/{name}/enable":{"put":{"tags":["Reports"],"summary":"Enable or disable dashboard report","description":"Enables or disables automated execution of a dashboard report. When disabled, scheduled report deliveries are paused but the configuration is preserved. When re-enabled, report deliveries resume according to the configured schedule. Useful for temporarily stopping report distribution without losing the complete report setup.","operationId":"EnableReport","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Report name","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"Enable or disable report","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"propertyNames":{"type":"string"}}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Reports","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/reports/{name}/trigger":{"put":{"tags":["Reports"],"summary":"Manually trigger dashboard report","description":"Manually triggers immediate execution of a dashboard report outside of its regular schedule. Generates the report with current data and delivers it to configured destinations. Useful for ad-hoc reporting needs, testing report configurations, or providing immediate updates to stakeholders between scheduled deliveries.","operationId":"TriggerReport","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Report name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Report sent; `run` is the history row of the run","content":{"application/json":{"schema":{"type":"object","description":"Reply to Run now: the run is returned before the stream copy becomes searchable.","required":["code","message","run"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"run":{"$ref":"#/components/schemas/ReportRunHit"}}}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Send failed; `run` carries the error","content":{"application/json":{"schema":{"type":"object","description":"Reply to Run now: the run is returned before the stream copy becomes searchable.","required":["code","message","run"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"run":{"$ref":"#/components/schemas/ReportRunHit"}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Reports","operation":"update"}}},"/api/{org_id}/resources":{"get":{"tags":["Resources"],"summary":"Get available resources","description":"Retrieves a list of all available resource types that can be used in role and permission assignments. Shows the resource hierarchy and available permission levels for fine-grained access control. Requires enterprise features to be enabled.","operationId":"GetResources","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ResourceView"}}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Roles","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/result_schema":{"post":{"tags":["Search"],"summary":"Get search result schema","description":"Returns the schema definition for search results based on query parameters","operationId":"ResultSchema","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"is_streaming","in":"query","description":"Describe the schema of a streaming query","required":false,"schema":{"type":"boolean"}},{"name":"cross_linking","in":"query","description":"Include cross-link fields","required":false,"schema":{"type":"boolean"}}],"requestBody":{"description":"Search query","content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"agent_options":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchAgentOptions"}]},"clear_cache":{"type":"boolean"},"clusters":{"type":"array","items":{"type":"string"}},"encoding":{"$ref":"#/components/schemas/RequestEncoding"},"local_mode":{"type":["boolean","null"]},"query":{"$ref":"#/components/schemas/SearchQuery"},"regions":{"type":"array","items":{"type":"string"}},"search_event_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventContext"}]},"search_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventType"}]},"timeout":{"type":"integer","format":"int64"},"use_cache":{"type":"boolean"},"use_index":{"type":"boolean","description":"Set to false to skip the inverted index for this query.","default":true}}},"example":{"query":{"sql":"select k8s_namespace_name as ns, histogram(_timestamp) from k8s group by k8s_namespace_name, histogram(_timestamp)","start_time":1675182660872049,"end_time":1675185660872049,"from":0,"size":10}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResultSchemaResponse"},"example":{"projections":["ns","histogram(k8s._timestamp)"],"group_by":["histogram(k8s._timestamp)"],"timeseries_field":"histogram(k8s._timestamp)"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Search","operation":"create"}}},"/api/{org_id}/roles":{"get":{"tags":["Roles"],"summary":"List organization roles","description":"Retrieves a list of all roles available in the organization, including both standard predefined roles and custom roles. Users will only see roles they have permissions to view when role-based access control is active. Requires enterprise features to be enabled.","operationId":"ListRoles","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Roles","operation":"list"},"x-o2-mcp":{"description":"List all roles","category":"authorization"}},"post":{"tags":["Roles"],"summary":"Create custom role","description":"Creates a new custom role with specified permissions and capabilities. Custom roles allow fine-grained access control beyond the standard predefined roles. Requires enterprise features to be enabled.","operationId":"CreateRoles","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"UserRoleRequest","content":{"application/json":{"schema":{"type":"object","required":["role"],"properties":{"custom_role":{"type":["array","null"],"items":{"type":"string"}},"role":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Invalid, standard or already existing role name","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Roles","operation":"create"},"x-o2-mcp":{"description":"Create a role","category":"authorization"}}},"/api/{org_id}/roles/bulk":{"delete":{"tags":["Roles"],"summary":"Delete multiple custom role","description":"Permanently removes multiple custom roles from the organization. Users and groups assigned to this role will lose the associated permissions. Standard predefined roles cannot be deleted. Requires enterprise features to be enabled.","operationId":"DeleteRoleBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"names of role to be deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}},"400":{"description":"Invalid role name","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Roles","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/roles/{role_id}":{"put":{"tags":["Roles"],"summary":"Update role permissions","description":"Updates an existing role by adding or removing permissions and users. Allows modification of role capabilities and user assignments to maintain proper access control. Standard roles cannot be modified. Requires enterprise features to be enabled.","operationId":"UpdateRoles","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"role_id","in":"path","description":"Role Id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"RoleRequest","content":{"application/json":{"schema":{"type":"object","required":["add","remove"],"properties":{"add":{"type":"array","items":{"$ref":"#/components/schemas/O2EntityAuthorization"}},"add_users":{"type":["array","null"],"items":{"type":"string"},"uniqueItems":true},"remove":{"type":"array","items":{"$ref":"#/components/schemas/O2EntityAuthorization"}},"remove_users":{"type":["array","null"],"items":{"type":"string"},"uniqueItems":true}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Invalid role name, permission or user id; nothing is applied if any entry is invalid","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Update a role","category":"authorization"},"x-o2-ratelimit":{"module":"Roles","operation":"update"}},"delete":{"tags":["Roles"],"summary":"Delete custom role","description":"Permanently removes a custom role from the organization. Users and groups assigned to this role will lose the associated permissions. Standard predefined roles cannot be deleted. Requires enterprise features to be enabled.","operationId":"DeleteRole","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"role_id","in":"path","description":"Role Id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Invalid role name","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete a role","category":"authorization","requires_confirmation":true},"x-o2-ratelimit":{"module":"Roles","operation":"delete"}}},"/api/{org_id}/roles/{role_id}/permissions":{"get":{"tags":["Roles"],"summary":"Get all role permissions","description":"Retrieves all permissions a role has across every resource type in a single request. Replaces issuing one request per resource type. Requires enterprise features to be enabled.","operationId":"GetRolePermissions","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"role_id","in":"path","description":"Role Id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}},"400":{"description":"Invalid role name","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Roles","operation":"list"}}},"/api/{org_id}/roles/{role_id}/permissions/{resource}":{"get":{"tags":["Roles"],"summary":"Get role permissions for resource","description":"Retrieves detailed permissions that a specific role has on a particular resource type. Useful for understanding access control capabilities and auditing role assignments. Requires enterprise features to be enabled.","operationId":"GetResourcePermission","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"role_id","in":"path","description":"Role Id","required":true,"schema":{"type":"string"}},{"name":"resource","in":"path","description":"resource","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}},"400":{"description":"Invalid role name","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Roles","operation":"get"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/roles/{role_id}/users":{"get":{"tags":["Roles"],"summary":"Get users assigned to role","description":"Retrieves a list of all users who are currently assigned to a specific role. Useful for role management, auditing user permissions, and understanding access control assignments. Requires enterprise features to be enabled.","operationId":"GetRoleUsers","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"role_id","in":"path","description":"Role Id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"400":{"description":"Invalid role name","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Roles","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/rum/analytics/funnels":{"get":{"tags":["Product Analytics"],"summary":"List an app's saved funnels","operationId":"ListRumSavedFunnels","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedFunnelList"}}}},"400":{"description":"Invalid app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List RUM saved funnels; each sql is a frozen snapshot from save time","category":"rum"},"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"list"}},"post":{"tags":["Product Analytics"],"summary":"Save a funnel","operationId":"CreateRumSavedFunnel","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFunnel"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedFunnel"}}}},"400":{"description":"Invalid body, name, definition, sql or app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"409":{"description":"duplicate_name, limit_reached or unknown_event","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"create"},"x-o2-mcp":{"description":"Save a RUM funnel with its compiled SQL snapshot","category":"rum"}}},"/api/{org_id}/rum/analytics/funnels/{id}":{"get":{"tags":["Product Analytics"],"summary":"Get a saved funnel","operationId":"GetRumSavedFunnel","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Saved funnel id","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedFunnel"}}}},"400":{"description":"Invalid id or app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get a RUM saved funnel; its sql is a frozen snapshot of the definition at save time, which the server cannot recompile","category":"rum"},"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"get"}},"put":{"tags":["Product Analytics"],"summary":"Update a saved funnel at the version the caller opened","operationId":"UpdateRumSavedFunnel","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Saved funnel id","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFunnel"}}},"required":true},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedFunnel"}}}},"400":{"description":"Invalid body, name, definition, sql, id or app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"409":{"description":"duplicate_name, unknown_event, or version_conflict with the current row","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"update"},"x-o2-mcp":{"description":"Update a RUM saved funnel","category":"rum"}},"delete":{"tags":["Product Analytics"],"summary":"Delete a saved funnel","operationId":"DeleteRumSavedFunnel","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Saved funnel id","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted"},"400":{"description":"Invalid id or app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete a RUM saved funnel","category":"rum","requires_confirmation":true},"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"delete"}}},"/api/{org_id}/rum/analytics/named_events":{"get":{"tags":["Product Analytics"],"summary":"List an app's named events","operationId":"ListRumNamedEvents","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NamedEventList"}}}},"400":{"description":"Invalid app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List RUM named events for an app","category":"rum"},"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"list"}},"post":{"tags":["Product Analytics"],"summary":"Create a named event","operationId":"CreateRumNamedEvent","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNamedEvent"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NamedEvent"}}}},"400":{"description":"Invalid body, name, rules or app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"409":{"description":"duplicate_name or limit_reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create a RUM named event","category":"rum"},"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"create"}}},"/api/{org_id}/rum/analytics/named_events/deleted_names":{"get":{"tags":["Product Analytics"],"summary":"The last known names of deleted named events","description":"Resolves the names deleted named events had just before deletion, for ids among a comma-separated list; an id never deleted, or deleted before this capture existed, is simply absent from the result.","operationId":"ListRumDeletedNamedEventNames","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"ids","in":"query","description":"Comma-separated named event ids","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NamedEventRefList"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"list"},"x-o2-mcp":{"description":"Resolve the last known names of deleted RUM named events","category":"rum"}}},"/api/{org_id}/rum/analytics/named_events/{id}":{"get":{"tags":["Product Analytics"],"summary":"Get a named event","operationId":"GetRumNamedEvent","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Named event id","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NamedEvent"}}}},"400":{"description":"Invalid id or app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get a RUM named event","category":"rum"},"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"get"}},"put":{"tags":["Product Analytics"],"summary":"Update a named event at the version the caller read","operationId":"UpdateRumNamedEvent","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Named event id","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNamedEvent"}}},"required":true},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NamedEvent"}}}},"400":{"description":"Invalid body, name, rules, id or app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"409":{"description":"duplicate_name, or version_conflict with the current row","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"update"},"x-o2-mcp":{"description":"Update a RUM named event","category":"rum"}},"delete":{"tags":["Product Analytics"],"summary":"Delete a named event","operationId":"DeleteRumNamedEvent","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Named event id","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}},{"name":"force","in":"query","description":"Delete even while saved funnels use it; `true` or `1`","required":false,"schema":{"type":"boolean"}}],"responses":{"204":{"description":"Deleted"},"400":{"description":"Invalid id or app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"409":{"description":"event_in_use, with the funnels","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"delete"},"x-o2-mcp":{"description":"Delete a RUM named event","category":"rum","requires_confirmation":true}}},"/api/{org_id}/rum/analytics/named_events/{id}/funnels":{"get":{"tags":["Product Analytics"],"summary":"List the saved funnels that use a named event","operationId":"ListRumNamedEventFunnels","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Named event id","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelRefList"}}}},"400":{"description":"Invalid id or app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"list"},"x-o2-mcp":{"description":"List saved funnels using a RUM named event","category":"rum"}}},"/api/{org_id}/rum/analytics/settings":{"get":{"tags":["Product Analytics"],"summary":"Get an app's exclusions, or the built-in default when it has none saved","operationId":"GetRumAppSettings","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppSettings"}}}},"400":{"description":"Invalid app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get a RUM app's exclusion settings","category":"rum"},"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"get"}},"put":{"tags":["Product Analytics"],"summary":"Save an app's exclusions at the version the caller read; 0 creates","operationId":"PutRumAppSettings","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"app","in":"query","description":"RUM application name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutAppSettings"}}},"required":true},"responses":{"200":{"description":"Saved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppSettings"}}}},"400":{"description":"Invalid body, rules or app","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"409":{"description":"version_conflict with the current settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumPaErrorBody"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Save a RUM app's exclusion settings","category":"rum"},"x-o2-ratelimit":{"module":"RUM Product Analytics","operation":"update"}}},"/api/{org_id}/rum/lookup":{"post":{"tags":["Search"],"summary":"Find the RUM events linked to a trace","description":"Finds the browser requests that carry the trace id, then fetches their page views, actions and other page events in parallel. Each result set keeps its own order and limit; its `truncated` and `error`, and the top-level `status`, report what is missing.","operationId":"RumLookup","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Trace id and backend span time range","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumLookupRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RumLookupResponse"}}}},"400":{"description":"Invalid request"},"403":{"description":"Forbidden"},"429":{"description":"Search not allowed now"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Search","operation":"get"}}},"/api/{org_id}/rumtoken":{"get":{"tags":["Organizations"],"summary":"Get user's RUM ingestion token","description":"Retrieves the current Real User Monitoring (RUM) ingestion token for the authenticated user within the specified organization. This token is specifically used for ingesting RUM data from web applications and mobile apps.","operationId":"GetOrganizationUserRumIngestToken","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/RumIngestionToken"}}}}}},"403":{"description":"Forbidden: the caller's role may not read the RUM token","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Rumtokens","operation":"get"}},"put":{"tags":["Organizations"],"summary":"Update user's RUM ingestion token","description":"Generates a new Real User Monitoring (RUM) ingestion token for the authenticated user within the specified organization. The old RUM token will be invalidated and all RUM data collection processes using the old token will need to be updated.","operationId":"UpdateOrganizationUserRumIngestToken","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/RumIngestionToken"}}}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Rumtokens","operation":"update"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Organizations"],"summary":"Create user's RUM ingestion token","description":"Creates a new Real User Monitoring (RUM) ingestion token for the authenticated user within the specified organization. This endpoint is used when no RUM token exists yet and you need to generate the initial token for RUM data collection.","operationId":"CreateOrganizationUserRumIngestToken","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/RumIngestionToken"}}}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Rumtokens","operation":"create"}}},"/api/{org_id}/sample_data":{"get":{"tags":["Sample Data"],"summary":"Get the sample data window","description":"Returns the time window the organization's sample data was loaded into, in microseconds since the epoch. An organization without sample data gets `{\"status\":\"none\"}`.","operationId":"GetSampleData","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleDataState"}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Dashboards","operation":"get"}},"put":{"tags":["Sample Data"],"summary":"Save the sample data window","description":"Records the time window the organization's sample data was loaded into. `start_time` must be lower than `end_time`, both in microseconds since the epoch. A saved window always reads back as `loaded`.","operationId":"PutSampleData","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Sample data window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutSampleDataRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleDataState"}}}},"400":{"description":"start_time is not lower than end_time","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Dashboards","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["Sample Data"],"summary":"Clear the sample data window","description":"Clears the organization's sample data window, so the state reads `{\"status\":\"none\"}`. Clearing a missing state also succeeds.","operationId":"DeleteSampleData","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleDataState"}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Dashboards","operation":"delete"}}},"/api/{org_id}/savedviews":{"get":{"tags":["Saved Views"],"summary":"List saved views","description":"Retrieves a list of all saved search views for the organization. This provides an overview of all stored queries and visualizations that users have created and saved for reuse. Each view includes basic metadata such as name and ID, allowing users to identify and select the views they want to load.","operationId":"ListSavedViews","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ViewsWithoutData"},"example":[{"org_id":"some-org-id","view_name":"view-name","view_id":"view-id","payload":"base-64-encoded-versioned-payload"}]}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Saved Views","operation":"list"},"x-o2-mcp":{"description":"List all saved views","category":"search"}},"post":{"tags":["Saved Views"],"summary":"Create a new saved view","description":"Creates a saved search view with specified query parameters and filters","operationId":"CreateSavedViews","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Create view data","content":{"application/json":{"schema":{"type":"object","required":["data","view_name"],"properties":{"data":{"description":"Base64 encoded string, containing all the data for a given view.\nThis data is expected to be versioned so that the frontend can\ndeserialize as required."},"view_name":{"type":"string","description":"User-readable name of the view, must be unique within the organization."},"view_type":{"type":["string","null"],"description":"View kind, `logs`, `traces` or `metrics_explorer`; absent means `logs`."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["org_id","view_id","view_name"],"properties":{"org_id":{"type":"string"},"view_id":{"type":"string"},"view_name":{"type":"string"}}},"example":[{"org_id":"some-org-id","view_id":"view_id"}]}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Saved Views","operation":"create"},"x-o2-mcp":{"description":"Create a saved view","category":"search"}}},"/api/{org_id}/savedviews/{view_id}":{"get":{"tags":["Saved Views"],"summary":"Get saved view","description":"Retrieves a specific saved search view by its ID. Saved views allow users to store and reuse complex search queries, filters, and visualization settings. The view contains all the necessary information to recreate the exact search state, including query parameters, time ranges, and display configurations.","operationId":"GetSavedView","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"view_id","in":"path","description":"The view_id which was stored","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["org_id","data","view_id","view_name"],"properties":{"data":{},"org_id":{"type":"string"},"view_id":{"type":"string"},"view_name":{"type":"string"},"view_type":{"type":["string","null"]}}},"example":{"org_id":"some-org-id","view_id":"some-uuid-v4","view_name":"view-name","payload":"base64-encoded-object-as-sent-by-frontend"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get saved view details","category":"search"},"x-o2-ratelimit":{"module":"Saved Views","operation":"get"}},"put":{"tags":["Saved Views"],"summary":"Update an existing saved view","description":"Updates the configuration and parameters of an existing saved search view","operationId":"UpdateSavedViews","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"view_id","in":"path","description":"View id to be updated","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Update view data","content":{"application/json":{"schema":{"type":"object","required":["data","view_name"],"properties":{"data":{"description":"Base64 encoded string, containing all the data for a given view.\nThis data is expected to be versioned so that the frontend can\ndeserialize as required."},"view_name":{"type":"string","description":"User-readable name of the view, must be unique within the organization."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["org_id","data","view_id","view_name"],"properties":{"data":{},"org_id":{"type":"string"},"view_id":{"type":"string"},"view_name":{"type":"string"},"view_type":{"type":["string","null"]}}},"example":[{"org_id":"some-org-id","view_name":"view-name","view_id":"view-id","payload":"base-64-encoded-versioned-payload"}]}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Update a saved view","category":"search"},"x-o2-ratelimit":{"module":"Saved Views","operation":"update"}},"delete":{"tags":["Saved Views"],"summary":"Delete saved view","description":"Permanently removes a saved search view from the organization. This action deletes the stored query configuration, visualization settings, and all associated metadata. Once deleted, the view cannot be recovered, so use this operation carefully when cleaning up unused or outdated saved views.","operationId":"DeleteSavedViews","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"view_id","in":"path","description":"The view_id to delete","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["org_id","view_id"],"properties":{"org_id":{"type":"string"},"view_id":{"type":"string"}}},"example":[{"org_id":"some-org-id","view_id":"view_id"}]}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Saved Views","operation":"delete"},"x-o2-mcp":{"description":"Delete a saved view","category":"search","requires_confirmation":true}}},"/api/{org_id}/score_configs":{"get":{"tags":["ScoreConfigs"],"summary":"List score configs","description":"Lists the latest active version of each score config in the organization.","operationId":"ListScoreConfigs","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for listing Score Configs.","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/ScoreConfigResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"ScoreConfigs","operation":"list"}},"put":{"tags":["ScoreConfigs"],"summary":"Ensure a score config exists with these parameters","description":"Creates the score config when it is absent, does nothing when every parameter already matches, and appends a new version when a structural parameter (range, categories, healthy threshold) differs. A different data type is refused: changing what a dimension measures needs a different name.","operationId":"EnsureScoreConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Declared score config parameters","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for ensuring a Score Config exists.\n\nSafe to send on every run: identical parameters change nothing, a changed\nrange or category set appends a version, and a different data type is\nrefused.","required":["name","dataType"],"properties":{"categories":{},"dataType":{"type":"string"},"description":{"type":["string","null"]},"healthyThreshold":{},"name":{"type":"string"},"numericRange":{}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["outcome","config"],"properties":{"config":{"$ref":"#/components/schemas/ScoreConfigResponseBody"},"outcome":{"$ref":"#/components/schemas/EnsureOutcomeBody"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Data type differs from the existing score config","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"ScoreConfigs","operation":"update"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["ScoreConfigs"],"summary":"Create score config (v1)","description":"Creates a new score config at version 1.","operationId":"CreateScoreConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Score config payload","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for creating a Score Config.","required":["name","dataType"],"properties":{"categories":{},"dataType":{"type":"string"},"description":{"type":["string","null"]},"healthyThreshold":{},"name":{"type":"string"},"numericRange":{}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a Score Config.","required":["id","entityId","orgId","name","version","dataType","isActive","createdAt","updatedAt"],"properties":{"categories":{},"createdAt":{"type":"integer","format":"int64"},"dataType":{"type":"string"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"healthyThreshold":{},"id":{"type":"string"},"isActive":{"type":"boolean"},"name":{"type":"string"},"numericRange":{},"orgId":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int32"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"ScoreConfigs","operation":"create"}}},"/api/{org_id}/score_configs/quality":{"get":{"tags":["ScoreConfigs"],"summary":"Quality summary for every Score Config","description":"Reads the latest Score per evaluation for each active Score Config the caller can see, in the time window, and returns its health status, totals, average, per-scope counts and most frequent value. The scope filter applies to everything except the per-scope counts.","operationId":"ListScoreConfigQuality","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Inclusive Score write-time lower bound, in microseconds.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"Exclusive Score write-time upper bound, in microseconds.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"scope","in":"query","description":"`span`, `trace` or `session`. Omit for all scopes.","required":false,"schema":{"type":"string"},"example":"trace"},{"name":"agent_id","in":"query","description":"Only Scores of this agent ID.","required":false,"schema":{"type":"string"}},{"name":"agent_name","in":"query","description":"Only Scores of this agent name.","required":false,"schema":{"type":"string"}},{"name":"agent_env","in":"query","description":"Only Scores of this agent environment.","required":false,"schema":{"type":"string"}},{"name":"agent_version","in":"query","description":"Only Scores of this agent version.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/QualityConfigSummary"}}}}}}},"400":{"description":"Invalid request or search query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Quality query failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"ScoreConfigs","operation":"list"}}},"/api/{org_id}/score_configs/{entity_id}":{"get":{"tags":["ScoreConfigs"],"summary":"Get latest score config by entity id","description":"Retrieves the latest active version of a score config by stable entity id.","operationId":"GetScoreConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Score config stable entity id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a Score Config.","required":["id","entityId","orgId","name","version","dataType","isActive","createdAt","updatedAt"],"properties":{"categories":{},"createdAt":{"type":"integer","format":"int64"},"dataType":{"type":"string"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"healthyThreshold":{},"id":{"type":"string"},"isActive":{"type":"boolean"},"name":{"type":"string"},"numericRange":{},"orgId":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int32"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"ScoreConfigs","operation":"get"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["ScoreConfigs"],"summary":"Update score config (version bump)","description":"Creates a new immutable version of the score config. data_type is preserved from the previous version.","operationId":"UpdateScoreConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Score config stable entity id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Score config payload","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for updating a Score Config (version bump).\nIf provided, `name` is updated by creating a new version.\n`data_type` is immutable across versions.","properties":{"categories":{},"description":{"type":["string","null"]},"healthyThreshold":{},"name":{"type":["string","null"]},"numericRange":{}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a Score Config.","required":["id","entityId","orgId","name","version","dataType","isActive","createdAt","updatedAt"],"properties":{"categories":{},"createdAt":{"type":"integer","format":"int64"},"dataType":{"type":"string"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"healthyThreshold":{},"id":{"type":"string"},"isActive":{"type":"boolean"},"name":{"type":"string"},"numericRange":{},"orgId":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int32"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"ScoreConfigs","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["ScoreConfigs"],"summary":"Deactivate score config","description":"Soft-deletes the score config by deactivating all its versions.","operationId":"DeleteScoreConfig","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Score config stable entity id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deactivated","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"ScoreConfigs","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/score_configs/{entity_id}/quality":{"get":{"tags":["ScoreConfigs"],"summary":"Value distribution and latest Scores for one Score Config","description":"Pages the latest Score per evaluation for the config, newest first. Filters by scope, agent, health, numeric distribution bucket or exact value. The total counts every Score that matches the filters. The value distribution follows only the scope and agent filters, so it stays the same while the page drills into one bucket or value.","operationId":"ListScoreConfigQualityScores","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Score Config entity ID","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Inclusive Score write-time lower bound, in microseconds.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"Exclusive Score write-time upper bound, in microseconds.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"scope","in":"query","description":"`span`, `trace` or `session`. Omit for all scopes.","required":false,"schema":{"type":"string"},"example":"trace"},{"name":"agent_id","in":"query","required":false,"schema":{"type":"string"}},{"name":"agent_name","in":"query","required":false,"schema":{"type":"string"}},{"name":"agent_env","in":"query","required":false,"schema":{"type":"string"}},{"name":"agent_version","in":"query","required":false,"schema":{"type":"string"}},{"name":"unhealthy_only","in":"query","description":"Only Scores that fail the config's healthy threshold.","required":false,"schema":{"type":"boolean"}},{"name":"bucket_from","in":"query","description":"Numeric configs: first distribution bucket index to include.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"bucket_to","in":"query","description":"Numeric configs: last distribution bucket index to include, `bucket_from` when omitted.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"value","in":"query","description":"Boolean and categorical configs: exact value to include.","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Zero-based result offset. Defaults to 0.","required":false,"schema":{"type":"integer","minimum":0}},{"name":"size","in":"query","description":"Page size from 1 through 100. Defaults to 20.","required":false,"schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["distribution","list","total","from","size"],"properties":{"average":{"type":["number","null"],"format":"double","description":"Numeric configs only: average under the `scope` and agent filters,\nlike `distribution`."},"distribution":{"type":"array","items":{"$ref":"#/components/schemas/QualityBucket"},"description":"Value distribution under the `scope` and agent filters only, so the\nchart stays put while the page drills into one bucket or value."},"from":{"type":"integer","minimum":0},"list":{"type":"array","items":{"$ref":"#/components/schemas/QualityScore"}},"size":{"type":"integer","minimum":0},"total":{"type":"integer","format":"int64","minimum":0}}}}}},"400":{"description":"Invalid request or search query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Score Config not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Quality query failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"ScoreConfigs","operation":"list"}}},"/api/{org_id}/score_configs/{entity_id}/quality/timeline":{"get":{"tags":["ScoreConfigs"],"summary":"Quality trend for one Score Config","description":"Splits the time window into buckets and returns, per bucket, the count, unhealthy count, true count, average and p95 of the latest Score per evaluation for the config. Follows only the scope and agent filters, so paging or drilling into the Scores does not change it.","operationId":"GetScoreConfigQualityTimeline","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Score Config entity ID","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Inclusive Score write-time lower bound, in microseconds.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"Exclusive Score write-time upper bound, in microseconds.","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"scope","in":"query","description":"`span`, `trace` or `session`. Omit for all scopes.","required":false,"schema":{"type":"string"},"example":"trace"},{"name":"agent_id","in":"query","description":"Only Scores of this agent ID.","required":false,"schema":{"type":"string"}},{"name":"agent_name","in":"query","description":"Only Scores of this agent name.","required":false,"schema":{"type":"string"}},{"name":"agent_env","in":"query","description":"Only Scores of this agent environment.","required":false,"schema":{"type":"string"}},{"name":"agent_version","in":"query","description":"Only Scores of this agent version.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["timeline"],"properties":{"timeline":{"type":"array","items":{"$ref":"#/components/schemas/QualityTimelineBucket"},"description":"Counts per time bucket under the same filters as the Scores page\n`distribution`, so the bucket counts add up to its total."}}}}}},"400":{"description":"Invalid request or search query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Score Config not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"500":{"description":"Quality query failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"ScoreConfigs","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/score_configs/{entity_id}/versions":{"get":{"tags":["ScoreConfigs"],"summary":"List all versions of a score config","description":"Lists every historical version of a score config by stable entity id, ordered by version descending.","operationId":"ListScoreConfigVersions","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Score config stable entity id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for listing Score Config versions.","required":["versions"],"properties":{"versions":{"type":"array","items":{"$ref":"#/components/schemas/ScoreConfigResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"ScoreConfigs","operation":"list"}}},"/api/{org_id}/scorers":{"get":{"tags":["Scorers"],"summary":"List scorers","description":"Lists scorers in the organization. Filterable by scorer_type query parameter.","operationId":"ListScorers","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"scorerType","in":"query","description":"Filter by scorer_type (llm_judge or remote)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for listing Scorers.","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/ScorerResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Scorers","operation":"list"}},"post":{"tags":["Scorers"],"summary":"Create scorer (v1)","description":"Creates a new scorer at version 1.","operationId":"CreateScorer","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Scorer payload","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for creating a Scorer.","required":["name","scorer"],"properties":{"description":{"type":["string","null"]},"name":{"type":"string"},"scorer":{"$ref":"#/components/schemas/ScorerCreateConfig"}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a Scorer.","required":["id","entityId","orgId","name","version","scorerType","template","variables","referenceBased","params","isActive","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"id":{"type":"string"},"isActive":{"type":"boolean"},"name":{"type":"string"},"orgId":{"type":"string"},"outputSchema":{},"params":{},"producesScoreConfigId":{"type":["string","null"]},"producesScoreConfigVersion":{"type":["integer","null"],"format":"int32"},"referenceBased":{"type":"boolean","description":"True when the scorer contract declares the `expected_output` variable."},"scorerType":{"type":"string"},"template":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"variables":{"type":"array","items":{"type":"string"}},"version":{"type":"integer","format":"int32"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Provider not accessible","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Provider not found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Scorers","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/scorers/llm_judge/output_schema":{"post":{"tags":["Scorers"],"summary":"Preview derived LLM Judge output schema","description":"Derives the LLM Judge structured output schema from the selected score config and extra metadata fields.","operationId":"PreviewLlmJudgeOutputSchema","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Schema derivation inputs","content":{"application/json":{"schema":{"type":"object","description":"Request body for previewing the derived LLM Judge output schema.","properties":{"extraMetadataFields":{"type":"array","items":{"$ref":"#/components/schemas/ExtraMetadataField"}},"includeReasoning":{"type":["boolean","null"]},"producesScoreConfigId":{"type":["string","null"]},"producesScoreConfigVersion":{"type":["integer","null"],"format":"int32"}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"Response body for a derived LLM Judge output schema preview.","required":["outputSchema"],"properties":{"outputSchema":{}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Scorers","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/scorers/test":{"post":{"tags":["Scorers"],"summary":"Test-run a scorer","description":"Tests an inline scorer config with provided input variable values. Runs the scorer synchronously and returns the evaluation result.","operationId":"TestScorer","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Template and input variables to evaluate","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for testing a scorer.","required":["name","scorer","inputVariables"],"properties":{"description":{"type":["string","null"]},"inputVariables":{"description":"Values for the variables referenced by the template."},"name":{"type":"string"},"scorer":{"$ref":"#/components/schemas/ScorerCreateConfig"}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for scorer test results.","required":["success","latencyMs"],"properties":{"completionTokens":{"type":["integer","null"],"format":"int64"},"error":{"type":["string","null"]},"latencyMs":{"type":"integer","format":"int64"},"metadata":{},"modelUsed":{"type":["string","null"]},"promptTokens":{"type":["integer","null"],"format":"int64"},"rawResponse":{"type":["string","null"]},"reasoning":{"type":["string","null"]},"success":{"type":"boolean"},"totalTokens":{"type":["integer","null"],"format":"int64"},"valueBoolean":{"type":["boolean","null"]},"valueCategorical":{"type":["string","null"]},"valueNumeric":{"type":["number","null"],"format":"double"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Provider not accessible","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Scorers","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/scorers/{entity_id}":{"get":{"tags":["Scorers"],"summary":"Get latest scorer by entity id","description":"Retrieves the latest active version of a scorer by stable entity id.","operationId":"GetScorer","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Scorer stable entity id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a Scorer.","required":["id","entityId","orgId","name","version","scorerType","template","variables","referenceBased","params","isActive","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"id":{"type":"string"},"isActive":{"type":"boolean"},"name":{"type":"string"},"orgId":{"type":"string"},"outputSchema":{},"params":{},"producesScoreConfigId":{"type":["string","null"]},"producesScoreConfigVersion":{"type":["integer","null"],"format":"int32"},"referenceBased":{"type":"boolean","description":"True when the scorer contract declares the `expected_output` variable."},"scorerType":{"type":"string"},"template":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"variables":{"type":"array","items":{"type":"string"}},"version":{"type":"integer","format":"int32"}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Scorers","operation":"get"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["Scorers"],"summary":"Update scorer (version bump)","description":"Creates a new immutable version of the scorer. scorer_type and produces_score_config_id are immutable across versions.","operationId":"UpdateScorer","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Scorer stable entity id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Scorer payload","content":{"application/json":{"schema":{"type":"object","description":"HTTP request body for updating a Scorer (version bump).\n`scorer_type` and `produces_score_config_id` are immutable.\nIf provided, `name` is updated by creating a new version.","required":["scorer"],"properties":{"description":{"type":["string","null"]},"name":{"type":["string","null"]},"scorer":{"$ref":"#/components/schemas/ScorerUpdateConfig"}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for a Scorer.","required":["id","entityId","orgId","name","version","scorerType","template","variables","referenceBased","params","isActive","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"id":{"type":"string"},"isActive":{"type":"boolean"},"name":{"type":"string"},"orgId":{"type":"string"},"outputSchema":{},"params":{},"producesScoreConfigId":{"type":["string","null"]},"producesScoreConfigVersion":{"type":["integer","null"],"format":"int32"},"referenceBased":{"type":"boolean","description":"True when the scorer contract declares the `expected_output` variable."},"scorerType":{"type":"string"},"template":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"variables":{"type":"array","items":{"type":"string"}},"version":{"type":"integer","format":"int32"}}}}}},"403":{"description":"Provider not accessible","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Scorer or provider not found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Scorers","operation":"update"}},"delete":{"tags":["Scorers"],"summary":"Deactivate scorer","description":"Soft-deletes the scorer by deactivating all its versions.","operationId":"DeleteScorer","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Scorer stable entity id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deactivated","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Scorers","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/scorers/{entity_id}/versions":{"get":{"tags":["Scorers"],"summary":"List all versions of a scorer","description":"Lists every historical version of a scorer by stable entity id, ordered by version descending.","operationId":"ListScorerVersions","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Scorer stable entity id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"HTTP response body for listing Scorer versions.","required":["versions"],"properties":{"versions":{"type":"array","items":{"$ref":"#/components/schemas/ScorerResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Scorers","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/search/profile":{"get":{"tags":["Search"],"summary":"Get search performance profile","description":"Retrieves detailed performance profiling information for search queries executed within a specified time range. This includes execution timing, node information, component performance metrics, and resource usage statistics. Use this to analyze and optimize search performance, troubleshoot slow queries, and understand query execution patterns across your cluster. The trace must belong to a search executed in the requesting organization; traces of other organizations are answered as not found.","operationId":"GetSearchProfile","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"trace_id","in":"query","description":"trace_id, eg: trace_id=684a4e5dac43429a86a0a2ef9adf62c2","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"start time; defaults from the trace id","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"end time; defaults from the trace id","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchInspector"},"example":{"sql":"SELECT count(*) FROM \"default\" WHERE match_all('m')","start_time":"1744168877746000","end_time":"1744773677746000","total_duration":2407,"events":[{"timestamp":"1744773679038683087","node_role":["Ingester"],"node_name":"usertest-openobserve-ingester-0","search_role":"follower","region":"us-east-1","cluster":"cluster-0","duration":0,"component":"wal:memtable load","desc":"wal mem search load groups 1, files 6, scan_size 16.01 MB, compressed_size 16.85 MB"}]}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Search","operation":"get"}}},"/api/{org_id}/search_jobs":{"get":{"tags":["Search Jobs"],"summary":"List search jobs","description":"Retrieves a list of all search jobs for the organization, including their current status, execution details, and metadata. This includes both active and completed jobs, allowing you to monitor the progress of running searches and access historical job information for analysis and debugging purposes.","operationId":"ListSearchJobs","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of search jobs","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchJob"}},"example":[{"id":"abc123","trace_id":"xyz789","org_id":"default","user_id":"user1","stream_type":"logs","stream_names":"[\"stream1\"]","payload":"...","start_time":1675182660872049,"end_time":1675185660872049,"created_at":1675182660872049,"updated_at":1675182660872049,"status":1,"cluster":"cluster1","result_path":"/path/to/result"}]}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List all search jobs","category":"search","summary_fields":["id","org_id","stream_type","stream_names","status","created_at"]},"x-o2-ratelimit":{"module":"Search Jobs","operation":"list"}},"post":{"tags":["Search Jobs"],"summary":"Submit search job","description":"Submits a new asynchronous search job for execution. Search jobs are useful for long-running queries that might exceed normal timeout limits or for scheduling queries to run in the background. The job is queued for execution and returns a job ID that can be used to monitor progress and retrieve results later.","operationId":"SubmitSearchJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Search query","content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"agent_options":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchAgentOptions"}]},"clear_cache":{"type":"boolean"},"clusters":{"type":"array","items":{"type":"string"}},"encoding":{"$ref":"#/components/schemas/RequestEncoding"},"local_mode":{"type":["boolean","null"]},"query":{"$ref":"#/components/schemas/SearchQuery"},"regions":{"type":"array","items":{"type":"string"}},"search_event_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventContext"}]},"search_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventType"}]},"timeout":{"type":"integer","format":"int64"},"use_cache":{"type":"boolean"},"use_index":{"type":"boolean","description":"Set to false to skip the inverted index for this query.","default":true}}},"example":{"query":{"sql":"select * from k8s ","start_time":1675182660872049,"end_time":1675185660872049,"limit":100,"offset":0}}}},"required":true},"responses":{"200":{"description":"Search Job submitted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search Jobs","operation":"create"},"x-o2-mcp":{"description":"Submit async search job","category":"search"}}},"/api/{org_id}/search_jobs/{job_id}":{"get":{"tags":["Search Jobs"],"summary":"Get search job status","description":"Retrieves the current status and metadata for a specific search job. This includes execution state, timing information, error messages if any, and other job details. Use this to monitor job progress and determine when results are ready for retrieval or if the job encountered any issues during execution.","operationId":"GetSearchJobStatus","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Search job ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Search job status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchJob"},"example":{"id":"abc123","trace_id":"xyz789","org_id":"default","user_id":"user1","stream_type":"logs","stream_names":"[\"stream1\"]","payload":"...","start_time":1675182660872049,"end_time":1675185660872049,"created_at":1675182660872049,"updated_at":1675182660872049,"status":1,"cluster":"cluster1","result_path":"/path/to/result"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search Jobs","operation":"get"},"x-o2-mcp":{"description":"Get search job status","category":"search"}},"delete":{"tags":["Search Jobs"],"summary":"Delete search job","description":"Permanently deletes a search job and its associated results from the system. This action first cancels the job if it's still running, then removes all job data including metadata and stored results. Use this to clean up completed jobs and free up storage space. This operation cannot be undone.","operationId":"DeleteSearchJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Search job ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Search job deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"},"example":{"code":200,"message":"[Job_Id: abc123] Running Search Job deleted successfully."}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete a search job","category":"search","requires_confirmation":true},"x-o2-ratelimit":{"module":"Search Jobs","operation":"delete"}}},"/api/{org_id}/search_jobs/{job_id}/cancel":{"post":{"tags":["Search Jobs"],"summary":"Cancel search job","description":"Cancels a running or pending search job, stopping its execution and freeing up resources. This is useful for stopping long-running queries that are no longer needed or consuming too many resources. Once cancelled, the job cannot be resumed and no results will be available.","operationId":"CancelSearchJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Search job ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Search job cancelled successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"},"example":{"code":200,"message":"[Job_Id: abc123] Running Search Job cancelled successfully."}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search Jobs","operation":"update"},"x-o2-mcp":{"description":"Cancel a running search job","category":"search"}}},"/api/{org_id}/search_jobs/{job_id}/result":{"get":{"tags":["Search Jobs"],"summary":"Get search job results","description":"Retrieves the results from a completed search job with optional pagination. The job must have finished successfully before results can be accessed. Results include the matching records, total count, execution timing, and metadata. Use pagination parameters to retrieve large result sets in manageable chunks.","operationId":"GetSearchJobResult","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Search job ID","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","description":"Pagination start offset","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"Number of results to return","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Search job results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"example":{"took":155,"hits":[],"total":27179431,"from":0,"size":100}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get search job results","category":"search"},"x-o2-ratelimit":{"module":"Search Jobs","operation":"get"}}},"/api/{org_id}/search_jobs/{job_id}/retry":{"post":{"tags":["Search Jobs"],"summary":"Retry search job","description":"Retries a previously failed or cancelled search job by resubmitting it for execution. This is useful for handling transient failures or resource constraints that may have caused the original job to fail. Only cancelled or finished (failed) jobs can be retried. The job will be re-queued with the same original parameters and query.","operationId":"RetrySearchJob","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"job_id","in":"path","description":"Search job ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Search job retry initiated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"},"example":{"code":200,"message":"[Job_Id: abc123] Search Job retry successfully."}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden - Job cannot be retried","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Retry a failed search job","category":"search"},"x-o2-ratelimit":{"module":"Search Jobs","operation":"update"}}},"/api/{org_id}/service_accounts":{"get":{"tags":["ServiceAccounts"],"summary":"List service accounts","description":"Retrieves a list of all service accounts in the organization. Service accounts are special user accounts designed for automated systems and applications to authenticate and access resources without human intervention. Each service account has an associated API token for programmatic access.","operationId":"ServiceAccountsList","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserList"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Service Accounts","operation":"list"},"x-o2-mcp":{"description":"List service accounts","category":"users","summary_fields":["email","role","first_name","last_name"]}},"post":{"tags":["ServiceAccounts"],"summary":"Create service account","description":"Creates a new service account for automated systems and applications. Service accounts provide a secure way for non-human users to authenticate and access resources programmatically. Each service account is automatically assigned an API token that can be used for authentication in automated workflows and integrations.","operationId":"ServiceAccountSave","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"ServiceAccount data","content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceAccountCreateResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create service account","category":"users"},"x-o2-ratelimit":{"module":"Service Accounts","operation":"create"}}},"/api/{org_id}/service_accounts/bulk":{"delete":{"tags":["ServiceAccounts"],"summary":"Delete nultiple service account","description":"Permanently removes multiple service accounts from the organization. This action immediately invalidates the associated API token and revokes all access permissions for the service account. Use this when decommissioning automated systems or cleaning up unused accounts. This operation cannot be undone.","operationId":"RemoveServiceAccountBulk","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"emails of accounts to be deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Service Accounts","operation":"delete"}}},"/api/{org_id}/service_accounts/{email_id}":{"put":{"tags":["ServiceAccounts"],"summary":"Update service account","description":"Updates an existing service account's information such as first name and last name. You can also rotate the API token by adding the 'rotateToken=true' query parameter, which generates a new authentication token while invalidating the old one. This is useful for security maintenance and credential rotation policies.","operationId":"ServiceAccountUpdate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"email_id","in":"path","description":"Service Account email id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Service Account data","content":{"application/json":{"schema":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateServiceAccountAnswer"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Service Accounts","operation":"update"},"x-o2-mcp":{"description":"Update service account","category":"users"}},"delete":{"tags":["ServiceAccounts"],"summary":"Delete service account","description":"Permanently removes a service account from the organization. This action immediately invalidates the associated API token and revokes all access permissions for the service account. Use this when decommissioning automated systems or cleaning up unused accounts. This operation cannot be undone.","operationId":"RemoveServiceAccount","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"email_id","in":"path","description":"Service Account email id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete service account","category":"users","requires_confirmation":true},"x-o2-ratelimit":{"module":"Service Accounts","operation":"delete"}}},"/api/{org_id}/service_streams":{"get":{"tags":["Service Streams"],"operationId":"ListServiceStreams","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of discovered services"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden - Enterprise feature"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Service Streams","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/service_streams/_analytics":{"get":{"tags":["Service Streams"],"summary":"GET /api/{org_id}/service_streams/_analytics","description":"Get comprehensive dimension analytics including cardinality classification\n\nReturns:\n- Cardinality of each dimension\n- Cardinality class (VeryLow/Low/Medium/High/VeryHigh)\n- Recommended priority dimensions for correlation\n- Sample values for each dimension\n\nThis endpoint provides the data needed to understand which dimensions\nare stable (good for correlation) vs transient (good for filtering only)","operationId":"GetServiceStreamAnalytics","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Dimension analytics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DimensionAnalyticsSummary"}}}},"401":{"description":"Unauthorized - Authentication required"},"403":{"description":"Forbidden - Enterprise feature"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Service Streams","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/service_streams/_correlate":{"post":{"tags":["Service Streams"],"summary":"POST /api/{org_id}/service_streams/_correlate","description":"Find related telemetry streams for a given log/trace/metric event\n\nRequest body:\n{\n  \"source_stream\": \"default\",\n  \"source_type\": \"logs\",\n  \"available_dimensions\": {\n    \"k8s-cluster\": \"prod\",\n    \"k8s-namespace\": \"app\",\n    \"k8s-deployment\": \"api\",\n    \"k8s-pod\": \"api-xyz\",\n    \"host\": \"node-123\"\n  }\n}\n\nResponse includes:\n- The matched service\n- Which dimensions were used for matching (minimal set)\n- Which dimensions are available for additional filtering\n- All related streams (logs/traces/metrics) with their dimension requirements","operationId":"CorrelateServiceStreams","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Correlation request parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CorrelationRequest"}}},"required":true},"responses":{"200":{"description":"Correlation results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CorrelationResponse"}}}},"400":{"description":"Bad request"},"401":{"description":"Unauthorized - Authentication required"},"403":{"description":"Forbidden - Enterprise feature"},"404":{"description":"No matching service found"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Service Streams","operation":"create"}}},"/api/{org_id}/service_streams/_reset":{"delete":{"tags":["Service Streams"],"summary":"Reset service stream discovery","description":"Reset (delete) all discovered services for an organization.\n\nServices will be automatically re-discovered as new telemetry data arrives.\nThis is useful after changing service identity configuration to force\na clean re-discovery with the updated settings.","operationId":"ResetServiceStreams","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Services reset successfully","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Unauthorized - Authentication required"},"403":{"description":"Forbidden - Enterprise feature"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Service Streams","operation":"delete"}}},"/api/{org_id}/service_streams/config/identity":{"get":{"tags":["Service Streams"],"operationId":"GetServiceIdentityConfig","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current identity config"},"401":{"description":"Unauthorized"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Service Streams","operation":"list"}},"put":{"tags":["Service Streams"],"operationId":"SaveServiceIdentityConfig","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"ServiceIdentityConfig JSON","content":{"application/json":{"schema":{}}},"required":true},"responses":{"200":{"description":"Config saved"},"400":{"description":"Invalid config"},"401":{"description":"Unauthorized"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Service Streams","operation":"update"}}},"/api/{org_id}/settings":{"get":{"tags":["Organizations"],"summary":"Get organization settings","description":"Retrieves the current configuration settings for an organization, including scrape intervals, field mappings, ingestion preferences, and streaming options. Returns default settings if none have been configured previously for the organization.","operationId":"OrganizationSettingGet","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationSettingResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"get"},"x-o2-mcp":{"description":"Get organization settings","category":"users"}},"post":{"tags":["Organizations"],"summary":"Update organization settings","description":"Creates or updates organization-specific settings such as scrape interval, trace field names, ingestion toggles, and streaming configurations. Allows administrators to customize organizational behavior and operational parameters to match specific requirements and use cases.","operationId":"OrganizationSettingCreate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Organization settings","content":{"application/json":{"schema":{"type":"object","properties":{"ai_rca_thread_tool_output":{"type":["boolean","null"]},"budget_config":{"type":["array","null"],"items":{"$ref":"#/components/schemas/BudgetNotificationConfiguration"}},"claim_parser_function":{"type":["string","null"]},"cross_links":{"type":["array","null"],"items":{"$ref":"#/components/schemas/CrossLink"}},"dark_mode_theme_color":{"type":["string","null"]},"data_retention":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DataRetentionDefaults","description":"Replaces the stored values as a whole; a key left out inherits."}]},"domain_management_config":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DomainManagementConfig"}]},"domain_org_mappings":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DomainOrgMapping"}},"enable_streaming_search":{"type":["boolean","null"]},"enforce_allowed_orgs_only":{"type":["boolean","null"]},"light_mode_theme_color":{"type":["string","null"]},"max_series_per_query":{"type":["integer","null"],"minimum":0},"min_auto_refresh_interval":{"type":["integer","null"],"format":"int32","minimum":0},"red_insights_enabled":{"type":["boolean","null"]},"scrape_interval":{"type":["integer","null"],"format":"int32","description":"Ideally this should be the same as prometheus-scrape-interval (in\nseconds).","minimum":0},"span_id_field_name":{"type":["string","null"]},"streaming_aggregation_enabled":{"type":["boolean","null"]},"toggle_ingestion_logs":{"type":["boolean","null"]},"trace_id_field_name":{"type":["string","null"]},"usage_stream_enabled":{"type":["boolean","null"]}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create/update org settings","category":"users"},"x-o2-ratelimit":{"module":"Settings","operation":"create"}}},"/api/{org_id}/settings/domain/request/{id}/approve":{"post":{"tags":["Organizations"],"summary":"Approve a domain link request","operationId":"ApproveOrgDomainRequest","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestDecision"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Settings","operation":"update"}}},"/api/{org_id}/settings/domain/request/{id}/reject":{"post":{"tags":["Organizations"],"summary":"Reject a domain link request","operationId":"RejectOrgDomainRequest","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestDecision"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Settings","operation":"update"}}},"/api/{org_id}/settings/domains":{"get":{"tags":["Organizations"],"summary":"Get the domain linked to an organization","operationId":"GetOrgLinkedDomain","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrgDomainOwnership"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"get"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Organizations"],"summary":"Link a domain to an organization","operationId":"LinkOrgDomain","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Settings","operation":"create"}}},"/api/{org_id}/settings/domains/requests":{"get":{"tags":["Organizations"],"summary":"List domain link requests","operationId":"ListOrgDomainRequests","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrgDomainRequest"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Organizations"],"summary":"Request a domain link","operationId":"RaiseOrgDomainRequest","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/settings/domains/verify/{domain}":{"post":{"tags":["Organizations"],"summary":"Verify a linked domain","operationId":"VerifyOrgDomain","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"domain","in":"path","description":"Custom domain id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgDomainOwnership"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/settings/domains/{domain}":{"delete":{"tags":["Organizations"],"summary":"Remove a linked domain","operationId":"DeleteOrgLinkedDomain","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"domain","in":"path","description":"Custom domain id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/settings/gen_ai/agent_mapping":{"get":{"tags":["GenAI Settings"],"operationId":"GetGenAiAgentMapping","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Gen-AI agent mapping config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenAiAgentMappingConfig"}}}},"401":{"description":"Unauthorized"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"GenAI Settings","operation":"list"},"x-o2-mcp":{"enabled":true}},"put":{"tags":["GenAI Settings"],"operationId":"SaveGenAiAgentMapping","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Gen-AI agent mapping config","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenAiAgentMappingConfig"}}},"required":true},"responses":{"200":{"description":"Gen-AI agent mapping config saved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenAiAgentMappingConfig"}}}},"400":{"description":"Invalid config"},"401":{"description":"Unauthorized"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"GenAI Settings","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/settings/gen_ai/agent_registry":{"delete":{"tags":["GenAI Settings"],"operationId":"ClearGenAiAgentRegistry","parameters":[{"name":"org_id","in":"path","description":"Organization ID","required":true,"schema":{"type":"string"}},{"name":"source_stream","in":"query","description":"Optional stream name scope. Must be paired with `source_stream_type`.","required":false,"schema":{"type":["string","null"]}},{"name":"source_stream_type","in":"query","description":"Optional stream type scope. Must be paired with `source_stream`.","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"Cleared Gen-AI agent registry rows","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClearAgentRegistryResponse"}}}},"400":{"description":"Invalid query"},"401":{"description":"Unauthorized"},"500":{"description":"Internal server error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"GenAI Settings","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/settings/logo":{"post":{"tags":["Organizations"],"summary":"Upload the organization logo","operationId":"UploadOrgLogo","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"theme","in":"query","description":"Logo theme","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Image file","content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Image file."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Settings","operation":"create"}},"delete":{"tags":["Organizations"],"summary":"Delete the organization logo","operationId":"DeleteOrgLogo","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"theme","in":"query","description":"Logo theme","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/settings/logo/text":{"post":{"tags":["Organizations"],"summary":"Set the organization logo text","operationId":"SetOrgLogoText","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Logo text","content":{"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"create"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["Organizations"],"summary":"Delete the organization logo text","operationId":"DeleteOrgLogoText","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/settings/password_policy":{"get":{"tags":["Organizations"],"summary":"Get the password policy","description":"Returns the authentication policy enforced for native users across the whole deployment: password complexity, rotation, reuse prevention and account lockout. Requires Root or Admin on the meta organization, because the full policy includes lockout thresholds and history depth; callers who only need the password requirements should use /{org_id}/password_complexity. An instance that has never configured a policy returns the built-in defaults rather than an error, so this endpoint never 404s.","operationId":"GetPasswordPolicy","parameters":[{"name":"org_id","in":"path","description":"Organization name (must be meta org; caller must be Root or Admin)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordPolicy"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"get"},"x-o2-mcp":{"description":"Get the instance password policy","category":"system"}},"put":{"tags":["Organizations"],"summary":"Configure the password policy","description":"Replaces the whole policy; any field omitted from the body falls back to its default rather than to its current value. Requires Root or Admin on the meta organization. If the complexity requirements grew, every native user is flagged for a forced password reset and the response reports how many were affected — root, external users and service accounts are never flagged.","operationId":"SetPasswordPolicy","parameters":[{"name":"org_id","in":"path","description":"Organization name (must be meta org; caller must be Root or Admin)","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The policy to enforce","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordPolicy"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPasswordPolicyResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Configure the instance password policy","category":"system","requires_confirmation":true},"x-o2-ratelimit":{"module":"Settings","operation":"create"}}},"/api/{org_id}/settings/public_dashboards":{"get":{"tags":["Public Dashboards"],"summary":"Get public dashboard settings of an organization","operationId":"GetOrgPublicDashboardSettings","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgPublicDashboardSettings"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Settings","operation":"get"}},"put":{"tags":["Public Dashboards"],"summary":"Update public dashboard settings of an organization","operationId":"UpdateOrgPublicDashboardSettings","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgPublicDashboardSettings"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgPublicDashboardSettings"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Settings","operation":"update"}}},"/api/{org_id}/settings/v2":{"get":{"tags":["Organizations"],"summary":"List all resolved system settings","description":"Lists all settings with multi-level resolution applied. Merges system, org, and user levels, returning the most specific value for each key.","operationId":"SystemSettingListResolved","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"user_id","in":"query","description":"User ID for user-level resolution","required":false,"schema":{"type":"string"}},{"name":"category","in":"query","description":"Filter by setting category","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/SystemSetting"},"propertyNames":{"type":"string"}}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"list"},"x-o2-mcp":{"description":"List resolved system settings","category":"system"}},"post":{"tags":["Organizations"],"summary":"Set organization-level setting","description":"Creates or updates an organization-level setting. This setting applies to all users in the organization unless overridden at the user level.","operationId":"SystemSettingSetOrg","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Setting to create/update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSettingPayload"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSetting"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"create"},"x-o2-mcp":{"description":"Set org-level system setting","category":"system"}}},"/api/{org_id}/settings/v2/user/{user_id}":{"post":{"tags":["Organizations"],"summary":"Set user-level setting","description":"Creates or updates a user-level setting. This setting applies only to the specific user and overrides org-level and system-level settings.","operationId":"SystemSettingSetUser","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"user_id","in":"path","description":"User ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Setting to create/update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSettingPayload"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemSetting"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"create"},"x-o2-mcp":{"description":"Set user-level system setting","category":"system"}}},"/api/{org_id}/settings/v2/user/{user_id}/{key}":{"delete":{"tags":["Organizations"],"summary":"Delete user-level setting","description":"Deletes a user-level setting. After deletion, queries for this key will fall back to org-level or system-level settings.","operationId":"SystemSettingDeleteUser","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"user_id","in":"path","description":"User ID","required":true,"schema":{"type":"string"}},{"name":"key","in":"path","description":"Setting key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete user system setting","category":"system","requires_confirmation":true},"x-o2-ratelimit":{"module":"Settings","operation":"delete"}}},"/api/{org_id}/settings/v2/{key}":{"get":{"tags":["Organizations"],"summary":"Get resolved system setting","description":"Retrieves a setting value with multi-level resolution. Checks user-level first, then org-level, then system-level defaults. Returns the most specific setting found, or null if no setting exists at any level.","operationId":"SystemSettingGetResolved","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"key","in":"path","description":"Setting key","required":true,"schema":{"type":"string"}},{"name":"user_id","in":"query","description":"User ID for user-level resolution","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SystemSetting"}]}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"get"},"x-o2-mcp":{"description":"Get resolved system setting","category":"system"}},"delete":{"tags":["Organizations"],"summary":"Delete organization-level setting","description":"Deletes an organization-level setting. After deletion, queries for this key will fall back to system-level defaults.","operationId":"SystemSettingDeleteOrg","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"key","in":"path","description":"Setting key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Delete org system setting","category":"system","requires_confirmation":true},"x-o2-ratelimit":{"module":"Settings","operation":"delete"}}},"/api/{org_id}/short":{"post":{"tags":["Short Url"],"summary":"Create short URL","description":"Generates a shortened URL from a longer original URL. This is useful for creating more manageable links for dashboards, reports, or search queries that can be easily shared via email, chat, or documentation. The short URL remains valid and can be used to redirect back to the original destination.","operationId":"createShortUrl","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The original URL to shorten","content":{"application/json":{"schema":{"type":"object","required":["original_url"],"properties":{"original_url":{"type":"string"}}},"example":{"original_url":"https://example.com/some/long/url"}}},"required":true},"responses":{"200":{"description":"Shortened URL","content":{"application/json":{"schema":{"type":"object","required":["short_url"],"properties":{"short_url":{"type":"string"}}},"example":{"short_url":"http://localhost:5080/short/ddbffcea3ad44292"}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"ShortUrl","operation":"create"}}},"/api/{org_id}/short/{short_id}":{"get":{"tags":["Short Url"],"summary":"Resolve short URL","description":"Resolves a shortened URL back to its original destination. By default, this endpoint redirects the user to the original URL. When the 'type=ui' query parameter is provided, it returns the original URL as JSON instead of performing a redirect. This is useful for applications that need to inspect or validate URLs before navigation.","operationId":"resolveShortUrl","parameters":[{"name":"short_id","in":"path","description":"The short ID to retrieve the original URL","required":true,"schema":{"type":"string"},"example":"ddbffcea3ad44292"},{"name":"type","in":"query","description":"Response type - if 'ui', returns JSON object instead of redirect","required":false,"schema":{"type":"string"},"example":"ui"},{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"JSON response when type=ui","content":{"application/json":{"schema":{"type":"string"}}}},"302":{"description":"Redirect to original URL (if < 1024 chars) or /web/short_url/{short_id}","headers":{"Location":{"schema":{"type":"string"},"description":"The original URL or /web/short_url/{short_id} to which the client is redirected"}}},"404":{"description":"Short URL not found","content":{"text/plain":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"ShortUrl","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/connection/confirm":{"post":{"tags":["Slack"],"summary":"Finish Sign in with Slack","description":"Redeems the Sign in with Slack code; the installation, the purpose and the organization come from the signed state, never from the path. Connects that organization or reports the test result.","operationId":"SlackConnectionConfirm","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"oidc_code\", \"oidc_state\"}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"`{\"connected\": true, \"org_id\"}` (the org of the signed state) or `{\"test\": \"pass\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad or reused state, nonce mismatch","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an admin, another workspace, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}},"502":{"description":"Slack refused the code or the client secret","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/connectivity":{"post":{"tags":["Slack"],"summary":"Check the connection to Slack","description":"Step 1: reaches Slack's API and Socket Mode hosts through the configured proxy and CA bundle.","operationId":"SlackConnectivity","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"installation_id\"?}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"`{\"checks\": [{\"host\", \"status\", \"detail\"}], \"proxy\", \"ca_bundle\", \"socket_url_host\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/install/exchange":{"post":{"tags":["Slack"],"summary":"Finish a Slack install","description":"Redeems Slack's code, stores the bot token encrypted and connects this organization. The answer depends on the signed source: the destination form gets today's webhook fields, Settings gets the installation and the created destination, and a workspace already installed for another organization gets a single-use connect ticket.","operationId":"SlackInstallExchange","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"code\", \"state\"}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Form, Settings or already-installed shape","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad code or state","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Credentials from another app or team","content":{"application/json":{"schema":{"default":null}}}},"502":{"description":"Slack refused the code","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/install/start":{"post":{"tags":["Slack"],"summary":"Start a Cloud Slack install","description":"Returns the Slack authorize URL for the shared Cloud app, with the source signed into the state. Cloud only; self-hosted answers 404.","operationId":"SlackInstallStart","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"source\": \"destination_form\" | \"settings\" | \"upgrade_banner\" | \"reinstall\"}`; `reinstall` creates no destination and no channel default; `create_destination: true` (the Slack app form) makes the exchange create the Slack app destination","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"`{\"authorization_url\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Unknown source","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or not Cloud","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/installations":{"get":{"tags":["Slack"],"summary":"List Slack installations","description":"The installations connected to this organization; self-hosted adds the ones it may connect, Cloud the workspaces whose webhook destinations can be upgraded.","operationId":"SlackListInstallations","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"installations\", \"available\"?, \"upgrade_candidates\"?}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"list"}},"post":{"tags":["Slack"],"summary":"Create a self-hosted Slack app","description":"With a configuration refresh token O2 creates the app from its manifest; with Set up manually it stores the app's own credentials. Returns the pending installation and O2's bot-only authorize URL.","operationId":"SlackCreateInstallation","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"mode\", \"config_refresh_token\", \"app_name\"?, \"channel_history\"?}` or `{\"mode\", \"client_id\", \"client_secret\", \"signing_secret\"?, \"app_token\"?}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"201":{"description":"`{\"installation\", \"authorize_url\", \"app_settings_url\", \"manifest_page_url\"?}`","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad body or unknown mode","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or Cloud","content":{"application/json":{"schema":{"default":null}}}},"422":{"description":"Slack refused the configuration refresh token","content":{"application/json":{"schema":{"default":null}}}},"502":{"description":"Slack error on apps.manifest.create","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/installations/{installation_id}":{"delete":{"tags":["Slack"],"summary":"Uninstall from the workspace","description":"Self-hosted: uninstalls the app, revokes every link and removes the connections; a pending install is started over. Cloud never calls apps.uninstall and refuses while other organizations still use the app's webhooks. Needs the permission in every connected organization.","operationId":"SlackUninstall","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"revoked\", \"affected\": {\"orgs\", \"destinations\", \"links_revoked\"}, \"delete_app_url\", \"app_deleted\"?, \"app_delete_error\"?}`; Start over sets `app_deleted: false` and the reason when Slack kept the app","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin of every connected organization, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Cloud: webhook-only destinations in other organizations still use the app","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"delete"}}},"/api/{org_id}/slack/installations/{installation_id}/channel-defaults":{"get":{"tags":["Slack"],"summary":"List channel defaults","description":"Which organization answers in each channel, and how.","operationId":"SlackChannelDefaults","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"defaults\": [{\"channel_id\", \"channel_name\", \"answer_mode\", \"set_from\", \"set_by_this_org\", \"org_id\"?, \"org_name\"?}]}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"list"}}},"/api/{org_id}/slack/installations/{installation_id}/channel-defaults/{channel_id}":{"get":{"tags":["Slack"],"summary":"Get one channel default","operationId":"SlackGetChannelDefault","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}},{"name":"channel_id","in":"path","description":"Slack channel id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"channel_id\", \"channel_name\", \"answer_mode\", \"set_from\", \"set_by_this_org\", \"org_id\"?, \"org_name\"?}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, unknown installation or no default","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"get"}},"put":{"tags":["Slack"],"summary":"Set a channel default","description":"Sets which organization answers in the channel and how. Needs the permission in the row's current organization, and in the target organization when it moves.","operationId":"SlackPutChannelDefault","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}},{"name":"channel_id","in":"path","description":"Slack channel id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"org_id\", \"answer_mode\": \"thread\" | \"private\"}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"The channel default","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad body","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an admin of the organization that owns the default, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"update"}},"delete":{"tags":["Slack"],"summary":"Remove a channel default","description":"Needs the permission in the organization that owns the default.","operationId":"SlackDeleteChannelDefault","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}},{"name":"channel_id","in":"path","description":"Slack channel id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Removed"},"403":{"description":"Not an admin of the organization that owns the default, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, unknown installation or no default","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"delete"}}},"/api/{org_id}/slack/installations/{installation_id}/channels":{"get":{"tags":["Slack"],"summary":"List the workspace's channels","description":"Public and private channels the bot can see, filtered by name; cached for five minutes.","operationId":"SlackChannels","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Name filter.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Slack's `next_cursor` from the previous page.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"channels\": [{\"id\", \"name\", \"is_private\", \"is_member\", \"is_shared\"}], \"next_cursor\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/installations/{installation_id}/connection":{"post":{"tags":["Slack"],"summary":"Connect this organization with a ticket","description":"Connects this organization to an installed workspace with the single-use ticket the exchange returned, and creates the destination and channel default from the new webhook.","operationId":"SlackConnect","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"connect_ticket\"}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"`{\"connected\": true, \"destination\", \"channel_default_set\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}},"410":{"description":"The ticket expired or was used","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"create"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["Slack"],"summary":"Disconnect this organization","description":"Disconnects this organization from the workspace and lists the Slack destinations that stop working.","operationId":"SlackDisconnect","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"stopped_destinations\": [{\"org_id\", \"id\", \"name\"}]}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, unknown installation or not connected","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"delete"}}},"/api/{org_id}/slack/installations/{installation_id}/connection/start":{"post":{"tags":["Slack"],"summary":"Start Sign in with Slack","description":"The Sign in with Slack URL that proves workspace membership, to connect this organization or to test the app's client secret.","operationId":"SlackConnectionStart","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"purpose\": \"connect\" | \"test\"}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"`{\"url\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Unknown purpose","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/installations/{installation_id}/credentials":{"put":{"tags":["Slack"],"summary":"Update the Slack app credentials","description":"Replaces the app token, signing secret or client credentials, checked against the installed app. `config_refresh_token: null` forgets O2's copy only. Needs the permission in every connected organization.","operationId":"SlackUpdateCredentials","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"app_token\"?, \"signing_secret\"?, \"client_id\"?, \"client_secret\"?, \"config_refresh_token\"?: string | null}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"InstallationView","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad body","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an admin of every connected organization, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Credentials from another app or team","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"update"}}},"/api/{org_id}/slack/installations/{installation_id}/help-contact":{"get":{"tags":["Slack"],"summary":"Get the help contact","description":"Who a Slack user without O2 access should ask. Any member of the organization may read it.","operationId":"SlackGetHelpContact","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"help_contact\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not a member, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"get"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["Slack"],"summary":"Set the help contact","operationId":"SlackPutHelpContact","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"help_contact\"}`, at most 256 characters","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"`{\"help_contact\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Longer than 256 characters","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"update"}}},"/api/{org_id}/slack/installations/{installation_id}/install-url":{"post":{"tags":["Slack"],"summary":"Get the Finish install URL","description":"A fresh bot-only authorize URL for a pending self-hosted installation.","operationId":"SlackInstallUrl","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"authorize_url\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/installations/{installation_id}/link-all":{"post":{"tags":["Slack"],"summary":"Link every matching member","description":"Links every matching member; continues in the background after 60 s. Needs the permission in every connected organization.","operationId":"SlackLinkAll","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"linked\", \"complete\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin of every connected organization, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"A run is already active","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/installations/{installation_id}/linking":{"get":{"tags":["Slack"],"summary":"Get the linking settings","description":"Automatic linking by email domain, its source, and link counts for this organization's members.","operationId":"SlackGetLinking","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"LinkingView `{\"enabled\", \"source\", \"domains\", \"counts\"}` (this organization's mapped domains only) plus `\"manual_domains\"` (the list for organizations without a mapping), `\"other_org_domains\"`, `\"truncated\"` and `\"refreshing\"` (the workspace scan runs in the background)","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"get"}},"put":{"tags":["Slack"],"summary":"Change the linking settings","description":"Turns automatic linking on or off and sets its domains. Needs the permission in every connected organization.","operationId":"SlackPutLinking","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"enabled\", \"domains\"?}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"LinkingView plus `\"other_org_domains\"`, `\"truncated\"`, `\"refreshing\"`","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Public email domain, or domains while they come from the domain mapping","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an admin of every connected organization, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/installations/{installation_id}/links/matches":{"get":{"tags":["Slack"],"summary":"List workspace members that match this organization's users","description":"Slack members whose verified email matches a member of this organization and who are not linked yet.","operationId":"SlackLinkMatches","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Slack's `next_cursor` from the previous page.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"members\": [{\"slack_user_id\", \"name\", \"email\", \"o2_user\"}], \"next_cursor\", \"truncated\", \"refreshing\"}` from the last background scan","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"list"}}},"/api/{org_id}/slack/installations/{installation_id}/oncall-unlinked":{"get":{"tags":["Slack"],"summary":"On-call members without a Slack link","description":"Members of this organization's on-call teams who have not linked a Slack account in this workspace, with their next shift and the last reminder.","operationId":"SlackOncallUnlinked","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"members\": [{\"email\", \"team_id\", \"team_name\", \"next_shift_at\", \"reminded_at\"}]}`; empty when on-call is off","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"get"}}},"/api/{org_id}/slack/installations/{installation_id}/oncall-unlinked/remind":{"post":{"tags":["Slack"],"summary":"Send the pre-shift DM again","description":"DMs every unlinked on-call member of this organization a fresh link prompt; people Slack does not know by email are skipped.","operationId":"SlackRemindOncallUnlinked","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"sent\"}`, the number of DMs that went out","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"create"}}},"/api/{org_id}/slack/installations/{installation_id}/org-access":{"get":{"tags":["Slack"],"summary":"Get the instance workspace's organization access","description":"Self-hosted instance workspace only, from `_meta`: all organizations or the listed ones, each served organization with its channel defaults, links and members, and every organization on the server for the picker.","operationId":"SlackGetOrgAccess","parameters":[{"name":"org_id","in":"path","description":"Organization name; only `_meta`","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"all\", \"orgs\": [{\"org_id\", \"org_name\", \"source\", \"added_by\", \"added_at\", \"channel_defaults\", \"links\", \"members\"}], \"organizations\": [{\"org_id\", \"org_name\", \"members\"}], \"other_apps_in_team\": [{\"installation_id\", \"org_ids\"}]}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an instance admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled, not `_meta`, Cloud, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"get"},"x-o2-mcp":{"enabled":false}},"put":{"tags":["Slack"],"summary":"Set the instance workspace's organization access","description":"Self-hosted, from `_meta`: serve all organizations or the listed ones. Removed organizations lose their channel defaults, threads and connection, and their links move to another served organization or are unlinked. `preview: true` changes nothing and reports what Save would remove. On an organization workspace the call takes it over as the instance workspace.","operationId":"SlackPutOrgAccess","parameters":[{"name":"org_id","in":"path","description":"Organization name; only `_meta`","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"all\": true}` or `{\"orgs\": [string]}`, plus optional `\"preview\": true`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"OrgAccessView, with `removed`: [{\"org_id\", \"org_name\", \"channels\", \"links_moving\", \"links_unlinked\"}] when organizations are or would be removed","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad body","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an instance admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled, not `_meta`, Cloud, or unknown installation","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"The take-over is refused: the workspace is not active, or its team already has an instance workspace","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"update"}}},"/api/{org_id}/slack/installations/{installation_id}/test":{"post":{"tags":["Slack"],"summary":"Test a Slack installation","description":"Runs auth.test, reads the socket health and the last event, probes the agent, and optionally posts a test message.","operationId":"SlackTestInstallation","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"path","description":"Slack installation id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"channel_id\"?}`; no body at all means `{}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"`{\"checks\", \"test_post\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"A body that is not JSON","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown installation","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"create"}}},"/api/{org_id}/slack/link-requests/confirm":{"post":{"tags":["Slack"],"summary":"Finish linking a Slack account","description":"Redeems the Sign in with Slack code; the link request comes from the signed state. Checks that the Slack user is the one the link was sent to, links, and returns where to go back in Slack.","operationId":"SlackLinkRequestConfirm","parameters":[{"name":"org_id","in":"path","description":"Any organization the caller belongs to","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"oidc_code\", \"oidc_state\"}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"`{\"linked_as\", \"org_id\", \"orgs\", \"return_url\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad or reused state, nonce mismatch","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Another Slack account, team or Grid org (`error_detail` `wrong_account`), no O2 account in a connected organization (`no_access`), or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown request","content":{"application/json":{"schema":{"default":null}}}},"410":{"description":"Expired, redeemed or discarded","content":{"application/json":{"schema":{"default":null}}}},"429":{"description":"More than 10 start or confirm calls in a minute","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"create"}}},"/api/{org_id}/slack/link-requests/{request_id}/resend":{"post":{"tags":["Slack"],"summary":"Send a new link","description":"Sends the Slack user of an expired link a new one by DM, keeping the held question.","operationId":"SlackLinkRequestResend","parameters":[{"name":"org_id","in":"path","description":"Any organization the caller belongs to","required":true,"schema":{"type":"string"}},{"name":"request_id","in":"path","description":"Link request id from `?r=<id>.<sig>`","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"sig\"}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"202":{"description":"A new link was sent"},"400":{"description":"Bad signature","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"The OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown request","content":{"application/json":{"schema":{"default":null}}}},"429":{"description":"Five link requests in 10 minutes for this Slack user","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/link-requests/{request_id}/start":{"post":{"tags":["Slack"],"summary":"Start linking a Slack account","description":"Checks the signed link the bot sent and returns the Sign in with Slack URL for the signed-in user. Any member of a connected organization may call it.","operationId":"SlackLinkRequestStart","parameters":[{"name":"org_id","in":"path","description":"Any organization the caller belongs to","required":true,"schema":{"type":"string"}},{"name":"request_id","in":"path","description":"Link request id from `?r=<id>.<sig>`","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"`{\"sig\"}`","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"`{\"url\", \"request\": {\"question_preview\", \"channel_name\", \"team_name\"}, \"help_contact\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad signature","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"No O2 account in a connected organization (`error_detail` `no_access`, `hint` the help contact), or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or unknown request","content":{"application/json":{"schema":{"default":null}}}},"410":{"description":"Expired, redeemed or discarded","content":{"application/json":{"schema":{"default":null}}}},"429":{"description":"More than 10 start or confirm calls in a minute","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/links":{"get":{"tags":["Slack"],"summary":"List linked Slack accounts","description":"Active links of this organization's members only, 100 a page.","operationId":"SlackListLinks","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"installation_id","in":"query","description":"Only this installation; all installations connected to the organization when absent.","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","description":"`next_cursor` from the previous page.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"links\": [{\"id\", \"slack_user_id\", \"user_email\", \"link_method\", \"created_at\", \"last_used_at\", \"default_org_is_this_org\"}], \"next_cursor\"}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or the installation is not connected","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/links/me":{"get":{"tags":["Slack"],"summary":"List my linked Slack accounts","description":"The caller's active links, with the workspace, the Slack display name and the default organization.","operationId":"SlackMyLinks","parameters":[{"name":"org_id","in":"path","description":"Any organization the caller belongs to","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"links\": [{\"id\", \"team_name\", \"slack_display_name\", \"default_org_id\", \"link_method\", \"created_at\", \"last_used_at\"}]}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not a member of this organization, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/links/{link_id}":{"delete":{"tags":["Slack"],"summary":"Unlink a Slack account","description":"The owner unlinks their own link; an admin of this organization may unlink a member of it. The Slack user is not linked automatically again in that workspace.","operationId":"SlackDeleteLink","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"link_id","in":"path","description":"Link id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Unlinked"},"403":{"description":"Not the owner and not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or no such link for this organization's members","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Slack","operation":"delete"}}},"/api/{org_id}/slack/manifest":{"get":{"tags":["Slack"],"summary":"Build the Slack app manifest","description":"The manifest O2 would create, for Set up manually. Self-hosted only.","operationId":"SlackManifest","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"mode","in":"query","description":"`socket` or `http`.","required":false,"schema":{"type":"string"}},{"name":"name","in":"query","description":"App name shown in Slack.","required":false,"schema":{"type":"string"}},{"name":"channel_history","in":"query","description":"Adds the channel-history scopes and events.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Slack app manifest","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Unknown mode or bad name","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled for this organization, or Cloud","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slack/prerequisites":{"get":{"tags":["Slack"],"summary":"Check the self-hosted Slack prerequisites","description":"Step 0: master key, delegation key, home region, web URL and agent. While Slack is disabled only `_meta` admins may read it, and org admins too once O2_SLACK_ENABLED is on.","operationId":"SlackPrerequisites","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"`{\"checks\": [{\"id\", \"status\", \"detail\", \"variable\", \"fix\"}]}`","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Not an admin, or the OSS build","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Slack is not enabled and the caller may not read the prerequisites","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Slack","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/slos":{"get":{"tags":["SLOs"],"summary":"List SLOs","operationId":"ListSlos","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Filter by folder ID","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SloListResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"SLOs","operation":"list"},"x-o2-mcp":{"enabled":true}},"post":{"tags":["SLOs"],"summary":"Create an SLO","operationId":"CreateSlo","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"SLO definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Slo"}}},"required":true},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"SLOs","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/slos/move":{"post":{"tags":["SLOs"],"summary":"Move SLOs between folders","description":"Relocates one or more SLOs into another folder. SLOs share the alert folder namespace, so the destination is an alert folder. Requires write access to each SLO being moved, and to the destination folder. A move never changes an SLO's definition and never restarts its measurement.","operationId":"MoveSlos","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"The SLOs and the destination folder","content":{"application/json":{"schema":{"type":"object","required":["slo_ids","dst_folder_id"],"properties":{"dst_folder_id":{"type":"string","description":"Destination folder. An **alert** folder — SLOs share the alert folder\nnamespace rather than having a type of their own."},"slo_ids":{"type":"array","items":{"type":"string"},"description":"The SLOs to relocate."}}}}},"required":true},"responses":{"200":{"description":"Moved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"409":{"description":"Name already used in the destination","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"SLOs","operation":"update"}}},"/api/{org_id}/slos/{slo_id}":{"get":{"tags":["SLOs"],"summary":"Get an SLO","operationId":"GetSlo","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"slo_id","in":"path","description":"SLO identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SloListItem"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"SLOs","operation":"get"},"x-o2-mcp":{"enabled":true}},"put":{"tags":["SLOs"],"summary":"Update an SLO","operationId":"UpdateSlo","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"slo_id","in":"path","description":"SLO identifier","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"SLO definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Slo"}}},"required":true},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"SLOs","operation":"update"}},"delete":{"tags":["SLOs"],"summary":"Delete an SLO","operationId":"DeleteSlo","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"slo_id","in":"path","description":"SLO identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"SLOs","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/slos/{slo_id}/enable":{"put":{"tags":["SLOs"],"summary":"Enable or pause an SLO","description":"Separate from update because pausing must never be able to change the\ndefinition — and therefore can never bump the generation or discard\nmeasurement.","operationId":"EnableSlo","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"slo_id","in":"path","description":"SLO identifier","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"true to enable, false to pause","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"SLOs","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/slos/{slo_id}/groups":{"get":{"tags":["SLOs"],"summary":"Per-group SLO status","operationId":"GetSloGroups","parameters":[{"name":"org_id","in":"path","description":"Organization identifier","required":true,"schema":{"type":"string"}},{"name":"slo_id","in":"path","description":"SLO identifier","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"SLOs","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/sourcemaps":{"get":{"tags":["Sourcemaps"],"summary":"List sourcemaps uploaded in org","description":"Lists sourcemaps in the organizations, filtering with provided service, env, version filters.","operationId":"SourcemapList","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"service","in":"query","description":"Service filter","required":false,"schema":{"type":"string"}},{"name":"env","in":"query","description":"Environment filter","required":false,"schema":{"type":"string"}},{"name":"version","in":"query","description":"Version filter","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SourceMapRepr"}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false,"description":"List sourcemaps","category":"sourcemaps"},"x-o2-ratelimit":{"module":"Sourcemaps","operation":"list"}},"post":{"tags":["Sourcemaps"],"summary":"Upload zippsed sourcemap files","description":"Uploads a ZIP file containing minified source files and corresponding sourcemaps.","operationId":"UploadZippedSourcemaps","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"ZIP file with its service, env and version","content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"env":{"type":["string","null"]},"file":{"type":"string","format":"binary","description":"ZIP with the minified sources and their sourcemaps."},"service":{"type":["string","null"]},"version":{"type":["string","null"]}}}}},"required":true},"responses":{"201":{"description":"Sourcemaps stored successfully","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Error processing action","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"string"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Sourcemaps","operation":"create"}},"delete":{"tags":["Sourcemaps"],"summary":"Delete sourcemaps uploaded in org","description":"Deletes sourcemaps in the organizations, filtering with provided service, env, version filters.","operationId":"SourcemapDelete","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"service","in":"query","description":"Service filter","required":false,"schema":{"type":"string"}},{"name":"env","in":"query","description":"Environment filter","required":false,"schema":{"type":"string"}},{"name":"version","in":"query","description":"Version filter","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false,"description":"List sourcemaps","category":"sourcemaps"},"x-o2-ratelimit":{"module":"Sourcemaps","operation":"delete"}}},"/api/{org_id}/sourcemaps/stacktrace":{"post":{"tags":["Sourcemaps"],"summary":"Translate stacktrace from minified to original source","description":"Converts the stacktrace from the minified files into original source stacktrace based on uploaded sourcemaps","operationId":"SourcemapStacktrace","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Minified stacktrace and the sourcemap group to translate it with","content":{"application/json":{"schema":{"type":"object","required":["stacktrace"],"properties":{"env":{"type":["string","null"]},"service":{"type":["string","null"]},"stacktrace":{"type":"string"},"version":{"type":["string","null"]}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StacktraceResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Sourcemaps","operation":"create"},"x-o2-mcp":{"enabled":false,"description":"List sourcemaps","category":"sourcemaps"}}},"/api/{org_id}/sourcemaps/values":{"get":{"tags":["Sourcemaps"],"summary":"List distinct service, env, version values for uploaded sourcemaps in org","description":"List distinct service, env, version values for uploaded sourcemaps in org","operationId":"SourcemapValuesList","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourcemapValues"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false,"description":"List sourcemaps","category":"sourcemaps"},"x-o2-ratelimit":{"module":"Sourcemaps","operation":"list"}}},"/api/{org_id}/status_pages":{"get":{"tags":["Status Pages"],"summary":"List status pages","operationId":"ListStatusPages","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageListResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Status Pages","operation":"list"}},"post":{"tags":["Status Pages"],"summary":"Create a status page","operationId":"CreateStatusPage","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePageRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageAdminView"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Status Pages","operation":"create"}}},"/api/{org_id}/status_pages/domains/{did}":{"delete":{"tags":["Status Pages"],"summary":"Remove a custom domain","operationId":"DeleteStatusPageDomain","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"did","in":"path","description":"Custom domain id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/status_pages/domains/{did}/verify":{"post":{"tags":["Status Pages"],"summary":"Verify a custom domain","operationId":"VerifyStatusPageDomain","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"did","in":"path","description":"Custom domain id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAdminView"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/status_pages/notices/{nid}":{"put":{"tags":["Status Pages"],"summary":"Update a status page notice","operationId":"UpdateStatusPageNotice","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"nid","in":"path","description":"Notice id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNoticeRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoticeAdminView"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["Status Pages"],"summary":"Delete a status page notice","operationId":"DeleteStatusPageNotice","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"nid","in":"path","description":"Notice id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/status_pages/notices/{nid}/mark_false_positive":{"post":{"tags":["Status Pages"],"summary":"Resolve a notice as a false positive","operationId":"MarkStatusPageNoticeFalsePositive","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"nid","in":"path","description":"Notice id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkFalsePositiveRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/status_pages/notices/{nid}/updates":{"get":{"tags":["Status Pages"],"summary":"List the updates of a notice","operationId":"ListStatusPageNoticeUpdates","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"nid","in":"path","description":"Notice id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NoticeUpdateView"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Status Pages"],"summary":"Post an update to a notice","operationId":"AddStatusPageNoticeUpdate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"nid","in":"path","description":"Notice id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoticeUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Status Pages","operation":"create"}}},"/api/{org_id}/status_pages/{id}":{"get":{"tags":["Status Pages"],"summary":"Get a status page","operationId":"GetStatusPage","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageAdminView"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Status Pages","operation":"get"}},"put":{"tags":["Status Pages"],"summary":"Update a status page","operationId":"UpdateStatusPage","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePageRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageAdminView"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["Status Pages"],"summary":"Delete a status page","operationId":"DeleteStatusPage","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Status Pages","operation":"delete"}}},"/api/{org_id}/status_pages/{id}/components":{"put":{"tags":["Status Pages"],"summary":"Replace the components of a status page","operationId":"SetStatusPageComponents","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetComponentsRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Status Pages","operation":"update"}}},"/api/{org_id}/status_pages/{id}/domains":{"get":{"tags":["Status Pages"],"summary":"List custom domains of a status page","operationId":"ListStatusPageDomains","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainAdminView"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Status Pages"],"summary":"Add a custom domain to a status page","operationId":"CreateStatusPageDomain","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/status_pages/{id}/notices":{"get":{"tags":["Status Pages"],"summary":"List notices of a status page","operationId":"ListStatusPageNotices","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NoticeAdminView"}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Status Pages"],"summary":"Create a notice on a status page","operationId":"CreateStatusPageNotice","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Request body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNoticeRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoticeAdminView"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/status_pages/{id}/preview":{"get":{"tags":["Status Pages"],"summary":"Preview a status page as published","operationId":"PreviewStatusPage","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusPagePreview"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/status_pages/{id}/rotate_slug":{"post":{"tags":["Status Pages"],"summary":"Rotate the public slug of a status page","operationId":"RotateStatusPageSlug","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Status Pages","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/storage":{"get":{"tags":["Organizations"],"summary":"Get storage details","description":"retrieves storage details if configured in redacted manor","operationId":"GetStorageInformation","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Storage details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetOrgStorageResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Settings","operation":"list"}},"put":{"tags":["Organizations"],"summary":"Update storage details","description":"Updates the org level storage details such as credentials","operationId":"UpdateStorageDetails","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"updated key data","content":{"application/json":{"schema":{"type":"object","required":["provider","data"],"properties":{"data":{},"provider":{"type":"string"}}}}},"required":true},"responses":{"201":{"description":"Stored","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"update"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Organizations"],"summary":"Set up org level storage for data","description":"Sets up org level storage if enabled for the given org","operationId":"AddOrgStorage","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"storage credentials","content":{"application/json":{"schema":{"type":"object","required":["provider","data"],"properties":{"data":{},"provider":{"type":"string"}}}}},"required":true},"responses":{"201":{"description":"Stored","content":{"application/json":{"schema":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}}}}},"400":{"description":"Invalid request","content":{"application/json":{}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Settings","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/streams":{"get":{"tags":["Streams"],"summary":"List organization streams","description":"Retrieves a paginated list of streams within the organization, with optional filtering by type and keyword. Supports sorting by various metrics. Streams written by OpenObserve itself carry `is_internal: true`; the field is omitted for user streams.","operationId":"StreamList","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. one of: logs, metrics, traces. Defaults to logs.","required":false,"schema":{"type":"string"}},{"name":"keyword","in":"query","description":"Keyword","required":false,"schema":{"type":"string"}},{"name":"offset","in":"query","description":"Offset","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"limit","in":"query","description":"Limit","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"sort","in":"query","description":"Sort","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["list","total"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/Stream"}},"total":{"type":"integer","minimum":0}}}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Streams","operation":"list"},"x-o2-mcp":{"description":"List all streams in the organization, you can filter by type and keyword. is_internal marks streams OpenObserve writes itself and is omitted when false.","category":"streams","summary_fields":["name","stream_type","stats.storage_size","is_internal"],"pinned":true}}},"/api/{org_id}/streams/{stream_name}":{"post":{"tags":["Streams"],"summary":"Create new stream","description":"Creates a new stream with specified settings and schema definition. The stream will be used to store and organize data of the specified type","operationId":"StreamCreate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. one of: logs, metrics, traces. Defaults to logs.","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Stream create","content":{"application/json":{"schema":{"type":"object","required":["fields","settings"],"properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/StreamField"}},"settings":{"$ref":"#/components/schemas/StreamSettings"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Create a new stream","category":"streams"},"x-o2-ratelimit":{"module":"Streams","operation":"create"}},"delete":{"tags":["Streams"],"summary":"Delete stream","description":"Permanently deletes a stream and all its associated data. Use delete_all parameter to remove related resources like alerts and dashboards","operationId":"StreamDelete","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. one of: logs, metrics, traces. Defaults to logs.","required":false,"schema":{"type":"string"}},{"name":"delete_all","in":"query","description":"Delete all related feature resources","required":true,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Streams","operation":"delete"},"x-o2-mcp":{"description":"Delete a stream","category":"streams","requires_confirmation":true}}},"/api/{org_id}/streams/{stream_name}/cache/results":{"delete":{"tags":["Streams"],"summary":"Delete stream result cache","description":"Clears cached search results for a stream. Optionally specify a timestamp to retain cache from that point forward and delete older cache","operationId":"StreamDeleteCache","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. one of: logs, metrics, traces. Defaults to logs.","required":false,"schema":{"type":"string"}},{"name":"ts","in":"query","description":"Timestamp in microseconds. If provided, must be > 0. Cache from this timestamp onwards will be retained, older cache will be deleted.","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Streams","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/streams/{stream_name}/data_by_time_range":{"delete":{"tags":["Streams"],"summary":"Delete stream data by time range","description":"Creates a deletion job to permanently remove stream data within the specified time range. Returns a job ID to track the deletion progress","operationId":"StreamDeleteDataByTimeRange","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. one of: logs, metrics, traces. Defaults to logs.","required":false,"schema":{"type":"string"}},{"name":"start","in":"query","description":"Start timestamp in microseconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end","in":"query","description":"End timestamp in microseconds","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Streams","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/streams/{stream_name}/data_by_time_range/status/{id}":{"get":{"tags":["Streams"],"summary":"Get deletion job status","description":"Retrieves the current status of a stream data deletion job, including progress information and any errors encountered","operationId":"StreamDeleteDataByTimeRangeJobStatus","parameters":[{"name":"id","in":"path","description":"Deletion job id","required":true,"schema":{"type":"string"}},{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompactorManualJobStatusRes"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Streams","operation":"get"}}},"/api/{org_id}/streams/{stream_name}/delete_fields":{"put":{"tags":["Streams"],"summary":"Delete stream fields","description":"Removes specified fields from the stream schema. This operation will affect how future data is indexed and queried for this stream","operationId":"StreamDeleteFields","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. one of: logs, metrics, traces. Defaults to logs.","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Stream delete fields","content":{"application/json":{"schema":{"type":"object","required":["fields"],"properties":{"fields":{"type":"array","items":{"type":"string"}}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Streams","operation":"delete"}}},"/api/{org_id}/streams/{stream_name}/patterns/extract":{"post":{"tags":["Patterns"],"summary":"Extract patterns from search results","description":"This endpoint runs a search query and extracts patterns from the results.\nIt internally uses the same search infrastructure as _search but returns\nonly the extracted patterns.\n\nPOST /api/{org_id}/streams/{stream_name}/patterns/extract","operationId":"ExtractPatterns","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Search query (same format as _search endpoint)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad Request"},"403":{"description":"Forbidden - Enterprise feature only or Unauthorized Access"},"500":{"description":"Internal Server Error"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Search","operation":"get"},"x-o2-mcp":{"description":"Extract log patterns","category":"patterns"}}},"/api/{org_id}/streams/{stream_name}/schema":{"get":{"tags":["Streams"],"summary":"Get stream schema","description":"Retrieves the schema definition for a specific stream, including field types and metadata. Supports filtering by keyword and pagination","operationId":"StreamSchema","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. one of: logs, metrics, traces. Defaults to logs.","required":false,"schema":{"type":"string"}},{"name":"keyword","in":"query","description":"Keyword filter for field names (default: empty)","required":false,"schema":{"type":"string"}},{"name":"offset","in":"query","description":"Pagination offset (default: 0)","required":false,"schema":{"type":"integer","format":"int32","minimum":0}},{"name":"limit","in":"query","description":"Pagination limit (default: 0 = all)","required":false,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stream"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get stream schema","category":"streams","pinned":true},"x-o2-ratelimit":{"module":"Streams","operation":"get"}}},"/api/{org_id}/streams/{stream_name}/settings":{"put":{"tags":["Streams"],"summary":"Update stream settings","description":"Updates configuration settings for an existing stream, including retention policies, partitioning, and other stream-specific options","operationId":"UpdateStreamSettings","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. one of: logs, metrics, traces. Defaults to logs.","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Stream settings","content":{"application/json":{"schema":{"type":"object","properties":{"approx_partition":{"type":["boolean","null"]},"bloom_filter_fields":{"$ref":"#/components/schemas/UpdateSettingsWrapper_String"},"cross_links":{"$ref":"#/components/schemas/UpdateSettingsWrapper_CrossLink"},"data_retention":{"type":["integer","null"],"format":"int64"},"defined_schema_fields":{"$ref":"#/components/schemas/UpdateSettingsWrapper_String"},"distinct_value_fields":{"$ref":"#/components/schemas/UpdateSettingsWrapper_String"},"dynamic_partition":{"type":["boolean","null"],"description":"Whether the classifier decides the level; a value equal to the env's follows the env."},"enable_distinct_fields":{"type":["boolean","null"]},"enable_log_patterns_extraction":{"type":["boolean","null"]},"extended_retention_days":{"$ref":"#/components/schemas/UpdateSettingsWrapper_TimeRange"},"flatten_level":{"type":["integer","null"],"format":"int64"},"full_text_search_keys":{"$ref":"#/components/schemas/UpdateSettingsWrapper_String"},"index_all_values":{"type":["boolean","null"]},"index_fields":{"$ref":"#/components/schemas/UpdateSettingsWrapper_String"},"index_original_data":{"type":["boolean","null"]},"is_llm_stream":{"type":["boolean","null"]},"max_query_range":{"type":["integer","null"],"format":"int64"},"partition_keys":{"$ref":"#/components/schemas/UpdateSettingsWrapper_StreamPartition"},"partition_time_level":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PartitionTimeLevel","description":"`hourly` or `daily`, accepted only while the stream's dynamic partition is off."}]},"pattern_associations":{"$ref":"#/components/schemas/UpdateSettingsWrapper_PatternAssociation"},"storage_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/StorageType"}]},"store_original_data":{"type":["boolean","null"]}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Streams","operation":"update"},"x-o2-mcp":{"description":"Update stream settings","category":"streams","requires_confirmation":true}}},"/api/{org_id}/streams/{stream_name}/update_fields":{"put":{"tags":["Streams"],"summary":"Update stream field types","description":"#{\"ratelimit_module\":\"Streams\", \"ratelimit_module_operation\":\"update\"}#","operationId":"UpdateStreamFields","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. one of: logs, metrics, traces. Defaults to logs.","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Update stream fields to a specific data type","content":{"application/json":{"schema":{"type":"object","required":["fields"],"properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldUpdate"},"description":"List of field updates, each with name, target data_type, and optional nullability"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Streams","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/summary":{"get":{"tags":["Organizations"],"summary":"Get organization summary","description":"Retrieves comprehensive summary statistics and information about an organization including data ingestion metrics, storage usage, stream counts, and other key performance indicators useful for monitoring organization health and usage.","operationId":"GetOrganizationSummary","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgSummary"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Summary","operation":"get"},"x-o2-mcp":{"description":"Get organization summary","category":"organizations"}}},"/api/{org_id}/synthetics":{"get":{"tags":["Synthetics"],"summary":"List synthetics","operationId":"ListSynthetics","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Filter by folder ID (KSUID)","required":false,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Filter by check type (http|browser|tcp|tls|ssh)","required":false,"schema":{"type":"string"}},{"name":"enabled","in":"query","description":"Filter by enabled status","required":false,"schema":{"type":"boolean"}},{"name":"location","in":"query","description":"Filter by location","required":false,"schema":{"type":"string"}},{"name":"tag","in":"query","description":"Filter by tag","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (0-indexed)","required":false,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"page_size","in":"query","description":"Results per page","required":false,"schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticListResponse"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"list"},"x-o2-mcp":{"enabled":true}},"post":{"tags":["Synthetics"],"summary":"Create a synthetic","operationId":"CreateSynthetic","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID to create the synthetic in","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Synthetic definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Synthetic"}}},"required":true},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Synthetic"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"create"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Synthetics"],"summary":"Bulk delete synthetics","operationId":"BulkDeleteSynthetics","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID of the synthetics (for RBAC)","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"IDs to delete","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteSyntheticsRequestBody"}}},"required":true},"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"403":{"description":"Forbidden"},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/synthetics/agent-setup":{"get":{"tags":["Synthetics"],"summary":"Org-level private-agent setup: o2syn_ token + docker install template","operationId":"SyntheticsAgentSetup","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSetupResponse"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Synthetics","operation":"list"}}},"/api/{org_id}/synthetics/agent-tokens":{"get":{"tags":["Synthetics"],"summary":"List the org's private-agent (o2syn_) tokens (values masked)","operationId":"ListSyntheticsAgentTokens","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Admin or Root role required"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"list"},"x-o2-mcp":{"enabled":false}},"post":{"tags":["Synthetics"],"summary":"Create a named, non-default agent token (shown once)","operationId":"CreateSyntheticsAgentToken","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Operator-chosen name (e.g. per region/site). Required; must be unique in\nthe org and not \"default\"."}}}}},"required":true},"responses":{"200":{"description":"New token (shown once)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentTokenSecret"}}}},"400":{"description":"Name missing/reserved/duplicate"},"403":{"description":"Admin or Root role required"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/synthetics/agent-tokens/rotate":{"post":{"tags":["Synthetics"],"summary":"Mint a new default agent token; the old one stays valid until disabled","operationId":"RotateSyntheticsAgentToken","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":["string","null"],"description":"Optional operator-chosen name (e.g. per region/agent). Omitted → a\ntimestamped name."}}}}},"required":true},"responses":{"200":{"description":"New token (shown once)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentTokenSecret"}}}},"400":{"description":"Token name already exists"},"403":{"description":"Admin or Root role required"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Synthetics","operation":"create"}}},"/api/{org_id}/synthetics/agent-tokens/{name}":{"patch":{"tags":["Synthetics"],"summary":"Enable or disable (revoke) a named agent token","operationId":"SetSyntheticsAgentTokenEnabled","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Token name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Cannot disable the default token — rotate first"},"403":{"description":"Admin or Root role required"},"404":{"description":"Token not found"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/synthetics/environments":{"get":{"tags":["Synthetics"],"summary":"List environments, each with its variables inline","operationId":"ListSyntheticsEnvironments","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SyntheticsEnvironmentView"}}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"list"},"x-o2-mcp":{"enabled":true}},"post":{"tags":["Synthetics"],"summary":"Create an environment","operationId":"CreateSyntheticsEnvironment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Environment definition","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsEnvironmentView"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"A variable or environment with that name already exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"create"}}},"/api/{org_id}/synthetics/environments/_resync":{"post":{"tags":["Synthetics"],"summary":"Publish every environment and variable of the org to the other regions again","operationId":"ResyncSyntheticsEnvironments","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Counts of what was enqueued, and environments whose batch failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResyncSummary"}}}},"400":{"description":"Super cluster is not enabled","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"create"}}},"/api/{org_id}/synthetics/environments/{env}":{"put":{"tags":["Synthetics"],"summary":"Update an environment's description","operationId":"UpdateSyntheticsEnvironment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"env","in":"path","description":"Environment name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Environment definition","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsEnvironmentView"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"A variable or environment with that name already exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"update"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Synthetics"],"summary":"Delete an environment and the variables scoped to it","operationId":"DeleteSyntheticsEnvironment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"env","in":"path","description":"Environment name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"The environment is in use or still holds variables; see the message","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/synthetics/environments/{env}/duplicate":{"post":{"tags":["Synthetics"],"summary":"Copy an environment's variables into a new environment","operationId":"DuplicateSyntheticsEnvironment","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"env","in":"path","description":"Source environment name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"New environment name","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Duplicated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsEnvironmentView"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"A variable or environment with that name already exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"create"}}},"/api/{org_id}/synthetics/environments/{env}/variables":{"get":{"tags":["Synthetics"],"summary":"List one environment's variables","operationId":"ListSyntheticsEnvironmentVariables","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"env","in":"path","description":"Environment name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SyntheticsVariableView"}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"list"}},"post":{"tags":["Synthetics"],"summary":"Create a variable scoped to one environment","operationId":"CreateSyntheticsEnvironmentVariable","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"env","in":"path","description":"Environment name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Variable definition","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsVariableView"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"A variable or environment with that name already exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/synthetics/environments/{env}/variables/{id}":{"put":{"tags":["Synthetics"],"summary":"Update a variable scoped to one environment","operationId":"UpdateSyntheticsEnvironmentVariable","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"env","in":"path","description":"Environment name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Variable ID","required":true,"schema":{"type":"string"}},{"name":"force","in":"query","description":"Rename even while checks reference the old name","required":false,"schema":{"type":"boolean"}}],"requestBody":{"description":"Variable definition","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsVariableView"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"The new name is already taken, or checks still reference the old name; re-send with force=true","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"update"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Synthetics"],"summary":"Delete a variable scoped to one environment","operationId":"DeleteSyntheticsEnvironmentVariable","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"env","in":"path","description":"Environment name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Variable ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Checks still reference the variable; re-send with force=true","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true,"requires_confirmation":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"delete"}}},"/api/{org_id}/synthetics/environments/{env}/variables/{id}/promote":{"post":{"tags":["Synthetics"],"summary":"Move an environment-scoped variable into the global environment","operationId":"PromoteEnvironmentVariableToGlobal","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"env","in":"path","description":"Environment name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Variable ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Promoted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsVariableView"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"A variable or environment with that name already exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/synthetics/jobs/ack":{"post":{"tags":["Synthetics"],"summary":"Acknowledge a completed check — probe submits result (authenticated via o2syn_ token)","operationId":"SyntheticsJobAck","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"{\"job_id\": 42, \"status\": \"up\", \"response_time_ms\": 1200, \"error\": null}","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobAckAnswer"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/synthetics/jobs/lease":{"post":{"tags":["Synthetics"],"summary":"Lease a batch of jobs for a probe pool (authenticated via o2syn_ token)","operationId":"SyntheticsJobLease","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"{\"pool\": \"aws-browser\", \"limit\": 10}","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/synthetics/jobs/resolve":{"post":{"tags":["Synthetics"],"summary":"Resolve a job — probe fetches check config (authenticated via o2syn_ token)","operationId":"SyntheticsJobResolve","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"{\"job_id\": 42}","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsJobResolveResponse"}}}},"404":{"description":"Job not found"},"422":{"description":"Config error — the run is settled as failed and the probe stops"},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/synthetics/locations":{"get":{"tags":["Synthetics"],"summary":"List available probe locations","operationId":"ListSyntheticsLocations","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsCapabilitiesV2"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"list"}},"post":{"tags":["Synthetics"],"summary":"Create a probe location (kind=public is root-only)","operationId":"CreateSyntheticsLocation","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"One location, or `locations` for a batch","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["region","label"],"properties":{"enabled":{"type":"boolean"},"id":{"type":["string","null"],"description":"Public rows may pin their id (e.g. \"aws-us-east-1\" — synthetics\nreference locations by this string). Ignored for private rows (KSUID)."},"kind":{"type":"string","description":"\"public\" (root only, visible to all orgs) | \"private\" (default)."},"label":{"type":"string"},"pool":{"type":["string","null"],"description":"Queue routing key; defaults to `net-<id>` (public) or\n`private-<org>-<region>` (private)."},"provider":{"type":"string"},"region":{"type":"string"}},"additionalProperties":false},{"type":"object","required":["locations"],"properties":{"locations":{"type":"array","items":{"$ref":"#/components/schemas/CreateLocationRequest"}}}}]}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLocationAnswer"}}}},"400":{"description":"Validation error"},"403":{"description":"Public locations are root-only"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"create"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/synthetics/locations/{id}":{"get":{"tags":["Synthetics"],"summary":"Location detail: stats + registered agents + assigned checks","operationId":"GetSyntheticsLocation","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Location id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationDetail"}}}},"404":{"description":"Not found"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Synthetics","operation":"get"}},"put":{"tags":["Synthetics"],"summary":"Update a probe location's label/enabled (public rows root-only)","operationId":"UpdateSyntheticsLocation","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Location id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["label"],"properties":{"enabled":{"type":["boolean","null"],"description":"Omitted keeps the stored value; an explicit `false` disables."},"label":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsLocationRecord"}}}},"403":{"description":"Public locations are root-only"},"404":{"description":"Not found"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"update"},"x-o2-mcp":{"enabled":false}},"delete":{"tags":["Synthetics"],"summary":"Delete a probe location (rejected while synthetics reference it)","operationId":"DeleteSyntheticsLocation","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Location id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Still referenced by synthetics"},"403":{"description":"Public locations are root-only"},"404":{"description":"Not found"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/synthetics/variables":{"get":{"tags":["Synthetics"],"summary":"List org-level variables that apply to every environment","operationId":"ListSyntheticsVariables","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SyntheticsVariableView"}}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"list"}},"post":{"tags":["Synthetics"],"summary":"Create an org-level variable that applies to every environment","operationId":"CreateSyntheticsVariable","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Variable definition","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsVariableView"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"A variable or environment with that name already exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"create"}}},"/api/{org_id}/synthetics/variables/{id}":{"put":{"tags":["Synthetics"],"summary":"Update an org-level variable","operationId":"UpdateSyntheticsVariable","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Variable ID","required":true,"schema":{"type":"string"}},{"name":"force","in":"query","description":"Rename even while checks reference the old name","required":false,"schema":{"type":"boolean"}}],"requestBody":{"description":"Variable definition","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsVariableView"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"The new name is already taken, or checks still reference the old name; re-send with force=true","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"update"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Synthetics"],"summary":"Delete an org-level variable","operationId":"DeleteSyntheticsVariable","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Variable ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Checks still reference the variable; re-send with force=true","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/synthetics/variables/{id}/split":{"post":{"tags":["Synthetics"],"summary":"Split a global variable into per-environment values","operationId":"SplitSyntheticsVariable","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Variable ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"One value per destination environment","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Split","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SyntheticsVariableView"}}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"A variable or environment with that name already exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/synthetics/{id}":{"get":{"tags":["Synthetics"],"summary":"Get a synthetic by ID","operationId":"GetSynthetic","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Check ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Synthetic"}}}},"404":{"description":"Not found"},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"get"},"x-o2-mcp":{"enabled":true}},"put":{"tags":["Synthetics"],"summary":"Update a synthetic","operationId":"UpdateSynthetic","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Check ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Current folder ID of the synthetic (for RBAC)","required":false,"schema":{"type":"string"}}],"requestBody":{"description":"Updated synthetic definition","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Synthetic"}}},"required":true},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Synthetic"}}}},"403":{"description":"Forbidden"},"404":{"description":"Not found"},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"update"}},"delete":{"tags":["Synthetics"],"summary":"Delete a synthetic","operationId":"DeleteSynthetic","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Check ID","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Current folder ID of the synthetic (for RBAC)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"},"404":{"description":"Not found"},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/synthetics/{id}/artifact":{"get":{"tags":["Synthetics"],"summary":"Download a synthetics run artifact","operationId":"GetSyntheticsArtifact","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}},{"name":"key","in":"query","description":"Artifact object key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"PNG screenshot for a `.png` key, a ZIP trace for any other key","content":{"image/png":{"schema":{"type":"string","format":"binary"}},"application/zip":{"schema":{"type":"string","format":"binary"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Synthetics","operation":"get"}}},"/api/{org_id}/synthetics/{id}/artifacts/presign":{"post":{"tags":["Synthetics"],"summary":"Get presigned URLs for synthetics artifacts","operationId":"PresignSyntheticsArtifacts","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Resource id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Object-store keys to sign","content":{"application/json":{"schema":{"type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"Full object-store keys as stored in the stream records\n(`screenshot_key`, `trace_key`)."}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["mode","expires_in","urls"],"properties":{"expires_in":{"type":"integer","format":"int64","minimum":0},"mode":{"type":"string","description":"\"presigned\" — urls point directly at object storage (S3/MinIO/Azure).\n\"proxy\" — local disk mode; urls are relative API paths that stream bytes."},"urls":{"type":"array","items":{"$ref":"#/components/schemas/PresignedArtifact"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Synthetics","operation":"create"}}},"/api/{org_id}/synthetics/{id}/enable":{"put":{"tags":["Synthetics"],"summary":"Enable or pause a synthetic","operationId":"SetSyntheticEnabled","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Check ID","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"{\"enabled\": true}","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"description":"Missing enabled field"},"404":{"description":"Not found"},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"update"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/synthetics/{id}/referenced-by":{"get":{"tags":["Synthetics"],"summary":"Checks that embed this check as a subtest, redacted to those the caller can read","operationId":"GetSyntheticReferencedBy","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Check ID","required":true,"schema":{"type":"string"}},{"name":"placeholders","in":"query","description":"Comma-separated placeholder names; each readable parent reports which of them it does not define","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"list"}}},"/api/{org_id}/synthetics/{id}/resolved-variables":{"get":{"tags":["Synthetics"],"summary":"The check's resolved variable set, with the scope each name comes from","operationId":"GetSyntheticResolvedVariables","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Check ID","required":true,"schema":{"type":"string"}},{"name":"envs","in":"query","description":"Pass `all` for every environment's resolved set, keyed by environment name; omit for the flat first-environment set","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolvedVariablesAnswer"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"list"}}},"/api/{org_id}/synthetics/{id}/run":{"post":{"tags":["Synthetics"],"summary":"Trigger an immediate run of a synthetic","operationId":"RunSyntheticNow","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Check ID","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Accepted — scheduler will fire within 5 seconds"},"404":{"description":"Not found"},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/synthetics/{id}/runs":{"get":{"tags":["Synthetics"],"summary":"List runs for a check","operationId":"ListSyntheticsRuns","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Check ID","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Filter runs with scheduled_ts >= start_time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"Filter runs with scheduled_ts <= end_time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page number (0-indexed, default 0)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page_size","in":"query","description":"Results per page (default 20)","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListRunsResponse"}}}},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/synthetics/{id}/runs/{run_id}":{"get":{"tags":["Synthetics"],"summary":"Get a single run by ID","operationId":"GetSyntheticsRun","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Check ID","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","description":"Run ID (KSUID)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunSummary"}}}},"404":{"description":"Not found"},"500":{"description":"Error","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Synthetics","operation":"get"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/synthetics/{id}/variables/{name}/promote":{"post":{"tags":["Synthetics"],"summary":"Move a check-scoped variable into the shared tier","operationId":"PromoteSyntheticVariable","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Check ID","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","description":"Variable name on the check","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Destination scope","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Promoted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyntheticsVariableView"}}}},"400":{"description":"Invalid","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"A variable or environment with that name already exists","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Synthetics","operation":"create"}}},"/api/{org_id}/tasks":{"get":{"tags":["RemoteTasks"],"summary":"List remote tasks","description":"Lists each remote task head at its newest row.","operationId":"ListRemoteTasks","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/RemoteTaskResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RemoteTasks","operation":"list"},"x-o2-mcp":{"enabled":true}},"post":{"tags":["RemoteTasks"],"summary":"Register a remote task","description":"Registers a remote task as an unverified draft. No Experiment can reference it until a test connection publishes a version.","operationId":"CreateRemoteTask","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Remote task payload with inline write-only Secret material","content":{"application/json":{"schema":{"type":"object","description":"One-call registration payload for a complete Remote Task draft.","required":["name","endpoint"],"properties":{"auth":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CreateRemoteTaskAuthBody"}]},"contentType":{"type":["string","null"]},"customHeaders":{"type":["array","null"],"items":{"$ref":"#/components/schemas/CreateRemoteTaskHeaderBody"}},"description":{"type":["string","null"]},"endpoint":{"type":"string"},"httpMethod":{"type":["string","null"]},"maxAttempts":{"type":["integer","null"],"format":"int32","minimum":0},"maxConcurrency":{"type":["integer","null"],"format":"int32","minimum":0},"name":{"type":"string"},"requestTemplate":{"type":["string","null"]},"responseSchema":{"type":["string","null"]},"signing":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CreateRemoteTaskSigningBody"}]},"timeoutMs":{"type":["integer","null"],"format":"int64","minimum":0}}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/RemoteTaskResponseBody"},{"type":"object","properties":{"generatedSigningSecret":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/GeneratedRemoteTaskSigningSecretBody","description":"Present only when registration generated HMAC material server-side."}]}}}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"RemoteTasks","operation":"create"}}},"/api/{org_id}/tasks/test":{"post":{"tags":["RemoteTasks"],"summary":"Test an inline remote task","description":"Calls an inline Remote Task candidate once using the submitted contract and write-only Secret material. No Task, version, execution record, or Secret row is written.","operationId":"TestRemoteTask","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Complete registration candidate plus sample input and metadata","content":{"application/json":{"schema":{"allOf":[{"type":"object","description":"One-call registration payload for a complete Remote Task draft.","required":["name","endpoint"],"properties":{"auth":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CreateRemoteTaskAuthBody"}]},"contentType":{"type":["string","null"]},"customHeaders":{"type":["array","null"],"items":{"$ref":"#/components/schemas/CreateRemoteTaskHeaderBody"}},"description":{"type":["string","null"]},"endpoint":{"type":"string"},"httpMethod":{"type":["string","null"]},"maxAttempts":{"type":["integer","null"],"format":"int32","minimum":0},"maxConcurrency":{"type":["integer","null"],"format":"int32","minimum":0},"name":{"type":"string"},"requestTemplate":{"type":["string","null"]},"responseSchema":{"type":["string","null"]},"signing":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CreateRemoteTaskSigningBody"}]},"timeoutMs":{"type":["integer","null"],"format":"int64","minimum":0}}},{"type":"object","properties":{"input":{},"metadata":{}}}],"description":"A complete inline Remote Task candidate and the sample sent by a stateless\nconnection test. The candidate fields intentionally match registration so\nthe UI can send the same form state without first creating a Task head."}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"Result of testing an inline Remote Task candidate. Unlike publication,\nthis response carries no Task because the operation is deliberately\nstateless.","required":["verified","report"],"properties":{"error":{"type":["string","null"]},"report":{"$ref":"#/components/schemas/VerificationReportBody"},"verified":{"type":"boolean"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"RemoteTasks","operation":"create"}}},"/api/{org_id}/tasks/{entity_id}":{"get":{"tags":["RemoteTasks"],"summary":"Get a remote task","description":"Returns the head's newest published version, or its draft when it has never published one.","operationId":"GetRemoteTask","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","orgId","entityId","version","isDraft","isReferenceable","name","endpoint","httpMethod","auth","customHeaders","contentType","responseSchema","timeoutMs","maxAttempts","maxConcurrency","signing","verificationStatus","isActive","createdAt","updatedAt"],"properties":{"auth":{"$ref":"#/components/schemas/RemoteTaskAuthResponse"},"contentType":{"type":"string"},"createdAt":{"type":"integer","format":"int64"},"customHeaders":{"type":"array","items":{"$ref":"#/components/schemas/RemoteTaskHeaderResponse"}},"description":{"type":["string","null"]},"draftSourceVersion":{"type":["integer","null"],"format":"int32"},"endpoint":{"type":"string"},"entityId":{"type":"string"},"httpMethod":{"type":"string"},"id":{"type":"string"},"isActive":{"type":"boolean"},"isDraft":{"type":"boolean"},"isReferenceable":{"type":"boolean","description":"Whether an Experiment may pin this row."},"maxAttempts":{"type":"integer","format":"int32","minimum":0},"maxConcurrency":{"type":"integer","format":"int32","minimum":0},"name":{"type":"string"},"orgId":{"type":"string"},"referencedBy":{"type":["integer","null"],"format":"int64","description":"Number of live Experiments pinned to any published version of this\nhead. Populated by the list endpoint, which can compute all heads in one\nbatch; omitted from single-version responses.","minimum":0},"requestTemplate":{"type":["string","null"]},"responseSchema":{"type":"string"},"signing":{"$ref":"#/components/schemas/RemoteTaskSigningResponse"},"taskRef":{"type":["string","null"],"description":"`name@version`, present only when there is a version to pin."},"timeoutMs":{"type":"integer","format":"int64","minimum":0},"updatedAt":{"type":"integer","format":"int64"},"verificationError":{"type":["string","null"]},"verificationStatus":{"type":"string"},"verifiedAt":{"type":["integer","null"],"format":"int64"},"version":{"type":"integer","format":"int32","description":"`0` marks the head's draft, which no Experiment can reference."}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RemoteTasks","operation":"get"},"x-o2-mcp":{"enabled":true}},"put":{"tags":["RemoteTasks"],"summary":"Save the remote task draft","description":"Writes the head's single draft, copying the selected published version first when no draft exists. Published versions are untouched.","operationId":"SaveRemoteTaskDraft","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Remote task payload","content":{"application/json":{"schema":{"type":"object","description":"The configuration an edit submits. Omitted write-only credential fields\nretain the references stored on the source version or existing draft.","required":["name","endpoint"],"properties":{"auth":{"type":"object"},"contentType":{"type":["string","null"]},"customHeaders":{"type":"array","items":{"type":"object"}},"description":{"type":["string","null"]},"endpoint":{"type":"string"},"fromVersion":{"type":["integer","null"],"format":"int32","description":"The published version this edit started from. Ignored when a draft\nalready exists, because a head has only one."},"httpMethod":{"type":["string","null"]},"maxAttempts":{"type":["integer","null"],"format":"int32","minimum":0},"maxConcurrency":{"type":["integer","null"],"format":"int32","minimum":0},"name":{"type":"string"},"requestTemplate":{"type":["string","null"]},"responseSchema":{"type":["string","null"]},"signing":{"type":"object"},"timeoutMs":{"type":["integer","null"],"format":"int64","minimum":0}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","orgId","entityId","version","isDraft","isReferenceable","name","endpoint","httpMethod","auth","customHeaders","contentType","responseSchema","timeoutMs","maxAttempts","maxConcurrency","signing","verificationStatus","isActive","createdAt","updatedAt"],"properties":{"auth":{"$ref":"#/components/schemas/RemoteTaskAuthResponse"},"contentType":{"type":"string"},"createdAt":{"type":"integer","format":"int64"},"customHeaders":{"type":"array","items":{"$ref":"#/components/schemas/RemoteTaskHeaderResponse"}},"description":{"type":["string","null"]},"draftSourceVersion":{"type":["integer","null"],"format":"int32"},"endpoint":{"type":"string"},"entityId":{"type":"string"},"httpMethod":{"type":"string"},"id":{"type":"string"},"isActive":{"type":"boolean"},"isDraft":{"type":"boolean"},"isReferenceable":{"type":"boolean","description":"Whether an Experiment may pin this row."},"maxAttempts":{"type":"integer","format":"int32","minimum":0},"maxConcurrency":{"type":"integer","format":"int32","minimum":0},"name":{"type":"string"},"orgId":{"type":"string"},"referencedBy":{"type":["integer","null"],"format":"int64","description":"Number of live Experiments pinned to any published version of this\nhead. Populated by the list endpoint, which can compute all heads in one\nbatch; omitted from single-version responses.","minimum":0},"requestTemplate":{"type":["string","null"]},"responseSchema":{"type":"string"},"signing":{"$ref":"#/components/schemas/RemoteTaskSigningResponse"},"taskRef":{"type":["string","null"],"description":"`name@version`, present only when there is a version to pin."},"timeoutMs":{"type":"integer","format":"int64","minimum":0},"updatedAt":{"type":"integer","format":"int64"},"verificationError":{"type":["string","null"]},"verificationStatus":{"type":"string"},"verifiedAt":{"type":["integer","null"],"format":"int64"},"version":{"type":"integer","format":"int32","description":"`0` marks the head's draft, which no Experiment can reference."}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RemoteTasks","operation":"update"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["RemoteTasks"],"summary":"Delete a remote task","description":"Retires the head. Its published versions stay for history but stop being referenceable.","operationId":"DeleteRemoteTask","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RemoteTasks","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/tasks/{entity_id}/auth":{"put":{"tags":["RemoteTasks"],"summary":"Replace the remote task auth secret","description":"Re-encrypts the replacement for the configured auth method. Remote task versions are unchanged.","operationId":"ReplaceRemoteTaskAuthSecret","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["material"],"properties":{"material":{"$ref":"#/components/schemas/RemoteTaskSecretMaterialBody"}}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["purpose","state","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"graceExpiresAt":{"type":["integer","null"],"format":"int64"},"keyId":{"type":["string","null"]},"lastVerifiedAt":{"type":["integer","null"],"format":"int64"},"purpose":{"$ref":"#/components/schemas/RemoteTaskSecretPurposeBody"},"state":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"RemoteTasks","operation":"update"}},"delete":{"tags":["RemoteTasks"],"summary":"Revoke the remote task auth secret","description":"Revokes the value behind the configured auth reference without changing remote task versions.","operationId":"RevokeRemoteTaskAuthSecret","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RemoteTasks","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/tasks/{entity_id}/draft":{"get":{"tags":["RemoteTasks"],"summary":"Get the remote task draft","description":"Returns the head's unpublished draft, if it has one.","operationId":"GetRemoteTaskDraft","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["id","orgId","entityId","version","isDraft","isReferenceable","name","endpoint","httpMethod","auth","customHeaders","contentType","responseSchema","timeoutMs","maxAttempts","maxConcurrency","signing","verificationStatus","isActive","createdAt","updatedAt"],"properties":{"auth":{"$ref":"#/components/schemas/RemoteTaskAuthResponse"},"contentType":{"type":"string"},"createdAt":{"type":"integer","format":"int64"},"customHeaders":{"type":"array","items":{"$ref":"#/components/schemas/RemoteTaskHeaderResponse"}},"description":{"type":["string","null"]},"draftSourceVersion":{"type":["integer","null"],"format":"int32"},"endpoint":{"type":"string"},"entityId":{"type":"string"},"httpMethod":{"type":"string"},"id":{"type":"string"},"isActive":{"type":"boolean"},"isDraft":{"type":"boolean"},"isReferenceable":{"type":"boolean","description":"Whether an Experiment may pin this row."},"maxAttempts":{"type":"integer","format":"int32","minimum":0},"maxConcurrency":{"type":"integer","format":"int32","minimum":0},"name":{"type":"string"},"orgId":{"type":"string"},"referencedBy":{"type":["integer","null"],"format":"int64","description":"Number of live Experiments pinned to any published version of this\nhead. Populated by the list endpoint, which can compute all heads in one\nbatch; omitted from single-version responses.","minimum":0},"requestTemplate":{"type":["string","null"]},"responseSchema":{"type":"string"},"signing":{"$ref":"#/components/schemas/RemoteTaskSigningResponse"},"taskRef":{"type":["string","null"],"description":"`name@version`, present only when there is a version to pin."},"timeoutMs":{"type":"integer","format":"int64","minimum":0},"updatedAt":{"type":"integer","format":"int64"},"verificationError":{"type":["string","null"]},"verificationStatus":{"type":"string"},"verifiedAt":{"type":["integer","null"],"format":"int64"},"version":{"type":"integer","format":"int32","description":"`0` marks the head's draft, which no Experiment can reference."}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"RemoteTasks","operation":"get"}},"delete":{"tags":["RemoteTasks"],"summary":"Discard the remote task draft","description":"Drops the head's unpublished draft. Published versions are untouched.","operationId":"DiscardRemoteTaskDraft","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RemoteTasks","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/tasks/{entity_id}/headers/{header_name}/secret":{"put":{"tags":["RemoteTasks"],"summary":"Replace a secret-backed remote task header","description":"Re-encrypts the replacement behind the named header's configured reference. Remote task versions are unchanged.","operationId":"ReplaceRemoteTaskHeaderSecret","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}},{"name":"header_name","in":"path","description":"Configured custom header name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["material"],"properties":{"material":{"$ref":"#/components/schemas/RemoteTaskSecretMaterialBody"}}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["purpose","state","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"graceExpiresAt":{"type":["integer","null"],"format":"int64"},"keyId":{"type":["string","null"]},"lastVerifiedAt":{"type":["integer","null"],"format":"int64"},"purpose":{"$ref":"#/components/schemas/RemoteTaskSecretPurposeBody"},"state":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"RemoteTasks","operation":"update"}},"delete":{"tags":["RemoteTasks"],"summary":"Revoke a secret-backed remote task header","operationId":"RevokeRemoteTaskHeaderSecret","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}},{"name":"header_name","in":"path","description":"Configured custom header name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true,"requires_confirmation":true},"x-o2-ratelimit":{"module":"RemoteTasks","operation":"delete"}}},"/api/{org_id}/tasks/{entity_id}/signing":{"get":{"tags":["RemoteTasks"],"summary":"Get the remote task signing lifecycle status","description":"Returns current, candidate, and grace metadata without secret values or storage references.","operationId":"GetRemoteTaskSigningStatus","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"$ref":"#/components/schemas/RemoteTaskSecretMetadataBody"}}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RemoteTasks","operation":"list"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["RemoteTasks"],"summary":"Revoke the remote task signing secret","description":"Revokes all values behind the configured signing reference without changing remote task versions.","operationId":"RevokeRemoteTaskSigningSecret","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RemoteTasks","operation":"delete"},"x-o2-mcp":{"enabled":true,"requires_confirmation":true}}},"/api/{org_id}/tasks/{entity_id}/signing/activate":{"post":{"tags":["RemoteTasks"],"summary":"Activate a verified signing-key candidate","description":"Makes the candidate current and retains the old key for at most 24 hours.","operationId":"ActivateRemoteTaskSigningCandidate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["gracePeriodMs"],"properties":{"gracePeriodMs":{"type":"integer","format":"int64"}}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["purpose","state","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"graceExpiresAt":{"type":["integer","null"],"format":"int64"},"keyId":{"type":["string","null"]},"lastVerifiedAt":{"type":["integer","null"],"format":"int64"},"purpose":{"$ref":"#/components/schemas/RemoteTaskSecretPurposeBody"},"state":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"RemoteTasks","operation":"create"}}},"/api/{org_id}/tasks/{entity_id}/signing/end_grace":{"post":{"tags":["RemoteTasks"],"summary":"End the previous signing key grace period early","operationId":"EndRemoteTaskSigningGrace","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"RemoteTasks","operation":"create"}}},"/api/{org_id}/tasks/{entity_id}/signing/rotate":{"post":{"tags":["RemoteTasks"],"summary":"Create a signing-key candidate","description":"Returns candidate plaintext exactly once. The candidate must pass an explicit test before activation.","operationId":"RotateRemoteTaskSigningSecret","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"keyId":{"type":["string","null"]},"material":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RemoteTaskSecretMaterialBody","description":"Normally omitted so OpenObserve creates the candidate and shows it\nexactly once. Accepted for deterministic external key-management flows."}]}}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/RemoteTaskSecretMetadataBody"},{"type":"object","required":["material"],"properties":{"material":{"$ref":"#/components/schemas/RemoteTaskSecretMaterialResponseBody","description":"Returned only from a rotate response. No read route exposes it later."}}}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RemoteTasks","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/tasks/{entity_id}/signing/test":{"post":{"tags":["RemoteTasks"],"summary":"Test a signing-key candidate","description":"Sends one explicit request signed with the candidate. Only a successful test permits activation.","operationId":"TestRemoteTaskSigningCandidate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"The sample a test connection sends. Hand-entered, because the wizard's Test\nconnection stays at one row.","properties":{"input":{},"metadata":{}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["verified","report"],"properties":{"error":{"type":["string","null"]},"report":{"$ref":"#/components/schemas/VerificationReportBody"},"secret":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RemoteTaskSecretMetadataBody"}]},"verified":{"type":"boolean"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"RemoteTasks","operation":"create"}}},"/api/{org_id}/tasks/{entity_id}/stats":{"get":{"tags":["RemoteTasks"],"summary":"Get remote task execution statistics","description":"Aggregates latest-wins terminal execution records whose own server timestamp falls inside the requested window. The head includes every published version unless version narrows it.","operationId":"GetRemoteTaskStats","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}},{"name":"windowMs","in":"query","description":"Window ending now, measured against execution-record _timestamp","required":true,"schema":{"type":"integer","format":"int64","minimum":0}},{"name":"version","in":"query","description":"Optional published version","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["windowMs","totalRuns","okRuns","errorRuns","skippedRuns","latencyMs","referencingExperiments"],"properties":{"errorRuns":{"type":"integer","format":"int64","minimum":0},"latencyMs":{"$ref":"#/components/schemas/RemoteTaskLatencyStatsBody"},"okRuns":{"type":"integer","format":"int64","minimum":0},"referencingExperiments":{"type":"integer","format":"int64","minimum":0},"skippedRuns":{"type":"integer","format":"int64","minimum":0},"totalRuns":{"type":"integer","format":"int64","minimum":0},"windowMs":{"type":"integer","format":"int64","minimum":0}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RemoteTasks","operation":"get"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/tasks/{entity_id}/test_connection":{"post":{"tags":["RemoteTasks"],"summary":"Publish an edited remote task","description":"Description-only edits update their source version without calling the endpoint. Structural edits call the endpoint using the draft's own contract; a failure records why and publishes nothing, while a success publishes the next immutable version.","operationId":"PublishRemoteTask","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Sample sent to the configured endpoint","content":{"application/json":{"schema":{"type":"object","description":"The sample a test connection sends. Hand-entered, because the wizard's Test\nconnection stays at one row.","properties":{"input":{},"metadata":{}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["published","versionBumped","task"],"properties":{"error":{"type":["string","null"]},"published":{"type":"boolean","description":"False when the test connection failed. No version was published and the\ndraft is unchanged apart from the recorded reason."},"report":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/VerificationReportBody","description":"Absent when a description-only update skipped the connection test."}]},"task":{"$ref":"#/components/schemas/RemoteTaskResponseBody"},"versionBumped":{"type":"boolean","description":"Whether the publish minted a new version. A description-only edit\npublishes none."}}}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"RemoteTasks","operation":"update"}}},"/api/{org_id}/tasks/{entity_id}/test_run":{"post":{"tags":["RemoteTasks"],"summary":"Try a remote task against a sample","description":"Runs the task's latest published version against at most ten samples using the registered contract, at concurrency min(4, max_concurrency). Volatile: no Experiment, no execution records, no history. Idempotency keys are `testrun-` prefixed.","operationId":"TestRunRemoteTask","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Samples to try","content":{"application/json":{"schema":{"type":"object","required":["samples"],"properties":{"samples":{"type":"array","items":{"$ref":"#/components/schemas/TestRunSampleBody"},"description":"At most ten samples. Enforced again server-side."}},"additionalProperties":false}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","description":"The whole test-run result. Volatile: it is this response and nothing else —\nno Experiment, no execution records, no history.","required":["results"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/TestRunRowResultBody"}}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"RemoteTasks","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/tasks/{entity_id}/versions":{"get":{"tags":["RemoteTasks"],"summary":"List remote task versions","description":"Returns every version of the head, newest first, including its draft.","operationId":"ListRemoteTaskVersions","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"entity_id","in":"path","description":"Remote task head id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/RemoteTaskResponseBody"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"RemoteTasks","operation":"list"}}},"/api/{org_id}/telephony":{"get":{"tags":["OnCall"],"summary":"Get the org's phone provider account and the deployment's fallback","operationId":"GetTelephony","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelephonyView"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"list"}},"put":{"tags":["OnCall"],"summary":"Connect or update the org's own phone provider account","operationId":"SetTelephony","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutTelephonyRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgTelephonyView"}}}},"400":{"description":"Invalid, refused by Twilio, or no master key","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"OnCall","operation":"update"}},"delete":{"tags":["OnCall"],"summary":"Disconnect the org's own phone provider account","operationId":"DeleteTelephony","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"delete"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/telephony/status":{"get":{"tags":["OnCall"],"summary":"Check the phone provider account the org would page with","operationId":"GetTelephonyStatus","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelephonyStatus"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"OnCall","operation":"list"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/traces/agent_signals":{"get":{"tags":["Traces"],"summary":"Get agent trace signals","operationId":"GetAgentSignals","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time in microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time in microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"signal_type","in":"query","description":"Signal type: failure, loop or cost","required":false,"schema":{"type":"string"}},{"name":"source_stream","in":"query","description":"Source trace stream","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Traces","operation":"get"}}},"/api/{org_id}/traces/agent_signals/compare":{"post":{"tags":["Traces"],"summary":"Compare agent versions","operationId":"CompareAgentVersions","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"Request body for the version-compare sketch-merge endpoint.","required":["a","b"],"properties":{"a":{"$ref":"#/components/schemas/CompareArm"},"b":{"$ref":"#/components/schemas/CompareArm"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Traces","operation":"get"},"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/traces/service_graph/edge/history":{"get":{"tags":["Traces"],"summary":"Get latency trend for a specific service graph edge","description":"Returns per-step request, error and client latency points for a client→server edge (default: last 24 hours).","operationId":"GetServiceGraphEdgeTrend","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"client_service","in":"query","description":"Source service name","required":false,"schema":{"type":"string"}},{"name":"server_service","in":"query","description":"Target service name","required":false,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time (microseconds)","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream_name","in":"query","description":"Trace stream filter","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EdgeTrendResponse"}}}},"400":{"description":"Invalid time window (negative start_time, end_time not after start_time, end_time more than a day ahead, or longer than the data retention, at least 3650 days), or a service or stream name the metrics query cannot quote","content":{"application/json":{"schema":{"type":"string"}}}},"403":{"description":"Forbidden - Enterprise feature"},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Traces","operation":"list"}}},"/api/{org_id}/traces/service_graph/topology/current":{"get":{"tags":["Traces"],"summary":"Get current service graph topology","description":"Returns the service graph topology for the time range (default: last 60 minutes), read from the service graph metrics.","operationId":"GetCurrentServiceGraphTopology","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start of the window (microseconds); with end_time, replaces the last 60 minutes","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End of the window (microseconds); with start_time, replaces the last 60 minutes","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"stream_name","in":"query","description":"Optional stream name to filter service graph topology","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceGraphData"}}}},"400":{"description":"Invalid time window (negative start_time, end_time not after start_time, end_time more than a day ahead, or longer than the data retention, at least 3650 days) or a stream name the metrics query cannot quote","content":{"application/json":{"schema":{"type":"string"}}}},"403":{"description":"Forbidden - Enterprise feature","content":{"application/json":{"schema":{"type":"string"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Traces","operation":"get"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/traces/time_range":{"get":{"tags":["Traces"],"summary":"Get indexed time ranges for traces or sessions across all trace streams","description":"#{\"ratelimit_module\":\"Traces\", \"ratelimit_module_operation\":\"list\"}#","operationId":"GetOrgTraceTimeRange","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"trace_id","in":"query","description":"Comma-separated trace IDs; exactly one of trace_id and session_id is required","required":false,"schema":{"type":"string"}},{"name":"session_id","in":"query","description":"Comma-separated session IDs; exactly one of trace_id and session_id is required","required":false,"schema":{"type":"string"}},{"name":"hint_ts","in":"query","description":"Optional time hint in microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"start_time","in":"query","description":"Optional locate lower bound in microseconds; paired with end_time. Found ranges may extend past it","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"Optional locate upper bound in microseconds; paired with start_time","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"streams","in":"query","description":"Optional comma-separated trace stream names to narrow the search","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgTraceTimeRangeResponse"}}}},"400":{"description":"Invalid parameters"},"403":{"description":"Forbidden"},"500":{"description":"Failure"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Traces","operation":"list"}}},"/api/{org_id}/users":{"get":{"tags":["Users"],"summary":"List organization users","description":"Retrieves a list of all users within the specified organization, including their roles, status, and basic profile information. Optionally filter to list users across all organizations if the requesting user has sufficient permissions. Returns user metadata such as email addresses, assigned roles, last login times, and account status.","operationId":"UserList","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserList"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Users","operation":"list"},"x-o2-mcp":{"description":"List all users","category":"users","summary_fields":["email","role","first_name","last_name"]}},"post":{"tags":["Users"],"summary":"Create new user","description":"Creates a new user account within the organization with specified role and authentication credentials. The password must be at least 15 characters long by default or comply to the defined password policy and the email address must be valid. Users are automatically assigned to the organization with the specified role and can begin accessing resources immediately upon creation.","operationId":"UserSave","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"User data","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/UserRoleRequest"},{"type":"object","required":["email","password"],"properties":{"email":{"type":"string"},"first_name":{"type":"string"},"is_external":{"type":"boolean","description":"Is the user created via ldap flow."},"last_name":{"type":"string"},"password":{"type":"string"},"token":{"type":["string","null"]}}}]}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveUserAnswer"}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Users","operation":"create"},"x-o2-mcp":{"description":"Create a new user","category":"users"}}},"/api/{org_id}/users/bulk":{"delete":{"tags":["Users"],"summary":"Remove multiple users from organization","description":"Removes multiple users from the organization, immediately revoking their access to all organization resources, data, and services. The user account itself remains active and can be added back to organizations later. This action is permanent and cannot be undone without re-adding the user explicitly.","operationId":"BulkRemoveUserFromOrg","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Emails of the users to remove","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteRequest"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkDeleteResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Users","operation":"delete"}}},"/api/{org_id}/users/roles":{"get":{"tags":["Users"],"summary":"List available user roles","description":"Retrieves a comprehensive list of all available user roles that can be assigned to users within the organization. Includes role names, descriptions, and permission levels to help administrators understand access control options when creating or updating user accounts. Role availability may vary based on enterprise features and organizational settings.","operationId":"UserRoles","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["label","value"],"properties":{"label":{"type":"string"},"value":{"type":"string"}}}}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Users","operation":"get"}}},"/api/{org_id}/users/roles/all":{"get":{"tags":["Users"],"summary":"Get roles for all users","description":"Retrieves the roles assigned to every user in the organization in a single request, returned as a map of user email to role list. Replaces issuing one request per user. Requires enterprise features to be enabled.","operationId":"GetAllUsersRoles","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Users","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/users/{email_id}":{"get":{"tags":["Users"],"summary":"Get a single organization user","description":"Returns one member of the organization — the same record the list endpoint reports — together with their failed-login lockout state: whether they are currently locked out of password authentication, how long is left on the lock, and the failure counters behind it. Requires Root or Admin on the named organization, and the user must belong to it. A user who has never failed a login is reported as unlocked with zeroed counters rather than as missing.","operationId":"UserGet","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"email_id","in":"path","description":"User's email id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetailsResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get a user's details and lockout state","category":"users"},"x-o2-ratelimit":{"module":"Users","operation":"get"}},"put":{"tags":["Users"],"summary":"Update user account","description":"Updates user account information including role assignments, password changes, or other profile details. Users can modify their own account settings, while administrators have broader permissions to update any user account. Password changes require the new password to be at least 15 characters long by default or comply to the defined password policy for security compliance. Setting remove_lockout releases an active failed-login lockout and resets the counters; it answers to the same gate as an administrative password reset, so Root or Admin on the organization, and never the locked-out user themselves.","operationId":"UserUpdate","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"email_id","in":"path","description":"User's email id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"User data","content":{"application/json":{"schema":{"allOf":[{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/UserRoleRequest"}]},{"type":"object","properties":{"change_password":{"type":"boolean"},"first_name":{"type":["string","null"]},"last_name":{"type":["string","null"]},"new_password":{"type":["string","null"]},"old_password":{"type":["string","null"]},"remove_lockout":{"type":"boolean","description":"Releases an active failed-login lockout and resets the counters. Nothing else ends one\nearly — not even a password change, since the lock records attempts rather than the\npassword — and it is gated like a password reset by an administrator."},"token":{"type":["string","null"]}}}]}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false,"description":"Update user details","category":"users"},"x-o2-ratelimit":{"module":"Users","operation":"update"}},"post":{"tags":["Users"],"summary":"Add user to organization","description":"Adds an existing user account to the organization with the specified role assignment. The user must already exist in the system with valid authentication credentials. This operation grants the user access to organization resources and data according to their assigned role permissions.","operationId":"AddUserToOrg","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"email_id","in":"path","description":"User's email id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"User role","content":{"application/json":{"schema":{"type":"object","required":["role"],"properties":{"custom_role":{"type":["array","null"],"items":{"type":"string"}},"role":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false,"description":"Add user to organization","category":"users"},"x-o2-ratelimit":{"module":"Users","operation":"create"}},"delete":{"tags":["Users"],"summary":"Remove user from organization","description":"Removes a user from the organization, immediately revoking their access to all organization resources, data, and services. The user account itself remains active and can be added back to organizations later. This action is permanent and cannot be undone without re-adding the user explicitly.","operationId":"RemoveUserFromOrg","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"email_id","in":"path","description":"User name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"404":{"description":"NotFound","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false,"description":"Remove user from organization","category":"users","requires_confirmation":true},"x-o2-ratelimit":{"module":"Users","operation":"delete"}}},"/api/{org_id}/users/{user_id}/groups":{"get":{"tags":["Users"],"summary":"Get groups for user","description":"Retrieves all groups that a specific user belongs to in the organization. Shows group memberships which determine inherited roles and permissions. Requires enterprise features to be enabled.","operationId":"GetUserGroups","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"user_id","in":"path","description":"User email address","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"400":{"description":"Invalid user id","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Users","operation":"list"}}},"/api/{org_id}/users/{user_id}/roles":{"get":{"tags":["Users"],"summary":"Get roles for user","description":"Retrieves all roles assigned to a specific user in the organization. Shows both directly assigned roles and roles inherited through group membership. Requires enterprise features to be enabled.","operationId":"GetUserRoles","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"user_id","in":"path","description":"User email address","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"400":{"description":"Invalid user id","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Users","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/v1/logs":{"post":{"tags":["Logs"],"summary":"Ingest logs via OTLP","description":"Ingests log data using OpenTelemetry Protocol (OTLP) format. Supports both Protocol Buffers and JSON content types for OTLP log ingestion. This is the standard endpoint for OpenTelemetry SDK and collector integrations to send structured log data with trace correlation.","operationId":"PostLogs","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"ExportLogsServiceRequest","content":{"application/json":{"schema":{"type":"object"}},"application/x-protobuf":{}},"required":true},"responses":{"200":{"description":"ExportLogsServiceResponse, encoded like the request","content":{"application/x-protobuf":{"schema":{"$ref":"#/components/schemas/OtlpProtobufBody"}},"application/json":{"schema":{"$ref":"#/components/schemas/OtlpLogsExportJson"}}}},"400":{"description":"google.rpc.Status: invalid body, unsupported Content-Type, ingestion refused (e.g. stream being deleted), or write rejected (e.g. columns limit)","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"429":{"description":"google.rpc.Status: trial period expired","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"500":{"description":"google.rpc.Status: internal write error","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"503":{"description":"google.rpc.Status: ingester overloaded or unavailable, or ingestion not allowed (cloud)","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/v1/metrics":{"post":{"tags":["Metrics"],"summary":"Ingest metrics via OTLP","description":"Ingests metrics data using OpenTelemetry Protocol (OTLP) format. Supports both Protocol Buffers and JSON content types for OTLP metrics ingestion. This is the standard endpoint for OpenTelemetry SDK and collector integrations to send metrics data.","operationId":"PostMetrics","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"ExportMetricsServiceRequest","content":{"application/json":{"schema":{"type":"object"}},"application/x-protobuf":{}},"required":true},"responses":{"200":{"description":"ExportMetricsServiceResponse","content":{"application/x-protobuf":{"schema":{"$ref":"#/components/schemas/OtlpProtobufBody"}},"application/json":{"schema":{"$ref":"#/components/schemas/OtlpMetricsExportJson"}}}},"206":{"description":"ExportMetricsServiceResponse with a partial success (JSON requests only)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtlpMetricsExportJson"}}}},"400":{"description":"google.rpc.Status: invalid body, unsupported Content-Type, or write rejected (e.g. columns limit)","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"429":{"description":"google.rpc.Status: trial period expired","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"500":{"description":"google.rpc.Status: internal write error","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"503":{"description":"google.rpc.Status: ingester overloaded or unavailable, or ingestion not allowed (cloud)","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/v1/profiles":{"post":{"tags":["Profiles"],"summary":"Ingest profiles data via OTLP","description":"Ingests OpenTelemetry profiles data using OTLP protobuf or JSON payloads.","operationId":"PostProfiles","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"ExportProfilesServiceRequest","content":{"application/json":{"schema":{"type":"object"}},"application/x-protobuf":{}},"required":true},"responses":{"200":{"description":"ExportProfilesServiceResponse, encoded like the request","content":{"application/x-protobuf":{"schema":{"$ref":"#/components/schemas/OtlpProtobufBody"}},"application/json":{"schema":{"$ref":"#/components/schemas/OtlpProfilesExportJson"}}}},"400":{"description":"Invalid payload, or a Content-Type other than JSON or protobuf (answered in JSON); google.rpc.Status encoded like the request","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"429":{"description":"Trial period expired; google.rpc.Status encoded like the request","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Failure; google.rpc.Status encoded like the request","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"503":{"description":"Ingestion temporarily unavailable; google.rpc.Status encoded like the request","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/v1/traces":{"post":{"tags":["Traces"],"summary":"Ingest trace data","description":"Accepts and processes distributed tracing data from applications and services. Supports both Protocol Buffers and JSON formats for OTLP (OpenTelemetry Protocol) trace ingestion. Use this endpoint to send trace spans, timing information, and service dependency data for observability and performance monitoring.","operationId":"PostTraces","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"ExportTraceServiceRequest","content":{"application/json":{"schema":{"type":"object"}},"application/x-protobuf":{}},"required":true},"responses":{"200":{"description":"ExportTraceServiceResponse","content":{"application/x-protobuf":{"schema":{"$ref":"#/components/schemas/OtlpProtobufBody"}},"application/json":{"schema":{"$ref":"#/components/schemas/OtlpTracesExportJson"}}}},"206":{"description":"ExportTraceServiceResponse with a partial success (JSON requests only)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtlpTracesExportJson"}}}},"400":{"description":"google.rpc.Status: invalid body, unsupported Content-Type, or write rejected (e.g. columns limit)","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"429":{"description":"google.rpc.Status: trial period expired","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"500":{"description":"google.rpc.Status: internal write error","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}},"503":{"description":"google.rpc.Status: ingester overloaded or unavailable, or ingestion not allowed (cloud)","content":{"application/x-protobuf":{},"application/json":{"schema":{"type":"object"}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/workflows":{"get":{"tags":["Workflows"],"summary":"List organization workflows","description":"","operationId":"listWorkflows","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder ID to list within. The default folder is used when absent.","required":false,"schema":{"type":"string"}},{"name":"all_folders","in":"query","description":"List across every folder the caller may see. Overrides `folder`.","required":false,"schema":{"type":"boolean"}},{"name":"search_substring","in":"query","description":"Case-insensitive substring the workflow name or description must contain.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowListItem"}}}}},"403":{"description":"The caller's workflow listing was refused","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"The folder does not exist","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Workflows","operation":"list"}},"post":{"tags":["Workflows"],"summary":"Create new workflow","description":"","operationId":"createWorkflow","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Destination folder id, defaults to the org's default folder. Applies to drafts too.","required":false,"schema":{"type":"string"}},{"name":"draft","in":"query","description":"Save to the drafts table, skipping graph validation","required":false,"schema":{"type":"boolean"}}],"requestBody":{"description":"Workflow data","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"No write access to the destination folder","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Workflows","operation":"create"}}},"/api/{org_id}/workflows/promote/{id}":{"post":{"tags":["Workflows"],"summary":"Promote draft to workflows","description":"","operationId":"promoteDraftWorkflow","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Workflow id","required":true,"schema":{"type":"string"}},{"name":"trigger_type","in":"query","description":"Trigger type of the promoted workflow; IncidentEvent also associates it with incidents. Defaults to AlertFired","required":false,"schema":{"type":"string"}},{"name":"folder","in":"query","description":"Folder to publish into. The draft's own folder is used when absent.","required":false,"schema":{"type":"string"}}],"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"No draft with that id, or the graph is still invalid","content":{"application/json":{"schema":{"default":null}}}},"403":{"description":"No write access to the destination folder","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Workflows","operation":"update"}}},"/api/{org_id}/workflows/test":{"post":{"tags":["Workflows"],"summary":"Test a workflow with given input","description":"","operationId":"testWorkflow","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"draft","in":"query","description":"Test as a draft, defaults to false","required":false,"schema":{"type":"boolean"}}],"requestBody":{"description":"Workflow inputs","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTestResult"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Workflows","operation":"create"}}},"/api/{org_id}/workflows/{id}":{"put":{"tags":["Workflows"],"summary":"Update workflows","description":"","operationId":"updateWorkflows","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Workflow id","required":true,"schema":{"type":"string"}},{"name":"draft","in":"query","description":"Target the draft instead of the published workflow, defaults to false","required":false,"schema":{"type":"boolean"}}],"requestBody":{"description":"Workflow data","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Id mismatch, no such workflow or draft, or an invalid workflow","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Workflows","operation":"update"},"x-o2-mcp":{"enabled":true}},"delete":{"tags":["Workflows"],"summary":"Delete workflows","description":"","operationId":"deleteWorkflows","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Workflow id","required":true,"schema":{"type":"string"}},{"name":"draft","in":"query","description":"Target the draft instead of the published workflow, defaults to false","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Workflow is still associated with entities","content":{"application/json":{"schema":{"default":null}}}},"404":{"description":"No published workflow with that id","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true,"requires_confirmation":true},"x-o2-ratelimit":{"module":"Workflows","operation":"delete"}}},"/api/{org_id}/workflows/{id}/enable":{"put":{"tags":["Workflows"],"summary":"Enable or disable a particular workflow","description":"","operationId":"enableDisableWorkflow","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Workflow id","required":true,"schema":{"type":"string"}},{"name":"value","in":"query","description":"true enables and false disables the workflow, defaults to true","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Workflows","operation":"update"}}},"/api/{org_id}/workflows/{id}/errors/{run_id}":{"get":{"tags":["Workflows"],"summary":"List Errored workflow with errors and inputs","description":"","operationId":"listWorkflowErrors","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Workflow id","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","description":"Workflow run id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowErrorResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Workflows","operation":"get"}}},"/api/{org_id}/workflows/{id}/history":{"get":{"tags":["Workflows"],"summary":"Get history of workflow executions","description":"","operationId":"getWorkflowHistory","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Workflow id","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time in Unix timestamp microseconds, defaults to 7 days before now","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time in Unix timestamp microseconds, defaults to now","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowHistoryRow"}}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Workflows","operation":"get"}}},"/api/{org_id}/workflows/{id}/retry":{"post":{"tags":["Workflows"],"summary":"Retry a particular failed workflow run","description":"","operationId":"retryWorkflowRun","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Workflow id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"retry details","content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTestResult"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Workflows","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/workflows/{id}/trigger":{"post":{"tags":["Workflows"],"summary":"Trigger an existing workflow with given input","description":"","operationId":"triggerWorkflow","parameters":[{"name":"org_id","in":"path","description":"Organization id","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","description":"Workflow id","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Workflow inputs, one JSON value per input event","content":{"application/json":{"schema":{"type":"array","items":{}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTriggerResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"409":{"description":"The workflow is disabled","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Workflows","operation":"create"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/{stream_names}/_around_multi":{"get":{"tags":["Search"],"summary":"Search around specific record across multiple streams","description":"Searches for log entries around a specific record across multiple data streams","operationId":"SearchAroundMulti","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_names","in":"path","description":"base64 encoded comma separated stream names","required":true,"schema":{"type":"string"}},{"name":"key","in":"query","description":"around key; defaults to 0","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"around size; defaults to 10","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sql","in":"query","description":"comma separated base64 url encoded SQL, one per stream","required":false,"schema":{"type":"string"}},{"name":"timeout","in":"query","description":"timeout, seconds","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"example":{"took":155,"hits":[{"_p":"F","_timestamp":1674213225158000,"kubernetes":{"container_hash":"dkr.ecr.us-west-2.amazonaws.com/openobserve@sha256:3dbbb0dc1eab2d5a3b3e4a75fd87d194e8095c92d7b2b62e7cdbd07020f54589","container_image":"dkr.ecr.us-west-2.amazonaws.com/openobserve:v0.0.3","container_name":"openobserve","docker_id":"eb0983bdb9ff9360d227e6a0b268fe3b24a0868c2c2d725a1516c11e88bf5789","host":"ip.us-east-2.compute.internal","namespace_name":"openobserve","pod_id":"35a0421f-9203-4d73-9663-9ff0ce26d409","pod_name":"openobserve-ingester-0"},"log":"[2023-01-20T11:13:45Z INFO  actix_web::middleware::logger] 10.2.80.192 \"POST /api/demo/_bulk HTTP/1.1\" 200 68","stream":"stderr"}],"total":10,"from":0,"size":10,"scan_size":28943}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Search","operation":"list"}}},"/api/{org_id}/{stream_name}/_around":{"get":{"tags":["Search"],"summary":"Search around specific log entry","description":"Searches for log entries around a specific key (timestamp or record identifier) within a stream. Returns logs before and after the specified key, useful for investigating context around specific events or errors.","operationId":"SearchAround","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"stream_name name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. Must be one of: logs, metrics, traces. Defaults to logs if not specified.","required":false,"schema":{"type":"string"}},{"name":"key","in":"query","description":"around key","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"around size","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"regions","in":"query","description":"regions, split by comma","required":false,"schema":{"type":"string"}},{"name":"timeout","in":"query","description":"timeout, seconds","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"example":{"took":155,"hits":[{"_p":"F","_timestamp":1674213225158000,"kubernetes":{"container_hash":"dkr.ecr.us-west-2.amazonaws.com/openobserve@sha256:3dbbb0dc1eab2d5a3b3e4a75fd87d194e8095c92d7b2b62e7cdbd07020f54589","container_image":"dkr.ecr.us-west-2.amazonaws.com/openobserve:v0.0.3","container_name":"openobserve","docker_id":"eb0983bdb9ff9360d227e6a0b268fe3b24a0868c2c2d725a1516c11e88bf5789","host":"ip.us-east-2.compute.internal","namespace_name":"openobserve","pod_id":"35a0421f-9203-4d73-9663-9ff0ce26d409","pod_name":"openobserve-ingester-0"},"log":"[2023-01-20T11:13:45Z INFO  actix_web::middleware::logger] 10.2.80.192 \"POST /api/demo/_bulk HTTP/1.1\" 200 68","stream":"stderr"}],"total":10,"from":0,"size":10,"scan_size":28943}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Search logs around a timestamp. Note: in summary mode only took/hits/total/from/size/columns/scan_size/function_error are returned; rows are never capped, so `size` is what controls how many records you get around the key.","category":"search"},"x-o2-ratelimit":{"module":"Search","operation":"get"}},"post":{"tags":["Search"],"summary":"Search around specific log record","description":"Advanced version of around search that accepts a full log record in the request body instead of just a key. Searches for log entries around the specified record, providing better context matching based on the complete record data.","operationId":"SearchAroundV2","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"stream_name name","required":true,"schema":{"type":"string"}},{"name":"size","in":"query","description":"around size","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"regions","in":"query","description":"regions, split by comma","required":false,"schema":{"type":"string"}},{"name":"timeout","in":"query","description":"timeout, seconds","required":false,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"description":"around record data","content":{"application/json":{"schema":{"type":"string"},"example":{"_timestamp":1675182660872049,"container_image":"dkr.ecr.us-west-2.amazonaws.com/openobserve:v0.0.3","container_name":"openobserve","docker_id":"eb0983bdb9ff9360d227e6a0b268fe3b24a0868c2c2d725a1516c11e88bf5789","host":"ip.us-east-2.compute.internal","namespace_name":"openobserve","pod_id":"35a0421f-9203-4d73-9663-9ff0ce26d409","pod_name":"openobserve-ingester-0"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"example":{"took":155,"hits":[{"_p":"F","_timestamp":1674213225158000,"kubernetes":{"container_hash":"dkr.ecr.us-west-2.amazonaws.com/openobserve@sha256:3dbbb0dc1eab2d5a3b3e4a75fd87d194e8095c92d7b2b62e7cdbd07020f54589","container_image":"dkr.ecr.us-west-2.amazonaws.com/openobserve:v0.0.3","container_name":"openobserve","docker_id":"eb0983bdb9ff9360d227e6a0b268fe3b24a0868c2c2d725a1516c11e88bf5789","host":"ip.us-east-2.compute.internal","namespace_name":"openobserve","pod_id":"35a0421f-9203-4d73-9663-9ff0ce26d409","pod_name":"openobserve-ingester-0"},"log":"[2023-01-20T11:13:45Z INFO  actix_web::middleware::logger] 10.2.80.192 \"POST /api/demo/_bulk HTTP/1.1\" 200 68","stream":"stderr"}],"total":10,"from":0,"size":10,"scan_size":28943}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Search","operation":"get"}}},"/api/{org_id}/{stream_name}/_json":{"post":{"tags":["Logs"],"summary":"Ingest logs via JSON array","description":"Ingests log data using a JSON array format where multiple log records are submitted as an array in a single request. This is ideal for batch processing scenarios where applications collect multiple log entries before sending them together for improved efficiency.","operationId":"LogsIngestionJson","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Ingest data (json array)","content":{"application/json":{"schema":{"type":"string"},"example":[{"Year":1896,"City":"Athens","Sport":"Aquatics","Discipline":"Swimming","Athlete":"Alfred","Country":"HUN"},{"Year":1896,"City":"Athens","Sport":"Aquatics","Discipline":"Swimming","Athlete":"HERSCHMANN","Country":"CHN"}]}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestionResponse"},"example":{"code":200,"status":[{"name":"olympics","successful":3,"failed":0}]}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Ingest logs via JSON array","category":"logs"}}},"/api/{org_id}/{stream_name}/_multi":{"post":{"tags":["Logs"],"summary":"Ingest logs via multi-line JSON","description":"Ingests log data using multi-line JSON format where each line contains a separate JSON object representing a log record. This format is efficient for streaming applications and tools that generate logs in newline-delimited JSON format.","operationId":"LogsIngestionMulti","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Ingest data (multiple line json)","content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestionResponse"},"example":{"code":200,"status":[{"name":"olympics","successful":3,"failed":0}]}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/api/{org_id}/{stream_name}/_values":{"get":{"tags":["Search"],"summary":"Get distinct field values","description":"Retrieves the top N distinct values for specified fields within a stream and time range. Supports filtering, keyword search, and frequency counting. Essential for building dynamic filters, dropdowns, and understanding data cardinality in dashboards and analytics.","operationId":"SearchValues","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"stream_name name","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Stream type. Must be one of: logs, metrics, traces. Defaults to logs if not specified.","required":false,"schema":{"type":"string"}},{"name":"fields","in":"query","description":"fields, split by comma","required":true,"schema":{"type":"string"}},{"name":"filter","in":"query","description":"filter, eg: a=b","required":false,"schema":{"type":"string"}},{"name":"keyword","in":"query","description":"keyword, eg: abc","required":false,"schema":{"type":"string"}},{"name":"size","in":"query","description":"size","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"from","in":"query","description":"from","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"start_time","in":"query","description":"start time","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"end time","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"regions","in":"query","description":"regions, split by comma","required":false,"schema":{"type":"string"}},{"name":"timeout","in":"query","description":"timeout, seconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"no_count","in":"query","description":"no need count, true of false","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"},"example":{"took":155,"values":[{"field":"field1","values":["value1","value2"]}]}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get distinct values for a field","category":"search"},"x-o2-ratelimit":{"module":"Search","operation":"get"}}},"/api/{org_id}/{stream_name}/profiles/diff":{"post":{"tags":["Profiles"],"summary":"Compare two profile queries as one call tree","description":"Merges the baseline and comparison queries and folds both into one call tree where each node carries both sides' values, for a differential Flame Graph and a Top Table of changes. Both sides need the same `profile_type` and `profile_unit`.","operationId":"ProfilesDiff","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Profiles stream name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Diff query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesDiffBody"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesDiffResponse"}}}},"400":{"description":"Invalid request"},"403":{"description":"Forbidden"},"500":{"description":"Failure"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Profiles","operation":"create"}}},"/api/{org_id}/{stream_name}/profiles/merge":{"get":{"tags":["Profiles"],"summary":"Merge profile stacks into a call tree (GET)","description":"GET variant of ProfilesMerge. Supports query parameters and optional JSON body. `profile_type` and `profile_unit` are required.","operationId":"ProfilesMergeGet","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Profiles stream name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time in microseconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time in microseconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"data_source","in":"query","description":"Filter by otel_scope_name","required":false,"schema":{"type":"string"}},{"name":"service_name","in":"query","description":"Filter by service_name","required":false,"schema":{"type":"string"}},{"name":"profile_type","in":"query","description":"Filter by profile_type (required)","required":false,"schema":{"type":"string"}},{"name":"profile_unit","in":"query","description":"Filter by profile_unit (required)","required":false,"schema":{"type":"string"}},{"name":"filters","in":"query","description":"Comma-separated key=value pairs","required":false,"schema":{"type":"string"}},{"name":"max_nodes","in":"query","description":"Maximum tree node count","required":false,"schema":{"type":"integer","minimum":0}},{"name":"timeout","in":"query","description":"Query timeout in seconds","required":false,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesQueryBody"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesMergeResponse"}}}},"400":{"description":"Invalid request"},"403":{"description":"Forbidden"},"500":{"description":"Failure"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Profiles","operation":"list"}},"post":{"tags":["Profiles"],"summary":"Merge profile stacks into a call tree","description":"Aggregates matching profile samples by stack and returns a call tree suitable for Flame Graph, Call Tree, and Top Table views. `profile_type` and `profile_unit` are required.","operationId":"ProfilesMerge","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Profiles stream name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Merge query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesQueryBody"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesMergeResponse"}}}},"400":{"description":"Invalid request"},"403":{"description":"Forbidden"},"500":{"description":"Failure"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Profiles","operation":"create"}}},"/api/{org_id}/{stream_name}/profiles/meta":{"get":{"tags":["Profiles"],"summary":"Discover profile data sources, services, and types","description":"#{\"ratelimit_module\":\"Profiles\", \"ratelimit_module_operation\":\"list\"}#","operationId":"GetProfilesMeta","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Profiles stream name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time in microseconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time in microseconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"service_name","in":"query","description":"Limit profile_types to the types this service sent; services still lists every service","required":false,"schema":{"type":"string"}},{"name":"timeout","in":"query","description":"Query timeout in seconds","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesMetaResponse"}}}},"400":{"description":"Invalid request"},"403":{"description":"Forbidden"},"500":{"description":"Failure"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Profiles","operation":"list"}}},"/api/{org_id}/{stream_name}/profiles/series":{"get":{"tags":["Profiles"],"summary":"Aggregate profile sample values over time (GET)","description":"GET variant of ProfilesSeries. Supports query parameters and optional JSON body. `profile_type` and `profile_unit` are required.","operationId":"ProfilesSeriesGet","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Profiles stream name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time in microseconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time in microseconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"data_source","in":"query","description":"Filter by otel_scope_name","required":false,"schema":{"type":"string"}},{"name":"service_name","in":"query","description":"Filter by service_name","required":false,"schema":{"type":"string"}},{"name":"profile_type","in":"query","description":"Filter by profile_type (required)","required":false,"schema":{"type":"string"}},{"name":"profile_unit","in":"query","description":"Filter by profile_unit (required)","required":false,"schema":{"type":"string"}},{"name":"filters","in":"query","description":"Comma-separated key=value pairs","required":false,"schema":{"type":"string"}},{"name":"step","in":"query","description":"Histogram step (e.g. 30, 30 second, auto)","required":false,"schema":{"type":"string"}},{"name":"group_by","in":"query","description":"Label column to split the series by (e.g. k8s_pod_name)","required":false,"schema":{"type":"string"}},{"name":"group_limit","in":"query","description":"Top groups to return before the rest fold into `others` (1-50, default 10)","required":false,"schema":{"type":"integer","minimum":0}},{"name":"timeout","in":"query","description":"Query timeout in seconds","required":false,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesQueryBody"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesSeriesResponse"}}}},"400":{"description":"Invalid request"},"403":{"description":"Forbidden"},"500":{"description":"Failure"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Profiles","operation":"list"},"x-o2-mcp":{"enabled":true}},"post":{"tags":["Profiles"],"summary":"Aggregate profile sample values over time","description":"Returns a time series of sum(value) for the selected profile filters, with `rate` (value per second of profiled time) when the stream records profile duration. In-use (`inuse_*`) types average each instance's snapshots per bucket instead of summing them. Set `group_by` to a label column to also get the top `group_limit` groups. `profile_type` and `profile_unit` are required.","operationId":"ProfilesSeries","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Profiles stream name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Series query","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesQueryBody"}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesSeriesResponse"}}}},"400":{"description":"Invalid request"},"403":{"description":"Forbidden"},"500":{"description":"Failure"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Profiles","operation":"create"}}},"/api/{org_id}/{stream_name}/profiles/tag_values":{"get":{"tags":["Profiles"],"summary":"List distinct values for a profile tag key","description":"After meta.label_names, call with one selected tag (e.g. k8s_pod_name) for the Tags Filter value list.","operationId":"GetProfilesTagValues","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Profiles stream name","required":true,"schema":{"type":"string"}},{"name":"tag","in":"query","description":"Tag column from meta.label_names, e.g. k8s_pod_name","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Start time in microseconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"End time in microseconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"data_source","in":"query","description":"Narrow by otel_scope_name","required":false,"schema":{"type":"string"}},{"name":"service_name","in":"query","description":"Narrow by service_name","required":false,"schema":{"type":"string"}},{"name":"profile_type","in":"query","description":"Narrow by profile_type","required":false,"schema":{"type":"string"}},{"name":"profile_unit","in":"query","description":"Narrow by profile_unit","required":false,"schema":{"type":"string"}},{"name":"filters","in":"query","description":"Extra tag filters as key=value,key2=value2","required":false,"schema":{"type":"string"}},{"name":"timeout","in":"query","description":"Query timeout in seconds","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilesTagValuesResponse"}}}},"400":{"description":"Invalid request"},"403":{"description":"Forbidden"},"500":{"description":"Failure"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Profiles","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/api/{org_id}/{stream_name}/traces/latest":{"get":{"tags":["Traces"],"summary":"Get recent trace data","description":"Retrieves the most recent trace data from a specific stream within a time range. Returns trace summaries including trace IDs, span counts, service names, and timing information. You can filter results and control pagination to analyze distributed system performance and identify bottlenecks or errors in your applications.","operationId":"GetLatestTraces","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"filter","in":"query","description":"filter, eg: a=b AND c=d","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"from","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"page size; 0, negative, invalid or omitted uses ZO_QUERY_DEFAULT_LIMIT","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"start_time","in":"query","description":"start time","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"end time","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"timeout","in":"query","description":"timeout, seconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sort_by","in":"query","description":"sort by field: start_time, duration (default: start_time)","required":false,"schema":{"type":"string"}},{"name":"sort_order","in":"query","description":"sort order: asc, desc (default: desc)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestTracesAnswer"},"example":{"took":155,"hits":[{"trace_id":"12345678","spans":[1,2],"service_name":[{"job1":1,"job2":0}],"first_event":{"start_time":1234567890,"operation_name":"operation_name"}}]}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Traces","operation":"list"},"x-o2-mcp":{"description":"List recent traces with summaries (trace_id, span count, service names, duration). Supports filter and sort by start_time/duration.","category":"traces","pinned":true}}},"/api/{org_id}/{stream_name}/traces/latest_stream":{"get":{"tags":["Traces"],"summary":"Stream recent trace data","description":"Streams the most recent trace data from a specific stream within a time range using HTTP/2 server-sent events. Results are returned progressively as each time partition is processed, reducing time-to-first-result for large time ranges. With sort_by=duration, ranking across partitions is approximate; each page is sorted by full trace duration.","operationId":"GetLatestTracesStream","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"filter","in":"query","description":"filter, eg: a=b AND c=d","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"from","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"page size; 0, negative, invalid or omitted uses ZO_QUERY_DEFAULT_LIMIT","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"start_time","in":"query","description":"start time","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"end time","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"timeout","in":"query","description":"timeout, seconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sort_by","in":"query","description":"sort by field: start_time, duration (default: start_time); see the endpoint description for the limits of the streamed duration sort","required":false,"schema":{"type":"string"}},{"name":"sort_order","in":"query","description":"sort order: asc, desc (default: desc)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"text/event-stream":{}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false},"x-o2-ratelimit":{"module":"Traces","operation":"list"}}},"/api/{org_id}/{stream_name}/traces/session":{"get":{"tags":["Traces"],"summary":"Get recent session data","description":"Retrieves the most recent LLM session data from a specific trace stream within a time range. Sessions group multiple traces that share the same session ID. Returns session summaries including session IDs, trace counts, LLM usage statistics, cost, and timing information.","operationId":"GetLatestSessions","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"filter","in":"query","description":"filter, eg: a=b AND c=d","required":false,"schema":{"type":"string"}},{"name":"keyword","in":"query","description":"Case-insensitive substring match on the session's user id or conversation text (the input or output messages of any span in the session). Literal text: no wildcards or operators. Trimmed and capped at 256 characters; combined with `filter` using AND.","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"from","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"size","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"start_time","in":"query","description":"start time","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"end time","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"timeout","in":"query","description":"timeout, seconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"sort_by","in":"query","description":"Session field to sort by: end_time, user_id, trace_count, duration, gen_ai_usage_total_tokens, gen_ai_usage_cost, status (default: end_time)","required":false,"schema":{"type":"string"}},{"name":"sort_order","in":"query","description":"Sort order: asc or desc (default: desc)","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestSessionsResponse"},"example":{"took":155,"total":11,"has_more":true,"from":0,"size":10,"hits":[{"session_id":"session-abc-123","start_time":1234567890,"end_time":1234567900,"duration":10,"trace_count":3,"gen_ai_usage_input_tokens":100,"gen_ai_usage_output_tokens":50,"gen_ai_usage_total_tokens":150,"gen_ai_usage_cost":0.005,"error_count":1}]}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List recent LLM sessions from a trace stream: session_id, trace count, token usage, cost, error count. An optional keyword narrows the list by matching either the user id or conversation text.","category":"traces"},"x-o2-ratelimit":{"module":"Traces","operation":"list"}}},"/api/{org_id}/{stream_name}/traces/session/details":{"get":{"tags":["Traces"],"summary":"Get session turn details","description":"Retrieves per-turn trace summaries for a single LLM session. The response uses the same trace-summary hit shape as the trace latest endpoint, but aggregates each matched trace across all spans so turn status reflects child span errors.","operationId":"GetSessionDetails","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"query","description":"Session/conversation id","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","description":"from","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"size","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"start_time","in":"query","description":"Caller range start in microseconds; optional, must be supplied together with end_time. The effective range is the union of this range and the indexed session range — it is never narrowed.","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"Caller range end in microseconds; optional, must be supplied together with start_time","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"hint_ts","in":"query","description":"Optional time hint in microseconds for the session time index lookup","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timeout","in":"query","description":"timeout, seconds","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse"}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get per-turn trace summaries for a single LLM session by session_id.","category":"traces"},"x-o2-ratelimit":{"module":"Traces","operation":"list"}}},"/api/{org_id}/{stream_name}/traces/time_range":{"get":{"tags":["Traces"],"summary":"Get the indexed time range for traces or sessions","description":"#{\"ratelimit_module\":\"Traces\", \"ratelimit_module_operation\":\"list\"}#","operationId":"GetTraceTimeRange","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Traces stream name","required":true,"schema":{"type":"string"}},{"name":"trace_id","in":"query","description":"Comma-separated trace IDs; exactly one of trace_id and session_id is required","required":false,"schema":{"type":"string"}},{"name":"session_id","in":"query","description":"Comma-separated session IDs; exactly one of trace_id and session_id is required","required":false,"schema":{"type":"string"}},{"name":"hint_ts","in":"query","description":"Optional time hint in microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"start_time","in":"query","description":"Optional locate lower bound in microseconds; paired with end_time. Found ranges may extend past it","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"Optional locate upper bound in microseconds; paired with start_time","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraceTimeRangeResponse"}}}},"400":{"description":"Invalid parameters"},"403":{"description":"Forbidden"},"500":{"description":"Failure"}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":true},"x-o2-ratelimit":{"module":"Traces","operation":"list"}}},"/api/{org_id}/{stream_name}/traces/user":{"get":{"tags":["Traces"],"summary":"Get recent user data","description":"Retrieves the most recent LLM user data from a specific trace stream within a time range. Users group multiple traces that share the same user ID. Returns user summaries including user IDs, event counts, LLM usage statistics, cost, and timing information.","operationId":"GetLatestUsers","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"filter","in":"query","description":"filter, eg: a=b AND c=d","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","description":"from","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"size","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"start_time","in":"query","description":"start time","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"end time","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"timeout","in":"query","description":"timeout, seconds","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse"},"example":{"took":155,"total":2,"from":0,"size":10,"hits":[{"user_id":"user-12345","first_event":1234567890,"last_event":1234567900,"total_events":16,"gen_ai_usage_total_tokens":885,"gen_ai_usage_cost":105.3}]}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"List recent LLM users from a trace stream: user_id, event count, token usage, cost.","category":"traces"},"x-o2-ratelimit":{"module":"Traces","operation":"list"}}},"/api/{org_id}/{stream_name}/traces/{trace_id}/dag":{"get":{"tags":["Traces"],"summary":"Get trace DAG structure","description":"Retrieves the DAG (Directed Acyclic Graph) structure of all spans for a specific trace. Returns nodes (spans) and edges (parent-child relationships) that can be visualized as a trace execution graph. Each node contains span details like service name, operation, and status information.","operationId":"GetTraceDAG","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}},{"name":"trace_id","in":"path","description":"Trace ID","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"start time in microseconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"end time in microseconds","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"timeout","in":"query","description":"timeout, seconds","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"trace_id":"12345678","nodes":[{"span_id":"span1","parent_span_id":null,"service_name":"frontend","operation_name":"GET /api","span_status":"OK"}],"edges":[{"from":"span1","to":"span2"}]}}}},"400":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"description":"Get the span DAG (nodes and parent-child edges) for a specific trace by trace_id.","category":"traces"},"x-o2-ratelimit":{"module":"Traces","operation":"list"}}},"/api/{org_id}/{stream_name}/traces/{trace_id}/details":{"get":{"tags":["Traces"],"summary":"Get a page of spans for a trace","description":"#{\"ratelimit_module\":\"Traces\", \"ratelimit_module_operation\":\"list\"}#","operationId":"GetTraceDetails","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Traces stream name","required":true,"schema":{"type":"string"}},{"name":"trace_id","in":"path","description":"Trace ID","required":true,"schema":{"type":"string"}},{"name":"start_time","in":"query","description":"Caller range start in microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"end_time","in":"query","description":"Caller range end in microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"hint_ts","in":"query","description":"Optional time hint in microseconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"timeout","in":"query","description":"Query timeout in seconds","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"size","in":"query","description":"Spans per page (default 50000); values outside 1 to 50000 are clamped","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"after_start_time","in":"query","description":"Keyset cursor: start_time (ns, decimal) of the last span of the previous page; needs after_span_id","required":false,"schema":{"type":"string"}},{"name":"after_span_id","in":"query","description":"Keyset cursor: span_id of the last span of the previous page; needs after_start_time","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success; has_more and next_after page the trace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraceDetailsResponse"}}}},"400":{"description":"Invalid time range or page parameters"},"403":{"description":"Forbidden"},"500":{"description":"Failure"}},"security":[{"Authorization":[]}],"x-o2-ratelimit":{"module":"Traces","operation":"list"},"x-o2-mcp":{"enabled":true}}},"/auth/login":{"post":{"tags":["Auth"],"summary":"Authenticate user","description":"Authenticates user credentials and returns authentication tokens stored in secure HTTP-only cookies. Supports both JSON request body authentication and Authorization header-based authentication. Successful authentication establishes a session that allows access to protected resources and APIs throughout the platform.","operationId":"UserLoginCheck","requestBody":{"description":"User login; may be omitted when the Authorization header carries the credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInUser"}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["status","message"],"properties":{"lockout_retry_after_secs":{"type":["integer","null"],"format":"int64","description":"Seconds until a locked-out account may try again, present only on that refusal. The number\nrather than a sentence, so the console can render it in the viewer's own language."},"message":{"type":"string"},"password_rotation_warning":{"type":["integer","null"],"format":"int64","description":"Days left before the caller's password expires, present only inside the rotation warning\nwindow. Advisory: a client that ignores it is never broken by one."},"status":{"type":"boolean"}}}}}}},"security":[],"x-o2-ratelimit":{"module":"Users","operation":"update"},"x-o2-mcp":{"enabled":false}}},"/auth/presigned-url":{"get":{"tags":["Auth"],"summary":"Generate a presigned login URL","operationId":"GetPresignedLoginUrl","parameters":[{"name":"exp_in","in":"query","description":"URL lifetime in seconds, 600 by default","required":false,"schema":{"type":"integer","format":"int32","minimum":0}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresignedURLGeneratorResponse"}}}}},"security":[{"BasicAuth":[]}],"x-o2-mcp":{"enabled":false}}},"/aws/{org_id}/{stream_name}/_kinesis_firehose":{"post":{"tags":["Logs"],"summary":"Ingest logs from AWS Kinesis Firehose","description":"Ingests log data from AWS Kinesis Data Firehose in the native Kinesis format. This endpoint handles the specific request/response structure expected by Kinesis Firehose, making it seamless to stream AWS CloudWatch logs and other AWS services directly into OpenObserve.","operationId":"AWSLogsIngestion","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Ingest data (json array)","content":{"application/json":{"schema":{"type":"object","required":["records","requestId"],"properties":{"records":{"type":"array","items":{"$ref":"#/components/schemas/KFHRecordRequest"}},"requestId":{"type":"string"},"timestamp":{"type":["integer","null"],"format":"int64"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["requestId","timestamp"],"properties":{"errorMessage":{"type":["string","null"]},"requestId":{"type":"string"},"timestamp":{"type":"integer","format":"int64"}}},"example":{"requestId":"ed4acda5-034f-9f42-bba1-f29aea6d7d8f","timestamp":1578090903599}}}},"400":{"description":"Request rejected, or no record stored because every record was rejected","content":{"application/json":{"schema":{"type":"object","required":["requestId","timestamp"],"properties":{"errorMessage":{"type":["string","null"]},"requestId":{"type":"string"},"timestamp":{"type":"integer","format":"int64"}}},"example":{"requestId":"ed4acda5-034f-9f42-bba1-f29aea6d7d8f","timestamp":1578090903599,"errorMessage":"stream logs: Stream name too long"}}}},"500":{"description":"Write to storage failed, or the stream started deleting mid-write","content":{"application/json":{"schema":{"type":"object","required":["requestId","timestamp"],"properties":{"errorMessage":{"type":["string","null"]},"requestId":{"type":"string"},"timestamp":{"type":"integer","format":"int64"}}},"example":{"requestId":"ed4acda5-034f-9f42-bba1-f29aea6d7d8f","timestamp":1578090903599,"errorMessage":"write to storage failed"}}}}},"security":[{"FirehoseAccessKey":[]}],"x-o2-mcp":{"enabled":false}}},"/config/token":{"post":{"tags":["Auth"],"summary":"Exchange an identity token for an access token","operationId":"ExchangeToken","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["token","token_type"],"properties":{"token":{"type":"string"},"token_type":{"$ref":"#/components/schemas/TokenExchangeType"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenExchangeResponseBody"}}}}},"security":[],"x-o2-mcp":{"enabled":false}}},"/gcp/{org_id}/{stream_name}/_sub":{"post":{"tags":["Logs"],"summary":"Ingest logs from a GCP Pub/Sub push subscription","operationId":"GCPSubscription","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}},{"name":"stream_name","in":"path","description":"Stream name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Pub/Sub push envelope","content":{"application/json":{"schema":{"type":"object","required":["message","subscription"],"properties":{"message":{"$ref":"#/components/schemas/GCPMessage"},"subscription":{"type":"string"}}}}},"required":true},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestionResponse"}}}},"400":{"description":"Request rejected, or no record stored because the message was rejected","content":{"application/json":{"schema":{"type":"object"},"example":{"code":400,"message":"stream logs: Stream name too long"}}}},"500":{"description":"Write to storage failed, or the stream started deleting mid-write","content":{"application/json":{"schema":{"type":"object"},"example":{"code":500,"message":"write to storage failed"}}}}},"security":[{"GcpApiKey":[]}],"x-o2-mcp":{"enabled":false}}},"/healthz":{"get":{"tags":["Meta"],"summary":"System health check","description":"Performs a basic health check to verify that the OpenObserve service is running and responding to requests. Returns a simple status indicator that can be used by load balancers, monitoring systems, and orchestration platforms to determine service availability and readiness.","operationId":"HealthCheck","responses":{"200":{"description":"Status OK","content":{"application/json":{"schema":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}}},"example":{"status":"ok"}}}}},"security":[],"x-o2-mcp":{"enabled":false}}},"/rum/v1/{org_id}/logs":{"post":{"tags":["Rum"],"summary":"Ingest RUM log events","description":"Ingests Real User Monitoring (RUM) log events and client-side application logs as NDJSON, one JSON object per line, or as a single JSON array of objects (the format the native mobile SDKs send). Captures browser console logs, application errors, debug information, and custom log messages generated by client-side JavaScript. Logs are enriched with browser and session context for comprehensive client-side debugging and monitoring.","operationId":"LogIngestionJson","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Ingest data (NDJSON, one JSON object per line, or a single JSON array of objects). An array must be the whole body with no trailing lines; an empty array is accepted with no records.","content":{"text/plain":{"schema":{"type":"string"},"example":"{\"date\":1759222800000,\"status\":\"error\",\"message\":\"Uncaught TypeError\"}\n{\"date\":1759222801000,\"status\":\"info\",\"message\":\"Page loaded\"}"}},"required":true},"responses":{"202":{"description":"Accepted, empty body"},"400":{"description":"Bad request: a line is not valid JSON, or a line or array element is not a JSON object","content":{"application/json":{"schema":{"type":"object"},"example":{"code":400,"message":"Error# Failed processing: each line must be a JSON object"}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/rum/v1/{org_id}/replay":{"post":{"tags":["Rum"],"summary":"Ingest session replay data","description":"Ingests Real User Monitoring (RUM) session replay data as compressed multipart form data. Captures user interactions, DOM snapshots, and browser events to enable complete session replay functionality. Data is compressed using zlib compression and includes session metadata such as timing, view information, and interaction sequences for comprehensive user experience analysis.","operationId":"ReplayIngestionJson","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Multipart form data containing compressed session replay segment and event metadata","content":{"multipart/form-data":{"schema":{"type":"object","description":"Multipart form data being ingested in the form of session-replay","required":["segment","event"],"properties":{"event":{"type":"string","format":"binary"},"segment":{"type":"string","format":"binary"}}}}},"required":true},"responses":{"202":{"description":"Accepted, empty body"},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}},"/rum/v1/{org_id}/rum":{"post":{"tags":["Rum"],"summary":"Ingest RUM data events","description":"Ingests Real User Monitoring (RUM) data events as NDJSON, one JSON object per line. Collects client-side performance metrics, user interactions, application errors, and user experience data for comprehensive web application monitoring. Data is automatically enriched with metadata and stored for analysis and dashboard visualization.","operationId":"RumIngestionMulti","parameters":[{"name":"org_id","in":"path","description":"Organization name","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Ingest data (NDJSON, one JSON object per line)","content":{"text/plain":{"schema":{"type":"string"},"example":"{\"type\":\"view\",\"date\":1759222800000,\"view\":{\"url\":\"https://example.com/\"}}\n{\"type\":\"error\",\"date\":1759222801000,\"error\":{\"message\":\"Script error\"}}"}},"required":true},"responses":{"202":{"description":"Accepted, empty body"},"400":{"description":"Bad request: a line is not valid JSON or is not a JSON object","content":{"application/json":{"schema":{"type":"object"},"example":{"code":400,"message":"Error# Failed processing: each line must be a JSON object"}}}},"500":{"description":"Failure","content":{"application/json":{"schema":{"default":null}}}}},"security":[{"Authorization":[]}],"x-o2-mcp":{"enabled":false}}}},"components":{"schemas":{"APIToken":{"type":"object","required":["token","user"],"properties":{"token":{"type":"string"},"user":{"type":"string"}}},"AckConflict":{"oneOf":[{"type":"object","required":["code"],"properties":{"code":{"type":"string","enum":["not_firing"]}}},{"type":"object","required":["firing_started_at","code"],"properties":{"code":{"type":"string","enum":["firing_changed"]},"firing_started_at":{"type":"integer","format":"int64"}}}],"description":"The 409 bodies of `POST .../ack`."},"AckIncidentRef":{"type":"object","required":["id","status"],"properties":{"id":{"type":"string"},"status":{"$ref":"#/components/schemas/IncidentStatus"}}},"AckListResponse":{"type":"object","properties":{"acks":{"type":"array","items":{"$ref":"#/components/schemas/AckView"}}}},"AckOncallOutcome":{"type":"object","properties":{"acknowledged":{"type":"array","items":{"type":"string"}},"still_paging":{"type":"array","items":{"$ref":"#/components/schemas/StillPaging"}},"stopped":{"type":"array","items":{"$ref":"#/components/schemas/StillPaging"},"description":"The pages this ack stopped or moved, with their teams, for \"paging stopped for {team}\"."}}},"AckRequest":{"type":"object","properties":{"all_groups":{"type":"boolean","default":false},"firing_started_at":{"type":["integer","null"],"format":"int64","default":null},"group_key":{"type":"string","default":""},"take_over":{"type":"boolean","default":false}}},"AckResponse":{"type":"object","required":["changed"],"properties":{"acks":{"type":"array","items":{"$ref":"#/components/schemas/AckView"}},"changed":{"type":"boolean"},"incident":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AckIncidentRef"}]},"oncall":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AckOncallOutcome"}]},"other_groups_unacked":{"type":"integer","format":"int32","minimum":0}}},"AckSource":{"type":"string","enum":["ui","api","slack","oncall","incident"]},"AckView":{"type":"object","required":["firing_started_at","acked_by","acked_at"],"properties":{"ack_source":{"$ref":"#/components/schemas/AckSource"},"acked_at":{"type":"integer","format":"int64"},"acked_by":{"type":"string"},"firing_started_at":{"type":"integer","format":"int64"},"group_key":{"type":"string"},"taken_over_from":{"type":["string","null"]}}},"ActRefusal":{"type":"object","description":"The 403 body shared by Ack and Mute: who is on call and who could act instead.","required":["code","message","rule"],"properties":{"can_act":{"type":"array","items":{"$ref":"#/components/schemas/PersonRef"}},"code":{"$ref":"#/components/schemas/RefusalCode"},"message":{"type":"string"},"on_call":{"type":"array","items":{"$ref":"#/components/schemas/OnCallPersonRef"}},"rule":{"$ref":"#/components/schemas/RefusalRule"}}},"ActiveDowntime":{"type":"object","required":["id","name","ends_at"],"properties":{"alert_groups":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AlertGroupRef"}},"end_on_clear":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EndOnClear"}]},"ends_at":{"type":"integer","format":"int64"},"id":{"type":"string"},"incident_mode":{"$ref":"#/components/schemas/IncidentMode"},"name":{"type":"string"},"source":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MuteSource"}]},"version":{"type":"integer","format":"int64","description":"The row's version, which an extend sends back; 0 from an older node."}}},"AddMembersRequest":{"type":"object","description":"Accepts one email or many, because setting a team up is mostly \"add these six people\".","properties":{"user_email":{"type":["string","null"]},"user_emails":{"type":"array","items":{"type":"string"}}}},"AddNoteRequest":{"type":"object","description":"One line onto a page's timeline, attributed to the caller.","required":["body"],"properties":{"body":{"type":"string"}}},"AffectedItems":{"type":"object","required":["alerts","resolved_at_fire_time","anomalies","synthetics","slos"],"properties":{"alerts":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMatch"}},"anomalies":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMatch"}},"resolved_at_fire_time":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMatch"}},"slos":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMatch"}},"synthetics":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMatch"}}}},"AgentSearchMode":{"type":"string","enum":["default","partition"]},"AgentSetupResponse":{"type":"object","description":"Org-level agent setup for the drawer: the org's `o2syn_` token plus the\ningredients the UI composes per-platform install commands from (the\nlocation name is typed client-side, so the server returns parts, not a\nfinished command). Private locations are deploy-declared (`AGENT_LOCATION`),\nso setup is org-level — the location row is upserted at first register.","required":["org","o2_url","script_url","install"],"properties":{"install":{"type":"string","description":"Legacy docker one-liner (kept while the drawer migrates to composed\nper-platform commands)."},"o2_url":{"type":"string","description":"Probe-facing base URL (`AGENT_POLL_ENDPOINT`)."},"org":{"type":"string","description":"Org the probe scopes its Job API calls to (`AGENT_ORG`, in the URL path)."},"script_url":{"type":"string","description":"Public install script the composed commands pipe to bash."},"token":{"type":["string","null"]}}},"AgentTokenSecret":{"type":"object","description":"A freshly created/rotated token — the ONLY response that carries the raw\nvalue (shown once, then only ever masked).","required":["name","token"],"properties":{"name":{"type":"string"},"token":{"type":"string"}}},"AggFunction":{"type":"string","enum":["avg","min","max","sum","count","median","p50","p75","p90","p95","p99"]},"Aggregation":{"type":"object","required":["function","having"],"properties":{"function":{"$ref":"#/components/schemas/AggFunction"},"group_by":{"type":["array","null"],"items":{"type":"string"}},"having":{"$ref":"#/components/schemas/Condition","description":"CRITICAL threshold. `having.value` is untyped (`serde_json::Value`) and\nmay be an int, a float, or a numeric string."},"multi_alert":{"type":"boolean","description":"Opt-in to per-group evaluation — multi-alerts, `alerts_2.md` M-9/D26.\n\n`#[serde(default)]` is the whole backward-compatibility guarantee: an\naggregation stored before this field existed cannot contain it, so it\ndeserializes to `false` and the alert keeps its legacy collapsed\nevaluation byte-for-byte. Nothing is inferred from `group_by` being\npresent — that would silently change paging cadence and reset silence\nfingerprints for every existing grouped alert.\n\nValidated by [`grouping::validate_multi_alert`] (M-10): requires a\nnon-empty `group_by`, an orderable `having.operator`, and \"any group\"\ncount gates."},"warning_value":{"type":["number","null"],"format":"double","description":"WARNING threshold, sharing `having.operator` and `having.column` with\ncritical (alerts_2.md §4.4). `None` = single-level aggregation alert,\ni.e. exactly the legacy behaviour. Stored as f64 because aggregate\nvalues (averages, percentiles) are not integers.\nSame lenient deserialization as `promql_warning_value`, for the same\nreason (D61) — aggregate warnings are the field most likely to be\nfractional."}}},"AggregationFunc":{"type":"string","enum":["count","count-distinct","histogram","sum","min","max","avg","median","p50","p90","p95","p99"]},"AiCreditCosts":{"type":"object","description":"Credits per AI feature: the configured cost of one operation, or the credits it used.","required":["chat","incident","incident_reanalysis"],"properties":{"chat":{"type":"integer","format":"int64","minimum":0},"incident":{"type":"integer","format":"int64","minimum":0},"incident_reanalysis":{"type":"integer","format":"int64","minimum":0}}},"AiUsageResponse":{"type":"object","description":"AI usage response for the API","required":["mode","credits_used","credits_limit","credits_remaining","requires_additional_credits","costs"],"properties":{"costs":{"$ref":"#/components/schemas/AiCreditCosts"},"credits_limit":{"type":"integer","format":"int64","minimum":0},"credits_remaining":{"type":"integer","format":"int64","minimum":0},"credits_used":{"type":"integer","format":"int64","minimum":0},"mode":{"type":"string"},"payer_org_id":{"type":["string","null"],"description":"Set for a billing-group member, whose payer org holds the subscription."},"requires_additional_credits":{"type":"boolean"},"used_by_feature":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AiCreditCosts","description":"Free credits each feature used; `None` when the breakdown could not be read."}]}}},"Alert":{"type":"object","properties":{"context_attributes":{"type":["object","null"],"default":null,"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"creates_incident":{"type":"boolean","description":"When true, this alert creates/joins incidents instead of sending direct notifications.\nNotification is sent only when a new incident is created or a new alert type joins\nan existing incident. Repeated firings are suppressed.\nWhen false (default), the alert sends notifications directly and does not correlate\nto any incident.","default":false},"description":{"type":"string","default":""},"destinations":{"type":"array","items":{"type":"string"},"default":[]},"enabled":{"type":"boolean","default":false},"id":{"type":["string","null"],"default":null},"incident_title_template":{"type":["string","null"],"default":null},"is_real_time":{"type":"boolean","default":false},"keep_firing_for":{"type":"integer","format":"int64","description":"Seconds the condition must stay clear before the episode recovers.\n0 recovers on the first clear evaluation, which is what every alert does\ntoday. Named after Prometheus' `keep_firing_for`, with the same meaning.","default":0},"last_edited_by":{"type":["string","null"],"default":null},"last_satisfied_at":{"type":["integer","null"],"format":"int64","description":"Will be removed in the future.","default":null},"last_triggered_at":{"type":["integer","null"],"format":"int64","description":"Will be removed in the future.","default":null},"name":{"type":"string","default":""},"notify_on_recovery":{"type":"boolean","description":"Send one notification when this alert, or each group of a multi-alert, stops firing. Off by\ndefault: an existing template that never mentions `{alert_status}` would otherwise render\nthe firing wording twice.","default":false},"oncall_team":{"type":["string","null"],"description":"On-call team this alert pages, overriding ownership discovery. `None`\nmeans \"work it out from the identity dimensions\", which is the normal\ncase — an explicit value is for the alert whose owner the dimensions\ncannot express.","default":null},"org_id":{"type":"string","default":""},"owner":{"type":["string","null"],"default":null},"pending_period_sec":{"type":"integer","format":"int64","default":0},"priority":{"type":["integer","null"],"format":"int32","description":"How much humans care about this alert (PT-1). `None` = unset, which is\nevery pre-Feature-2 alert.\n\n**Mutable** configuration — editable on any update, like `name`.\nDisplay + propagation only: it must never influence evaluation,\nsilence, or delivery (PT-5 / D19). B-29 carved out one exception:\nwhen set, it takes precedence over the eval_level default for\nincident severity at creation/escalation — see\n`config::meta::alerts::priority` and\n`core::alerts::incidents::create_new_incident`.\n\n`value_type` is required here because the enum serializes as an\ninteger via serde `try_from`/`into`; without it the generated OpenAPI\nwould advertise a string enum and lie about the payload.","default":null,"example":3,"minimum":0},"query_condition":{"oneOf":[{"$ref":"#/components/schemas/QueryCondition"}],"default":{"type":"custom","conditions":null,"sql":null,"promql":null,"promql_condition":null,"aggregation":null,"vrl_function":null,"search_event_type":null,"multi_time_range":null}},"recovery_destinations":{"type":"array","items":{"type":"string"},"description":"Where the recovery MESSAGE goes when it should not follow the firing. Empty = the firing's\nown destinations. Ticket closes are unaffected either way — a resolve has to carry the\ncorrelation key of the trigger that opened it, so it cannot be redirected.","default":[]},"row_template":{"type":"string","default":""},"row_template_type":{"oneOf":[{"$ref":"#/components/schemas/RowTemplateType"}],"default":"String"},"runbook_url":{"type":["string","null"],"description":"Where the fix for this alert is written down.\n\nCopied onto every on-call response record the alert opens, so the person\nwoken is handed the runbook in the page. Validated at save — a malformed\nlink is refused rather than stored, because the moment it is read is the\none moment nobody has the patience to debug a URL.","default":null},"stream_name":{"type":"string","default":""},"stream_type":{"oneOf":[{"$ref":"#/components/schemas/StreamType"}],"default":"logs"},"suppress_repeats":{"type":"boolean","description":"Notify once per state change; enterprise only, other builds ignore it.","default":false},"tags":{"type":"array","items":{"type":"string"},"description":"Selection tags (PT-6): bare (`prod`) or `key:value`\n(`service:checkout`), normalized and validated at save by\n`tags::normalize_tags`.\n\nNOT `context_attributes` — that field is free-form KV shipped into\nnotification payloads with no validation. These are the filtering /\nscoping primitive.\n\nSkipped when empty so alerts that set no tags serialize exactly as\nthey did before Feature 2 (G5).","default":[]},"template":{"type":["string","null"],"description":"Optional template name. When specified, this template is used for all\ndestinations instead of destination-level templates. This allows using\ndifferent templates for different alerts while reusing the same destinations.","default":null},"trigger_condition":{"oneOf":[{"$ref":"#/components/schemas/TriggerCondition"}],"default":{"period":0,"operator":"=","threshold":0,"frequency":0,"cron":"","frequency_type":"minutes","silence":0,"tolerance_in_secs":null,"align_time":false}},"tz_offset":{"type":"integer","format":"int32","description":"Timezone offset in minutes.\nThe negative secs means the Western Hemisphere","default":0},"updated_at":{"type":"string","format":"date-time","default":null},"workflows":{"type":"array","items":{"type":"string"},"default":[]}}},"AlertAckSummary":{"type":"object","description":"The alert list item's ack summary.","required":["acked_by","acked_at"],"properties":{"ack_source":{"$ref":"#/components/schemas/AckSource"},"acked_at":{"type":"integer","format":"int64"},"acked_by":{"type":"string"},"groups_acked":{"type":"integer","format":"int32","minimum":0}}},"AlertBulkEnableResponse":{"type":"object","required":["successful","unsuccessful"],"properties":{"err":{"type":["string","null"]},"successful":{"type":"array","items":{"type":"string"}},"unsuccessful":{"type":"array","items":{"type":"string"}}}},"AlertCalibrationOrgConfig":{"type":"object","required":["id","org","enabled","frequency_minutes","window_minutes","created_at","updated_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"enabled":{"type":"boolean"},"frequency_minutes":{"type":"integer","format":"int32"},"id":{"type":"string"},"org":{"type":"string","description":"At most one row per organization, enforced by a unique index."},"updated_at":{"type":"integer","format":"int64"},"window_minutes":{"type":"integer","format":"int32"}}},"AlertEdge":{"type":"object","description":"Edge in the alert flow graph","required":["from_node_index","to_node_index","edge_type"],"properties":{"edge_type":{"$ref":"#/components/schemas/EdgeType","description":"Type of relationship"},"from_node_index":{"type":"integer","description":"Source node index","minimum":0},"to_node_index":{"type":"integer","description":"Target node index","minimum":0}}},"AlertGroupLabel":{"type":"object","description":"One `key=value` pair of a group's label set.","required":["name","value"],"properties":{"name":{"type":"string"},"value":{"type":"string"}}},"AlertGroupRef":{"type":"object","description":"One alert group a downtime mutes; `group_key` is `\"\"` for single-row and composite alerts.","required":["alert_id"],"properties":{"alert_id":{"type":"string"},"group_key":{"type":"string"},"group_labels":{"type":["object","null"],"description":"Captured at mute time because `group_key` is a hash the UI cannot show.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}}}},"AlertGroupResponseItem":{"type":"object","description":"One tracked group of a multi-alert (§5.4's group table).","required":["group_key","labels"],"properties":{"ack":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AckView","description":"Present only while an ack is in force on the current firing."}]},"firing_started_at":{"type":["integer","null"],"format":"int64","description":"Start of the current firing cycle (µs), the key an ack names; absent when not firing."},"group_key":{"type":"string","description":"Deterministic hash of the group's label set — the state identity, and\nthe key the per-group history filter takes."},"group_labels":{"type":["string","null"],"description":"Rendered `k=v,k=v` labels, for display only. `group_key` stays the\nidentity because a readable rendering is ambiguous once a label value\ncontains the separators."},"labels":{"type":"array","items":{"$ref":"#/components/schemas/AlertGroupLabel"},"description":"Parsed form of `group_labels`, so the UI does not re-parse the string."},"last_notified_level":{"type":["string","null"],"description":"Level of this group's last *successful* delivery — what escalation is\nmeasured against. Absent when it has never paged."},"last_outcome":{"type":["string","null"]},"last_outcome_at":{"type":["integer","null"],"format":"int64"},"last_seen":{"type":["integer","null"],"format":"int64","description":"Last evaluation that actually included this group (M-7). A group whose\n`last_seen` is falling behind is on its way to being resolved."},"level":{"type":["string","null"]},"level_since":{"type":["integer","null"],"format":"int64","description":"When `level` last changed — \"critical for 20 minutes\"."},"silenced_until":{"type":["integer","null"],"format":"int64","description":"Per-group silence window (MN-2): suppress re-delivery until this\ninstant. Absent when the group is not silenced."}}},"AlertGroupTransitionItem":{"type":"object","description":"One per-group state transition (M-8's history source).","required":["group_key","to_outcome","at"],"properties":{"at":{"type":"integer","format":"int64"},"from_level":{"type":["string","null"]},"from_outcome":{"type":["string","null"]},"group_key":{"type":"string"},"group_labels":{"type":["string","null"],"description":"Carried on the transition itself, so history outlives the state row the\nreaper deletes."},"rule_value":{"type":["string","null"],"description":"PromQL sample text preserves NaN and infinities; absent outside rule-mode transitions."},"to_level":{"type":["string","null"]},"to_outcome":{"type":"string"},"value":{"type":["number","null"],"format":"double","description":"Observed value at transition time. `None` where nothing was observed —\na group that vanished has no reading, and rendering 0 would be a lie."}}},"AlertHistoryEntry":{"type":"object","required":["timestamp","alert_name","org","status","is_realtime","is_silenced","start_time","end_time","retries"],"properties":{"ack_action":{"type":["string","null"],"description":"`ack`, `unack` or `take_over`, on `ack_event` rows."},"ack_source":{"type":["string","null"]},"acked_by":{"type":["string","null"],"description":"Whose ack withheld this run's send, or who acted on an `ack_event` row."},"actual_value":{"type":["number","null"],"format":"double","description":"The value that was compared (row count, or the aggregate)."},"alert_name":{"type":"string"},"anomaly_count":{"type":["integer","null"],"format":"int32","description":"Number of anomalies found in this evaluation run (anomaly detection only)."},"delay_in_secs":{"type":["integer","null"],"format":"int64"},"downtime_id":{"type":["string","null"],"description":"The downtime that suppressed this run."},"end_time":{"type":"integer","format":"int64"},"error":{"type":["string","null"]},"evaluation_took_in_secs":{"type":["number","null"],"format":"double"},"group_label":{"type":["string","null"],"description":"Which group/series produced `actual_value` (\"host=b,region=eu\");\nabsent for count alerts and pre-change rows."},"group_size":{"type":["integer","null"],"format":"int32"},"grouped":{"type":["boolean","null"]},"is_partial":{"type":["boolean","null"]},"is_realtime":{"type":"boolean"},"is_silenced":{"type":"boolean"},"level":{"type":["string","null"],"description":"Severity of the matched threshold: \"ok\" | \"warning\" | \"critical\"."},"org":{"type":"string"},"query_took":{"type":["integer","null"],"format":"int64"},"repeat_suppressed":{"type":["boolean","null"],"description":"`suppress_repeats` withheld this run because it repeated the last delivered state."},"retries":{"type":"integer","format":"int32"},"source_node":{"type":["string","null"]},"start_time":{"type":"integer","format":"int64"},"status":{"type":"string"},"success_response":{"type":["string","null"]},"taken_over_from":{"type":["string","null"]},"threshold_operator":{"type":["string","null"],"description":"Operator, so the row reads standalone (\"112 >= 100\")."},"threshold_value":{"type":["number","null"],"format":"double","description":"The threshold that matched. Absent on `normal` rows — T-10 renders\nthose as actual value + Ok, with no threshold."},"timestamp":{"type":"integer","format":"int64"},"value_is_lower_bound":{"type":["boolean","null"],"description":"True when `actual_value` is a LOWER BOUND (legacy capped count fetch,\n§7.5) — the UI renders \"≥ N\". Absent = exact."}}},"AlertIncidentLink":{"type":"object","description":"The incident a list row links to.","required":["id","status"],"properties":{"id":{"type":"string"},"status":{"$ref":"#/components/schemas/IncidentStatus"},"title":{"type":["string","null"]}}},"AlertKind":{"type":"string","description":"Whether an incident's member alert is an OpenObserve alert or an\nexternally-ingested one (External Alert Sources feature).","enum":["internal","external"]},"AlertLevel":{"type":"string","description":"Severity of a matched threshold.","enum":["ok","warning","critical","no_data"]},"AlertMuteConflict":{"oneOf":[{"type":"object","required":["message","code"],"properties":{"code":{"type":"string","enum":["downtime_cap"]},"message":{"type":"string"}}},{"type":"object","required":["downtime_id","version","ends_at","code"],"properties":{"code":{"type":"string","enum":["already_muted"]},"downtime_id":{"type":"string"},"ends_at":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int64"}}},{"type":"object","required":["version","ends_at","code"],"properties":{"code":{"type":"string","enum":["version_changed"]},"ends_at":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int64"}}},{"type":"object","required":["code"],"properties":{"code":{"type":"string","enum":["not_a_quick_mute"]}}}],"description":"The 409 bodies of the alert-scoped mute routes."},"AlertMuteExtendRequest":{"type":"object","description":"`POST .../mute/{downtime_id}/extend`: exactly one of `minutes`, `until_clear` and `ends_at`.","required":["version"],"properties":{"ends_at":{"type":["integer","null"],"format":"int64"},"minutes":{"type":["integer","null"],"format":"int32","minimum":0},"until_clear":{"type":"boolean"},"version":{"type":"integer","format":"int64"}}},"AlertMuteExtendResponse":{"type":"object","required":["version","ends_at"],"properties":{"end_on_clear":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EndOnClear"}]},"ends_at":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int64"}}},"AlertMuteRequest":{"type":"object","description":"`POST /v2/{org}/alerts/{alert_id}/mute`: exactly one of `until_clear`, `minutes` and `ends_at`.","properties":{"all_groups":{"type":"boolean","default":false},"ends_at":{"type":["integer","null"],"format":"int64","default":null},"firing_started_at":{"type":["integer","null"],"format":"int64","default":null},"folder_id":{"type":["string","null"],"default":null},"group_keys":{"type":["array","null"],"items":{"type":"string"},"default":null},"minutes":{"type":["integer","null"],"format":"int32","default":null,"minimum":0},"reason":{"type":["string","null"],"default":null},"until_clear":{"type":"boolean","default":false}}},"AlertMuteResponse":{"type":"object","required":["downtime_id","version","ends_at"],"properties":{"alert_groups":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AlertGroupRef"}},"downtime_id":{"type":"string"},"end_on_clear":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EndOnClear"}]},"ends_at":{"type":"integer","format":"int64"},"pages":{"type":"array","items":{"$ref":"#/components/schemas/MutedPage"},"description":"The open on-call pages of the alert's problem the mute snoozed, or tried to."},"version":{"type":"integer","format":"int64"}}},"AlertNode":{"type":"object","description":"Node in the alert flow graph","required":["alert_id","alert_name","service_name","alert_count","first_fired_at","last_fired_at"],"properties":{"alert_count":{"type":"integer","format":"int32","description":"Number of times this alert fired","minimum":0},"alert_id":{"type":"string","description":"Unique alert identifier (from alert definition)"},"alert_name":{"type":"string","description":"Human-readable alert name for display"},"first_fired_at":{"type":"integer","format":"int64","description":"Timestamp of first occurrence (microseconds)"},"last_fired_at":{"type":"integer","format":"int64","description":"Timestamp of last occurrence (microseconds)"},"service_name":{"type":"string","description":"Service name (may be \"unknown\")"}}},"AlertSliPreview":{"type":"object","description":"What an alert SLI would have measured over a window, computed from the\nledger before anything is saved.","required":["alert_id","range_start_secs","range_end_secs","slice_interval_secs","intervals","good_secs","total_secs","observed_slices","expected_slices","coverage","would_freeze"],"properties":{"alert_id":{"type":"string"},"coverage":{"type":"number","format":"double","description":"`observed / expected`, 0..1 — the denominator behind the SLI, which is\nthe number that decides whether the SLO would freeze."},"expected_slices":{"type":"integer","format":"int64"},"good_secs":{"type":"number","format":"double"},"intervals":{"type":"array","items":{"$ref":"#/components/schemas/AlertSliPreviewInterval"}},"observed_slices":{"type":"integer","format":"int64"},"range_end_secs":{"type":"integer","format":"int64"},"range_start_secs":{"type":"integer","format":"int64","description":"The range the ribbon is drawn against. Intervals alone cannot place a\nband, and a gap at either edge would otherwise be invisible."},"sli":{"type":["number","null"],"format":"double","description":"Percentage 0..100 over MEASURED time. `None` when nothing was measured\n— deliberately not 0, which would render a brand-new source as total\ndowntime."},"slice_interval_secs":{"type":"integer","format":"int64"},"total_secs":{"type":"number","format":"double"},"would_freeze":{"type":"boolean","description":"Whether an SLO on this source would be FROZEN right now rather than\nreporting the SLI beside it.\n\n[`Self::sli`] is the honest ratio over measured time, which is what the\nform asks for — but below `ZO_SLO_MIN_COVERAGE` the saved SLO reports\nno data at all (`SloStatusView::derive`), so \"100% over 33% of the\nwindow\" is a reading the SLO will refuse to give. The floor is\nserver-side config the form cannot see, so the comparison has to travel\nwith the answer (§2, D34)."}}},"AlertSliPreviewInterval":{"type":"object","description":"One ledger interval on the wire, which is what the ribbon draws.","required":["frequency_secs","from_us","to_us"],"properties":{"frequency_secs":{"type":"integer","format":"int64"},"from_us":{"type":"integer","format":"int64"},"level":{"type":["string","null"],"description":"`None` when the stored level is one this build cannot interpret — which\nthe ribbon must draw as unmeasured, never as good."},"to_us":{"type":"integer","format":"int64"}}},"AlertSummary":{"type":"object","required":["num_realtime","num_scheduled","trigger_status"],"properties":{"num_realtime":{"type":"integer","format":"int64"},"num_scheduled":{"type":"integer","format":"int64"},"trigger_status":{"$ref":"#/components/schemas/TriggerStatus"}}},"AlertTagCount":{"type":"object","description":"One tag and how many visible alerts carry it.","required":["tag","count"],"properties":{"count":{"type":"integer","format":"int64","minimum":0},"tag":{"type":"string"}}},"AlertTypeFilter":{"type":"string","description":"Filters the alert list by alert type (scheduled, realtime, anomaly detection, or all).","enum":["all","scheduled","realtime","anomaly_detection","slo","composite"]},"AlertUsage":{"type":"object","description":"An alert whose query reads the metric.","required":["id","name","folder_id"],"properties":{"folder_id":{"type":"string"},"id":{"type":"string"},"match":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MatchKind","description":"`text` when only an unparseable query names the metric; absent for a parsed match."}]},"name":{"type":"string"}}},"AllOrgListDetails":{"type":"object","required":["id","identifier","name","created_at","updated_at","type","credits_used","credits_limit","browser_steps_used","browser_steps_limit","protocol_steps_used","status_steps_used","protocol_steps_limit","status_steps_limit","org_storage_enabled"],"properties":{"billing_provider":{"type":"string"},"browser_steps_limit":{"type":"integer","format":"int64","minimum":0},"browser_steps_used":{"type":"integer","format":"int64","description":"Separate allowances from the AI pool, in a different unit: browser and protocol hold\nindependent one-time grants.","minimum":0},"contract_end_date":{"type":["integer","null"],"format":"int64"},"created_at":{"type":"integer","format":"int64"},"credits_limit":{"type":"integer","format":"int64","minimum":0},"credits_used":{"type":"integer","format":"int64","minimum":0},"deleted_at":{"type":["integer","null"],"format":"int64"},"grace_period_days":{"type":["integer","null"],"format":"int64"},"id":{"type":"integer","format":"int64"},"identifier":{"type":"string"},"name":{"type":"string"},"org_storage_enabled":{"type":"boolean"},"plan":{"type":"integer","format":"int32"},"protocol_steps_limit":{"type":"integer","format":"int64","minimum":0},"protocol_steps_used":{"type":"integer","format":"int64","minimum":0},"status":{"type":"string","description":"Org lifecycle status, e.g. \"active\" or \"deleting\". Drives the _meta\n\"View deletion progress\" affordance in the UI."},"status_steps_limit":{"type":"integer","format":"int64","minimum":0},"status_steps_used":{"type":"integer","format":"int64","minimum":0},"trial_expires_at":{"type":["integer","null"],"format":"int64"},"type":{"type":"string"},"updated_at":{"type":"integer","format":"int64"}}},"AnnotationQueueItemContentResponseBody":{"type":"object","required":["trace"],"properties":{"input":{},"output":{},"trace":{"type":"array","items":{}}}},"AnnotationQueueItemResponseBody":{"type":"object","required":["id","orgId","queueId","refType","refId","refTraceStartTime","status","createdAt","updatedAt"],"properties":{"archivedAt":{"type":["integer","null"],"format":"int64"},"createdAt":{"type":"integer","format":"int64"},"id":{"type":"string"},"inputPreview":{"type":["string","null"],"description":"Bounded first-user-turn excerpt captured at enqueue; null when unavailable."},"orgId":{"type":"string"},"queueId":{"type":"string"},"queueName":{"type":["string","null"]},"refId":{"type":"string"},"refTraceId":{"type":["string","null"]},"refTraceStartTime":{"type":"integer","format":"int64"},"refType":{"type":"string"},"reviewedAt":{"type":["integer","null"],"format":"int64"},"status":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"}}},"AnnotationQueueMachineScoreResponseBody":{"type":"object","required":["id","name","dataType","sourceType","timestamp"],"properties":{"dataType":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"reasoning":{"type":["string","null"]},"scoreConfigId":{"type":["string","null"]},"scoreConfigVersion":{"type":["string","null"]},"scorerId":{"type":["string","null"]},"scorerVersion":{"type":["string","null"]},"sourceStream":{"type":["string","null"]},"sourceType":{"type":"string"},"timestamp":{"type":"integer","format":"int64"},"valueBoolean":{"type":["boolean","null"]},"valueCategorical":{"type":["string","null"]},"valueNumeric":{"type":["number","null"],"format":"double"}}},"AnnotationQueueResponseBody":{"type":"object","required":["id","orgId","name","allowedRefTypes","scoreConfigs","reviewedCount","totalCount","createdBy","createdAt","updatedBy","updatedAt"],"properties":{"allowedRefTypes":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"id":{"type":"string"},"name":{"type":"string"},"orgId":{"type":"string"},"reviewedCount":{"type":"integer","format":"int64","description":"Number of non-archived Queue Items whose review is complete.","minimum":0},"scoreConfigs":{"type":"array","items":{"$ref":"#/components/schemas/PinnedScoreConfigResponseBody"}},"targetDatasetId":{"type":["string","null"]},"targetDatasetName":{"type":["string","null"]},"totalCount":{"type":"integer","format":"int64","description":"Number of non-archived Queue Items participating in review progress.","minimum":0},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"}}},"AnnotationScoreRequestBody":{"type":"object","required":["scoreConfigRowId","value"],"properties":{"metadata":{},"reasoning":{"type":["string","null"]},"scoreConfigRowId":{"type":"string","description":"Physical row ID of the immutable Score Config version selected by the user."},"value":{"description":"A number, string, or boolean matching the selected Score Config data type."}},"additionalProperties":false},"AnnotationSource":{"type":"object","description":"A dashboard-level query whose rows are drawn as annotation markers on time-series panels.","properties":{"color":{"type":["string","null"],"default":null},"description":{"type":["string","null"],"default":null},"enabled":{"type":"boolean","default":true},"endTimeField":{"type":["string","null"],"default":null},"filters":{"type":"object"},"id":{"type":"string","default":""},"mode":{"oneOf":[{"$ref":"#/components/schemas/AnnotationSourceMode"}],"default":"builder"},"name":{"type":"string","default":""},"panels":{"type":["array","null"],"items":{"type":"string"},"default":null},"query":{"type":["string","null"],"default":null},"stream":{"type":"string","default":""},"streamType":{"oneOf":[{"$ref":"#/components/schemas/StreamType"}],"default":"logs"},"title":{"type":"string","default":""}}},"AnnotationSourceMode":{"type":"string","enum":["builder","sql"]},"AnnotationTargetMetadataRequestBody":{"type":"object","properties":{"agentEnv":{"type":["string","null"]},"agentId":{"type":["string","null"]},"agentName":{"type":["string","null"]},"agentVersion":{"type":["string","null"]}},"additionalProperties":false},"AnomalyAlertFields":{"type":"object","description":"Anomaly-detection-specific fields for `CreateAlertRequestBody`.","required":["query_mode","detection_function","histogram_interval","schedule_interval","detection_window_seconds"],"properties":{"alert_budget_per_day":{"type":["number","null"],"format":"double","description":"Delivered-alert budget per day; mutually exclusive with `percentile`."},"alert_direction":{"type":["string","null"],"description":"`both`, `above` or `below`; absent means both."},"alert_enabled":{"type":["boolean","null"]},"alert_window_buckets":{"type":["integer","null"],"format":"int32","description":"Window-share length in buckets, at least 1 and at most 24h of buckets; absent means 1."},"alert_window_fire_pct":{"type":["number","null"],"format":"double","description":"Percent of the window out of band that fires; absent means 100."},"alert_window_recover_pct":{"type":["number","null"],"format":"double","description":"Percent of the window out of band below which it recovers; absent means the fire percent."},"band_width":{"type":["number","null"],"format":"double","description":"Manual band half-width k in sigmas, 1 to 10; absent uses the trained k (Auto, 3 to 6)."},"custom_sql":{"type":["string","null"]},"detection_function":{"type":"string","description":"Aggregation function, e.g. \"count(*)\" or \"avg(cpu_usage)\""},"detection_function_field":{"type":["string","null"],"description":"Field to aggregate (required for avg/sum/min/max/pXX, ignored for count).\nCombined with `detection_function` into \"avg(field)\" before saving."},"detection_window_seconds":{"type":"integer","format":"int64","description":"Look-back window per detection run, in seconds"},"filters":{},"histogram_interval":{"type":"string","description":"SQL histogram bucket size, e.g. \"5m\", \"1h\""},"level_half_width_seconds":{"type":["integer","null"],"format":"int64","description":"Accepted and stored, but ignored by the band model.","deprecated":true},"percentile":{"type":["number","null"],"format":"double","description":"Legacy percentile; no longer selects the trained k outside budget mode. Alias `threshold`."},"query_mode":{"type":"string","description":"\"filters\" or \"custom_sql\""},"rcf_num_trees":{"type":["integer","null"],"format":"int32","deprecated":true},"rcf_shingle_size":{"type":["integer","null"],"format":"int32","deprecated":true},"rcf_tree_size":{"type":["integer","null"],"format":"int32","deprecated":true},"retrain_interval_days":{"type":["integer","null"],"format":"int32","description":"0 = never retrain automatically; otherwise days between retrains"},"schedule_interval":{"type":"string","description":"How often the detection job fires, e.g. \"1h\", \"30m\""},"template":{"type":["string","null"],"description":"Template override for anomaly messages; absent, null or \"\" uses the destination's."},"training_window_days":{"type":["integer","null"],"format":"int32"}}},"AnomalyConfigResponse":{"type":"object"},"ApiErrorType":{"type":"string","enum":["timeout","cancelled","exec","bad_data","internal","unavailable","not_found"]},"ApiFuncResponse_HashMap_String_Vec_MetadataObject":{"oneOf":[{"type":"object","required":["data","status"],"properties":{"data":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","required":["type","help","unit"],"properties":{"help":{"type":"string"},"type":{"type":"string"},"unit":{"type":"string"}}}},"propertyNames":{"type":"string"}},"status":{"type":"string","enum":["success"]},"trace_id":{"type":["string","null"]},"warnings":{"type":"array","items":{"type":"string"},"description":"Prometheus API: non-empty when the result may be incomplete."}}},{"type":"object","required":["errorType","error","status"],"properties":{"error":{"type":"string"},"errorType":{"$ref":"#/components/schemas/ApiErrorType"},"status":{"type":"string","enum":["error"]},"trace_id":{"type":["string","null"]}}}]},"ApiFuncResponse_String":{"oneOf":[{"type":"object","required":["data","status"],"properties":{"data":{"type":"string"},"status":{"type":"string","enum":["success"]},"trace_id":{"type":["string","null"]},"warnings":{"type":"array","items":{"type":"string"},"description":"Prometheus API: non-empty when the result may be incomplete."}}},{"type":"object","required":["errorType","error","status"],"properties":{"error":{"type":"string"},"errorType":{"$ref":"#/components/schemas/ApiErrorType"},"status":{"type":"string","enum":["error"]},"trace_id":{"type":["string","null"]}}}]},"ApiFuncResponse_Vec_String":{"oneOf":[{"type":"object","required":["data","status"],"properties":{"data":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["success"]},"trace_id":{"type":["string","null"]},"warnings":{"type":"array","items":{"type":"string"},"description":"Prometheus API: non-empty when the result may be incomplete."}}},{"type":"object","required":["errorType","error","status"],"properties":{"error":{"type":"string"},"errorType":{"$ref":"#/components/schemas/ApiErrorType"},"status":{"type":"string","enum":["error"]},"trace_id":{"type":["string","null"]}}}]},"AppSettings":{"type":"object","description":"An app's exclusions; with no stored row, `id` and the audit fields are null and `version` 0.","required":["app","bots","builtinBots","sessions","pages","version","rulesHash"],"properties":{"app":{"type":"string"},"bots":{"type":"boolean"},"builtinBots":{"$ref":"#/components/schemas/BuiltinBots"},"createdAt":{"type":["integer","null"],"format":"int64"},"createdBy":{"type":["string","null"]},"id":{"type":["string","null"]},"pages":{"type":"array","items":{"$ref":"#/components/schemas/PageRule"}},"rulesHash":{"type":"string"},"sessions":{"type":"array","items":{"$ref":"#/components/schemas/SessionRule"}},"updatedAt":{"type":["integer","null"],"format":"int64"},"updatedBy":{"type":["string","null"]},"version":{"type":"integer","format":"int32"}}},"AssumeServiceAccountRequest":{"type":"object","description":"Request to assume a service account in a target organization\n\nThis allows meta service accounts to obtain temporary session tokens\nfor accessing a target organization as a specific service account.","required":["org_id"],"properties":{"duration_seconds":{"type":["integer","null"],"format":"int64","description":"Optional duration in seconds (default: 3600, max: 86400)","minimum":0},"org_id":{"type":"string","description":"Target organization ID"},"service_account":{"type":["string","null"],"description":"Service account email to assume (optional, defaults to caller's user_id)"}}},"AssumeServiceAccountResponse":{"type":"object","description":"Response from assume service account operation\n\nContains the session credentials needed to access the target organization.","required":["session_id","org_id","role_name","expires_at","expires_in"],"properties":{"expires_at":{"type":"string","description":"Expiration timestamp (ISO 8601)"},"expires_in":{"type":"integer","format":"int64","description":"Duration in seconds until expiration","minimum":0},"org_id":{"type":"string","description":"Target organization ID"},"role_name":{"type":"string","description":"Assumed service account role"},"session_id":{"type":"string","description":"Session ID to use for authentication"}}},"AuditEvent":{"type":"object","required":["id","at","actor","action","target","outcome"],"properties":{"action":{"type":"string"},"actor":{"type":"string"},"at":{"type":"integer","format":"int64"},"id":{"type":"string"},"outcome":{"type":"string"},"target":{"type":"string"}}},"AuditList":{"type":"object","required":["total","items"],"properties":{"audit_disabled":{"type":"boolean","description":"The trail is the audit stream, so it is empty while `O2_AUDIT_ENABLED` is off."},"items":{"type":"array","items":{"$ref":"#/components/schemas/AuditEvent"}},"total":{"type":"integer","minimum":0}}},"AuditModule":{"type":"string","description":"The part of the fleet API an event was made through; `settings` is the org's fleet settings.","enum":["collectors","tokens","fleets","rollouts","configs","settings"]},"AutoInvestigate":{"type":"string","enum":["off","critical"]},"AxisArg":{"type":"object","properties":{"type":{"type":["string","null"]},"value":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AxisArgValueWrapper"}]}}},"AxisArgFunction":{"type":"object","description":"A nested function call; its required `args` distinguishes it during untagged matching.","required":["args"],"properties":{"args":{"type":"array","items":{"type":"object"},"description":"Opaque to OpenAPI on purpose: the real recursion overflows the schema generator at startup."},"functionName":{"type":["string","null"],"description":"Serialized even when None: dropping the key renders an unset function blank, not \"None\"."}}},"AxisArgValue":{"type":"object","properties":{"field":{"type":["string","null"]},"streamAlias":{"type":["string","null"]}}},"AxisArgValueWrapper":{"oneOf":[{"$ref":"#/components/schemas/AxisArgFunction","description":"MUST precede Object, whose fields are all optional and would otherwise swallow this."},{"$ref":"#/components/schemas/AxisArgValue"},{"type":"string"},{"type":"number","format":"double"}]},"AxisItem":{"type":"object","required":["label","alias"],"properties":{"alias":{"type":"string"},"args":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AxisArg"}},"color":{"type":["string","null"]},"column":{"type":["string","null"]},"functionName":{"type":["string","null"]},"havingConditions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/HavingConditions"}},"isDerived":{"type":["boolean","null"]},"label":{"type":"string"},"rawQuery":{"type":["string","null"]},"showFieldAsJson":{"type":["boolean","null"]},"sortBy":{"type":["string","null"]},"treatAsNonTimestamp":{"type":["boolean","null"]},"type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AxisType"}]}}},"AxisType":{"type":"string","enum":["build","raw","custom"]},"BTreeMap":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","required":["severity","text"],"properties":{"severity":{"$ref":"#/components/schemas/IssueSeverity"},"text":{"type":"string"}}}},"propertyNames":{"type":"string"}},"BackfillJobStatus":{"type":"object","required":["job_id","pipeline_id","start_time","end_time","current_position","progress_percent","status","enabled"],"properties":{"chunk_period_minutes":{"type":["integer","null"],"format":"int64"},"chunks_completed":{"type":["integer","null"],"format":"int64","minimum":0},"chunks_total":{"type":["integer","null"],"format":"int64","minimum":0},"created_at":{"type":["integer","null"],"format":"int64"},"current_position":{"type":"integer","format":"int64"},"delay_between_chunks_secs":{"type":["integer","null"],"format":"int64"},"delete_before_backfill":{"type":["boolean","null"]},"deletion_job_ids":{"type":["array","null"],"items":{"type":"string"}},"deletion_status":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DeletionStatus"}]},"enabled":{"type":"boolean"},"end_time":{"type":"integer","format":"int64"},"error":{"type":["string","null"]},"job_id":{"type":"string"},"last_triggered_at":{"type":["integer","null"],"format":"int64"},"pipeline_id":{"type":"string"},"pipeline_name":{"type":["string","null"]},"progress_percent":{"type":"integer","format":"int32","minimum":0},"start_time":{"type":"integer","format":"int64"},"status":{"type":"string"}}},"BackfillRequest":{"type":"object","required":["start_time","end_time"],"properties":{"chunk_period_minutes":{"type":["integer","null"],"format":"int64"},"delay_between_chunks_secs":{"type":["integer","null"],"format":"int64"},"delete_before_backfill":{"type":"boolean"},"end_time":{"type":"integer","format":"int64","description":"End time in microseconds"},"start_time":{"type":"integer","format":"int64","description":"Start time in microseconds"}}},"BackfillResponse":{"type":"object","required":["job_id","message"],"properties":{"job_id":{"type":"string"},"message":{"type":"string"}}},"Background":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"value":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/BackgroundValue"}]}}},"BackgroundValue":{"type":"object","required":["color"],"properties":{"color":{"type":"string"}}},"BaseMap":{"type":"object","properties":{"type":{"type":["string","null"],"default":null}}},"Batching":{"oneOf":[{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","enum":["one"]}}},{"type":"object","required":["first","kind"],"properties":{"first":{"type":"integer","minimum":0},"kind":{"type":"string","enum":["canary"]}}},{"type":"object","required":["initial","multiplier","max","kind"],"properties":{"initial":{"type":"integer","minimum":0},"kind":{"type":"string","enum":["progressive"]},"max":{"type":"integer","minimum":0},"multiplier":{"type":"integer","minimum":0}}}],"description":"Phase sizes are counts of collectors, never percentages."},"BlindSpot":{"type":"object","description":"Something the run could not check.","required":["id","axis","title","why","fix"],"properties":{"axis":{"$ref":"#/components/schemas/BlindSpotAxis"},"fix":{"$ref":"#/components/schemas/BlindSpotFix"},"id":{"type":"string"},"title":{"type":"string"},"why":{"type":"string"}}},"BlindSpotAxis":{"type":"string","enum":["change","logs","metrics","traces","infra","other"]},"BlindSpotFix":{"type":"string","enum":["connect_toolset","ingest_data","open_pipeline","sampling_rules","resume_run","none"]},"BudgetCheck":{"type":"string","description":"Outcome of the caller's budget checks for this investigation.","enum":["allowed","turn_limit","ai_usage_refused"]},"BudgetNotificationConfiguration":{"type":"object","required":["org_id","total_budget_amount","warn_at_amount","paused"],"properties":{"org_id":{"type":"string"},"paused":{"type":"boolean"},"total_budget_amount":{"type":"number","format":"double"},"warn_at_amount":{"type":"number","format":"double"}}},"BuiltInModelPricingEntry":{"type":"object","description":"A model pricing entry from the community/built-in source.","required":["name","match_pattern","tiers"],"properties":{"description":{"type":"string"},"match_pattern":{"type":"string"},"name":{"type":"string"},"provider":{"type":"string"},"tiers":{"type":"array","items":{"$ref":"#/components/schemas/PricingTierDefinition"}}}},"BuiltInModelPricingResponse":{"type":"object","description":"BuiltInModelPricingResponse","required":["models","source_url","last_updated","seed_date"],"properties":{"last_updated":{"type":"integer","format":"int64","description":"Unix seconds of this server's last successful online sync; 0 = none since startup."},"models":{"type":"array","items":{"$ref":"#/components/schemas/BuiltInModelPricingEntry"}},"seed_date":{"type":"string","description":"Date of the seed price list compiled into this binary."},"source_url":{"type":"string"}}},"BuiltInPatternResponse":{"type":"object","description":"OpenObserve built-in pattern format (for API response)","required":["name","pattern","description","tags","rarity","examples"],"properties":{"description":{"type":"string"},"examples":{"$ref":"#/components/schemas/PatternExamples"},"name":{"type":"string"},"pattern":{"type":"string"},"rarity":{"type":"number","format":"double"},"tags":{"type":"array","items":{"type":"string"}},"url":{"type":["string","null"]}}},"BuiltInPatternsResponse":{"type":"object","required":["patterns","last_updated","source_url"],"properties":{"last_updated":{"type":"integer","format":"int64"},"patterns":{"type":"array","items":{"$ref":"#/components/schemas/BuiltInPatternResponse"}},"source_url":{"type":"string"}}},"BuiltinBots":{"type":"object","description":"The `builtinBots` response field, built from `BUILTIN_BOTS`.","required":["version","families","devices"],"properties":{"devices":{"type":"array","items":{"type":"string"}},"families":{"type":"array","items":{"type":"string"}},"version":{"type":"integer","format":"int32","minimum":0}}},"BulkDeleteAlertResponse":{"type":"object","description":"Bulk alert deletion result. Carries a `conflicts` field that the shared\n`BulkDeleteResponse` does not, so generated clients can see which IDs were\nretained because they are referenced by composite alerts.","required":["successful","unsuccessful","conflicts"],"properties":{"conflicts":{"type":"array","items":{"$ref":"#/components/schemas/BulkDeleteConflict"}},"err":{"type":["string","null"]},"successful":{"type":"array","items":{"type":"string"}},"unsuccessful":{"type":"array","items":{"type":"string"}}}},"BulkDeleteConflict":{"type":"object","description":"One conflict reported by bulk alert deletion: an alert that could not be\ndeleted because one or more composite alerts still reference it.","required":["alert_id","code","references","hidden_reference_count"],"properties":{"alert_id":{"type":"string","description":"Alert ID that could not be deleted."},"code":{"type":"string","description":"Machine-readable conflict code (e.g. \"child_referenced\")."},"hidden_reference_count":{"type":"integer","description":"Number of referencing composites hidden from the caller by permissions.","minimum":0},"references":{"type":"array","items":{},"description":"Referencing composites the caller can read."}}},"BulkDeleteRequest":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string"}}}},"BulkDeleteResponse":{"type":"object","required":["successful","unsuccessful"],"properties":{"err":{"type":["string","null"]},"successful":{"type":"array","items":{"type":"string"}},"unsuccessful":{"type":"array","items":{"type":"string"}}}},"BulkDeleteSyntheticsRequestBody":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string"}}}},"BulkResponse":{"type":"object","required":["took","errors","items"],"properties":{"errors":{"type":"boolean"},"items":{"type":"array","items":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/BulkResponseItem"},"propertyNames":{"type":"string"}}},"took":{"type":"integer","minimum":0}}},"BulkResponseError":{"type":"object","required":["type","reason","index_uuid","shard","index"],"properties":{"index":{"type":"string"},"index_uuid":{"type":"string"},"reason":{"type":"string"},"shard":{"type":"string"},"type":{"type":"string"}}},"BulkResponseItem":{"type":"object","required":["_index","_id","status"],"properties":{"_id":{"type":"string"},"_index":{"type":"string"},"_primary_term":{"type":["integer","null"],"format":"int64"},"_seq_no":{"type":["integer","null"],"format":"int64"},"_shards":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ShardResponse"}]},"_version":{"type":["integer","null"],"format":"int64"},"error":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/BulkResponseError"}]},"originalRecord":{"type":"object"},"result":{"type":["string","null"]},"status":{"type":"integer","format":"int64"}}},"CalibrationStatus":{"type":"object","properties":{"last_run":{"type":["object","null"]}}},"CancelQueryResponse":{"type":"object","required":["trace_id","is_success"],"properties":{"is_success":{"type":"boolean"},"trace_id":{"type":"string"}}},"CancelRcaResponse":{"type":"object","description":"Response for cancelling an in-flight RCA analysis","required":["run_id","cancelled"],"properties":{"cancelled":{"type":"boolean","description":"Always true: a cancel that ended nothing answers 400"},"run_id":{"type":"string","description":"The cancelled run"}}},"CapturedModel":{"type":"object","description":"A known model that a previewed rule pattern would price.","required":["model_name","match_kind","primary"],"properties":{"match_kind":{"$ref":"#/components/schemas/PricingMatchKind","description":"How the previewed pattern covers this name."},"model_name":{"type":"string","description":"A model name some pricing rule is written for."},"primary":{"type":"boolean","description":"True for the model the pattern itself names (its literal text); false for every other\nmodel the pattern also catches."},"replaces":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PricingRuleRef","description":"The rule that prices this model today, which the previewed rule would replace."}]}}},"CardinalityClass":{"type":"string","description":"Cardinality classification for dimensions\n\nUsed to determine which dimensions are stable (good for correlation)\nvs transient (should be filtered out or used only for additional filtering)","enum":["VeryLow","Low","Medium","High","VeryHigh"]},"CatalogFunction":{"type":"object","description":"One entry of the SQL function catalog served to the query editor.","required":["name","signature","doc","kind","deprecated"],"properties":{"deprecated":{"type":"boolean"},"doc":{"type":"string","description":"Prose for the editor's documentation panel. May be empty for upstream\nDataFusion functions that carry no documentation of their own."},"kind":{"type":"string","description":"\"udf\" | \"scalar\" | \"aggregate\" | \"window\" | \"vrl\""},"name":{"type":"string"},"signature":{"type":"string","description":"Argument list, e.g. \"(field, k)\". Drives the editor's `detail` column."}}},"CauseGroup":{"type":"object","description":"One row of the prior-causes panel.","required":["cause","count","last_response_id"],"properties":{"cause":{"$ref":"#/components/schemas/ResolutionCause"},"count":{"type":"integer","description":"How many past firings resolved to this cause.","minimum":0},"last_closed_at":{"type":["integer","null"],"format":"int64"},"last_response_id":{"type":"string","description":"That firing, so the panel can link to it."},"note":{"type":["string","null"],"description":"The note from the most recent firing with this cause, if one was left."}}},"ChangeKind":{"type":"string","description":"What kind of change the agent thinks is responsible.","enum":["deploy","commit","config_change","feature_flag","infra"]},"Channel":{"type":"string","description":"How a page reaches a person.","enum":["email","webhook","sms","voice","slack"]},"ChannelReadiness":{"type":"object","description":"One channel, and whether a page could go out on it for this person today.","required":["channel","deliverable","configured_but_unverified"],"properties":{"blocked_because":{"type":["string","null"],"description":"Why not, when not — a sentence, not a code."},"channel":{"$ref":"#/components/schemas/Channel"},"configured_but_unverified":{"type":"boolean","description":"The person has supplied this method but nobody has proved it reaches them,\nso no transport may use it. Distinct from \"not configured\": the person\nbelieves they are reachable this way."},"deliverable":{"type":"boolean","description":"A page raised now would be handed to a transport that can carry it."}}},"ChartSpec":{"type":"object","properties":{"enabled":{"type":"boolean","default":false}}},"ChatSummary":{"type":"object","description":"One chat in the user's list.","required":["session_id","title","agent_type","created_at","updated_at","last_committed_seq"],"properties":{"agent_type":{"type":"string"},"created_at":{"type":"integer","format":"int64","description":"Microseconds since the epoch."},"forked_from_share":{"type":["string","null"],"description":"Set on a chat forked from a share: the share's id."},"last_committed_seq":{"type":"integer","format":"int64","description":"Highest durably stored event sequence (-1: nothing yet)."},"session_id":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"integer","format":"int64"}}},"CheckId":{"type":"string","enum":["unpriced_models","missing_agent_identity","zero_duration_spans","missing_session_id"]},"CheckStatus":{"type":"string","enum":["pass","warning","error"]},"Citation":{"type":"object","description":"One hypothesis' use of an evidence entry.","required":["hypothesis_id","evidence_id","polarity","strength","observation"],"properties":{"evidence_id":{"type":"string"},"hypothesis_id":{"type":"string"},"observation":{"type":"string","description":"The agent's reading of the result; never shown as the result."},"polarity":{"$ref":"#/components/schemas/Polarity"},"strength":{"$ref":"#/components/schemas/Strength"}}},"CleanupTaskView":{"allOf":[{"$ref":"#/components/schemas/OrgCleanupTask"},{"type":"object","required":["exhausted"],"properties":{"exhausted":{"type":"boolean"}}}]},"ClearAgentRegistryResponse":{"type":"object","description":"Result returned after clearing registry rows and pending buffer entries.","required":["deleted_count","cleared_buffer_count"],"properties":{"cleared_buffer_count":{"type":"integer","description":"Number of in-memory buffered observations removed.","minimum":0},"deleted_count":{"type":"integer","format":"int64","description":"Number of persisted registry rows deleted.","minimum":0},"source_stream":{"type":["string","null"],"description":"Stream name scope that was cleared, when provided."},"source_stream_type":{"type":["string","null"],"description":"Stream type scope that was cleared, when provided."}}},"ClientExecutionRecordBody":{"type":"object","description":"One Slot result reported by the customer's own process.","required":["rowId","trialIndex","status","taskFingerprint"],"properties":{"cost":{"type":["number","null"],"format":"double"},"errorAttemptCount":{"type":["integer","null"],"format":"int32","minimum":0},"errorMessage":{"type":["string","null"]},"executedAt":{"type":["integer","null"],"format":"int64","description":"Client-reported event time. Informational only."},"latencyMs":{"type":["integer","null"],"format":"int64","minimum":0},"output":{},"rowId":{"type":"string"},"skipMessage":{"type":["string","null"],"description":"Free-text reason a Task gave for declining the Slot."},"status":{"type":"string"},"taskFingerprint":{"type":"string","description":"Must repeat the Experiment's pinned `taskFingerprint`."},"tokensIn":{"type":["integer","null"],"format":"int64","minimum":0},"tokensOut":{"type":["integer","null"],"format":"int64","minimum":0},"traceId":{"type":["string","null"]},"trialIndex":{"type":"integer","format":"int32","minimum":0}},"additionalProperties":false},"ClientScoreBody":{"type":"object","description":"One Score the customer's own code produced.","required":["rowId","trialIndex","clientScorerKey","scoreConfig","value"],"properties":{"clientScorerKey":{"type":"string","description":"Stable client-side identity for the local scorer that produced it."},"metadata":{},"reasoning":{"type":["string","null"]},"rowId":{"type":"string"},"scoreConfig":{"type":"string","description":"Score Config stable entity ID, or its name."},"trialIndex":{"type":"integer","format":"int32","minimum":0},"value":{}},"additionalProperties":false},"CloneAlertAnswer":{"anyOf":[{"$ref":"#/components/schemas/Alert"},{"$ref":"#/components/schemas/ClonedCompositeAlert"},{"$ref":"#/components/schemas/ClonedAnomalyConfig"}]},"ClonedAnomalyConfig":{"type":"object","required":["anomaly_id","org_id","name","stream_name","stream_type","folder_id","status","enabled","alert_enabled"],"properties":{"alert_enabled":{"type":"boolean"},"anomaly_id":{"type":"string"},"enabled":{"type":"boolean"},"folder_id":{"type":"string"},"name":{"type":"string"},"org_id":{"type":"string"},"status":{"type":"string"},"stream_name":{"type":"string"},"stream_type":{"type":"string"}}},"ClonedCompositeAlert":{"type":"object","required":["id","name","alert_type"],"properties":{"alert_type":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}}},"Collector":{"type":"object","required":["id","name","outdated","status","fleet","last_seen","enrolled_at"],"properties":{"arch":{"type":["string","null"]},"config":{"type":["string","null"]},"config_version":{"type":["integer","null"],"format":"int64"},"delivery":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DeliveryState"}]},"delivery_error":{"type":["string","null"]},"distribution":{"type":["string","null"]},"enrolled_at":{"type":"integer","format":"int64","description":"Epoch milliseconds."},"fleet":{"$ref":"#/components/schemas/CollectorFleet"},"hostname":{"type":["string","null"]},"id":{"type":"string"},"last_connected_from":{"type":["string","null"],"description":"The connection's client address, as `ZO_HTTP_REAL_IP_SOURCE` resolves it."},"last_seen":{"type":"integer","format":"int64","description":"Epoch milliseconds."},"name":{"type":"string","description":"The nickname, or the host name when none was set."},"os":{"type":["string","null"]},"outdated":{"type":"boolean"},"status":{"$ref":"#/components/schemas/CollectorStatus"},"token_id":{"type":["string","null"]},"version":{"type":["string","null"]}}},"CollectorAssignment":{"type":"object","description":"What the collector should run; `revision` increases on every rewrite, including redeliver.","required":["fleet","config","version","revision"],"properties":{"config":{"type":"string"},"fleet":{"type":"string","description":"Fleet id the assignment was written for."},"revision":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int64"}}},"CollectorDetail":{"allOf":[{"$ref":"#/components/schemas/Collector"},{"type":"object","required":["capabilities","evidence","history"],"properties":{"assignment":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CollectorAssignment"}]},"capabilities":{"type":"array","items":{"type":"string"}},"effective_config":{"type":["string","null"],"description":"Normalized and redacted."},"effective_reported_at":{"type":["integer","null"],"format":"int64","description":"Epoch milliseconds."},"evidence":{"$ref":"#/components/schemas/DeliveryEvidence"},"health":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CollectorHealth"}]},"history":{"type":"array","items":{"$ref":"#/components/schemas/CollectorEvent"},"description":"Newest first."}}}]},"CollectorEvent":{"type":"object","required":["at","event"],"properties":{"at":{"type":"integer","format":"int64","description":"Epoch milliseconds."},"detail":{"type":["string","null"]},"event":{"type":"string"}}},"CollectorFleet":{"type":"object","description":"A fleet named by its public id; `name` is null once the fleet was deleted.","required":["id"],"properties":{"id":{"type":"string"},"name":{"type":["string","null"]}}},"CollectorHealth":{"type":"object","description":"Stored as the `health` column and returned as is.","required":["healthy","status","last_error","components"],"properties":{"components":{"type":"array","items":{"$ref":"#/components/schemas/ComponentHealth"}},"healthy":{"type":"boolean"},"last_error":{"type":"string"},"status":{"type":"string"}}},"CollectorList":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Collector"}},"total":{"type":"integer","minimum":0}}},"CollectorStatus":{"type":"string","description":"Derived when read from `last_seen` and the reported health, never stored.","enum":["unknown","online","degraded","offline"]},"ColorBySeries":{"type":"object","properties":{"color":{"type":["string","null"],"default":null},"type":{"type":["string","null"],"default":null},"value":{"type":["string","null"],"default":null}}},"ColorCfg":{"type":"object","properties":{"colorBySeries":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ColorBySeries"},"default":null},"fixedColor":{"type":["array","null"],"items":{"type":"string"},"default":null},"mode":{"type":["string","null"],"default":null},"seriesBy":{"type":["string","null"],"default":null}}},"CommentRequest":{"type":"object","required":["comment"],"properties":{"comment":{"type":"string"}}},"CompactorJobStatus":{"type":"string","enum":["Pending","Running","Completed"]},"CompactorManualJob":{"type":"object","required":["id","key","created_at","ended_at","status"],"properties":{"created_at":{"type":"integer","format":"int64"},"ended_at":{"type":"integer","format":"int64"},"id":{"type":"string"},"key":{"type":"string"},"status":{"$ref":"#/components/schemas/CompactorJobStatus"}}},"CompactorManualJobResEntry":{"allOf":[{"$ref":"#/components/schemas/CompactorManualJob"},{"type":"object","properties":{"cluster":{"type":"string"},"region":{"type":"string"}}}]},"CompactorManualJobStatusRes":{"type":"object","required":["id","status","metadata"],"properties":{"errors":{"type":"array","items":{"type":"object"}},"id":{"type":"string"},"metadata":{"type":"array","items":{"$ref":"#/components/schemas/CompactorManualJobResEntry"}},"status":{"$ref":"#/components/schemas/CompactorJobStatus"}}},"CompareArm":{"type":"object","description":"One arm (A or B) of a version-compare request.","required":["agent_name","start_time","end_time"],"properties":{"agent_name":{"type":"string"},"end_time":{"type":"integer","format":"int64"},"env":{"type":["string","null"]},"start_time":{"type":"integer","format":"int64","description":"Span-time window of the version (kept for the response's window cards);\nNOT used to filter `_agent_signals` (see COMPARE_ROLLUP_LOOKBACK_MICROS)."},"version":{"type":["string","null"]}}},"CompareHistoricData":{"type":"object","required":["offSet"],"properties":{"offSet":{"type":"string"}}},"ComponentHealth":{"type":"object","required":["id","healthy","status","last_error"],"properties":{"healthy":{"type":"boolean"},"id":{"type":"string"},"last_error":{"type":"string"},"status":{"type":"string"}}},"ComponentInput":{"type":"object","description":"One component in the bulk component-replace PUT. `check_ids` are the\nsynthetics checks it maps; the handler MUST verify folder-level synthetics\nread on each before writing (R-1 — top build risk).","required":["name"],"properties":{"check_ids":{"type":"array","items":{"type":"string"}},"description":{"type":["string","null"]},"id":{"type":["string","null"],"description":"Present = update in place (stable id); absent = create."},"name":{"type":"string"}}},"ComponentStatus":{"type":"string","description":"Component status by notice precedence: Major > Partial > Degraded >\nMaintenance > Operational. NoData is orthogonal (a dead probe is gray, not\ngreen — and not an outage either).","enum":["operational","no_data","maintenance","degraded","partial_outage","major_outage"]},"ComponentView":{"type":"object","description":"A component as returned by the admin GET (id + name + its mapped check ids),\nso the edit UI can render the existing mapping. The list view omits this.","required":["id","name","check_ids"],"properties":{"check_ids":{"type":"array","items":{"type":"string"}},"description":{"type":["string","null"]},"id":{"type":"string"},"name":{"type":"string"}}},"CompositeAlertSummary":{"type":"object","description":"A composite alert's light summary, for the incident's live-definition list.\nComposites have no `alerts` row, so they cannot be a [`super::alert::Alert`];\nthis carries the fields the topology/detail surface needs.","required":["id","name","alert_type","enabled","folder_id"],"properties":{"alert_type":{"type":"string"},"enabled":{"type":"boolean"},"folder_id":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}}},"CompositeChildResponse":{"type":"object","required":["alert_id","accessible"],"properties":{"accessible":{"type":"boolean","description":"Whether the caller may read this child."},"alert_id":{"type":"string","description":"Child alert ID."},"alert_type":{"type":["string","null"],"description":"Child alert type (\"scheduled\" | \"composite\" | \"slo\")."},"effective_cadence_seconds":{"type":["integer","null"],"format":"int64","description":"Effective evaluation cadence in seconds.\n\nReserved and currently unpopulated (always omitted) — cadence is not yet\npropagated through child evaluation. Do not rely on this field being set."},"enabled":{"type":["boolean","null"],"description":"Whether the child is enabled."},"folder_id":{"type":["string","null"],"description":"Folder containing the child."},"level":{"type":["string","null"],"description":"Current severity level of the child's last evaluation."},"level_at":{"type":["integer","null"],"format":"int64","description":"When `level` was last recorded."},"name":{"type":["string","null"],"description":"Child name; `None` when the child is not accessible to the caller."},"stale":{"type":["boolean","null"],"description":"Whether the child's latest state is stale."},"stale_deadline":{"type":["integer","null"],"format":"int64","description":"Deadline after which a missing evaluation marks the child stale."},"truth":{"type":["boolean","null"],"description":"Whether the child currently evaluates true."}}},"CompositeCondition":{"type":"object","description":"Composite expression and truth-policy configuration.","required":["expression"],"properties":{"expression":{"type":"string","description":"Boolean expression over child alert IDs, e.g. `{child_a} && ({child_b} || {child_c})`."},"stale_child_policy":{"$ref":"#/components/schemas/CompositeStaleChildPolicy","description":"How a child with a stale (out-of-freshness) state is treated."},"warning_counts_as_firing":{"type":"boolean","description":"Whether a child at `warning` severity counts as firing (`true`) or only\n`critical` does (`false`). Defaults to `true`."}}},"CompositeReferenceItem":{"type":"object","required":["alert_id","name","folder_id"],"properties":{"alert_id":{"type":"string","description":"Referencing composite alert ID."},"folder_id":{"type":"string","description":"Folder containing the referencing composite alert."},"name":{"type":"string","description":"Referencing composite alert name."}}},"CompositeReferencesResponse":{"type":"object","required":["references","hidden_reference_count"],"properties":{"hidden_reference_count":{"type":"integer","description":"Number of referencing composites hidden from the caller by permissions.","minimum":0},"references":{"type":"array","items":{"$ref":"#/components/schemas/CompositeReferenceItem"},"description":"Composite alerts referencing the queried alert that the caller can read."}}},"CompositeStaleChildPolicy":{"type":"string","description":"How a composite treats a child whose latest state is stale (no recent\nevaluation within its freshness deadline).\n\nThe `storage_id` mapping below is persisted in the `stale_child_policy`\ncolumn and is **append-only**: never renumber an existing variant, or rows\nalready on disk will silently decode to the wrong policy.","enum":["use_last_state","treat_as_false","treat_as_true"]},"CompositeTimelineLane":{"type":"object","description":"A single status lane: one child (or the composite itself) over a window.","required":["accessible","transitions"],"properties":{"accessible":{"type":"boolean"},"alert_id":{"type":["string","null"],"description":"Redacted (`None`) when the child is not readable to the caller, so an\ninaccessible child never leaks its stable KSUID."},"current_level":{"type":["string","null"]},"level_since":{"type":["integer","null"],"format":"int64","description":"When `current_level` last changed; the lane paints this from now."},"name":{"type":["string","null"],"description":"`None` when the child is not readable to the caller."},"slot":{"type":["integer","null"],"description":"Position among the composite's children (A=0), for the letter chip.","minimum":0},"transitions":{"type":"array","items":{"$ref":"#/components/schemas/CompositeTimelineTransition"}}}},"CompositeTimelineTransition":{"type":"object","description":"One child-level change inside a composite status timeline window. `to_level`\nis in effect from `at` until the next row (or the window end).","required":["at"],"properties":{"at":{"type":"integer","format":"int64"},"from_level":{"type":["string","null"]},"to_level":{"type":["string","null"]}}},"CompositeValidationResponse":{"type":"object","required":["valid","children","warnings"],"properties":{"canonical_expression":{"type":["string","null"],"description":"Canonicalized form of the expression."},"children":{"type":"array","items":{"$ref":"#/components/schemas/CompositeChildResponse"},"description":"Resolved child references."},"result":{"type":["boolean","null"],"description":"Advisory evaluation result (null when indeterminate)."},"result_level":{"type":["string","null"],"description":"Advisory severity of the result."},"valid":{"type":"boolean","description":"Whether the expression is syntactically valid."},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/CompositeValidationWarning"},"description":"Advisory warnings (e.g. disabled or never-evaluated children)."}}},"CompositeValidationWarning":{"type":"object","description":"One advisory warning on a composite validation/preview.","required":["code","alert_id"],"properties":{"alert_id":{"type":"string","description":"Alert ID the warning refers to."},"code":{"type":"string","description":"Machine-readable warning code."}}},"Condition":{"type":"object","required":["column","operator","value"],"properties":{"column":{"type":"string"},"ignore_case":{"type":"boolean"},"operator":{"$ref":"#/components/schemas/Operator"},"value":{"type":"object"}}},"ConditionalRule":{"type":"object","properties":{"bgColor":{"type":["string","null"],"default":null},"operator":{"type":"string","default":""},"textColor":{"type":["string","null"],"default":null},"threshold":{"type":"number","format":"double","default":0.0}}},"Confidence":{"type":"string","description":"How sure the agent is, as a band rather than a number.\n\nThere is no calibrated probability behind it, so a percentage would be\nfalse precision. `High` states the cause as the headline; `Low` renders it\nas an unverified guess.","enum":["high","medium","low"]},"ConfidenceBreakdown":{"type":"object","description":"Claim, evidence level with its reason, and the caps that lowered it.","required":["claimed","evidence","evidence_reason"],"properties":{"caps":{"type":"array","items":{"type":"string"},"description":"The caps that lowered the evidence level to `medium`."},"claimed":{"$ref":"#/components/schemas/Confidence"},"evidence":{"$ref":"#/components/schemas/Confidence","description":"The level the evidence rules allow, before any cap."},"evidence_reason":{"type":"string","description":"Why the evidence allows that level, e.g. \"1 decisive source (logs)\"."},"next_level":{"type":["string","null"],"description":"What the next level up needs; absent at `high` and under a floor."}}},"Config":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["unit"]},"value":{}}},{"type":"object","required":["type"],"properties":{"autoColor":{"type":"boolean"},"type":{"type":"string","enum":["unique_value_color"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["alignment"]},"value":{"type":["string","null"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["text_color"]},"value":{"type":["string","null"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["background_color"]},"value":{"type":["string","null"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["field_type"]},"value":{"type":["string","null"]}}},{"type":"object","required":["type"],"properties":{"rules":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ConditionalRule"}},"type":{"type":"string","enum":["conditional_styles"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["decimals"]},"value":{"type":["number","null"],"format":"double"}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["display_name"]},"value":{"type":["string","null"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["series_color"]},"value":{"type":["string","null"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["thresholds"]},"value":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Thresholds"}]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["value_mappings"]},"value":{"type":["array","null"],"items":{"$ref":"#/components/schemas/Mapping"}}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["line_style"]},"value":{"type":["string","null"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["line_width"]},"value":{"type":["number","null"],"format":"double"}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["fill_opacity"]},"value":{"type":["number","null"],"format":"double"}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["show_points"]},"value":{"type":["boolean","null"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["transform"]},"value":{"type":["string","null"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["draw_style"]},"value":{"type":["string","null"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["stack_group"]},"value":{"type":["string","null"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["y_axis"]},"value":{"type":["string","null"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["hide_from"]},"value":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SeriesHideFrom"}]}}}]},"ConfigDraft":{"type":"object","required":["yaml","by","at"],"properties":{"at":{"type":"integer","format":"int64"},"by":{"type":"string"},"yaml":{"type":"string"}}},"ConfigIssue":{"type":"object","required":["severity","text"],"properties":{"severity":{"$ref":"#/components/schemas/IssueSeverity"},"text":{"type":"string"}}},"ConfigResponse":{"allOf":[{"$ref":"#/components/schemas/LicenseConfig"},{"type":"object","required":["version","commit_hash","build_date","build_type","default_fts_keys","default_secondary_index_fields","default_quick_mode_fields","telemetry_enabled","default_functions","sql_reserved_keywords","sql_base64_enabled","timestamp_column","data_retention_days","data_retention_defaults","resolved_data_retention","extended_data_retention_days","restricted_routes_on_empty_data","sample_data_onboarding_enabled","sso_enabled","native_login_enabled","service_account_enabled","rbac_enabled","super_cluster_enabled","query_on_stream_selection","show_stream_stats_doc_num","custom_logo_text","custom_slack_url","custom_docs_url","rum","custom_hide_menus","custom_hide_self_logo","meta_org","quick_mode_enabled","user_defined_schemas_enabled","user_defined_schema_max_fields","all_fields_name","usage_enabled","usage_publish_interval","ingestion_url","web_url","streaming_aggregation_enabled","min_auto_refresh_interval","query_default_limit","max_dashboard_series","max_dashboard_state_timeline_series","max_dashboard_hostmap_cells","streaming_enabled","histogram_enabled","timechart_enabled","editor_suggest_mode","max_query_range","cluster_name","ingest_allowed_upto","ingest_allowed_in_future","ai_enabled","ai_chat_persistence_enabled","public_ai_chat_enabled","public_ai_chat_max_expiry_days","is_org_admin","org_deletion_grace_period_days","dashboard_placeholder","dashboard_show_symbol_enabled","dashboard_show_field_as_json_enabled","ingest_flatten_level","log_page_default_field_list","query_values_default_num","alert_preview_timerange_minutes","incidents_enabled","incidents_rca_enabled","downtimes_enabled","fleet_enabled","alert_calibration_enabled","service_streams_enabled","model_pricing_enabled","online_evals_enabled","anomaly_detection_enabled","composite_alerts_available","synthetics_enabled","public_dashboards_enabled","public_dashboard_min_refresh_secs","oncall_enabled","slack_enabled","synthetics_private_locations_enabled","synthetics_browser_max_steps","synthetics_recorder_extension_url","database_monitoring_enabled","query_history_enabled","query_history_retention_days","enable_cross_linking","show_fts_field_values","search_inspector_enabled","auto_query_enabled","profiling_enabled","experimental","last_usage_report_ts","org_storage_providers","org_storage_region","billing_group_allowed_orgs","workflows_enabled","workflow_hooks_enabled","feature_revision","features","feature_names"],"properties":{"ai_chat_persistence_enabled":{"type":"boolean","description":"AI conversations are stored server-side (`/ai/chats`); IndexedDB is then only a cache."},"ai_enabled":{"type":"boolean"},"alert_calibration_enabled":{"type":"boolean"},"alert_preview_timerange_minutes":{"type":"integer","format":"int64"},"all_fields_name":{"type":"string"},"anomaly_detection_enabled":{"type":"boolean"},"auto_query_enabled":{"type":"boolean"},"billing_group_allowed_orgs":{"type":"string"},"build_date":{"type":"string"},"build_type":{"type":"string"},"cluster_name":{"type":"string"},"commit_hash":{"type":"string"},"composite_alerts_available":{"type":"boolean"},"custom_docs_url":{"type":"string"},"custom_hide_menus":{"type":"string"},"custom_hide_self_logo":{"type":"boolean"},"custom_logo_dark_img":{"type":["string","null"]},"custom_logo_img":{"type":["string","null"]},"custom_logo_text":{"type":"string"},"custom_slack_url":{"type":"string"},"dashboard_placeholder":{"type":"string"},"dashboard_show_field_as_json_enabled":{"type":"boolean"},"dashboard_show_symbol_enabled":{"type":"boolean"},"data_retention_days":{"type":"integer","format":"int64"},"data_retention_defaults":{"$ref":"#/components/schemas/DataRetentionDefaults"},"database_monitoring_enabled":{"type":"boolean","description":"The only DBM flag (`ZO_DB_MONITORING_ENABLED`): one OSS switch for every signal."},"default_fts_keys":{"type":"array","items":{"type":"string"}},"default_functions":{"type":"array","items":{"$ref":"#/components/schemas/ZoFunction"}},"default_quick_mode_fields":{"type":"array","items":{"type":"string"}},"default_secondary_index_fields":{"type":"array","items":{"type":"string"}},"downtimes_enabled":{"type":"boolean"},"editor_suggest_mode":{"type":"string"},"enable_cross_linking":{"type":"boolean"},"experimental":{"type":"boolean"},"extended_data_retention_days":{"type":"integer","format":"int64"},"feature_names":{"type":"object","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"feature_revision":{"type":"integer","format":"int32","minimum":0},"features":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/FeatureState"},"propertyNames":{"type":"string","description":"Product features as tags; the snake_case name is the gate-definition and license key.","enum":["ai_observability","ai_assistant","workflows","oncall","incidents","logs","metrics","traces","rum","product_analytics","synthetics","db_monitoring","correlation","dashboards","reports","alerts","pipelines","ai_toolsets","mcp","ratelimit","anomaly_detection","continuous_profiling","kubernetes_monitoring","host_monitoring","sso","rbac","audit_trail","query_management","super_cluster","byob"]}},"fleet_enabled":{"type":"boolean"},"histogram_enabled":{"type":"boolean"},"incidents_enabled":{"type":"boolean"},"incidents_rca_enabled":{"type":"boolean"},"ingest_allowed_in_future":{"type":"integer","format":"int64","description":"Hours ahead the ingester accepts a record's timestamp."},"ingest_allowed_upto":{"type":"integer","format":"int64","description":"Hours back the ingester accepts a record's timestamp."},"ingest_flatten_level":{"type":"integer","format":"int32","minimum":0},"ingestion_url":{"type":"string"},"is_org_admin":{"type":"boolean","description":"The caller is root or an admin of the URL org (may list and revoke every AI chat share)."},"last_usage_report_ts":{"type":"integer","format":"int64"},"log_page_default_field_list":{"type":"string"},"max_dashboard_hostmap_cells":{"type":"integer","minimum":0},"max_dashboard_series":{"type":"integer","minimum":0},"max_dashboard_state_timeline_series":{"type":"integer","minimum":0},"max_query_range":{"type":"integer","format":"int64"},"meta_org":{"type":"string"},"min_auto_refresh_interval":{"type":"integer","format":"int32","minimum":0},"model_pricing_enabled":{"type":"boolean"},"native_login_enabled":{"type":"boolean"},"oncall_enabled":{"type":"boolean"},"online_evals_enabled":{"type":"boolean"},"org_deletion_grace_period_days":{"type":"integer","format":"int64","description":"Days a soft-deleted org stays recoverable; `0` (every OSS build) means none."},"org_storage_providers":{"type":"string"},"org_storage_region":{"type":"string"},"profiling_enabled":{"type":"boolean"},"public_ai_chat_enabled":{"type":"boolean","description":"Persisted AI chats may be shared through public links."},"public_ai_chat_max_expiry_days":{"type":"integer","format":"int64","description":"Longest expiry, in days, a public AI chat link may have.","minimum":0},"public_dashboard_min_refresh_secs":{"type":"integer","format":"int32","description":"The clamped operator refresh floor; the share form shows each range's floor from it.","minimum":0},"public_dashboards_enabled":{"type":"boolean","description":"Hides the publish button and the Public links view when the feature is off."},"query_default_limit":{"type":"integer","format":"int64"},"query_history_enabled":{"type":"boolean","description":"Off hides recent searches in the UI; the server then records nothing."},"query_history_retention_days":{"type":"integer","format":"int64","description":"Days unstarred recent searches are kept; 0 or less keeps them until the per-page cap."},"query_on_stream_selection":{"type":"boolean"},"query_values_default_num":{"type":"integer","format":"int64"},"quick_mode_enabled":{"type":"boolean"},"rbac_enabled":{"type":"boolean"},"resolved_data_retention":{"$ref":"#/components/schemas/DataRetentionDefaults"},"restricted_routes_on_empty_data":{"type":"boolean"},"rum":{"$ref":"#/components/schemas/RumConfig"},"sample_data_onboarding_enabled":{"type":"boolean"},"search_inspector_enabled":{"type":"boolean"},"service_account_enabled":{"type":"boolean"},"service_streams_enabled":{"type":"boolean"},"show_fts_field_values":{"type":"boolean"},"show_stream_stats_doc_num":{"type":"boolean"},"slack_disabled_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DisabledReason","description":"The same reason for every org, null when on."}]},"slack_enabled":{"type":"boolean"},"sql_base64_enabled":{"type":"boolean"},"sql_reserved_keywords":{"type":"array","items":{"type":"string"}},"sso_enabled":{"type":"boolean"},"streaming_aggregation_enabled":{"type":"boolean"},"streaming_enabled":{"type":"boolean"},"super_cluster_enabled":{"type":"boolean"},"synthetics_browser_max_steps":{"type":"integer","description":"Server-side step cap (`ZO_SYNTHETICS_BROWSER_MAX_STEPS`); the UI budget must follow it.","minimum":0},"synthetics_enabled":{"type":"boolean"},"synthetics_private_locations_enabled":{"type":"boolean","description":"Enterprise-only private locations; the UI gates their views on this flag."},"synthetics_recorder_extension_url":{"type":"string","description":"Chrome Web Store URL of the Recorder extension (`ZO_SYNTHETICS_RECORDER_EXTENSION_URL`)."},"telemetry_enabled":{"type":"boolean"},"timechart_enabled":{"type":"boolean"},"timestamp_column":{"type":"string"},"usage_enabled":{"type":"boolean"},"usage_publish_interval":{"type":"integer","format":"int64"},"user_defined_schema_max_fields":{"type":"integer","minimum":0},"user_defined_schemas_enabled":{"type":"boolean"},"version":{"type":"string"},"web_url":{"type":"string"},"workflow_hooks_enabled":{"type":"boolean"},"workflows_enabled":{"type":"boolean"}}}],"description":"Authenticated full UI configuration (`GET /api/{org_id}/config`)."},"ConfigVersion":{"type":"object","required":["version","yaml","hash"],"properties":{"hash":{"type":"string"},"version":{"type":"integer","format":"int64"},"yaml":{"type":"string"}}},"ConfigVersionSummary":{"type":"object","required":["version","author","at","message","live"],"properties":{"at":{"type":"integer","format":"int64"},"author":{"type":"string"},"live":{"type":"boolean"},"message":{"type":"string"},"state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/VersionState"}]},"version":{"type":"integer","format":"int64"}}},"ConfirmContactCodeRequest":{"type":"object","description":"The code texted to the person's phone, as they typed it.","required":["code"],"properties":{"code":{"type":"string"}}},"ConfirmRecoveryRequest":{"type":"object","description":"The cause belongs to the owner team's record, not to this one, so there is nothing else to send.","properties":{"note":{"type":["string","null"]}}},"ContentField":{"type":"object","properties":{"label":{"type":"string","default":""},"show_when":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SeverityFilter"}],"default":null},"value":{"type":"string","default":""}}},"ContentLink":{"type":"object","properties":{"label":{"type":"string","default":""},"show_when":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SeverityFilter"}],"default":null},"url":{"type":"string","default":""}}},"ContentSpec":{"type":"object","properties":{"body":{"type":"string","description":"Markdown with {var} placeholders.","default":""},"chart":{"oneOf":[{"$ref":"#/components/schemas/ChartSpec","description":"Phase 2 chart toggle; parsed and stored now, ignored by Phase 1 renderers."}],"default":{"enabled":false}},"fields":{"type":"array","items":{"$ref":"#/components/schemas/ContentField"},"default":[]},"links":{"type":"array","items":{"$ref":"#/components/schemas/ContentLink"},"default":[]},"rows":{"oneOf":[{"$ref":"#/components/schemas/RowsSpec"}],"default":{"enabled":false,"max":5,"columns":null,"format":null}},"title":{"type":"string","description":"Templated one-liner: Slack headline, email subject, PagerDuty summary.","default":""},"title_overrides":{"type":"object","description":"Per-channel title overrides keyed by channel family (\"slack\", \"teams\",\n\"email\", ...). Unknown keys ignored on read (mixed-version rule).","default":{},"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}}}},"CorrectionRef":{"type":"object","required":["downtime_id","name","status"],"properties":{"applies":{"type":"boolean","description":"False when the window holds no slice start, so it corrects no minute of this SLO."},"downtime_id":{"type":"string"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/DowntimeStatus"}}},"CorrelationReason":{"type":"string","description":"How an alert was correlated to an incident","enum":["service_discovery","primary_match","secondary_match","alert_id"]},"CorrelationRequest":{"type":"object","required":["source_stream","source_type","available_dimensions"],"properties":{"available_dimensions":{"type":"object","description":"Available dimensions from the source event","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"source_stream":{"type":"string","description":"Source stream name"},"source_type":{"type":"string","description":"Source stream type (logs/traces/metrics)"}}},"CorrelationResponse":{"type":"object","description":"Response from the correlate API","required":["service_name","matched_dimensions","additional_dimensions","related_streams"],"properties":{"additional_dimensions":{"type":"object","description":"Additional dimensions available for filtering","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"all_streams":{"type":"array","items":{"$ref":"#/components/schemas/StreamInfo"},"description":"Flattened list of all streams with explicit stream_type\n\nThis field provides a flat list of all streams where each stream has its\nstream_type explicitly set. This is useful for UIs that:\n1. Display all streams in a single list/table\n2. Need to query streams without maintaining the nested structure\n3. Pass streams between components (type info is preserved)"},"matched_dimensions":{"type":"object","description":"Dimensions that were used for matching (minimal set)","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"matched_set_id":{"type":["string","null"],"description":"The identity set that was selected for this correlation (by best-coverage resolution).\n`None` if the feature is not enabled or the set was not determined."},"related_streams":{"$ref":"#/components/schemas/RelatedStreams","description":"Related streams grouped by type (for backward compatibility)"},"service_name":{"type":"string","description":"Matched service name"},"service_name_from_stream":{"type":"boolean","description":"Whether `service_name` is the name of the stream this service was\ndiscovered in rather than anything about the service.\n\nDiscovery falls back to the stream name when a record carries neither a\n`service` dimension nor any tracked one, so `node_cpu_seconds` is a\nperfectly ordinary entry in the registry. That is fine for a list of\nstreams and wrong for anything that acts on it: on-call routing would be\nrouting on a table name. Consumers that need a real service check this."},"source_stream":{"type":["string","null"],"description":"Echo of the request's source stream, so consumers never have to re-derive\nwhich stream the correlation started from (F27)."},"source_type":{"type":["string","null"],"description":"Echo of the request's source stream type (logs/traces/metrics/profiles) (F27)."}}},"CostStatus":{"type":"string","description":"How ingest priced an LLM span whose cost is not an exact non-zero price; stored in\n[`COST_STATUS_COLUMN`].","enum":["unpriced","approximate","free"]},"CountQuery":{"type":"object","description":"One query of a dual-query count source. Each carries its **own** stream —\nD40's fallback exists precisely for numerator/denominator pairs that do not\nshare one.","required":["stream","stream_type","sql"],"properties":{"sql":{"type":"string","description":"SELECT-only SQL projecting `slice_start`, every configured `group_by`\ncolumn, and exactly one numeric `zo_slo_value`."},"stream":{"type":"string"},"stream_type":{"type":"string"}}},"CountSource":{"oneOf":[{"type":"object","description":"The native form: one scan, so good and total are provably from the same\nrows.","required":["query","mode"],"properties":{"mode":{"type":"string","enum":["single_query"]},"query":{"type":"object","description":"The native form: one scan, so good and total are provably from the same\nrows.","required":["stream","stream_type","good_expr"],"properties":{"good_expr":{"type":"string","description":"Numerator predicate. Mandatory — in this arm there is no other\ndefinition of `good`."},"scope":{"type":["string","null"],"description":"Denominator filter. `None` = all rows."},"stream":{"type":"string"},"stream_type":{"type":"string"}}}}},{"type":"object","description":"Importer-only fallback for an unfoldable imported pair. Weaker\natomicity: two scans that cannot be proven to have seen the same\ninstant.","required":["query","mode"],"properties":{"mode":{"type":"string","enum":["dual_query"]},"query":{"type":"object","description":"Importer-only fallback for an unfoldable imported pair. Weaker\natomicity: two scans that cannot be proven to have seen the same\ninstant.","required":["good","total"],"properties":{"good":{"$ref":"#/components/schemas/CountQuery"},"total":{"$ref":"#/components/schemas/CountQuery"}}}}},{"type":"object","description":"Metrics-native counting: two PromQL expressions, each evaluated per\nslice (wire tag `prom_ql`, following [`QueryLanguage::PromQl`]).\n\nExists because pre-aggregated counters have no rows for a `good_expr`\nto classify — \"good\" only exists as arithmetic between series, and\ncorrect counter arithmetic is `increase()` (monotonic-reset-aware),\nwhich SQL over raw samples cannot express. The expressions should use\na range selector equal to the slice interval\n(`increase(http_requests_total[5m])` for a 5-minute slice); the\nevaluator samples them at slice ends, so each sample covers exactly\nits slice.\n\nSame atomicity caveat as [`Self::DualQuery`]: two evaluations that\ncannot be proven to have seen the same instant. Grouping needs no\ncolumn list — the returned series' labels supply the group values.","required":["query","mode"],"properties":{"mode":{"type":"string","enum":["prom_ql"]},"query":{"type":"object","description":"Metrics-native counting: two PromQL expressions, each evaluated per\nslice (wire tag `prom_ql`, following [`QueryLanguage::PromQl`]).\n\nExists because pre-aggregated counters have no rows for a `good_expr`\nto classify — \"good\" only exists as arithmetic between series, and\ncorrect counter arithmetic is `increase()` (monotonic-reset-aware),\nwhich SQL over raw samples cannot express. The expressions should use\na range selector equal to the slice interval\n(`increase(http_requests_total[5m])` for a 5-minute slice); the\nevaluator samples them at slice ends, so each sample covers exactly\nits slice.\n\nSame atomicity caveat as [`Self::DualQuery`]: two evaluations that\ncannot be proven to have seen the same instant. Grouping needs no\ncolumn list — the returned series' labels supply the group values.","required":["good","total"],"properties":{"good":{"type":"string"},"total":{"type":"string"}}}}}],"description":"How a count SLI obtains good/total — itself a tagged union so that\nunrepresentable states cannot be constructed (D40).\n**Adjacently tagged, not internally tagged.** This workspace builds\n`serde_json` with `arbitrary_precision` (root `Cargo.toml`), which encodes\nevery number as a map. Internally-tagged enums buffer their whole subtree\nthrough `serde::__private::de::Content` before dispatching, and that\nbuffered map cannot then be deserialized into an `f64` — the failure is\n`invalid type: map, expected f64`, and it survives nesting. Serialization\nstill succeeds, so the bug only appears on read-back.\n\nThis variant carries no numbers *today*, but the dual-query form is the one\nmost likely to gain them, and the failure mode is silent enough to be worth\npre-empting. See [`SliConfig`] for the same treatment and a regression test."},"CoverageSegment":{"type":"object","description":"One stretch of time with one answer.","required":["rotation_id","from","to"],"properties":{"from":{"type":"integer","format":"int64","description":"Inclusive."},"override_id":{"type":["string","null"],"description":"Set when an override produced the holder."},"rotation":{"type":["string","null"],"description":"The layer that produced the holder, or whose rostered turn a gap leaves unfilled."},"rotation_id":{"type":"string","description":"Which rotation this stretch resolves. A grid is drawn one rotation at a\ntime — two rows, not one row with two answers in it."},"scheduled_email":{"type":["string","null"],"description":"The rule's rostered member here, before absences and covers, when not `user_email`."},"to":{"type":"integer","format":"int64","description":"Exclusive."},"user_email":{"type":["string","null"],"description":"`None` is a coverage gap — nobody is on call for this stretch. A\nsegment rather than a hole in the list, because a gap the caller has to\ninfer from missing rows is a gap nobody notices."}}},"CreateAlertRequestBody":{"allOf":[{"oneOf":[{"type":"object","description":"Alert configuration for monitoring streams and triggering notifications.\n\nAn alert watches a stream (logs, metrics, or traces) using SQL or PromQL queries,\nand sends notifications to configured destinations when trigger conditions are met.","properties":{"context_attributes":{"type":["object","null"],"description":"Optional key-value attributes to include in alert notifications.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"creates_incident":{"type":"boolean","description":"When true, this alert routes notifications through the incident system\ninstead of sending direct alert notifications."},"description":{"type":"string","description":"Human-readable description of what this alert monitors.","example":"Fires when error count exceeds threshold in the specified time window"},"destinations":{"type":"array","items":{"type":"string"},"description":"List of destination names to notify when alert fires.\nDestinations must be pre-configured in the system.\nAccepts either `destinations` or `alert_destinations` as the JSON field name.","example":["slack-alerts","pagerduty"]},"enabled":{"type":"boolean","description":"Whether the alert is active. Disabled alerts are not evaluated."},"id":{"type":["string","null"],"description":"Unique identifier for the alert. Auto-generated on creation.","readOnly":true},"incident_title_template":{"type":["string","null"],"description":"Incident title template; the generated title is used when no variable resolves.","example":"{service_name} errors on {host}"},"is_real_time":{"type":"boolean","description":"If true, alert evaluates in real-time as data arrives.\nIf false, alert runs on a schedule defined by trigger_condition.frequency."},"keep_firing_for":{"type":"integer","format":"int64","description":"Seconds the condition must stay clear before the alert recovers.\n0 recovers on the first clear evaluation.","example":0},"last_edited_by":{"type":["string","null"],"description":"Username who last edited the alert.","readOnly":true},"last_satisfied_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of when alert condition was last satisfied.","readOnly":true},"last_triggered_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of when alert was last triggered.","readOnly":true},"name":{"type":"string","description":"Human-readable name for the alert. Must be unique within the organization.","example":"High Error Rate Alert"},"notify_on_recovery":{"type":"boolean","description":"Send one notification when this alert recovers; a multi-alert sends one per recovered\ngroup."},"oncall_team":{"type":["string","null"],"description":"On-call team (a team id) this alert pages, taking precedence over\nownership discovery. Omitted or `null` means \"work the owner out from the\nidentity dimensions\", which is the normal case.\n\nValidated at save against the on-call teams of the same org: a team id\nthat names nothing routes nowhere, and a page that routes nowhere is\nsilence rather than an error.\n\nSave is a full replace, like `tags` — sending the alert back without this\nfield clears the binding.","example":"2f9K3mXQpLrTgYw8vN1cBzHd0Ae"},"org_id":{"type":"string","description":"Organization ID. Usually set automatically from the request context."},"owner":{"type":["string","null"],"description":"Username of the alert owner."},"pending_period_sec":{"type":"integer","format":"int64","example":10},"priority":{"type":["integer","null"],"format":"int32","description":"Priority 1..=5 (P1 = most urgent), Feature 2 / PT-1.\n\nMutable configuration; display + propagation only — it does not affect\nwhen the alert fires. Omitted = unset.\n\n`value_type` is required because the enum serializes as an integer via\nserde `try_from`/`into`; without it the OpenAPI schema would advertise a\nstring enum and lie about the payload.","example":3,"minimum":0},"query_condition":{"$ref":"#/components/schemas/QueryCondition","description":"Query configuration: SQL query or PromQL expression to evaluate."},"recovery_destinations":{"type":"array","items":{"type":"string"},"description":"Where the recovery message goes. Empty = the firing's own destinations. Ticket closes are\nunaffected: a resolve must reach whatever the firing opened."},"row_template":{"type":"string","description":"Template for formatting individual rows in the alert message."},"row_template_type":{"$ref":"#/components/schemas/RowTemplateType","description":"Format type for the row template."},"runbook_url":{"type":["string","null"],"description":"Where the fix for this alert is written down.\n\nCopied onto every on-call response record the alert opens, so whoever is\nwoken is handed the link in the page instead of going to find it while\nthe thing is on fire.\n\nValidated at save: `http://` or `https://` with a host, or the save is\nrefused. A malformed link stored today is a dead click at 3am, and the\nmoment it is read is the worst possible moment to discover it.\n\nFull replace, like `oncall_team`.","example":"https://wiki.example.com/runbooks/checkout"},"scheduler_job_present":{"type":["boolean","null"],"description":"Whether a scheduler job exists for this alert (runtime status, not a\nstored field). Populated on the composite detail path; omitted otherwise.","readOnly":true},"stream_name":{"type":"string","description":"Name of the stream to monitor.","example":"default"},"stream_type":{"$ref":"#/components/schemas/StreamType","description":"Type of stream to monitor: logs, metrics, or traces."},"suppress_repeats":{"type":"boolean","description":"Notify once per state change instead of on every firing evaluation. Enterprise only."},"tags":{"type":"array","items":{"type":"string"},"description":"Selection tags (PT-6): `prod`, `service:checkout`. Normalized and\nvalidated on save; omitted when empty.","example":["prod","service:checkout"]},"template":{"type":["string","null"],"description":"Optional template name. When specified, this template is used for all\ndestinations instead of destination-level templates. This allows using\ndifferent templates for different alerts while reusing the same destinations."},"trigger_condition":{"$ref":"#/components/schemas/TriggerCondition","description":"Trigger configuration: when and how often to evaluate, thresholds."},"tz_offset":{"type":"integer","format":"int32","description":"Timezone offset in minutes. Negative values for western hemisphere."},"updated_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of last modification.","readOnly":true},"workflows":{"type":"array","items":{"type":"string"},"description":"workflows to trigger when alert triggers","example":["abcde12345"]}}}],"description":"The alert configuration. All fields from Alert are flattened into this request body."},{"type":"object","properties":{"alert_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AlertTypeFilter","description":"Discriminates the alert type. Defaults to scheduled alert when absent.\nSet to `\"anomaly_detection\"` to create an anomaly detection config instead."}]},"anomaly_config":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AnomalyAlertFields","description":"Anomaly-detection-specific fields (nested object)."}]},"composite_condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CompositeCondition","description":"Composite-only boolean condition over stable child alert IDs."}]},"folder_id":{"type":["string","null"],"description":"Deprecated. The destination folder is taken from the `folder` query\nparameter, which is what the permission check authorizes; the default\nfolder is used when it is absent. A value here that disagrees with the\nquery parameter is rejected with 400 rather than silently ignored.","deprecated":true,"example":"default"}}}],"description":"HTTP request body for `CreateAlert` endpoint.\n\nCreates a new alert with the specified configuration. The alert monitors\na stream (logs, metrics, or traces) and triggers notifications when conditions are met.\n\n## Example\n\n```json\n{\n    \"name\": \"High Error Rate Alert\",\n    \"stream_type\": \"logs\",\n    \"stream_name\": \"default\",\n    \"is_real_time\": false,\n    \"query_condition\": {\n        \"type\": \"sql\",\n        \"sql\": \"SELECT count(*) as count FROM \\\"default\\\" WHERE level = 'error'\"\n    },\n    \"trigger_condition\": {\n        \"period\": 15,\n        \"operator\": \">=\",\n        \"threshold\": 100,\n        \"frequency\": 5,\n        \"frequency_type\": \"minutes\",\n        \"silence\": 60\n    },\n    \"destinations\": [\"slack-alerts\"],\n    \"enabled\": true,\n    \"description\": \"Alert when error count exceeds 100 in 15 minutes\"\n}\n```"},"CreateAnomalyConfigRequest":{"type":"object","required":["name","stream_name","stream_type","query_mode","detection_function","histogram_interval","schedule_interval","detection_window_seconds"],"properties":{"alert_budget_per_day":{"type":["number","null"],"format":"double","description":"Delivered-alert budget per day; mutually exclusive with `percentile` in one request."},"alert_destinations":{"type":"array","items":{"type":"string"}},"alert_direction":{"type":["string","null"],"description":"`both`, `above` or `below`; absent means both."},"alert_enabled":{"type":["boolean","null"]},"alert_window_buckets":{"type":["integer","null"],"format":"int32","description":"Window-share length in buckets, at least 1 and at most 24h of buckets; absent means 1."},"alert_window_fire_pct":{"type":["number","null"],"format":"double","description":"Percent of the window out of band that fires; absent means 100."},"alert_window_recover_pct":{"type":["number","null"],"format":"double","description":"Percent of the window out of band below which it recovers; absent means the fire percent."},"band_width":{"type":["number","null"],"format":"double","description":"Manual band half-width k in sigmas, 1 to 10; absent uses the trained k (3 to 6)."},"custom_sql":{"type":["string","null"]},"description":{"type":["string","null"]},"detection_function":{"type":"string"},"detection_function_field":{"type":["string","null"]},"detection_window_seconds":{"type":"integer","format":"int64","description":"At most 100,000 histogram buckets; a stored row over the limit runs clamped to it."},"enabled":{"type":["boolean","null"]},"filters":{},"folder_id":{"type":["string","null"]},"histogram_interval":{"type":"string"},"level_half_width_seconds":{"type":["integer","null"],"format":"int64","description":"Accepted and stored, but ignored by the band model.","deprecated":true},"name":{"type":"string"},"owner":{"type":["string","null"]},"percentile":{"type":["number","null"],"format":"double","description":"Legacy, read back as `threshold` for read-modify-write; k trains at p99, within 3 to 6."},"priority":{"type":["integer","null"],"format":"int32","description":"Triage priority P1..P5 (Feature 2, PT-1). Anomaly configs appear in the\nsame alert list as scheduled/realtime alerts, so they carry the same\nmetadata. Absent = unset.","example":3,"minimum":0},"query_mode":{"type":"string"},"rcf_num_trees":{"type":["integer","null"],"format":"int32","deprecated":true},"rcf_shingle_size":{"type":["integer","null"],"format":"int32","deprecated":true},"rcf_tree_size":{"type":["integer","null"],"format":"int32","deprecated":true},"retrain_interval_days":{"type":["integer","null"],"format":"int32"},"schedule_interval":{"type":"string","description":"At least 1 minute; a stored row below it runs every minute."},"stream_name":{"type":"string","description":"The stream the detector reads. Required in filters mode. In custom_sql mode it can be\nleft blank when the SQL reads exactly one stream, which then names it."},"stream_type":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"description":"Selection tags (PT-6), normalized and validated on save exactly as for\nalerts — one `normalize_tags` serves both."},"template":{"type":["string","null"],"description":"Template override for this config's messages; absent, null or \"\" uses the destination's."},"training_window_days":{"type":["integer","null"],"format":"int32","description":"At most 3,000,000 histogram buckets; a stored row over the limit trains clamped to it."}}},"CreateConfigRequest":{"type":"object","required":["id"],"properties":{"description":{"type":"string"},"id":{"type":"string"},"yaml":{"type":"string"}}},"CreateDomainRequest":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"}}},"CreateDomainResponse":{"type":"object","description":"The DNS TXT record the admin needs to create — `txt_name`/`txt_value`\nspelled out because the raw `domain` + `verification_token` pairing isn't\nself-explanatory to a non-engineer reading it off an API response.","required":["id","domain","txt_name","txt_value"],"properties":{"domain":{"type":"string"},"id":{"type":"string"},"txt_name":{"type":"string"},"txt_value":{"type":"string"}}},"CreateDowntimeResponse":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"CreateFleetRequest":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}},"additionalProperties":false},"CreateFolderRequestBody":{"type":"object","description":"HTTP request body for `CreateFolder` endpoint.","required":["name","description"],"properties":{"description":{"type":"string"},"icon":{"type":["string","null"]},"name":{"type":"string"}}},"CreateFolderResponseBody":{"$ref":"#/components/schemas/Folder","description":"HTTP response body for `CreateFolder` endpoint."},"CreateFunnel":{"type":"object","required":["name","def","sql"],"properties":{"def":{"$ref":"#/components/schemas/FunnelDef"},"description":{"type":["string","null"]},"name":{"type":"string"},"rules_hash":{"type":["string","null"],"description":"The `rulesHash` of the settings `sql` was compiled with."},"sql":{"type":"string"}},"additionalProperties":false},"CreateIntegrationPayload":{"type":"object","required":["name"],"properties":{"config":{"type":["object","null"]},"destinations":{"type":"array","items":{"type":"string"},"description":"Where notifications go when this source's alerts create or join an\nincident. Omitted or empty means \"use the org default\" — see\n`IncidentIntegrationRecord::destinations`."},"name":{"type":"string"},"source_type":{"type":["string","null"]}}},"CreateLocationAnswer":{"anyOf":[{"$ref":"#/components/schemas/CreateLocationResponse"},{"type":"object","required":["results"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/CreateLocationResult"}}}}]},"CreateLocationRequest":{"type":"object","required":["region","label"],"properties":{"enabled":{"type":"boolean"},"id":{"type":["string","null"],"description":"Public rows may pin their id (e.g. \"aws-us-east-1\" — synthetics\nreference locations by this string). Ignored for private rows (KSUID)."},"kind":{"type":"string","description":"\"public\" (root only, visible to all orgs) | \"private\" (default)."},"label":{"type":"string"},"pool":{"type":["string","null"],"description":"Queue routing key; defaults to `net-<id>` (public) or\n`private-<org>-<region>` (private)."},"provider":{"type":"string"},"region":{"type":"string"}}},"CreateLocationResponse":{"type":"object","description":"Private rows carry the org's `o2syn_` token, withheld without PUT on the default folder.","required":["location"],"properties":{"install":{"type":["string","null"]},"location":{"$ref":"#/components/schemas/SyntheticsLocationRecord"},"token":{"type":["string","null"]}}},"CreateLocationResult":{"type":"object","required":["ok"],"properties":{"error":{"type":["string","null"]},"id":{"type":["string","null"]},"label":{"type":["string","null"]},"ok":{"type":"boolean"},"pool":{"type":["string","null"]}}},"CreateNamedEvent":{"type":"object","required":["name","rules"],"properties":{"name":{"type":"string"},"rules":{"type":"array","items":{"$ref":"#/components/schemas/Rule"}}},"additionalProperties":false},"CreateNoticeRequest":{"type":"object","required":["kind","impact","title","body"],"properties":{"body":{"type":"string"},"component_ids":{"type":"array","items":{"type":"string"},"description":"Component ids this notice affects (drives status + uptime)."},"impact":{"type":"integer","format":"int32","description":"0 none, 1 degraded, 2 partial_outage, 3 major_outage."},"kind":{"type":"integer","format":"int32","description":"0 incident, 1 maintenance, 2 info."},"starts_at":{"type":["integer","null"],"format":"int64","description":"Maintenance scheduling (micros); None = active now."},"title":{"type":"string"}}},"CreateOverrideRequest":{"type":"object","description":"\"Cover for me\" — `architecture/02` §5, as one request.","required":["user_email","start_at","end_at"],"properties":{"covering_for":{"type":["string","null"],"description":"Optional: \"cover tonight\" is real even before whose shift tonight is has been worked out."},"end_at":{"type":"integer","format":"int64","description":"Micros, exclusive — a cover ending exactly when the next begins does not overlap it."},"reason":{"type":["string","null"]},"rotation_id":{"type":["string","null"],"description":"Omitted means the primary; an unknown rotation is refused, or a cover staffs nothing."},"start_at":{"type":"integer","format":"int64","description":"Micros, inclusive."},"user_email":{"type":"string","description":"Must be a user of this org: an override outranks every layer, so a bad address is no pager."}}},"CreateOwnershipRuleRequest":{"type":"object","description":"Points one identity-dimension path at the team that gets woken for it.","required":["team_id","dimensions"],"properties":{"dimensions":{"type":"object","description":"`{alias_id: value}`, the same vocabulary the service-identity config produces.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"team_id":{"type":"string"}}},"CreatePageRequest":{"type":"object","required":["name"],"properties":{"description":{"type":["string","null"]},"name":{"type":"string"}}},"CreateRemoteTaskAuthBody":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["none"]}}},{"type":"object","required":["secret","type"],"properties":{"secret":{"$ref":"#/components/schemas/RemoteTaskSecretMaterialBody"},"type":{"type":"string","enum":["bearer"]}}},{"type":"object","required":["secret","type"],"properties":{"secret":{"$ref":"#/components/schemas/RemoteTaskSecretMaterialBody"},"type":{"type":"string","enum":["basic"]}}},{"type":"object","required":["header_name","secret","type"],"properties":{"header_name":{"type":"string"},"secret":{"$ref":"#/components/schemas/RemoteTaskSecretMaterialBody"},"type":{"type":"string","enum":["api_key_header"]}}}],"description":"Authentication submitted while registering a new Remote Task.\n\nThe material is write-only. The backend creates and attaches the stable\nreference; clients never manufacture or order Secret resources."},"CreateRemoteTaskHeaderBody":{"type":"object","required":["key"],"properties":{"key":{"type":"string"},"secret":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RemoteTaskSecretMaterialBody"}]},"value":{"type":["string","null"]}}},"CreateRemoteTaskSigningBody":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean"},"keyId":{"type":["string","null"]},"secret":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RemoteTaskSecretMaterialBody","description":"Omit to have OpenObserve generate signing material and return it once."}]}}},"CreateTeamRequest":{"type":"object","description":"The timezone is the one every restriction window on the team is later read in.","required":["name"],"properties":{"description":{"type":["string","null"]},"name":{"type":"string"},"timezone":{"type":"string"}}},"CreateTokenRequest":{"type":"object","description":"Unknown fields are refused, so a client never believes an option took effect.","required":["name"],"properties":{"expires_in_days":{"type":["integer","null"],"format":"int32","minimum":0},"fleet":{"type":"string","description":"The fleet a collector enrolling with this token joins."},"max_uses":{"type":["integer","null"],"format":"int64"},"name":{"type":"string"}},"additionalProperties":false},"CreateUnavailabilityRequest":{"type":"object","description":"\"I am away 20 Aug – 3 Sep.\"","required":["start_at","end_at"],"properties":{"end_at":{"type":"integer","format":"int64","description":"Micros, exclusive — somebody back on the 3rd is on call on the 3rd."},"reason":{"type":["string","null"]},"start_at":{"type":"integer","format":"int64","description":"Micros, inclusive."},"user_email":{"type":["string","null"],"description":"Omitted means the caller's own, which is the case that must not need an administrator."}}},"CreateViewRequest":{"type":"object","required":["data","view_name"],"properties":{"data":{"description":"Base64 encoded string, containing all the data for a given view.\nThis data is expected to be versioned so that the frontend can\ndeserialize as required."},"view_name":{"type":"string","description":"User-readable name of the view, must be unique within the organization."},"view_type":{"type":["string","null"],"description":"View kind, `logs`, `traces` or `metrics_explorer`; absent means `logs`."}}},"CreateViewResponse":{"type":"object","required":["org_id","view_id","view_name"],"properties":{"org_id":{"type":"string"},"view_id":{"type":"string"},"view_name":{"type":"string"}}},"CreatedToken":{"allOf":[{"$ref":"#/components/schemas/EnrollmentToken"}],"description":"The created token, whose `token` field always carries the value."},"CrossLink":{"type":"object","description":"A cross-link entry for drill-down/navigation from log/trace records","required":["name","url"],"properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/CrossLinkField"},"description":"Show link only when at least one field matches the record.\nIf empty, the link is always shown."},"name":{"type":"string","description":"Display name for the link"},"url":{"type":"string","description":"URL template with {field_name} placeholders"}}},"CrossLinkField":{"type":"object","required":["name"],"properties":{"alias":{"type":["string","null"],"description":"Populated by result_schema: the alias used in the query for this field."},"name":{"type":"string"}}},"CrossLinksResponse":{"type":"object","required":["stream_links","org_links"],"properties":{"org_links":{"type":"array","items":{"$ref":"#/components/schemas/CrossLink"}},"stream_links":{"type":"array","items":{"$ref":"#/components/schemas/CrossLink"}}}},"Current":{"oneOf":[{"$ref":"#/components/schemas/NamedEvent"},{"$ref":"#/components/schemas/SavedFunnel"},{"$ref":"#/components/schemas/AppSettings"}],"description":"The stored row a `version_conflict` returns."},"CurrentComponent":{"type":"object","required":["key","name","status"],"properties":{"key":{"type":"string","description":"Per-page opaque key (\"c0\", \"c1\", …) that joins current↔history on the\nclient. Deliberately NOT the internal component id — that id is a\nsequential internal handle and must not reach the public plane."},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/ComponentStatus"}}},"CustomFieldsOption":{"type":"object","properties":{"label":{"type":"string","default":""},"selected":{"type":["boolean","null"],"default":null},"value":{"type":"string","default":""}}},"Dashboard":{"type":"object","required":["title","description"],"properties":{"annotationSources":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AnnotationSource"},"default":null},"created":{"type":"string","format":"date-time","default":"1970-01-01T00:00:00Z"},"dashboardId":{"type":"string","default":""},"defaultDatetimeDuration":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DateTimeOptions"}],"default":null},"defaultRefreshInterval":{"type":["integer","null"],"format":"int64","description":"Auto-refresh interval in seconds applied when the dashboard opens; `0` or absent is Off.","default":null,"minimum":0},"description":{"type":"string","default":""},"owner":{"type":"string","default":""},"role":{"type":"string","default":""},"tabs":{"type":"array","items":{"$ref":"#/components/schemas/Tab"},"default":[]},"title":{"type":"string","default":""},"variables":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Variables"}],"default":null},"version":{"type":"integer","format":"int32","default":0}}},"DashboardRequestBody":{"oneOf":[{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"},{"$ref":"#/components/schemas/Dashboard"}],"description":"HTTP request body for the `CreateDashboard`/`UpdateDashboard` endpoints."},"DashboardResponseBody":{"$ref":"#/components/schemas/Dashboard","description":"HTTP response body for `CreateDashboard`/`UpdateDashboard` endpoints."},"DashboardUsage":{"type":"object","description":"A dashboard with a panel query or variable that reads the metric.","required":["id","title","folder_id"],"properties":{"folder_id":{"type":"string"},"id":{"type":"string"},"match":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MatchKind","description":"`text` when only an unparseable query names the metric; absent for a parsed match."}]},"title":{"type":"string"}}},"DataHealthResponse":{"type":"object","required":["checked_at","checks"],"properties":{"checked_at":{"type":"integer","format":"int64","description":"When the checks ran, microseconds."},"checks":{"type":"array","items":{"$ref":"#/components/schemas/HealthCheck"}}}},"DataRetentionDefaults":{"type":"object","description":"Default retention days of a scope; 0 inherits the next level.","properties":{"default":{"type":"integer","format":"int64","default":0},"logs":{"type":"integer","format":"int64","default":0},"metrics":{"type":"integer","format":"int64","default":0},"profiles":{"type":"integer","format":"int64","default":0},"traces":{"type":"integer","format":"int64","default":0}}},"DatasetItemResponseBody":{"type":"object","required":["rowId","logicalId","orgId","datasetId","input","globalVersion","writeVersion","isDeleted","source","tags","updatedBy","updatedAt"],"properties":{"adjudicatedAt":{"type":["integer","null"],"format":"int64"},"adjudicatedBy":{"type":["string","null"]},"datasetId":{"type":"string"},"expectedOutput":{},"globalVersion":{"type":"integer","format":"int64"},"importFilename":{"type":["string","null"]},"input":{},"isDeleted":{"type":"boolean"},"logicalId":{"type":"string"},"metadata":{},"orgId":{"type":"string"},"queueId":{"type":["string","null"]},"reviewSubmissionId":{"type":["string","null"]},"rowId":{"type":"string"},"source":{"$ref":"#/components/schemas/DatasetItemSourceResponseBody"},"sourceRef":{"type":["string","null"]},"sourceSpanId":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"writeVersion":{"type":"integer","format":"int64","description":"The Dataset version of the write request that stored this row."}}},"DatasetItemSourceBody":{"type":"string","enum":["trace","annotation","manual","playground"]},"DatasetItemSourceResponseBody":{"type":"string","enum":["trace","annotation","manual","playground"]},"DatasetResponseBody":{"type":"object","required":["id","orgId","name","tags","globalVersion","writeVersion","itemCount","sources","createdBy","createdAt","updatedBy","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"globalVersion":{"type":"integer","format":"int64","description":"Per-row MVCC counter: the value an Experiment pins and a Snapshot reads."},"id":{"type":"string"},"itemCount":{"type":"integer","format":"int64","description":"Live (non-deleted) Items, counted once per logical Item rather than once\nper stored revision."},"name":{"type":"string"},"orgId":{"type":"string"},"sources":{"$ref":"#/components/schemas/DatasetSourceCountsResponseBody"},"tags":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"writeVersion":{"type":"integer","format":"int64","description":"The Dataset version to display: one per write request."}}},"DatasetSnapshotFilterBody":{"type":"object","properties":{"logicalIds":{"type":"array","items":{"type":"string"}},"metadata":{"type":"object","additionalProperties":{},"propertyNames":{"type":"string"}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/DatasetItemSourceBody"}},"tags":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"DatasetSourceCountsResponseBody":{"type":"object","description":"Live-Item counts by origin. Buckets can sum to less than `itemCount` if an\nItem carries a source this response shape does not name yet.","required":["trace","annotation","manual"],"properties":{"annotation":{"type":"integer","format":"int64"},"manual":{"type":"integer","format":"int64"},"trace":{"type":"integer","format":"int64"}}},"DateTimeOptions":{"type":"object","properties":{"endTime":{"type":["integer","null"],"format":"int64","default":null},"relativeTimePeriod":{"type":["string","null"],"default":null},"startTime":{"type":["integer","null"],"format":"int64","default":null},"type":{"type":"string","default":""}}},"DayBucket":{"type":"object","required":["date","downtime_min","maint_min","grade"],"properties":{"date":{"type":"string"},"downtime_min":{"type":"integer","format":"int64"},"grade":{"$ref":"#/components/schemas/Grade"},"maint_min":{"type":"integer","format":"int64"}}},"DecisionRow":{"type":"object","description":"One row of [`AUTO_INVESTIGATE_DECISIONS_STREAM`]: the verdict and every input the gate used.","required":["_timestamp","org_id","alert_id","group_key","firing_started_at","run","reason","protected","mark_lookup","onsets_7d","evaluations_7d","fire_share_7d","settings_version","flapping_onsets_7d","flapping_cooldown_secs","base_cooldown_secs","destination","node","entity_type","decision_kind"],"properties":{"_timestamp":{"type":"integer","format":"int64","description":"Decision time, microseconds."},"alert_id":{"type":"string"},"base_cooldown_secs":{"type":"integer","format":"int64"},"budget_check":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/BudgetCheck","description":"Only when `reason` is `budget`: which check refused."}]},"cooldown_applied_secs":{"type":["integer","null"],"format":"int64"},"decision_kind":{"type":"string"},"destination":{"type":"string"},"entity_type":{"type":"string"},"evaluations_7d":{"type":"integer","format":"int32","minimum":0},"fire_share_7d":{"type":"number","format":"double"},"firing_started_at":{"type":"integer","format":"int64","description":"Microseconds."},"flapping_cooldown_secs":{"type":"integer","format":"int64"},"flapping_onsets_7d":{"type":"integer","format":"int32","minimum":0},"group_key":{"type":"string"},"last_run_at":{"type":["integer","null"],"format":"int64","description":"Previous auto-investigation of this alert + group, microseconds."},"level":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AlertLevel"}]},"mark_lookup":{"$ref":"#/components/schemas/MarkLookup"},"node":{"type":"string"},"onsets_7d":{"type":"integer","format":"int32","minimum":0},"org_id":{"type":"string"},"protected":{"type":"boolean"},"rca_run_id":{"type":["string","null"]},"reason":{"$ref":"#/components/schemas/ReasonCode"},"run":{"type":"boolean"},"settings_version":{"type":"integer","format":"int64","description":"`updated_at` of the settings row used; 0 = code defaults."}}},"DecisionsResponse":{"type":"object","description":"Body of the decisions route, newest first.","required":["decisions"],"properties":{"decisions":{"type":"array","items":{"$ref":"#/components/schemas/DecisionRow"}}}},"DeleteResponse":{"type":"object","required":["message"],"properties":{"message":{"type":"string"}}},"DeleteViewResponse":{"type":"object","required":["org_id","view_id"],"properties":{"org_id":{"type":"string"},"view_id":{"type":"string"}}},"DeletionStatus":{"type":"string","enum":["not_required","pending","in_progress","completed"]},"DeliveryEvidence":{"type":"object","description":"The facts the delivery state is derived from.","properties":{"last_heartbeat_at":{"type":["integer","null"],"format":"int64","description":"Epoch milliseconds."},"marker":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FleetVersion","description":"The version marker read from the effective configuration."}]},"remote_at":{"type":["integer","null"],"format":"int64","description":"Epoch milliseconds."},"remote_hash":{"type":["string","null"],"description":"Hex of the last `RemoteConfigStatus` hash."},"remote_status":{"type":["string","null"],"description":"The last `RemoteConfigStatus` status, e.g. `APPLIED` or `FAILED`."}}},"DeliveryState":{"type":"string","description":"Derived when read from the assignment and the collector's reports.","enum":["assigned","sent","accepted","running","rejected"]},"DerivedStream":{"type":"object","properties":{"delay":{"type":["integer","null"],"format":"int32","default":null},"org_id":{"type":"string","default":""},"query_condition":{"oneOf":[{"$ref":"#/components/schemas/QueryCondition"}],"default":{"type":"custom","conditions":null,"sql":null,"promql":null,"promql_condition":null,"aggregation":null,"vrl_function":null,"search_event_type":null,"multi_time_range":null}},"start_at":{"type":["integer","null"],"format":"int64","description":"The datetime from when the pipeline should check for ingested data","default":null},"stream_type":{"oneOf":[{"$ref":"#/components/schemas/StreamType"}],"default":"logs"},"trigger_condition":{"oneOf":[{"$ref":"#/components/schemas/TriggerCondition"}],"default":{"period":0,"operator":"=","threshold":0,"frequency":0,"cron":"","frequency_type":"minutes","silence":0,"tolerance_in_secs":null,"align_time":false}},"tz_offset":{"type":"integer","format":"int32","description":"Timezone offset in minutes.\nThe negative secs means the Western Hemisphere","default":0}}},"Destination":{"allOf":[{"$ref":"#/components/schemas/SlackAppFields","description":"The `slack_app` fields, flat on the body; absent for every other type."},{"type":"object","properties":{"aws_region":{"type":["string","null"],"description":"AWS region for SNS destinations. Required when `type` is `sns`."},"destination_type_name":{"type":["string","null"],"description":"Specific destination type identifier (e.g., \"openobserve\", \"splunk\", \"elasticsearch\")."},"emails":{"type":"array","items":{"type":"string"},"description":"Email recipients for Email destinations. Required when `type` is `email`."},"headers":{"type":["object","null"],"description":"Optional HTTP headers for webhook requests; values read back blank without PUT.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"metadata":{"type":"object","description":"Optional key-value metadata; without PUT, values outside the known plain keys read blank.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"method":{"$ref":"#/components/schemas/HTTPType","description":"HTTP method for HTTP destinations. Typically \"post\" for webhooks."},"name":{"type":"string","description":"Unique name for this destination. Must be unique within the organization.","example":"my_alert_webhook"},"output_format":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HTTPOutputFormat","description":"Output format for HTTP destinations (json or text). Default is json."}]},"skip_tls_verify":{"type":"boolean","description":"Whether to skip TLS certificate verification for HTTP destinations."},"sns_topic_arn":{"type":["string","null"],"description":"SNS topic ARN for SNS destinations. Required when `type` is `sns`."},"template":{"type":["string","null"],"description":"REQUIRED for alert destinations. Name of the template to use for formatting alert messages.\nUse \"Default\" for the built-in default template. Without a template, the destination\nbecomes a pipeline destination and cannot be used with alerts.","example":"Default"},"type":{"$ref":"#/components/schemas/DestinationType","description":"Destination type: `http` (webhook), `email`, or `sns`. Default is `http`."},"url":{"type":"string","description":"Webhook URL, required for `http`; without PUT, its origin, or empty for a keyed host.","example":"https://example.com/webhook"},"uses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DestinationUseResponse"},"description":"Every consumer referencing this destination; present only when `include_usage=true`."}}}],"description":"Alert destination configuration for sending notifications when alerts trigger.\n\nIMPORTANT: The `template` field is REQUIRED to create an alert destination.\nWithout a template, the destination becomes a pipeline destination and cannot be used with\nalerts.\n\n# Example - Creating an HTTP alert destination\n```json\n{\n  \"name\": \"my_alert_webhook\",\n  \"url\": \"https://example.com/webhook\",\n  \"method\": \"post\",\n  \"type\": \"http\",\n  \"template\": \"Default\",\n  \"skip_tls_verify\": false\n}\n```\n\n# Example - Creating an Email alert destination\n```json\n{\n  \"name\": \"my_email_dest\",\n  \"type\": \"email\",\n  \"emails\": [\"alerts@example.com\", \"team@example.com\"],\n  \"template\": \"Default\"\n}\n```"},"DestinationConsumerKind":{"type":"string","description":"Wire form of `DestinationConsumer`; no wildcard arm, so a new consumer must compile here too.","enum":["alert","composite_alert","pipeline","synthetic_check","oncall_policy","oncall_team_channel","workflow","anomaly_detection","incident_integration","downtime"]},"DestinationType":{"type":"string","enum":["http","email","sns","slack_app"]},"DestinationUseResponse":{"type":"object","description":"One consumer's reference to a destination — `Destination.uses`, when `include_usage=true`.","required":["consumer","id","name"],"properties":{"consumer":{"$ref":"#/components/schemas/DestinationConsumerKind"},"folder_id":{"type":["string","null"]},"id":{"type":"string"},"name":{"type":"string"}}},"DetectionHistoryItem":{"type":"object","required":["timestamp","anomalies_detected","points_scored"],"properties":{"anomalies_detected":{"type":"integer","minimum":0},"points_scored":{"type":"integer","minimum":0},"timestamp":{"type":"integer","format":"int64"}}},"DimensionAnalytics":{"type":"object","description":"Dimension analytics tracking","required":["dimension_name","cardinality","cardinality_class","service_count","first_seen","last_updated"],"properties":{"cardinality":{"type":"integer","description":"Current cardinality (number of unique values seen)","minimum":0},"cardinality_class":{"$ref":"#/components/schemas/CardinalityClass","description":"Cardinality class"},"dimension_name":{"type":"string","description":"Dimension name (e.g., \"k8s-cluster\", \"environment\", \"service\")"},"first_seen":{"type":"integer","format":"int64","description":"When this dimension was first seen"},"last_updated":{"type":"integer","format":"int64","description":"When this dimension was last updated"},"sample_values":{"type":"object","description":"Sample values mapped by stream type, then stream name (limited to 10 for inspection)","additionalProperties":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"propertyNames":{"type":"string"}},"propertyNames":{"type":"string"}},"service_count":{"type":"integer","description":"Number of services that have this dimension","minimum":0},"value_children":{"type":"object","description":"For each unique value of this dimension, the co-occurring values of other dimensions.\nExample: { \"common-dev\": { \"k8s-namespace\": [\"introspection\", \"ziox\", \"dev\"] } }","additionalProperties":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"propertyNames":{"type":"string"}},"propertyNames":{"type":"string"}},"value_counts":{"type":"object","description":"Number of services that carry each specific value of this dimension.\nExample: { \"staging\": 42, \"prod-us-east\": 18, \"prod-us-west\": 11 }\nUsed for per-value coverage: value_counts[v] / service_count = fraction of\nenv services in that specific group value.","additionalProperties":{"type":"integer","minimum":0},"propertyNames":{"type":"string"}}}},"DimensionAnalyticsSummary":{"type":"object","description":"Dimension analytics summary for an organization","required":["org_id","total_dimensions","by_cardinality","recommended_priority_dimensions","dimensions","generated_at"],"properties":{"available_groups":{"type":"array","items":{"$ref":"#/components/schemas/FoundGroup"},"description":"All alias groups found in the org's stream schemas"},"by_cardinality":{"type":"object","description":"Dimensions by cardinality class","additionalProperties":{"type":"array","items":{"type":"string"}},"propertyNames":{"type":"string"}},"dimensions":{"type":"array","items":{"$ref":"#/components/schemas/DimensionAnalytics"},"description":"All dimension analytics (dimensions with ingested data)"},"generated_at":{"type":"integer","format":"int64","description":"When this summary was generated"},"org_id":{"type":"string","description":"Organization ID"},"recommended_priority_dimensions":{"type":"array","items":{"type":"string"},"description":"Recommended priority dimensions for correlation\n(sorted by cardinality, lowest first)"},"service_field_sources":{"type":"array","items":{"$ref":"#/components/schemas/ServiceFieldSource"},"description":"Field name sources for the \"service\" semantic group, ranked by hit count.\nShows which actual field names in each stream type contributed a service name."},"total_dimensions":{"type":"integer","description":"Total number of dimensions tracked","minimum":0}}},"DimensionCondition":{"oneOf":[{"type":"object","required":["op","items","type"],"properties":{"items":{"type":"array","items":{"type":"object"}},"op":{"$ref":"#/components/schemas/LogicalOp"},"type":{"type":"string","enum":["group"]}}},{"type":"object","description":"`value` may end in `*`, a prefix, as in ownership rules.","required":["key","operator","value","type"],"properties":{"key":{"type":"string"},"operator":{"$ref":"#/components/schemas/PairOperator"},"type":{"type":"string","enum":["pair"]},"value":{"type":"string"}}}],"description":"A tree of dimension tests (D17); one AND group of `=` pairs is an on-call `OwnershipRule`."},"DisabledReason":{"type":"string","description":"The `slack_disabled_reason` value of the org config response.","enum":["edition","license","flag","master_key","super_cluster"]},"DiscoveryItemResponseBody":{"type":"object","required":["scope","targetId","refTimestamp","sourceStream","quality","issueCount","queues"],"properties":{"context":{"description":"Scope-specific display fields hydrated from the target trace stream."},"issueCount":{"type":"integer","minimum":0},"quality":{"type":"string","description":"Derived quality: `issue` for one unhealthy dimension and `multiple` for\ntwo or more unhealthy dimensions."},"queues":{"type":"array","items":{"$ref":"#/components/schemas/DiscoveryQueueMembershipResponseBody"},"description":"Visible Annotation Queue memberships for this target."},"refTimestamp":{"type":"integer","format":"int64"},"scope":{"type":"string"},"sessionId":{"type":["string","null"]},"sourceStream":{"type":"string"},"targetId":{"type":"string"},"traceId":{"type":["string","null"]}}},"DiscoveryQueueMembershipResponseBody":{"type":"object","required":["queueId","status"],"properties":{"queueId":{"type":"string"},"queueName":{"type":["string","null"]},"status":{"type":"string","description":"Queue workflow status: `pending` or `reviewed`."}}},"DiscoveryScopeTotalsResponseBody":{"type":"object","required":["span","trace","session"],"properties":{"session":{"type":"integer","minimum":0},"span":{"type":"integer","minimum":0},"trace":{"type":"integer","minimum":0}}},"DistinctField":{"type":"object","description":"WARNING: this implements Eq trait based only on the name,\nso the timestamp will not be considered when comparing two entries","required":["name","added_ts"],"properties":{"added_ts":{"type":"integer","format":"int64"},"name":{"type":"string"}}},"DomainAdminView":{"type":"object","required":["id","domain","verification_state","created_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"domain":{"type":"string"},"id":{"type":"string"},"last_checked_at":{"type":["integer","null"],"format":"int64"},"txt_name":{"type":["string","null"],"description":"The ownership TXT record, served only while the domain is unverified —\nit is not a secret (proving ownership means publishing it in public DNS),\nand hiding it would strand a user who lost it before their DNS was right."},"verification_failure_reason":{"type":["integer","null"],"format":"int32","description":"0 record-missing, 1 value-mismatch, 2 dns-resolution-failed."},"verification_state":{"type":"integer","format":"int32","description":"0 pending, 1 verified, 2 failed."},"verification_token":{"type":["string","null"]},"verified_at":{"type":["integer","null"],"format":"int64"}}},"DomainConfig":{"type":"object","description":"Configuration for a specific domain","required":["domain"],"properties":{"allow_all_users":{"type":"boolean","description":"Whether all users from this domain are allowed\nMUTUALLY EXCLUSIVE with allowed_emails - when true, allowed_emails must be empty"},"allowed_emails":{"type":"array","items":{"type":"string"},"description":"List of specific email addresses allowed from this domain\nMUTUALLY EXCLUSIVE with allow_all_users - when not empty, allow_all_users must be false"},"created_at":{"type":"integer","format":"int64","description":"Timestamp when this domain was added"},"domain":{"type":"string","description":"Domain name (e.g., \"example.com\")"},"enabled":{"type":"boolean","description":"Whether this domain configuration is active"},"updated_at":{"type":"integer","format":"int64","description":"Timestamp when this domain was last updated"}}},"DomainConfigRequest":{"type":"object","description":"Request body for a single domain configuration","required":["domain"],"properties":{"allow_all_users":{"type":"boolean","description":"Whether all users from this domain are allowed\nMUTUALLY EXCLUSIVE with allowed_emails - when true, allowed_emails must be empty"},"allowed_emails":{"type":"array","items":{"type":"string"},"description":"List of specific email addresses allowed from this domain\nMUTUALLY EXCLUSIVE with allow_all_users - when not empty, allow_all_users must be false"},"domain":{"type":"string","description":"Domain name (e.g., \"example.com\")"},"enabled":{"type":"boolean","description":"Whether this domain configuration is active"}}},"DomainManagementConfig":{"type":"object","description":"Domain management configuration for SSO login restrictions","required":["domains","enabled","updated_at"],"properties":{"blocked_domains":{"type":"array","items":{"type":"string"},"description":"Whole-domain blocks — every `is_external` email ending in `@domain` is denied."},"blocked_emails":{"type":"array","items":{"type":"string"},"description":"Exact emails (external SSO users OR SSO/token service accounts) blocked from all access.\nEvaluated BEFORE any allow rule — block wins over allow. Stored flat (not nested under a\ndomain) so a block can target an email whose domain is not allow-listed, or block one user\ninside an otherwise `allow_all_users` domain."},"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainConfig"},"description":"List of allowed domains with their specific configurations"},"enabled":{"type":"boolean","description":"Whether domain restrictions are enabled"},"updated_at":{"type":"integer","format":"int64","description":"Timestamp when this configuration was last updated"}}},"DomainManagementResponse":{"type":"object","description":"Response body for domain management configuration","required":["domains","enabled","updated_at"],"properties":{"blocked_domains":{"type":"array","items":{"type":"string"},"description":"Blocked whole domains (external SSO identities only)."},"blocked_emails":{"type":"array","items":{"type":"string"},"description":"Blocked exact emails (external SSO identities only)."},"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainConfig"},"description":"List of domain configurations"},"enabled":{"type":"boolean","description":"Whether domain restrictions are enabled"},"updated_at":{"type":"integer","format":"int64","description":"Timestamp when this configuration was last updated"}}},"DomainOperationResponse":{"type":"object","description":"Response for a single domain operation","required":["message"],"properties":{"domain":{"type":["string","null"],"description":"The domain that was operated on"},"message":{"type":"string","description":"Success message"}}},"DomainOrgMapping":{"type":"object","required":["domain","org_id","base_role"],"properties":{"base_role":{"type":"string"},"create_missing_roles":{"type":"boolean"},"domain":{"type":"string"},"org_id":{"type":"string"},"role_claim_name":{"type":["string","null"]}}},"Downtime":{"type":"object","required":["id","org","name","targets","schedule","created_by","created_at","updated_by","updated_at"],"properties":{"alert_groups":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AlertGroupRef"},"description":"Narrows targets to these groups; older nodes ignore it and mute the whole alert."},"cancelled_at":{"type":["integer","null"],"format":"int64"},"cancelled_by":{"type":["string","null"]},"condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DimensionCondition","description":"One per downtime (D20). Applied to every target whose module has an identity."}]},"created_at":{"type":"integer","format":"int64"},"created_by":{"type":"string"},"end_on_clear":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EndOnClear","description":"Set by \"Until it clears\": the clear of the firing cancels the row (R-117)."}]},"folder_id":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"notifications":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DowntimeNotifications"}]},"org":{"type":"string"},"origin_region":{"type":["string","null"]},"reason":{"type":["string","null"]},"schedule":{"$ref":"#/components/schemas/DowntimeSchedule"},"show_banner":{"type":"boolean","description":"Show a warning banner to everyone in the org while a window is active (D19)."},"source":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MuteSource","description":"Who made an alert-scoped quick mute; unset on rows made through the downtime routes."}]},"targets":{"type":"array","items":{"$ref":"#/components/schemas/DowntimeTarget"}},"updated_at":{"type":"integer","format":"int64"},"updated_by":{"type":"string"},"version":{"type":"integer","format":"int64"}}},"DowntimeDetail":{"allOf":[{"$ref":"#/components/schemas/DowntimeListItem"},{"type":"object","required":["affected","notification_log"],"properties":{"affected":{"$ref":"#/components/schemas/AffectedItems"},"notification_log":{"type":"array","items":{"$ref":"#/components/schemas/DowntimeNotificationLogEntry"}}}}],"description":"`GET /v2/{org}/downtimes/{id}`: the list item and what it covers, as far as the user may see."},"DowntimeListItem":{"allOf":[{"$ref":"#/components/schemas/Downtime"},{"type":"object","required":["status","matched_alerts","matched_anomalies","matched_synthetics","matched_slos"],"properties":{"current_window":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DowntimeWindow"}]},"matched_alerts":{"type":"integer","minimum":0},"matched_anomalies":{"type":"integer","minimum":0},"matched_slos":{"type":"integer","minimum":0},"matched_synthetics":{"type":"integer","minimum":0},"next_window":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DowntimeWindow"}]},"status":{"$ref":"#/components/schemas/DowntimeStatus"}}}]},"DowntimeNotificationLogEntry":{"type":"object","required":["window_start","event","sent_at","destinations"],"properties":{"destinations":{"type":"array","items":{"type":"string"}},"event":{"type":"string"},"result":{"type":["string","null"]},"sent_at":{"type":"integer","format":"int64"},"templates":{"type":"array","items":{"$ref":"#/components/schemas/DowntimeNotificationTemplate"},"description":"The template each destination that sent used; empty for rows sent before it was recorded."},"window_start":{"type":"integer","format":"int64"}}},"DowntimeNotificationTemplate":{"type":"object","description":"One destination's template, as the send log line names it.","required":["destination","template_name","template_source"],"properties":{"destination":{"type":"string"},"template_name":{"type":"string","description":"Empty when the send carried no rendered template (a platform resolve or a legacy body)."},"template_source":{"type":"string","description":"`explicit`, `destination`, `org_default`, `compiled`, `platform_resolve` or `legacy`."}}},"DowntimeNotifications":{"type":"object","properties":{"continues":{"type":["string","null"],"description":"The id of the recurring downtime whose window this extension follow-up continues."},"destinations":{"type":"array","items":{"type":"string"}},"ending_soon_lead_secs":{"type":"integer","format":"int64"},"events":{"$ref":"#/components/schemas/NotificationEvents"}}},"DowntimeRequest":{"type":"object","required":["targets","schedule"],"properties":{"alert_groups":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AlertGroupRef"}},"condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DimensionCondition"}]},"end_on_clear":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EndOnClear"}]},"folder_id":{"type":"string"},"name":{"type":["string","null"]},"notifications":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DowntimeNotifications"}]},"reason":{"type":["string","null"]},"schedule":{"$ref":"#/components/schemas/DowntimeSchedule"},"show_banner":{"type":"boolean"},"targets":{"type":"array","items":{"$ref":"#/components/schemas/DowntimeTarget"}},"version":{"type":["integer","null"],"format":"int64","description":"The version the edit was loaded at; a newer stored row makes the edit a 409."}}},"DowntimeSchedule":{"type":"object","required":["repeat","starts_at","timezone","duration_secs"],"properties":{"duration_secs":{"type":"integer","format":"int64"},"ends_at":{"type":["integer","null"],"format":"int64","description":"Microseconds UTC; a recurring row reads only its local date, an inclusive last day."},"repeat":{"$ref":"#/components/schemas/Repeat"},"start_time_local":{"type":["string","null"],"description":"`HH:MM` in `timezone`, recurring rows only."},"starts_at":{"type":"integer","format":"int64","description":"Microseconds UTC."},"timezone":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","format":"int32","minimum":0},"description":"ISO weekdays, 1 is Monday."}}},"DowntimeStatus":{"type":"string","enum":["scheduled","active","ended","cancelled","ended_early"]},"DowntimeStatusCounts":{"type":"object","required":["active","scheduled","recurring","ended","cancelled","ended_early"],"properties":{"active":{"type":"integer","minimum":0},"cancelled":{"type":"integer","minimum":0},"ended":{"type":"integer","minimum":0},"ended_early":{"type":"integer","minimum":0},"recurring":{"type":"integer","minimum":0},"scheduled":{"type":"integer","minimum":0}}},"DowntimeTarget":{"type":"object","description":"At most one per module (D14); every present field narrows the module's items (D15).","required":["module","folders"],"properties":{"folders":{"$ref":"#/components/schemas/TargetFolders"},"ids":{"type":"array","items":{"type":"string"}},"incident_mode":{"$ref":"#/components/schemas/IncidentMode","description":"Read only when `module == Alerts`; a row saved before the field reads as `Muted`."},"module":{"$ref":"#/components/schemas/TargetModule"},"slo_mode":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SloCorrectionMode","description":"Read only when `module == Slos` (D10)."}]},"tags":{"type":"array","items":{"type":"string"},"description":"Synthetics only."}}},"DowntimeTestRequest":{"type":"object","description":"Which of the downtime's destinations a test send reaches; empty means all of them.","properties":{"destinations":{"type":"array","items":{"type":"string"}}}},"DowntimeTestResult":{"type":"object","description":"One destination's test send; `unsupported` is a destination the shared path skips for downtimes.","required":["destination","ok"],"properties":{"destination":{"type":"string"},"error":{"type":["string","null"]},"ok":{"type":"boolean"},"unsupported":{"type":"boolean"}}},"DowntimeWindow":{"type":"object","required":["start","end"],"properties":{"end":{"type":"integer","format":"int64"},"start":{"type":"integer","format":"int64"}}},"DraftSaved":{"type":"object","required":["at"],"properties":{"at":{"type":"integer","format":"int64"}}},"DrillDown":{"type":"object","properties":{"data":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DrillDownData"}],"default":null},"findBy":{"type":["string","null"],"default":null},"name":{"type":["string","null"],"default":null},"targetBlank":{"type":["boolean","null"],"default":null},"type":{"type":["string","null"],"default":null}}},"DrillDownData":{"type":"object","properties":{"dashboard":{"type":["string","null"],"default":null},"folder":{"type":["string","null"],"default":null},"logsMode":{"type":["string","null"],"default":null},"logsQuery":{"type":["string","null"],"default":null},"passAllVariables":{"type":["boolean","null"],"default":null},"tab":{"type":["string","null"],"default":null},"url":{"type":["string","null"],"default":null},"variables":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DrillDownVariables"},"default":null}}},"DrillDownVariables":{"type":"object","properties":{"name":{"type":["string","null"],"default":null},"value":{"type":["string","null"],"default":null}}},"Edge":{"type":"object","description":"Connection between two nodes in the pipeline","required":["id","source","target"],"properties":{"id":{"type":"string","description":"Edge identifier, format: \"e{source_id}-{target_id}\"","example":"einput-1-func-1"},"source":{"type":"string","description":"Source node id (data flows from this node)"},"source_handle":{"type":["string","null"],"description":"Which output handle of the source node this edge leaves from, for multi-output\nnodes such as Branch. Absent on every pre-existing edge, so it must not serialize."},"target":{"type":"string","description":"Target node id (data flows to this node)"}}},"EdgeTrendDataPoint":{"type":"object","description":"One time-series data point in an edge latency trend","required":["timestamp","p50_latency_ns","p95_latency_ns","p99_latency_ns","total_requests","failed_requests"],"properties":{"failed_requests":{"type":"integer","format":"int64","minimum":0},"p50_latency_ns":{"type":"integer","format":"int64","minimum":0},"p95_latency_ns":{"type":"integer","format":"int64","minimum":0},"p99_latency_ns":{"type":"integer","format":"int64","minimum":0},"timestamp":{"type":"integer","format":"int64"},"total_requests":{"type":"integer","format":"int64","minimum":0}}},"EdgeTrendResponse":{"type":"object","description":"Response for the edge latency history endpoint.","required":["data_points"],"properties":{"data_points":{"type":"array","items":{"$ref":"#/components/schemas/EdgeTrendDataPoint"}}}},"EdgeType":{"type":"string","description":"Type of relationship between alert nodes","enum":["temporal","service_dependency"]},"EnableAlertResponseBody":{"type":"object","description":"HTTP response body for `EnableAlert` endpoint.","required":["enabled"],"properties":{"enabled":{"type":"boolean"}}},"EndOnClear":{"type":"object","description":"\"Until it clears\": `group_key` null ends the downtime when no group of the alert is firing.","required":["alert_id"],"properties":{"alert_id":{"type":"string"},"group_key":{"type":["string","null"]}}},"EnrichmentTableStatus":{"type":"string","enum":["pending","processing","completed","failed"]},"EnrichmentTableUrlJob":{"type":"object","required":["id","org_id","table_name","url","status","created_at","updated_at","total_bytes_fetched","total_records_processed","retry_count","append_data","last_byte_position","supports_range"],"properties":{"append_data":{"type":"boolean"},"created_at":{"type":"integer","format":"int64"},"error_message":{"type":["string","null"]},"id":{"type":"string"},"last_byte_position":{"type":"integer","format":"int64","minimum":0},"org_id":{"type":"string"},"retry_count":{"type":"integer","format":"int32","minimum":0},"status":{"$ref":"#/components/schemas/EnrichmentTableStatus"},"supports_range":{"type":"boolean"},"table_name":{"type":"string"},"total_bytes_fetched":{"type":"integer","format":"int64","minimum":0},"total_records_processed":{"type":"integer","format":"int64"},"updated_at":{"type":"integer","format":"int64"},"url":{"type":"string"}}},"EnrichmentTableUrlRequest":{"type":"object","description":"Request body for creating an enrichment table from a public URL.\n\nThe URL must point to a publicly accessible CSV file. Authentication-required\nURLs (e.g., S3 presigned URLs with complex headers) are not currently supported.\n\nThe `append` behavior is controlled via query parameter, matching the file upload endpoint.","required":["url"],"properties":{"replace_failed":{"type":"boolean","description":"Replace only the failed job's URL (optional, default: false)\n\nWhen true, only updates the failed job with the new URL while keeping\nall successful jobs unchanged. Useful for fixing typos or broken URLs\nwithout re-downloading working data sources."},"url":{"type":"string","description":"Public URL to the CSV file.\n\nRequirements:\n- Must start with http:// or https://\n- Must be publicly accessible (no authentication)\n- Should return CSV content-type (not enforced but recommended)\n- File can be any size - streaming handles large files efficiently"}}},"EnrollmentToken":{"type":"object","required":["id","name","prefix","created_at","uses","fleet","revoked"],"properties":{"created_at":{"type":"integer","format":"int64","description":"Epoch milliseconds."},"expires_at":{"type":["integer","null"],"format":"int64","description":"Epoch milliseconds; null never expires."},"fleet":{"$ref":"#/components/schemas/CollectorFleet"},"id":{"type":"string"},"max_uses":{"type":["integer","null"],"format":"int64"},"name":{"type":"string"},"prefix":{"type":"string","description":"The first 9 characters, shown while the value stays masked."},"revoked":{"type":"boolean"},"token":{"type":["string","null"],"description":"Only for callers who may change the fleet; tokens predating stored values have none."},"uses":{"type":"integer","format":"int64"}}},"EnsureOutcomeBody":{"type":"string","enum":["created","unchanged","version_bumped"]},"EscalateRequest":{"type":"object","description":"\"This needs more people, now.\" Optional context for the timeline.","properties":{"note":{"type":["string","null"]}}},"EscalationPolicy":{"type":"object","description":"A team's escalation policy.","required":["id","org_id","team_id","rungs"],"properties":{"destinations":{"type":"array","items":{"type":"string"},"description":"Alert Destination names this team pages through when a rung includes the\nWebhook channel. Reuses the destinations an org already has rather than\nstoring URLs twice."},"id":{"type":"string"},"l0":{"$ref":"#/components/schemas/L0Policy","description":"§4's L0 block: how the AI SRE agent relates to this team's paging.\nDefaulted on read, because a row written before the column existed has\nto behave like a team that never opened the screen."},"org_id":{"type":"string"},"rungs":{"type":"array","items":{"$ref":"#/components/schemas/PriorityRung"}},"team_id":{"type":"string"},"template":{"type":["string","null"],"description":"Template override for this team's on-call messages; `None` uses each destination's."}}},"EscalationPreview":{"type":"object","required":["team_id","team_name","priority","at","pages_anyone","channels","rungs","l0","ends_with","cross_team_moves","reaches_nobody"],"properties":{"at":{"type":"integer","format":"int64"},"channels":{"type":"array","items":{"$ref":"#/components/schemas/Channel"},"description":"The channels the policy names, restricted to what this build can send."},"cross_team_moves":{"type":"array","items":{"type":"string"},"description":"The only ways a page ever leaves this team, stated so the screen does not\nhave to imply one that does not exist.\n\nThere is no team hierarchy in this product — no parent team, no sibling\nteam, nothing above a team to climb to. A rung's targets are the whole of\nwho a ladder can reach, and the one real cross-team move is a responder\npressing handoff with a `to_team_id`."},"ends_with":{"type":"string","description":"What happens when the ladder runs out — the \"Escalation ends\" line."},"l0":{"$ref":"#/components/schemas/PreviewL0","description":"What the AI SRE does at this priority, before or beside the ladder.\n\nUntil this response carried L0 the ladder screen could not mention the\nagent at all, so a deployment running one showed a P2 ladder starting at\n0m when the page is in fact held for the triage budget first. The policy\nstored `l0` and the engine honoured it; the read the screen is built from\nomitted it."},"pages_anyone":{"type":"boolean","description":"This priority pages a human at all."},"priority":{"type":"string"},"reaches_nobody":{"type":"boolean","description":"Nobody at all would be reached, at any rung. A dry run's headline."},"rungs":{"type":"array","items":{"$ref":"#/components/schemas/PreviewRung"}},"team_id":{"type":"string"},"team_name":{"type":"string"}}},"EscalationProgress":{"type":"object","description":"Where the ladder has got to, and what happens next. The question a responder\nactually has mid-incident is \"when does this wake somebody else\", and it was\nanswerable nowhere in the product.","required":["fired","next_targets","next_recipients","exhausted"],"properties":{"exhausted":{"type":"boolean","description":"The ladder ran out of rungs with nobody acknowledging."},"fired":{"type":"array","items":{"$ref":"#/components/schemas/FiredRung"},"description":"Rungs already sent, oldest first."},"held_until_micros":{"type":["integer","null"],"format":"int64","description":"While the first page is held for AI triage, the deadline the held trigger wakes at."},"next_at":{"type":["integer","null"],"format":"int64","description":"When it fires, absolute micros."},"next_recipients":{"type":"array","items":{"type":"string"},"description":"Who that rung would wake, resolved against the rotations as they stand\nnow. Unlike `FiredRung::reached` this IS a live answer, because the\nquestion is about a page that has not happened yet."},"next_targets":{"type":"array","items":{"type":"string"},"description":"The next rung, if the ladder is still climbing."},"stopped_because":{"type":["string","null"],"description":"Why the ladder is not climbing — acknowledged, snoozed, resolved.\n`None` means it is running."}}},"EscalationTarget":{"oneOf":[{"type":"object","description":"A named rotation, by id rather than by name: a rotation is renameable,\nand a stored policy must not start paging a different position because\nsomebody fixed a typo on a calendar.","required":["rotation_id","kind"],"properties":{"kind":{"type":"string","enum":["rotation"]},"mode":{"$ref":"#/components/schemas/RotationMode"},"rotation_id":{"type":"string"}}},{"type":"object","description":"One named person, by email; a ladder step skips them while away, a handoff does not.","required":["email","kind"],"properties":{"email":{"type":"string"},"kind":{"type":"string","enum":["user"]}}},{"type":"object","description":"Every member of the team — the last resort at the bottom of a ladder.\n\nBlind to rotations, and skips the away only while someone else is left: it\nis where a page falls back when every rotation has failed to produce\nanybody, and a last resort that filters itself down to nobody is not one.","required":["kind"],"properties":{"kind":{"type":"string","enum":["whole_team"]}}}],"description":"One thing a level pages. A level may hold several, and they fire together.\n\nFiring together is the only mechanism for paging more than one person. No\nstacking, no overlap, no derivation — which keeps \"who does this level wake\"\nanswerable by reading it."},"EvalJobHealthBody":{"type":"object","description":"Run state measured from `_evaluator` scorer spans; never changes the job's `status`.","required":["state","since","evaluatedAt","recentRuns","recentErrors","scores24h"],"properties":{"evaluatedAt":{"type":"integer","format":"int64","description":"When the job was last measured, in microseconds."},"lastError":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EvalJobLastErrorBody","description":"Newest failed scorer run in the last 24 hours."}]},"lastSuccessAt":{"type":["integer","null"],"format":"int64","description":"Newest successful scorer run in the last 24 hours, in microseconds."},"recentErrors":{"type":"integer","format":"int64","description":"Failed scorer runs in the last 15 minutes.","minimum":0},"recentRuns":{"type":"integer","format":"int64","description":"Scorer runs in the last 15 minutes.","minimum":0},"scores24h":{"type":"integer","format":"int64","description":"Successful scorer runs in the last 24 hours.","minimum":0},"since":{"type":"integer","format":"int64","description":"When `state` last changed, in microseconds."},"state":{"type":"string","description":"`healthy`, `degraded`, `waiting_for_credentials` or `no_recent_runs`."}}},"EvalJobLastErrorBody":{"type":"object","required":["kind","message","at"],"properties":{"at":{"type":"integer","format":"int64","description":"When the error happened, in microseconds."},"kind":{"type":"string","description":"e.g. `provider_auth`, `rate_limited`, `timeout`, `provider_5xx`, `parse_error`."},"message":{"type":"string"}}},"EvalJobResponseBody":{"type":"object","description":"HTTP response body for a single Online Eval Job.","required":["id","orgId","name","stream","streamType","targetScope","filterCondition","scorers","spanSelectors","spanSelectorBindings","samplingMode","samplingValue","status","version","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"filterCondition":{},"health":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EvalJobHealthBody","description":"Measured health; absent for jobs that are not active or paused, or not yet measured."}]},"id":{"type":"string"},"inputMapping":{"type":["object","null"]},"name":{"type":"string"},"orgId":{"type":"string"},"pipelineId":{"type":["string","null"]},"samplingMode":{"type":"string"},"samplingValue":{},"scorers":{"type":"array","items":{"$ref":"#/components/schemas/ScorerRefForm"}},"sessionConfig":{"type":["object","null"]},"spanSelectorBindings":{"type":"object"},"spanSelectors":{"type":"array","items":{"type":"object"}},"status":{"type":"string"},"stream":{"type":"string"},"streamType":{"type":"string"},"targetScope":{"type":"string"},"traceConfig":{"type":["object","null"]},"updatedAt":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int32"}}},"EvaluationTaskProducer":{"type":"string","description":"What caused an evaluation task.\n\nDefined here rather than beside the task types because `LlmScoreRecord`\nstores it and `config` cannot reference the enterprise crate. Enterprise\nre-exports it from `eval_jobs::tasks`, so the task message and the Score it\nproduces carry one type rather than two that have to be kept in step.","enum":["span_pipeline","eval_scheduler","manual"]},"EvidenceEntry":{"type":"object","description":"One verified tool call that the ledger cites.","required":["number","ids","call_id","kind","target","link","result_summary","duration_ms","decisive","citations"],"properties":{"call_id":{"type":"string"},"citations":{"type":"array","items":{"$ref":"#/components/schemas/Citation"}},"decisive":{"type":"boolean","description":"At least one citation is decisive and the call's signal counts toward the band. A context\ncall (incident details, topology, a code read) explains a mechanism but never decides one."},"duration_ms":{"type":"integer","format":"int64","minimum":0},"ids":{"type":"array","items":{"type":"string"},"description":"The agent's evidence ids that map to this entry."},"kind":{"type":"string"},"link":{"$ref":"#/components/schemas/EvidenceTarget","description":"The web app builds the link from it."},"number":{"type":"integer","format":"int32","description":"1-based, in the order of first citation.","minimum":0},"result_summary":{"type":"string"},"target":{"$ref":"#/components/schemas/SignalClass"}}},"EvidenceTarget":{"type":"object","description":"What the web app needs to open the same query.","required":["signal"],"properties":{"command":{"type":["string","null"],"description":"The command of a shell or `cli_*` call, for \"Copy query\" only; no link is built from it."},"end_us":{"type":["integer","null"],"format":"int64","description":"Microseconds."},"filter":{"type":["string","null"]},"promql":{"type":["string","null"]},"signal":{"$ref":"#/components/schemas/SignalClass"},"sql":{"type":["string","null"]},"start_us":{"type":["integer","null"],"format":"int64","description":"Microseconds."},"streams":{"type":"array","items":{"type":"string"}}}},"ExperimentAggregateSummaryBody":{"type":"object","required":["totalCost","taskCost","costIncomplete","incomplete","incompleteTaskSlots","incompleteScoreDimensions","errorTaskSlots","failureCauses","failureCauseCount"],"properties":{"costIncomplete":{"type":"boolean"},"errorTaskSlots":{"type":"integer","format":"int64","minimum":0},"failureCauseCount":{"type":"integer","format":"int64","description":"Distinct failure causes across every errored slot.","minimum":0},"failureCauses":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentFailureCauseBody"},"description":"Top 3 failure causes, largest first: errored slots grouped by kind, by first line if none."},"incomplete":{"type":"boolean"},"incompleteScoreDimensions":{"type":"integer","format":"int64","minimum":0},"incompleteTaskSlots":{"type":"integer","format":"int64","minimum":0},"p50LatencyMs":{"type":["integer","null"],"format":"int64","minimum":0},"scoringCost":{"type":["number","null"],"format":"double"},"taskCost":{"type":"number","format":"double"},"totalCost":{"type":"number","format":"double"}}},"ExperimentApplicabilityPreviewBody":{"type":"object","required":["fullySkippedRowCount","partiallySkippedRowCount","fullySkippedSlotCount","partiallySkippedSlotCount","totalSlotCount","eligibleTaskSlotCount","eligibleScoringDimensionCount","scorerApplicability"],"properties":{"eligibleScoringDimensionCount":{"type":"integer","format":"int64","minimum":0},"eligibleTaskSlotCount":{"type":"integer","format":"int64","description":"Slots with at least one applicable Score Dimension — a scoring-side\nfigure for the applicability preview, not a Task denominator.","minimum":0},"fullySkippedRowCount":{"type":"integer","format":"int64","minimum":0},"fullySkippedSlotCount":{"type":"integer","format":"int64","minimum":0},"partiallySkippedRowCount":{"type":"integer","format":"int64","minimum":0},"partiallySkippedSlotCount":{"type":"integer","format":"int64","minimum":0},"scorerApplicability":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentScorerApplicabilityBody"}},"totalSlotCount":{"type":"integer","format":"int64","description":"Every pinned Slot, which is what Task progress counts against: a Slot\nruns whether or not a Scorer can judge it.","minimum":0}}},"ExperimentBaselineResponseBody":{"type":"object","description":"The result of a Baseline change, naming both ends of the move.","required":["experiment"],"properties":{"experiment":{"$ref":"#/components/schemas/ExperimentResponseBody"},"previousBaselineId":{"type":["string","null"],"description":"The Experiment that held the Baseline before this call, if any. `None`\nmeans the Dataset had no Baseline; the service never selects a\nreplacement on its own."}}},"ExperimentClientScoreSummaryBody":{"type":"object","description":"One dimension the customer's own code reported.\n\nSeparate from [`ExperimentScoreSummaryBody`] because a client Score has no\nScorer. The Score Config is what the two share, so a reader can compare them\nwithout the platform claiming it produced either.","required":["scoreConfigId","scoreConfigName","clientScorerKey","sampleCount"],"properties":{"clientScorerKey":{"type":"string"},"sampleCount":{"type":"integer","format":"int64","minimum":0},"scoreConfigId":{"type":"string"},"scoreConfigName":{"type":"string"},"value":{}}},"ExperimentComparisonAssignmentBody":{"type":"string","enum":["regressed","improved","unchanged","descriptive","baseline_only","candidate_only","unavailable"]},"ExperimentComparisonBucketBody":{"type":"string","enum":["regressed","improved","unchanged","inconclusive","new","missing"]},"ExperimentComparisonCountsBody":{"type":"object","required":["baselineRows","candidateRows","commonRows","regressed","improved","unchanged","inconclusive","new","missing"],"properties":{"baselineRows":{"type":"integer","format":"int64","minimum":0},"candidateRows":{"type":"integer","format":"int64","minimum":0},"commonRows":{"type":"integer","format":"int64","minimum":0},"improved":{"type":"integer","format":"int64","minimum":0},"inconclusive":{"type":"integer","format":"int64","minimum":0},"missing":{"type":"integer","format":"int64","minimum":0},"new":{"type":"integer","format":"int64","minimum":0},"regressed":{"type":"integer","format":"int64","minimum":0},"unchanged":{"type":"integer","format":"int64","minimum":0}}},"ExperimentComparisonDimensionBody":{"type":"object","required":["id","name","kind","gating","canAffectOutcome","normalized","baselineSampleCount","candidateSampleCount","withinNoise","assignment"],"properties":{"assignment":{"$ref":"#/components/schemas/ExperimentComparisonAssignmentBody"},"baseline":{"type":["number","null"],"format":"double"},"baselineDispersion":{"type":["number","null"],"format":"double","description":"Normalized trial dispersion per side, present only where the side ran\nmore than one trial and the dimension has a normalized key."},"baselineLabel":{"type":["string","null"],"description":"Original category names for categorical dimensions when each side has\none unambiguous label; `null` otherwise."},"baselineSampleCount":{"type":"integer","format":"int64","minimum":0},"canAffectOutcome":{"type":"boolean","description":"Whether this dimension has a comparison policy and can be selected."},"candidate":{"type":["number","null"],"format":"double"},"candidateDispersion":{"type":["number","null"],"format":"double"},"candidateLabel":{"type":["string","null"]},"candidateSampleCount":{"type":"integer","format":"int64","minimum":0},"dataType":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentComparisonScoreDataTypeBody","description":"Score value type. `null` for cost and latency dimensions."}]},"delta":{"type":["number","null"],"format":"double"},"gating":{"type":"boolean","description":"Whether this dimension is selected and can vote on the outcome."},"id":{"type":"string"},"kind":{"$ref":"#/components/schemas/ExperimentComparisonDimensionKindBody"},"name":{"type":"string"},"normalized":{"type":"boolean","description":"Whether `orientedDelta` is a fraction of the configured range rather\nthan raw units, which is how the threshold should be read."},"orientedDelta":{"type":["number","null"],"format":"double","description":"Change in the better direction; positive always means improved."},"scoreConfigId":{"type":["string","null"]},"scoreConfigName":{"type":["string","null"]},"scoreConfigVersion":{"type":["string","null"]},"withinNoise":{"type":"boolean","description":"The delta is smaller than the trial noise on both sides. Render it\nde-emphasized with a `~`; the bucket it belongs to is unaffected."}}},"ExperimentComparisonDimensionKindBody":{"type":"string","enum":["score","cost","latency"]},"ExperimentComparisonResponseBody":{"type":"object","required":["baselineId","candidateId","datasetId","threshold","outcomeDimensions","assignmentRule","partial","baselineScoringStatus","candidateScoringStatus","counts","dimensions","rows"],"properties":{"assignmentRule":{"type":"string"},"baselineId":{"type":"string"},"baselineScoringStatus":{"type":"string"},"candidateId":{"type":"string"},"candidateScoringStatus":{"type":"string"},"counts":{"$ref":"#/components/schemas/ExperimentComparisonCountsBody"},"datasetId":{"type":"string"},"dimensions":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentComparisonSummaryDimensionBody"}},"outcomeDimensions":{"type":"array","items":{"type":"string"}},"partial":{"type":"boolean","description":"One or both sides are still being scored. The comparison is readable,\nbut it is provisional: it cannot serve as a CI result, and its\nExperiments cannot be made a Baseline until scoring is terminal."},"rows":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentComparisonRowBody"}},"threshold":{"type":"number","format":"double"}}},"ExperimentComparisonRowBody":{"type":"object","required":["logicalId","input","bucket","dimensions","trials"],"properties":{"baselineRowId":{"type":["string","null"]},"bucket":{"$ref":"#/components/schemas/ExperimentComparisonBucketBody"},"candidateRowId":{"type":["string","null"]},"dimensions":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentComparisonDimensionBody"}},"input":{},"logicalId":{"type":"string"},"trials":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentComparisonTrialBody"}}}},"ExperimentComparisonScoreDataTypeBody":{"type":"string","enum":["numeric","categorical","boolean"]},"ExperimentComparisonSummaryDimensionBody":{"type":"object","required":["id","name","kind","gating","canAffectOutcome","normalized","baselineSampleCount","candidateSampleCount","comparableRowCount","baselineOnlyRowCount","candidateOnlyRowCount","assignment"],"properties":{"assignment":{"$ref":"#/components/schemas/ExperimentComparisonAssignmentBody"},"baseline":{"type":["number","null"],"format":"double"},"baselineLabel":{"type":["string","null"],"description":"Original category names when every value represented by that side's\naggregate has the same label; `null` otherwise."},"baselineOnlyRowCount":{"type":"integer","format":"int64","minimum":0},"baselineSampleCount":{"type":"integer","format":"int64","minimum":0},"canAffectOutcome":{"type":"boolean"},"candidate":{"type":["number","null"],"format":"double"},"candidateLabel":{"type":["string","null"]},"candidateOnlyRowCount":{"type":"integer","format":"int64","minimum":0},"candidateSampleCount":{"type":"integer","format":"int64","minimum":0},"comparableRowCount":{"type":"integer","format":"int64","minimum":0},"dataType":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentComparisonScoreDataTypeBody","description":"Score value type. `null` for cost and latency dimensions."}]},"delta":{"type":["number","null"],"format":"double"},"gating":{"type":"boolean"},"id":{"type":"string"},"kind":{"$ref":"#/components/schemas/ExperimentComparisonDimensionKindBody"},"name":{"type":"string"},"normalized":{"type":"boolean"},"orientedDelta":{"type":["number","null"],"format":"double","description":"Aggregate change in the better direction over comparable rows."},"scoreConfigId":{"type":["string","null"]},"scoreConfigName":{"type":["string","null"]},"scoreConfigVersion":{"type":["string","null"]}}},"ExperimentComparisonTrialBody":{"type":"object","required":["trialIndex"],"properties":{"baselineOutput":{},"candidateOutput":{},"trialIndex":{"type":"integer","format":"int32","minimum":0}}},"ExperimentCostDimensionBody":{"type":"object","description":"One priced call shape in the estimate: a pinned Scorer, or the Task itself\nwhen the platform is the one calling a model.","required":["callCount","inputTokensPerCall","outputTokensPerCall"],"properties":{"callCount":{"type":"integer","format":"int64","minimum":0},"estimatedCost":{"type":["number","null"],"format":"double","description":"Absent when no price is known for this model."},"inputTokensPerCall":{"type":"integer","format":"int64"},"model":{"type":["string","null"]},"outputTokensPerCall":{"type":"integer","format":"int64"},"scorerId":{"type":["string","null"]},"scorerVersion":{"type":["integer","null"],"format":"int32"}}},"ExperimentCostEstimateBody":{"type":"object","required":["slotCount","currency","dimensions","taskCostEstimated","incomplete","warningThreshold","confirmationRequired"],"properties":{"confirmationRequired":{"type":"boolean","description":"Creation of this plan requires `confirmCostEstimate: true`."},"currency":{"type":"string"},"dimensions":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentCostDimensionBody"}},"estimatedCost":{"type":["number","null"],"format":"double","description":"Sum of the dimensions that could be priced. Absent when none could."},"incomplete":{"type":"boolean","description":"At least one dimension had no known price, so the total is a floor."},"slotCount":{"type":"integer","format":"int64","minimum":0},"taskCostEstimated":{"type":"boolean","description":"Whether the Task side is included. `false` for Remote and SDK Tasks,\nwhich run in the customer's own environment."},"warningThreshold":{"type":"number","format":"double"}}},"ExperimentDimensionDispersionBody":{"type":"object","required":["scorerId","scorerVersion","trialCount","consensus"],"properties":{"consensus":{"description":"Type-aware consensus over the trials: a numeric mean, a majority\nboolean or category, or `mixed` when the largest shares tie."},"normalized":{"type":["number","null"],"format":"double","description":"Internal cross-dimension key in `[0, 1]`. Absent when the dimension\ndeclares no valid range, which also keeps it out of row flagging."},"outlierTrialIndex":{"type":["integer","null"],"format":"int32","minimum":0},"rawStd":{"type":["number","null"],"format":"double","description":"Raw standard deviation in the dimension's own units, numeric only."},"scorerId":{"type":"string"},"scorerVersion":{"type":"integer","format":"int32"},"trialCount":{"type":"integer","format":"int64","minimum":0}}},"ExperimentDispersionSummaryBody":{"type":"object","required":["highDispersionRowCount","threshold"],"properties":{"highDispersionRowCount":{"type":"integer","format":"int64","description":"The \"N cases unstable\" card, counted over every pinned case.","minimum":0},"threshold":{"type":"number","format":"double","description":"Normalized dispersion a case must exceed to be flagged."}}},"ExperimentFailureCauseBody":{"type":"object","required":["message","slotCount"],"properties":{"kind":{"type":["string","null"],"description":"Shared failure taxonomy (`provider_auth`, `timeout`, `execution_error`, …); absent\nwhen the producer did not classify the failure, including current SDK/client paths."},"message":{"type":"string","description":"The group's most common first error line."},"slotCount":{"type":"integer","format":"int64","minimum":0}}},"ExperimentPreviewResponseBody":{"type":"object","required":["datasetId","datasetVersion","rowCount","trialCount","slotCount","pinnedScorers","applicability","sampleSlots"],"properties":{"applicability":{"$ref":"#/components/schemas/ExperimentApplicabilityPreviewBody"},"costEstimate":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentCostEstimateBody","description":"Order-of-magnitude cost of running this plan, and whether creating it\nrequires `confirmCostEstimate`."}]},"datasetId":{"type":"string"},"datasetVersion":{"type":"integer","format":"int64"},"pinnedScorers":{"type":"array","items":{"$ref":"#/components/schemas/PinnedExperimentScorerBody"}},"rowCount":{"type":"integer","format":"int64","minimum":0},"sampleSlots":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentSlotBody"}},"slotCount":{"type":"integer","format":"int64","minimum":0},"trialCount":{"type":"integer","format":"int32","minimum":0}}},"ExperimentProgressBody":{"type":"object","required":["completed","total","skipped"],"properties":{"completed":{"type":"integer","format":"int64","minimum":0},"skipped":{"type":"integer","format":"int64","minimum":0},"total":{"type":"integer","format":"int64","minimum":0}}},"ExperimentResponseBody":{"type":"object","required":["id","orgId","name","datasetId","datasetVersion","datasetWriteVersion","task","scorers","trialCount","executionStatus","deadlineAt","lifecycleVersion","retryCount","isBaseline","createdBy","createdAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"datasetFilter":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DatasetSnapshotFilterBody"}]},"datasetId":{"type":"string"},"datasetName":{"type":["string","null"],"description":"Resolved from the Dataset the experiment pinned, so callers do not have\nto fetch the Dataset list just to label a run. None when it was deleted."},"datasetVersion":{"type":"integer","format":"int64","description":"The pinned `global_version`: the row cut every Slot reads."},"datasetWriteVersion":{"type":"integer","format":"int64","description":"The Dataset version to display for that pin: one per write request."},"deadlineAt":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"executionCompletedAt":{"type":["integer","null"],"format":"int64"},"executionStatus":{"$ref":"#/components/schemas/ExperimentStatusBody"},"executionStatusReason":{"type":["string","null"]},"id":{"type":"string"},"idempotencyKey":{"type":["string","null"]},"isBaseline":{"type":"boolean","description":"The organization's Baseline for this Dataset. At most one Experiment per\norganization and Dataset carries it."},"lifecycleVersion":{"type":"integer","format":"int64"},"metadata":{},"name":{"type":"string"},"orgId":{"type":"string"},"promptContentHash":{"type":["string","null"]},"promptId":{"type":["string","null"]},"promptName":{"type":["string","null"]},"promptVersion":{"type":["integer","null"],"format":"int32"},"retryCount":{"type":"integer","format":"int32","minimum":0},"scorers":{"type":"array","items":{"$ref":"#/components/schemas/PinnedExperimentScorerBody"}},"task":{"$ref":"#/components/schemas/ExperimentTaskBody"},"trialCount":{"type":"integer","format":"int32","minimum":0}}},"ExperimentResultPaginationBody":{"type":"object","required":["page","pageSize","totalSlots","hasMore"],"properties":{"hasMore":{"type":"boolean"},"page":{"type":"integer","minimum":0},"pageSize":{"type":"integer","minimum":0},"totalSlots":{"type":"integer","minimum":0}}},"ExperimentResultRowBody":{"type":"object","description":"One pinned Dataset case with every trial reduced to list-surface aggregates.","required":["rowIndex","rowId","logicalId","input","trialCount","status","taskOutcomes","scoreOutcomes","scoreSummaries"],"properties":{"dispersion":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentRowDispersionBody"}]},"errorMessage":{"type":["string","null"],"description":"Sample message of the row's largest failure cause (grouped by kind, else by first line)."},"expectedOutput":{},"input":{},"logicalId":{"type":"string"},"output":{"description":"Present only for a single-trial row; multi-trial outputs belong in drill-down."},"p50LatencyMs":{"type":["integer","null"],"format":"int64","minimum":0},"rowId":{"type":"string"},"rowIndex":{"type":"integer","description":"Zero-based position in deterministic pinned-snapshot row order.","minimum":0},"scoreOutcomes":{"$ref":"#/components/schemas/ExperimentScoreOutcomesBody"},"scoreSummaries":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentScoreSummaryBody"}},"status":{"$ref":"#/components/schemas/ExperimentSlotStatusBody"},"taskOutcomes":{"$ref":"#/components/schemas/ExperimentTaskOutcomesBody"},"trialCount":{"type":"integer","minimum":0}}},"ExperimentResultRowPageResponseBody":{"type":"object","required":["rows","pagination"],"properties":{"pagination":{"$ref":"#/components/schemas/ExperimentResultRowPaginationBody"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentResultRowBody"}}}},"ExperimentResultRowPaginationBody":{"type":"object","required":["page","pageSize","totalRows","hasMore"],"properties":{"hasMore":{"type":"boolean"},"page":{"type":"integer","minimum":0},"pageSize":{"type":"integer","minimum":0},"totalRows":{"type":"integer","minimum":0}}},"ExperimentResultRowSortBody":{"type":"string","enum":["dataset","dispersion_desc"]},"ExperimentResultScoreBody":{"type":"object","required":["scorerId","scorerVersion","status"],"properties":{"score":{},"scorerId":{"type":"string"},"scorerVersion":{"type":"integer","format":"int32"},"status":{"$ref":"#/components/schemas/ExperimentResultScoreStatusBody"}}},"ExperimentResultScoreStatusBody":{"type":"string","enum":["pending","in_progress","success","skipped","error"]},"ExperimentResultSlotBody":{"type":"object","required":["rowId","logicalId","trialIndex","input","status","taskStatus","scores","clientScores"],"properties":{"clientScores":{"type":"array","items":{},"description":"Scores the customer's own code reported for this Slot. `scores` above is\none entry per pinned Scorer, which a client Score is not."},"execution":{},"expectedOutput":{},"input":{},"logicalId":{"type":"string"},"rowId":{"type":"string"},"scores":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentResultScoreBody"}},"status":{"$ref":"#/components/schemas/ExperimentSlotStatusBody","description":"The one field a list surface needs; task and score statuses remain for drill-down."},"taskStatus":{"$ref":"#/components/schemas/ExperimentResultTaskStatusBody"},"trialIndex":{"type":"integer","format":"int32","minimum":0}}},"ExperimentResultTaskStatusBody":{"type":"string","enum":["pending","queued","in_progress","ok","skipped","error"]},"ExperimentResultsResponseBody":{"type":"object","required":["executions","scores","slots","pagination","skipSummary","clientScoreSummaries","rowDispersions","dispersionSummary"],"properties":{"clientScoreSummaries":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentClientScoreSummaryBody"},"description":"Dimensions the customer's own code reported. Empty for a run whose\nScores all came from platform Scorers."},"dispersionSummary":{"$ref":"#/components/schemas/ExperimentDispersionSummaryBody"},"executions":{"type":"array","items":{}},"pagination":{"$ref":"#/components/schemas/ExperimentResultPaginationBody"},"rowDispersions":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentRowDispersionBody"},"description":"Trial dispersion for the cases on this page, always measured over the\nExperiment's full evidence so paging never splits a case's trials."},"scores":{"type":"array","items":{}},"skipSummary":{"$ref":"#/components/schemas/ExperimentSkipSummaryBody"},"slots":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentResultSlotBody"}}}},"ExperimentRowDetailResponseBody":{"type":"object","required":["experimentId","snapshot","navigation","rowId","logicalId","input","trials","scoreSummaries","clientScoreSummaries","dispersion"],"properties":{"clientScoreSummaries":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentClientScoreSummaryBody"},"description":"Per-case aggregate of the dimensions the customer's own code reported,\nkept separate from Scorer summaries because the two are not comparable."},"dispersion":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentDimensionDispersionBody"},"description":"Per-dimension trial dispersion for this case. Empty for a single-trial\nExperiment, which has no disagreement to report."},"expectedOutput":{},"experimentId":{"type":"string"},"input":{},"logicalId":{"type":"string"},"navigation":{"$ref":"#/components/schemas/ExperimentRowNavigationBody"},"outlierTrialIndex":{"type":["integer","null"],"format":"int32","description":"Trial the drawer opens on: the one farthest from the mean or majority in\nthis case's most dispersed dimension.","minimum":0},"rowId":{"type":"string"},"scoreSummaries":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentScoreSummaryBody"}},"snapshot":{"$ref":"#/components/schemas/ExperimentRowSnapshotBody"},"trials":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentResultSlotBody"}}}},"ExperimentRowDispersionBody":{"type":"object","required":["rowId","logicalId","dimensions","high"],"properties":{"dimensions":{"type":"array","items":{"$ref":"#/components/schemas/ExperimentDimensionDispersionBody"}},"high":{"type":"boolean"},"logicalId":{"type":"string"},"maxNormalized":{"type":["number","null"],"format":"double","description":"Largest normalized dispersion across this case's dimensions. This is the\nkey the result table flags and sorts by."},"outlierTrialIndex":{"type":["integer","null"],"format":"int32","minimum":0},"rowId":{"type":"string"}}},"ExperimentRowNavigationBody":{"type":"object","required":["rowIndex","totalRows"],"properties":{"nextRowId":{"type":["string","null"]},"previousRowId":{"type":["string","null"]},"rowIndex":{"type":"integer","description":"Zero-based position in deterministic pinned-snapshot row order.","minimum":0},"totalRows":{"type":"integer","minimum":0}}},"ExperimentRowSnapshotBody":{"type":"object","required":["datasetId","datasetVersion","datasetWriteVersion"],"properties":{"datasetId":{"type":"string"},"datasetVersion":{"type":"integer","format":"int64"},"datasetWriteVersion":{"type":"integer","format":"int64"}}},"ExperimentScoreOutcomesBody":{"type":"object","description":"`completed` is scored plus failed; `total` also counts pending, skipped and unscored.","required":["completed","total","scored","failed","pending","skipped","unscored"],"properties":{"completed":{"type":"integer","format":"int64","minimum":0},"failed":{"type":"integer","format":"int64","minimum":0},"pending":{"type":"integer","format":"int64","minimum":0},"scored":{"type":"integer","format":"int64","minimum":0},"skipped":{"type":"integer","format":"int64","minimum":0},"total":{"type":"integer","format":"int64","minimum":0},"unscored":{"type":"integer","format":"int64","minimum":0}}},"ExperimentScoreSummaryBody":{"type":"object","required":["scorerId","scorerVersion","name","sampleCount","errorCount","pendingCount","noReferenceCount","noTraceCount","skippedCount"],"properties":{"errorCount":{"type":"integer","format":"int64","minimum":0},"name":{"type":"string","description":"User-facing dimension label. This is the Score Config name when the\nScorer declares one, otherwise the Scorer name."},"noReferenceCount":{"type":"integer","format":"int64","minimum":0},"noTraceCount":{"type":"integer","format":"int64","minimum":0},"pendingCount":{"type":"integer","format":"int64","minimum":0},"sampleCount":{"type":"integer","format":"int64","minimum":0},"scoreConfigId":{"type":["string","null"]},"scoreConfigName":{"type":["string","null"]},"scoreConfigVersion":{"type":["integer","null"],"format":"int32"},"scorerId":{"type":"string"},"scorerVersion":{"type":"integer","format":"int32"},"skippedCount":{"type":"integer","format":"int64","minimum":0},"value":{"description":"Type-aware aggregate: numeric mean, boolean counts, or categorical counts."}}},"ExperimentScorerApplicabilityBody":{"type":"object","required":["scorerId","scorerVersion","eligibleRowCount","noReferenceRowCount","eligibleSlotCount","noReferenceSlotCount"],"properties":{"eligibleRowCount":{"type":"integer","format":"int64","minimum":0},"eligibleSlotCount":{"type":"integer","format":"int64","minimum":0},"noReferenceRowCount":{"type":"integer","format":"int64","minimum":0},"noReferenceSlotCount":{"type":"integer","format":"int64","minimum":0},"scorerId":{"type":"string"},"scorerVersion":{"type":"integer","format":"int32"}}},"ExperimentScorerRefBody":{"type":"object","required":["id"],"properties":{"id":{"type":"string"},"version":{"type":["integer","null"],"format":"int32"}},"additionalProperties":false},"ExperimentSkipReason":{"type":"string","description":"Permanent evidence reason shared by Experiment execution and score records.","enum":["no_reference","no_trace","task_skip"]},"ExperimentSkipSummaryBody":{"type":"object","required":["fullySkippedSlots","partiallySkippedSlots","skippedDimensions","noReferenceDimensions","noTraceDimensions"],"properties":{"fullySkippedSlots":{"type":"integer","format":"int64","minimum":0},"noReferenceDimensions":{"type":"integer","format":"int64","minimum":0},"noTraceDimensions":{"type":"integer","format":"int64","minimum":0},"partiallySkippedSlots":{"type":"integer","format":"int64","minimum":0},"skippedDimensions":{"type":"integer","format":"int64","minimum":0}}},"ExperimentSlotBody":{"type":"object","required":["rowId","logicalId","trialIndex","input"],"properties":{"expectedOutput":{},"input":{},"logicalId":{"type":"string"},"metadata":{"description":"Dataset Case metadata, so a client-side Task can branch on it without a\nsecond read of the Dataset."},"rowId":{"type":"string"},"trialIndex":{"type":"integer","format":"int32","minimum":0}}},"ExperimentSlotStatusBody":{"type":"string","enum":["pending","running","scoring","completed","skipped","task_failed","score_failed"]},"ExperimentStatusBody":{"type":"string","enum":["pending","running","completed","failed","cancelled"]},"ExperimentSummaryResponseBody":{"type":"object","properties":{"aggregateSummary":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentAggregateSummaryBody"}]},"executionProgress":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentProgressBody"}]},"scoreOutcomes":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentScoreOutcomesBody"}]},"scoreSummaries":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ExperimentScoreSummaryBody"}},"scoringProgress":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentProgressBody"}]},"scoringStatus":{"type":["string","null"]},"status":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentSummaryStatusBody"}]},"taskOutcomes":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentTaskOutcomesBody"}]}}},"ExperimentSummaryStatusBody":{"type":"string","enum":["pending","running","scoring","completed","cancelled","execution_failed","scoring_failed"]},"ExperimentTaskBody":{"oneOf":[{"type":"object","required":["messages","provider_id","type"],"properties":{"messages":{"type":"array","items":{"$ref":"#/components/schemas/PromptMessageBody"}},"model":{"type":["string","null"]},"params":{},"provider_id":{"type":"string"},"type":{"type":"string","enum":["inline_prompt"]}}},{"type":"object","required":["id","version","provider_id","type"],"properties":{"id":{"type":"string"},"params_overrides":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PromptRefOverridesBody"}]},"provider_id":{"type":"string"},"type":{"type":"string","enum":["prompt_ref"]},"version":{"type":"integer","format":"int32"}}},{"type":"object","required":["task_ref","type"],"properties":{"overrides":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RemoteTaskOverridesBody"}]},"task_ref":{"type":"string","description":"Pinned `name@version` of a published Remote Task. Never latest."},"type":{"type":"string","enum":["remote"]}}},{"type":"object","required":["task_fingerprint","type"],"properties":{"config":{},"task_fingerprint":{"type":"string","description":"Immutable identity of the customer code under evaluation. Every\nexecution record reported for this Experiment must repeat it."},"type":{"type":"string","enum":["sdk"]}}}]},"ExperimentTaskOutcomesBody":{"type":"object","description":"Slot counts over the pinned set; `pending` is `total` minus the slots that have finished.","required":["total","succeeded","failed","pending","skipped"],"properties":{"failed":{"type":"integer","format":"int64","minimum":0},"pending":{"type":"integer","format":"int64","minimum":0},"skipped":{"type":"integer","format":"int64","minimum":0},"succeeded":{"type":"integer","format":"int64","minimum":0},"total":{"type":"integer","format":"int64","minimum":0}}},"ExperimentViewResponseBody":{"allOf":[{"$ref":"#/components/schemas/ExperimentResponseBody"},{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentSummaryResponseBody"}]}]},"ExtendDowntimeRequest":{"type":"object","description":"`POST /v2/{org}/downtimes/{id}/extend`: exactly one of `by_secs` and `until`.","properties":{"by_secs":{"type":["integer","null"],"format":"int64","description":"Added to the later of the current end and now."},"until":{"type":["integer","null"],"format":"int64","description":"The new end, microseconds UTC."},"version":{"type":["integer","null"],"format":"int64","description":"The version the row was loaded at; a newer stored row makes the extension a 409."}}},"ExtendDowntimeResponse":{"allOf":[{"$ref":"#/components/schemas/Downtime"},{"type":"object","properties":{"created_id":{"type":["string","null"],"description":"Set when a recurring row got a one-time follow-up instead of a longer window."}}}],"description":"The row that now ends later: the extended one-time row, or the follow-up of a recurring one."},"ExtraMetadataField":{"type":"object","required":["name","type"],"properties":{"description":{"type":["string","null"]},"name":{"type":"string"},"type":{"$ref":"#/components/schemas/ExtraMetadataFieldType"}},"additionalProperties":false},"ExtraMetadataFieldType":{"type":"string","enum":["string","number","boolean"]},"FeatureState":{"type":"string","enum":["enabled","locked","hidden"]},"Field":{"type":"object","properties":{"matchBy":{"type":"string","default":""},"value":{"type":"string","default":""}}},"FieldAlias":{"type":"object","description":"Field alias group — defines a set of field names that represent the same concept.\n\nUsed for:\n- Mapping equivalent field names across logs, traces, and metrics (e.g., `service`,\n  `service.name`, `app` all mean \"service identity\")\n- Incident correlation and alert dimensions\n- Populating `ServiceIdentityConfig` via the recommendations UI\n\n# Field Name Overlaps\n\nField names can appear in multiple semantic groups. When extracting dimensions,\nthe **first-defined group** takes precedence. This allows flexible configurations\nwhere a field like \"service\" can have different meanings in different contexts.\n\nExample:\n```\n// Group 1: service-primary (defined first)\n//   field_names: [\"service\", \"primary_service\"]\n//\n// Group 2: service-backup (defined second)\n//   field_names: [\"service\", \"backup_service\"]\n//\n// When extracting dimensions from {\"service\": \"api\"}:\n// → Matches \"service-primary\" group (first occurrence wins)\n```","required":["id","display","fields"],"properties":{"display":{"type":"string","description":"Human-readable display name (e.g., \"Host\", \"K8s Cluster\")"},"fields":{"type":"array","items":{"type":"string"},"description":"List of field names that are equivalent (e.g., [\"host\", \"hostname\", \"node\"])\n\nNote: Field names can overlap with other groups. First-defined group wins."},"group":{"type":["string","null"],"description":"Category/group this semantic field belongs to (e.g., \"Common\", \"Kubernetes\", \"AWS\", \"GCP\",\n\"Azure\") Used for UI organization and preset templates"},"id":{"type":"string","description":"Unique identifier (lowercase, dash-separated, e.g., \"host\", \"k8s-cluster\")"},"is_workload_type":{"type":"boolean","description":"When true, this alias is a workload-type dimension used to build identity sets.\nAliases with this flag are grouped by their `group` field to form `IdentitySet`\nentries with `distinguish_by` populated from those alias IDs.\nAliases without this flag (HTTP, Database, System, etc.) are never used as\nidentity set discriminators."}}},"FieldUpdate":{"type":"object","required":["name","data_type"],"properties":{"data_type":{"type":"string","description":"Target data type (e.g., Utf8, LargeUtf8, Int64, Float64)"},"name":{"type":"string","description":"Field name to update"},"nullable":{"type":["boolean","null"],"description":"Optionally set nullability; defaults to existing field nullability if not provided"}}},"FileType":{"type":"string","enum":["SourceMap"]},"FilterCondition":{"type":"object","required":["type","values","logicalOperator","filterType"],"properties":{"column":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/StreamFieldObj"}]},"emptyLiteral":{"type":["boolean","null"],"description":"Set when `value` is an explicit `''` from SQL, so the builder keeps `x <> ''`\ninstead of treating the empty value as \"not entered yet\"."},"filterType":{"type":"string"},"logicalOperator":{"type":"string"},"operator":{"type":["string","null"]},"type":{"type":"string"},"value":{"type":["string","null"]},"values":{"type":"array","items":{"type":"string"}}}},"FilterField":{"oneOf":[{"$ref":"#/components/schemas/SessionField"},{"type":"string"}],"description":"A built-in session field, or any other column of the RUM stream."},"Filters":{"type":"object","properties":{"name":{"type":["string","null"],"default":null},"operator":{"type":["string","null"],"default":null},"value":{"type":"string","default":""}}},"FiredRung":{"type":"object","description":"A rung that has already fired.","required":["after_micros","at","targets","reached","reached_nobody"],"properties":{"after_micros":{"type":"integer","format":"int64"},"at":{"type":"integer","format":"int64","description":"Absolute instant it fired, so the UI need not re-derive it."},"reached":{"type":"array","items":{"type":"string"},"description":"The PEOPLE it actually reached, from the delivery ledger.\n\nRead from what was recorded at the time, never re-resolved against who\nholds the rotation now: a rung that woke Ana has to keep saying Ana, or a\nlook back at last month's page quietly rewrites who was accountable.\n`targets` says why they were chosen; this says who."},"reached_nobody":{"type":"boolean","description":"The rung fired and the delivery ledger has nobody for it.\n\nDistinct from an empty `reached` on a rung that is merely old: this is the\n\"paged nobody\" case — an unstaffed rotation, or a target that resolved to\nno one — and the most important thing a post-mortem learns here."},"targets":{"type":"array","items":{"type":"string"},"description":"The POSITIONS this rung names — \"whoever is on call in Primary\"."}}},"Fleet":{"type":"object","required":["id","name","settings"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"settings":{"$ref":"#/components/schemas/FleetSettings","description":"The fleet's own overrides; unset fields inherit the organization defaults."},"state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FleetState","description":"Null for a fleet the caller may list but not read."}]}}},"FleetConfig":{"type":"object","required":["id","description","latest_version","collectors","fleets","updated_at","updated_by"],"properties":{"collectors":{"type":"integer","minimum":0},"description":{"type":"string"},"fleets":{"type":"array","items":{"$ref":"#/components/schemas/CollectorFleet"},"description":"The readable fleets whose desired or stable version is this configuration."},"fleets_hidden":{"type":"integer","description":"Fleets using this configuration that the caller cannot read.","minimum":0},"id":{"type":"string"},"latest_version":{"type":"integer","format":"int64"},"live_version":{"type":["integer","null"],"format":"int64"},"updated_at":{"type":"integer","format":"int64"},"updated_by":{"type":"string"}}},"FleetConfigDetail":{"allOf":[{"$ref":"#/components/schemas/FleetConfig"},{"type":"object","required":["versions"],"properties":{"draft":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ConfigDraft"}]},"versions":{"type":"array","items":{"$ref":"#/components/schemas/ConfigVersionSummary"}}}}]},"FleetConfigList":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FleetConfig"}},"total":{"type":"integer","minimum":0}}},"FleetList":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Fleet"}},"total":{"type":"integer","minimum":0}}},"FleetRollout":{"type":"object","description":"A fleet's latest rollout.","required":["id","status"],"properties":{"id":{"type":"string"},"status":{"$ref":"#/components/schemas/RolloutStatus"}}},"FleetSettings":{"type":"object","description":"Per-fleet overrides; `None` inherits the organization default.","properties":{"gate":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/GateSettings"}]},"heartbeat_interval_secs":{"type":["integer","null"],"format":"int32","minimum":0},"offline_heartbeats":{"type":["integer","null"],"format":"int32","description":"A collector is offline after this many missed heartbeats.","minimum":0},"offline_ratio_percent":{"type":["integer","null"],"format":"int32","minimum":0},"phase_timeout_secs":{"type":["integer","null"],"format":"int32","minimum":0},"retention_days":{"type":["integer","null"],"format":"int32","description":"Offline collectors are removed after this many days; 0 keeps them forever.","minimum":0}},"additionalProperties":false},"FleetState":{"type":"object","required":["collectors","online","at_desired"],"properties":{"at_desired":{"type":"integer","description":"Collectors whose assignment is the desired version.","minimum":0},"collectors":{"type":"integer","minimum":0},"desired":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FleetVersion"}]},"online":{"type":"integer","minimum":0},"rollout":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FleetRollout"}]},"stable":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/FleetVersion"}]}}},"FleetSummary":{"type":"object","required":["collectors","versions","target_version","rollouts_active"],"properties":{"collectors":{"$ref":"#/components/schemas/StatusCounts"},"rollouts_active":{"type":"integer","minimum":0},"target_version":{"type":"string"},"versions":{"type":"array","items":{"$ref":"#/components/schemas/VersionCount"}}}},"FleetVersion":{"type":"object","description":"A configuration version a fleet runs or should run.","required":["config","version"],"properties":{"config":{"type":"string"},"version":{"type":"integer","format":"int64"}}},"FlowDestination":{"type":"object","description":"`exporter` is set only on a config-scoped destination, so the UI can label it.","required":["id","type"],"properties":{"exporter":{"type":["string","null"]},"id":{"type":"string"},"target":{"type":["string","null"]},"type":{"type":"string"}}},"FlowIssue":{"type":"object","required":["kind","signal","value"],"properties":{"kind":{"$ref":"#/components/schemas/FlowIssueKind"},"signal":{"$ref":"#/components/schemas/FlowSignal"},"value":{"type":"number","format":"double"}}},"FlowIssueKind":{"type":"string","enum":["export_errors","dropped","backpressure","receiver_refused"]},"FlowSignal":{"type":"string","enum":["logs","metrics","traces"]},"FlowWindow":{"type":"string","enum":["5m","1h","24h"]},"Folder":{"type":"object","description":"Common folder fields used in HTTP request and response bodies.","required":["name","description"],"properties":{"description":{"type":"string"},"folderId":{"type":"string"},"icon":{"type":["string","null"],"description":"Opaque icon token — a Unicode emoji or an \"o2:\" registry reference.\nAbsent or null means the folder has no icon."},"name":{"type":"string"}}},"FolderType":{"type":"string","description":"Indicates the type of data that the folder can contain; fleets have their own API.","enum":["dashboards","alerts","reports","synthetics","workflows","prompts","downtimes"]},"FoundGroup":{"type":"object","description":"A semantic alias group found in the org's stream schemas.","required":["group_id","display","stream_types","aliases","recommended"],"properties":{"aliases":{"type":"object","description":"Actual field name found per stream type, e.g., {\"logs\": \"k8s_cluster_name\"}","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"cardinality_class":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CardinalityClass","description":"Cardinality class derived from unique_values (None if no data yet)"}]},"display":{"type":"string","description":"Human-readable display name, e.g., \"K8s Cluster\""},"group":{"type":["string","null"],"description":"Category this group belongs to (e.g., \"AWS\", \"Kubernetes\", \"Azure\", \"GCP\", \"Common\").\nSourced from the underlying `FieldAlias.group`. When `None`, the frontend falls\nback to inferring the category from `group_id` prefix."},"group_id":{"type":"string","description":"Semantic group ID, e.g., \"k8s-cluster\""},"recommended":{"type":"boolean","description":"True if this group appears in 2+ stream types AND has acceptable cardinality\n(Deprecated: logic moving to UI)"},"stream_types":{"type":"array","items":{"type":"string"},"description":"Which stream types contain a field from this group (e.g., [\"logs\", \"traces\"])"},"unique_values":{"type":["integer","null"],"description":"Number of unique values seen in actual data (None if no data collected yet)","minimum":0}}},"FrequencyType":{"type":"string","enum":["cron","minutes"]},"FromPresetRequest":{"allOf":[{"$ref":"#/components/schemas/PresetSpec"},{"type":"object","properties":{"anchor_micros":{"type":["integer","null"],"format":"int64","description":"Absent is now, snapped to the last local Monday 00:00 so handovers land on a week boundary."},"handover_micros":{"type":["integer","null"],"format":"int64","description":"How long one shift lasts, on every shift rule the preset builds. Absent is a week."},"new_rotation_name":{"type":["string","null"],"description":"Adds a rotation with this name; setting both fields is a 400."},"rotation_id":{"type":["string","null"],"description":"Replaces this rotation's shift rules; its id and name stay."},"timezone":{"type":["string","null"],"description":"Absent means the team's own zone; there is no per-user timezone to fall back on."}}}],"description":"Replaces one rotation's shift rules or adds one; the catalogue says which fields apply."},"FunctionList":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/Transform"}}}},"FunnelDef":{"type":"object","description":"A funnel as the web's `funnelParam` writes it.","required":["s"],"properties":{"b":{"type":["string","null"],"description":"A built-in key dimension, or any stream column but a session-filter field, env or version."},"bs":{"type":["integer","null"],"format":"int32","description":"1-based step an attribute `b` reads its value at; absent lets the data pick it.","minimum":0},"f":{"type":["array","null"],"items":{"type":"object"}},"s":{"type":"array","items":{"type":"array","items":{"type":"object"}}},"u":{"type":["string","null"]},"w":{"type":["string","null"]},"x":{"type":["array","null"],"items":{"type":"object"}}},"additionalProperties":false},"FunnelFilter":{"type":"object","description":"Matches `field` to `values`, inverted by `not`; `f` filters sessions with it, `pc` step events.","required":["field","op","values"],"properties":{"field":{"$ref":"#/components/schemas/FilterField"},"not":{"type":"boolean"},"op":{"$ref":"#/components/schemas/MatchOp"},"values":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"FunnelRef":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"FunnelRefList":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/FunnelRef"}}}},"GCPAttributes":{"type":"object","required":["logging.googleapis.com/timestamp"],"properties":{"logging.googleapis.com/timestamp":{"type":"string"}}},"GCPMessage":{"type":"object","required":["attributes","data","messageId","message_id","publishTime","publish_time"],"properties":{"attributes":{"$ref":"#/components/schemas/GCPAttributes"},"data":{"type":"string"},"messageId":{"type":"string"},"message_id":{"type":"string"},"publishTime":{"type":"string"},"publish_time":{"type":"string"}}},"GateResult":{"type":"object","required":["passed","observed"],"properties":{"observed":{"type":"string"},"passed":{"type":"boolean"}}},"GateSettings":{"type":"object","description":"The verification gate: wait `observe_secs`, then measure over `window_secs`.","required":["observe_secs","window_secs","pass_percent"],"properties":{"observe_secs":{"type":"integer","format":"int32","minimum":0},"pass_percent":{"type":"integer","format":"int32","minimum":0},"window_secs":{"type":"integer","format":"int32","minimum":0}},"additionalProperties":false},"GenAiAgentListItem":{"type":"object","description":"A discovered Gen-AI agent returned by the list endpoint.","required":["name","source_stream","source_stream_type"],"properties":{"env":{"type":["string","null"],"description":"Environment the agent was observed in (e.g. production), when available."},"first_seen":{"type":["integer","null"],"format":"int64","description":"Epoch-microseconds of the agent's first observed span, when available."},"id":{"type":["string","null"],"description":"Stable agent id when source telemetry provided one."},"last_seen":{"type":["integer","null"],"format":"int64","description":"Epoch-microseconds of the agent's most recent observed span, when available."},"name":{"type":"string","description":"Display name for the agent. Falls back to the agent id when no name is available."},"source_stream":{"type":"string","description":"Source stream where the agent was observed."},"source_stream_type":{"type":"string","description":"Source stream type where the agent was observed."},"version":{"type":["string","null"],"description":"Agent (or service) version the agent was observed at, when available."}}},"GenAiAgentListResponse":{"type":"object","description":"Paginated Gen-AI agent list response.","required":["agents","total"],"properties":{"agents":{"type":"array","items":{"$ref":"#/components/schemas/GenAiAgentListItem"},"description":"Agents in the requested page."},"total":{"type":"integer","description":"Total number of agents after filtering and authorization.","minimum":0}}},"GenAiAgentMappingConfig":{"type":"object","description":"Org-level fallback mapping for normalizing Gen-AI agent identity.","properties":{"agent_id_fields":{"type":"array","items":{"type":"string"},"description":"Incoming telemetry attribute names to use as fallbacks for `gen_ai.agent.id`."},"agent_name_fields":{"type":"array","items":{"type":"string"},"description":"Incoming telemetry attribute names to use as fallbacks for `gen_ai.agent.name`."},"env_fields":{"type":"array","items":{"type":"string"},"description":"Incoming telemetry attribute names to use as fallbacks for the agent's environment."},"version_fields":{"type":"array","items":{"type":"string"},"description":"Incoming telemetry attribute names to use as fallbacks for the agent's version."}}},"GenerateSqlMetadata":{"type":"object","description":"Metadata about the generated SQL query.","required":["has_aggregation","has_conditions","has_group_by"],"properties":{"has_aggregation":{"type":"boolean","description":"Whether aggregation is present"},"has_conditions":{"type":"boolean","description":"Whether WHERE clause is present"},"has_group_by":{"type":"boolean","description":"Whether GROUP BY is present"}}},"GeneratedRemoteTaskSigningSecretBody":{"type":"object","required":["keyId","material"],"properties":{"keyId":{"type":"string"},"material":{"$ref":"#/components/schemas/RemoteTaskSecretMaterialResponseBody"}}},"GetAlertResponseBody":{"allOf":[{"$ref":"#/components/schemas/Alert"},{"type":"object","properties":{"locked_target_names":{"type":"object","description":"Display names of the alert's locked workflows and on-call team, by id, for the edit form.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}}}}],"description":"HTTP response body for `GetAlert` endpoint."},"GetFolderResponseBody":{"$ref":"#/components/schemas/Folder","description":"HTTP response body for `GetFolder` endpoint."},"GetOrgStorageResponse":{"type":"object","required":["created_at","updated_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"data":{"type":["object","null"]},"provider":{"type":["string","null"]},"updated_at":{"type":"integer","format":"int64"}}},"Grade":{"type":"string","description":"Day-cell grade, Statuspage-style: one confirmed blip colors a day yellow at\nmost, never solid red.","enum":["ok","minor","major","severe","maint","no_data"]},"Group":{"type":"object","description":"One layer's worth of people, for the presets whose layers are fixed. The\nname is optional because \"the weekend layer\" has an obvious label; an empty\none is refused rather than defaulted, because a blank name in a form means\nthe field was cleared, not skipped.","required":["members"],"properties":{"members":{"type":"array","items":{"type":"string"},"description":"Emails, in handover order."},"name":{"type":["string","null"]}}},"GroupType":{"type":"object","required":["filterType","logicalOperator","conditions"],"properties":{"conditions":{"type":"array","items":{"type":"object"}},"filterType":{"type":"string"},"logicalOperator":{"type":"string"}}},"HTTPOutputFormat":{"oneOf":[{"type":"string","enum":["json"]},{"type":"string","enum":["ndjson"]},{"type":"string","enum":["nestedevent"]},{"type":"object","required":["esbulk"],"properties":{"esbulk":{"type":"object","required":["index"],"properties":{"index":{"type":"string"}}}}},{"type":"object","required":["stringseparated"],"properties":{"stringseparated":{"type":"object","required":["separator"],"properties":{"separator":{"type":"string"}}}}}]},"HTTPType":{"type":"string","enum":["post","put","get"]},"HaltClass":{"type":"string","description":"The evidence class of a halt; only the first two may roll back automatically.","enum":["proven_bad","looks_worse","cannot_see"]},"HaltExit":{"type":"string","enum":["rollback","resume","fix_forward","skip"]},"HandoffRequest":{"type":"object","description":"Exactly one of `to` (a person here) or `to_team_id` (the other team's on-call is paged).","properties":{"note":{"type":["string","null"]},"to":{"type":["string","null"]},"to_team_id":{"type":["string","null"]}}},"HavingConditions":{"type":"object","properties":{"operator":{"type":["string","null"]},"value":{"type":["number","null"],"format":"double"}}},"HealthCheck":{"type":"object","required":["id","status","affected","total"],"properties":{"affected":{"type":"integer","format":"int64","description":"LLM spans the problem touches."},"id":{"$ref":"#/components/schemas/CheckId"},"model_count":{"type":["integer","null"],"format":"int64","description":"Unpriced check only: every distinct model behind the unpriced spans (spans without a\nmodel name count as one), however many `models` lists."},"models":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ModelUsage"},"description":"Unpriced check only: the 20 models with the most unpriced tokens."},"models_truncated":{"type":["boolean","null"],"description":"Unpriced check only: `models` leaves some of the `model_count` models out."},"samples":{"type":["array","null"],"items":{"type":"string"},"description":"Up to three recent trace ids with the problem; present only with `include_samples`."},"status":{"$ref":"#/components/schemas/CheckStatus"},"total":{"type":"integer","format":"int64","description":"LLM spans checked."},"unpriced_tokens":{"type":["integer","null"],"format":"int64","description":"Unpriced check only: tokens on every unpriced span."}}},"HealthzResponse":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}}},"HeatmapYBucket":{"type":"object","description":"Heatmap y buckets: \"size\" mode is fixed-width, \"log\" mode one per power of `base` (2 or 10).","properties":{"base":{"type":["number","null"],"format":"double","default":null},"mode":{"type":["string","null"],"default":null},"size":{"type":["number","null"],"format":"double","default":null}}},"HistoryComponent":{"type":"object","required":["key","name","uptime","daily"],"properties":{"daily":{"type":"array","items":{"$ref":"#/components/schemas/DayBucket"}},"key":{"type":"string","description":"Same per-page opaque key as `CurrentComponent.key` — the client join\nhandle, never the internal component id."},"name":{"type":"string"},"uptime":{"$ref":"#/components/schemas/UptimeWindows"}}},"HttpRequestFacts":{"type":"object","required":["credential_prefix","caller_ip","body_bytes","status"],"properties":{"body_bytes":{"type":"integer","format":"int64"},"caller_ip":{"type":"string"},"content_type":{"type":["string","null"]},"credential_prefix":{"type":"string"},"error":{"type":["string","null"]},"idempotency_key":{"type":["string","null"]},"status":{"type":"string"}}},"HttpResponse":{"type":"object","description":"HTTP response\ncode 200 is success\ncode 400 is error\ncode 404 is not found\ncode 500 is internal server error\ncode 503 is service unavailable\ncode >= 1000 is custom error code\nmessage is the message or error message","required":["code","message"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error_detail":{"type":["string","null"]},"hint":{"type":["string","null"],"description":"One-line guidance on how to fix the error (agent self-correction, D4)."},"id":{"type":["string","null"]},"message":{"type":"string"},"name":{"type":["string","null"]},"suggestions":{"type":["array","null"],"items":{"type":"string"},"description":"Closest valid alternatives for a mistyped field/function name."},"trace_id":{"type":["string","null"]},"warnings":{"type":["array","null"],"items":{"type":"string"},"description":"Problems with a request that succeeded anyway. Distinct from `hint`,\nwhich explains a failure: these accompany a 200, and the caller is\nentitled to have meant it."}}},"HypothesisStatus":{"type":"string","enum":["testing","untested","likely","root_cause","contributing","symptom","ruled_out","inconclusive","blocked"]},"IdentitySet":{"type":"object","description":"One identity set — a disambiguation scheme for one class of workloads.\n\nThe `id` is the semantic category slug (e.g. \"k8s\", \"aws\", \"gcp\", \"azure\").\nAt processing time the system tries ALL configured sets against each record and\nranks them by coverage of the record's non-empty dimensions: a fully-covered set\nwins first, then the highest covered ratio, then the highest raw count; ties are\nbroken by declaration order (first-in-list). See `resolve_best_set_by_coverage`.","required":["id","label","distinguish_by"],"properties":{"distinguish_by":{"type":"array","items":{"type":"string"},"description":"Semantic group IDs used for disambiguation (1..=5)."},"id":{"type":"string","description":"Semantic category slug: \"k8s\", \"aws\", \"gcp\", \"azure\", or a custom slug.\nMust be lowercase, alphanumeric, dash-separated (same rules as FieldAlias IDs)."},"label":{"type":"string","description":"Human-readable display name, e.g. \"Kubernetes\"."}}},"ImageAttachment":{"type":"object","description":"Image attachment for multimodal AI chat","required":["data","mime_type"],"properties":{"data":{"type":"string","description":"Base64-encoded image data (max ~2 MB)"},"filename":{"type":["string","null"],"description":"Optional filename"},"mime_type":{"type":"string","description":"MIME type (image/png or image/jpeg)"}}},"Impact":{"type":"object","required":["summary"],"properties":{"peak":{"type":["string","null"]},"summary":{"type":"string"},"window":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TimeWindow"}]}}},"Incident":{"type":"object","description":"Main incident entity - a group of correlated alerts","required":["id","org_id","status","severity","first_alert_at","last_alert_at","alert_count","created_at","updated_at"],"properties":{"acknowledged_at":{"type":["integer","null"],"format":"int64"},"acknowledged_by":{"type":["string","null"]},"alert_count":{"type":"integer","format":"int32"},"alert_groups":{"type":["array","null"],"items":{"$ref":"#/components/schemas/IncidentAlertGroup"},"description":"Every alert that fired into the incident and how often, most-fired first; list only."},"assigned_to":{"type":["string","null"]},"created_at":{"type":"integer","format":"int64"},"first_alert_at":{"type":"integer","format":"int64","description":"Timestamps in microseconds"},"group_values":{},"id":{"type":"string","description":"KSUID (27 chars)"},"key_type":{"$ref":"#/components/schemas/KeyType"},"last_alert_at":{"type":"integer","format":"int64"},"muted_by_downtime_id":{"type":["string","null"],"description":"Set while a downtime mutes this incident (D3)."},"org_id":{"type":"string"},"rca":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RcaSummary","description":"Latest run summary, `null` when never analyzed; the detail response fills its detail\nfields."}]},"rca_off_reason":{"type":["string","null"],"description":"Why automatic analysis runs never start for this incident (`l0_off`)."},"resolved_at":{"type":["integer","null"],"format":"int64"},"severity":{"$ref":"#/components/schemas/IncidentSeverity"},"status":{"$ref":"#/components/schemas/IncidentStatus"},"title":{"type":["string","null"]},"topology_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/IncidentTopology"}]},"updated_at":{"type":"integer","format":"int64"}}},"IncidentAlert":{"type":"object","description":"Alert info within an incident (junction table representation)","required":["incident_id","alert_id","alert_name","alert_fired_at","correlation_reason","created_at"],"properties":{"alert_fired_at":{"type":"integer","format":"int64"},"alert_id":{"type":"string"},"alert_kind":{"$ref":"#/components/schemas/AlertKind"},"alert_name":{"type":"string"},"correlation_reason":{"$ref":"#/components/schemas/CorrelationReason"},"created_at":{"type":"integer","format":"int64"},"detected_source":{"type":["string","null"]},"incident_id":{"type":"string"},"labels":{"type":["object","null"],"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"source_url":{"type":["string","null"]}}},"IncidentAlertGroup":{"type":"object","description":"One alert's firings within an incident, for the list row.","required":["alert_id","alert_name","count"],"properties":{"alert_id":{"type":"string"},"alert_name":{"type":"string"},"count":{"type":"integer","format":"int32","description":"Times this alert fired into the incident"}}},"IncidentMode":{"type":"string","description":"What a suppressed alert firing does to incidents during the window.","enum":["muted","none"]},"IncidentSeverity":{"type":"string","description":"Incident severity levels (P1 = highest priority)","enum":["P1","P2","P3","P4"]},"IncidentStats":{"type":"object","description":"Statistics for incidents dashboard","required":["total_incidents","open_incidents","acknowledged_incidents","resolved_incidents","by_severity","by_service","alerts_per_incident_avg"],"properties":{"acknowledged_incidents":{"type":"integer","format":"int64"},"alerts_per_incident_avg":{"type":"number","format":"double","description":"Average alerts per incident"},"by_service":{"type":"object","additionalProperties":{"type":"integer","format":"int64"},"propertyNames":{"type":"string"}},"by_severity":{"type":"object","additionalProperties":{"type":"integer","format":"int64"},"propertyNames":{"type":"string"}},"mttr_minutes":{"type":["number","null"],"format":"double","description":"Mean time to resolve in minutes"},"open_incidents":{"type":"integer","format":"int64"},"resolved_incidents":{"type":"integer","format":"int64"},"total_incidents":{"type":"integer","format":"int64"}}},"IncidentStatus":{"type":"string","description":"Incident status lifecycle: Open → Acknowledged → Resolved","enum":["open","acknowledged","resolved"]},"IncidentTopology":{"type":"object","description":"Alert flow graph showing how alerts cascaded across services over time","required":["nodes","edges","related_incident_ids"],"properties":{"edges":{"type":"array","items":{"$ref":"#/components/schemas/AlertEdge"},"description":"Edges showing temporal and service dependency relationships"},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/AlertNode"},"description":"Alert nodes - each unique (service, alert) pair"},"related_incident_ids":{"type":"array","items":{"type":"string"},"description":"Related incident IDs (for cross-incident correlation)"}}},"IncidentWithAlerts":{"allOf":[{"$ref":"#/components/schemas/Incident"},{"type":"object","required":["triggers","alerts"],"properties":{"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"},"description":"Unique alerts with full details"},"composite_alerts":{"type":"array","items":{"$ref":"#/components/schemas/CompositeAlertSummary"},"description":"Live composite definitions for incident members (`alert_type=\"composite\"`)."},"triggers":{"type":"array","items":{"$ref":"#/components/schemas/IncidentAlert"},"description":"Alert triggers (each alert firing is a separate trigger)"}}}],"description":"Incident with its alerts (for detail view)"},"IngestRejection":{"type":"object","description":"One rejection cause of an org; never holds a secret, a header or body bytes.","required":["first_seen","status","reason","path"],"properties":{"first_seen":{"type":"integer","format":"int64","description":"Unix time in microseconds when this reason was first seen; never refreshed."},"path":{"type":"string"},"reason":{"$ref":"#/components/schemas/RejectionReason"},"status":{"type":"integer","format":"int32","minimum":0},"token_name":{"type":["string","null"]}}},"IngestionPasscode":{"type":"object","required":["passcode","user"],"properties":{"passcode":{"type":"string"},"user":{"type":"string"}}},"IngestionResponse":{"type":"object","required":["code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"error":{"type":["string","null"]},"status":{"type":"array","items":{"$ref":"#/components/schemas/StreamStatus"}}}},"InputMap":{"type":"object","required":["error_node_map"],"properties":{"error_node_map":{"type":"object","additionalProperties":{"type":"array","items":{}},"propertyNames":{"type":"string"}},"input_map":{"type":"object","additionalProperties":{"type":"array","items":{}},"propertyNames":{"type":"string"}},"output_map":{"type":"object","additionalProperties":{"type":"array","items":{}},"propertyNames":{"type":"string"}}}},"IntegrationResponse":{"type":"object","required":["id","org_id","name","source_type","enabled","config","destinations","created_by","created_at","updated_at"],"properties":{"config":{"type":"object"},"created_at":{"type":"integer","format":"int64"},"created_by":{"type":"string"},"destinations":{"type":"array","items":{"type":"string"}},"enabled":{"type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"org_id":{"type":"string"},"source_type":{"type":"string"},"token":{"type":["string","null"],"description":"Absent for a caller without `incident_integrations` PUT: it ingests into the org."},"updated_at":{"type":"integer","format":"int64"},"url":{"type":["string","null"],"description":"Carries the token, so it is withheld with it."}}},"InviteResponseItem":{"type":"object","required":["id","inviter_org_id","inviter_org_name","invitee_org_id","invitee_org_name","inviter_id","created_at","expires_at","status","token"],"properties":{"created_at":{"type":"integer","format":"int64"},"expires_at":{"type":"integer","format":"int64"},"id":{"type":"integer","format":"int32"},"invitee_org_id":{"type":"string"},"invitee_org_name":{"type":"string"},"inviter_id":{"type":"string"},"inviter_org_id":{"type":"string"},"inviter_org_name":{"type":"string"},"status":{"type":"string"},"token":{"type":"string"}}},"InviteStatus":{"type":"string","enum":["pending","accepted","rejected","expired"]},"IssueSeverity":{"type":"string","enum":["error","warning"]},"JobAckAnswer":{"anyOf":[{"$ref":"#/components/schemas/SyntheticsJobAckResponse"},{"type":"object","required":["results"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/JobAckResult"}}}}]},"JobAckResult":{"type":"object","required":["job_id","ok"],"properties":{"error":{"type":["string","null"]},"job_id":{"type":"string"},"ok":{"type":"boolean"},"run_complete":{"type":["boolean","null"]}}},"Join":{"type":"object","required":["stream","streamAlias","joinType","conditions"],"properties":{"conditions":{"type":"array","items":{"$ref":"#/components/schemas/JoinCondition"}},"joinType":{"type":"string"},"stream":{"type":"string"},"streamAlias":{"type":"string"}}},"JoinCondition":{"type":"object","required":["leftField","rightField","operation"],"properties":{"leftField":{"$ref":"#/components/schemas/SelectedField"},"operation":{"type":"string"},"rightField":{"$ref":"#/components/schemas/SelectedField"}}},"KFHRecordRequest":{"type":"object","required":["data"],"properties":{"data":{"type":"string"}}},"KeyType":{"type":"string","description":"Classification of correlation key strength for hierarchical upgrade logic\n\nHierarchy: AlertId (weakest) → Secondary → Primary (strongest)\nUpgrades only move UP the hierarchy, never down.","enum":["alert_id","secondary","primary"]},"L0Mode":{"type":"string","description":"How L0 relates to paging at one severity.","enum":["parallel","gate","only","off"]},"L0Modes":{"type":"object","description":"Per-severity modes, exactly as the `l0_json` column spells them.","required":["P1","P2","P3","P4"],"properties":{"P1":{"$ref":"#/components/schemas/L0Mode"},"P2":{"$ref":"#/components/schemas/L0Mode"},"P3":{"$ref":"#/components/schemas/L0Mode"},"P4":{"$ref":"#/components/schemas/L0Mode","description":"Covers P4 and P5 — neither pages a human, so neither has a gate to set."}}},"L0Policy":{"type":"object","description":"A team's L0 block. Ships with every auto-created policy, so nobody has to\nconfigure L0 to benefit from it. No `allow_demotion` knob: the ratchet is an\ninvariant of the engine, not a team preference.","required":["mode","triage_budget_seconds","allow_promotion","max_promotion_steps","allow_downgrade","allow_suppress"],"properties":{"allow_downgrade":{"type":"boolean","description":"A `Downgrade` needs `medium` or `high` confidence to ride quieter channels."},"allow_promotion":{"type":"boolean"},"allow_suppress":{"type":"boolean","description":"Opt-in; when enabled only a `high`-confidence Suppress silences the page."},"max_promotion_steps":{"type":"integer","format":"int32","description":"How far one verdict may raise a severity, so a P4 cannot become a P1 in\na single hop.","minimum":0},"mode":{"$ref":"#/components/schemas/L0Modes"},"triage_budget_seconds":{"type":"integer","format":"int64"}}},"LabelOption":{"type":"object","properties":{"position":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LabelPosition"}],"default":null},"rotate":{"type":["number","null"],"format":"double","default":null}}},"LabelPosition":{"type":"string","enum":["top","left","right","bottom","inside","insideLeft","insideRight","insideTop","insideBottom","insideTopLeft","insideBottomLeft","insideTopRight","insideBottomRight","outside"]},"LadderStep":{"type":"object","description":"One rung: when it fires, and everyone it pages.\n\nThe delay identifies the rung, so targets that fire together belong to the\nsame rung by construction and a ladder cannot show three consecutive rows\nall saying \"immediately\". It also gives the delivery ledger a key that\nsurvives reordering and renaming.","required":["after_micros","targets"],"properties":{"after_micros":{"type":"integer","format":"int64","description":"Delay from `opened_at`, in microseconds. Unique within a rung."},"targets":{"type":"array","items":{"$ref":"#/components/schemas/EscalationTarget"},"description":"Paged simultaneously. At least one."}}},"LastRunFields":{"type":"object","description":"The outcome of a report's latest run and when the next one is due.","properties":{"last_run_at":{"type":["integer","null"],"format":"int64","description":"End of the latest run, Unix µs; null before the first run."},"last_run_error":{"type":["string","null"]},"last_run_status":{"type":["string","null"],"description":"succeeded, error or skipped; null before the first run."},"next_run_at":{"type":["integer","null"],"format":"int64","description":"Due time of the next scheduled run, Unix µs."}}},"LatestSessionsResponse":{"type":"object","description":"Session-list pagination deliberately avoids an exact count query because\ncounting every distinct session is more expensive than fetching one page.\n`total` is therefore a lower bound while `has_more` is true, and becomes\nexact on the final page.","required":["took","total","from","size","hits","has_more"],"properties":{"from":{"type":"integer","format":"int64"},"function_error":{"type":"string"},"has_more":{"type":"boolean"},"hits":{"type":"array","items":{"type":"object"}},"size":{"type":"integer","format":"int64"},"took":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0},"trace_id":{"type":"string"}}},"LatestTracesAnswer":{"anyOf":[{"$ref":"#/components/schemas/SearchResponse"},{"$ref":"#/components/schemas/PaginatedResponse"}]},"Layout":{"type":"object","properties":{"h":{"type":"integer","format":"int64","default":0},"i":{"type":"integer","format":"int64","default":0},"w":{"type":"integer","format":"int64","default":0},"x":{"type":"integer","format":"int64","default":0},"y":{"type":"integer","format":"int64","default":0}}},"LeadingEntry":{"type":"object","description":"One leading hypothesis of the run, as it was led.","required":["id","statement"],"properties":{"id":{"type":"string"},"statement":{"type":"string"}}},"LegendHeight":{"type":"object","properties":{"unit":{"type":["string","null"],"default":null},"value":{"type":["number","null"],"format":"double","default":null}}},"LegendWidth":{"type":"object","properties":{"unit":{"type":["string","null"],"default":null},"value":{"type":["number","null"],"format":"double","default":null}}},"LicenseConfig":{"type":"object","required":["license_expiry","license_server_url","ingestion_quota_used","ingestion_history"],"properties":{"ingestion_history":{"type":"array","items":{"$ref":"#/components/schemas/UsageResult"}},"ingestion_quota_used":{"type":"number","format":"double"},"license_expiry":{"type":"integer","format":"int64"},"license_server_url":{"type":"string"}}},"LicenseResponse":{"type":"object","required":["installation_id","expired","ingestion_used","ingestion_exceeded","waivers","decision","base","evaluated_at","env_key_active","env_key_in_use","can_update_license","refresh"],"properties":{"base":{"type":"object"},"can_update_license":{"type":"boolean","description":"Whether `POST /license/refresh` would pass both its route check and its handler check."},"decision":{"type":"object"},"env_key_active":{"type":"boolean"},"env_key_in_use":{"type":"boolean","description":"Whether the loaded key is the `O2_LICENSE_KEY` one, i.e. no pasted key superseded it."},"evaluated_at":{"type":"integer","format":"int64"},"expired":{"type":"boolean"},"ingestion_exceeded":{"type":"integer","format":"int32","minimum":0},"ingestion_used":{"type":"number","format":"double"},"input":{"type":["object","null"]},"installation_id":{"type":"string"},"key":{"type":["string","null"]},"license":{"type":["object","null"]},"refresh":{"type":"object"},"rev_hwm_warning":{"type":["object","null"]},"waivers":{"type":"array","items":{"type":"object"}}}},"LineInterpolation":{"type":"string","enum":["smooth","linear","step-start","step-end","step-middle"]},"LinkStatusList":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/LinkStatusReport"}}}},"LinkStatusReport":{"type":"object","description":"One link's status call: its ranges from the owning querier and its access counters.","required":["link_id","ranges","access_count"],"properties":{"access_count":{"type":"integer","format":"int64"},"last_accessed_at":{"type":["integer","null"],"format":"int64"},"link_id":{"type":"string"},"ranges":{"type":"array","items":{"$ref":"#/components/schemas/RangeStatus"}}}},"LinkSubscriptionRequest":{"type":"object","description":"Request payload for linking Azure Marketplace subscription","required":["token"],"properties":{"token":{"type":"string"}}},"LinkSubscriptionResponse":{"type":"object","description":"Response from link-subscription endpoint","required":["success","customer_identifier"],"properties":{"customer_identifier":{"type":"string"},"message":{"type":["string","null"]},"success":{"type":"boolean"}}},"ListAlertsResponseBody":{"type":"object","description":"HTTP response body for `ListAlerts` endpoint.","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/ListAlertsResponseBodyItem"}}}},"ListAlertsResponseBodyItem":{"type":"object","description":"An item in the list returned by the `ListAlerts` endpoint.\n\n`condition` is always present: a concrete query for `scheduled`/`realtime`,\n`null` for `composite` and `anomaly_detection` (which have no query). Use\n`last_trained_at` and `status` for anomaly state. `trigger_condition` is\npresent for `scheduled`/`realtime` and omitted otherwise.","required":["alert_id","folder_id","folder_name","name","alert_type","enabled","is_real_time"],"properties":{"ack":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AlertAckSummary","description":"The acks in force on the alert's current firings."}]},"active_downtime":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ActiveDowntime","description":"The downtime muting this row now, for the Muted chip. Enterprise only."}]},"alert_id":{"type":"string"},"alert_type":{"type":"string","description":"Discriminator: \"scheduled\" | \"realtime\" | \"slo\" | \"anomaly_detection\" | \"composite\""},"child_count":{"type":["integer","null"],"description":"Composite rows only: number of referenced children.","minimum":0},"condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/QueryCondition"}]},"description":{"type":["string","null"]},"destinations":{"type":"array","items":{"type":"string"},"description":"Names of the notification destinations this alert delivers to\n(`Alert.destinations`). Lets the destination↔alert dependency view build\nthe linkage from the list alone; omitted when empty."},"enabled":{"type":"boolean"},"expression_summary":{"type":["string","null"],"description":"Composite rows only: the trigger expression with child IDs resolved to names."},"firing_started_at":{"type":["integer","null"],"format":"int64","description":"Start of the alert's current firing (µs); absent when not firing or for a multi-alert."},"folder_id":{"type":"string"},"folder_name":{"type":"string"},"groups_firing":{"type":["integer","null"],"format":"int32","description":"Multi-alerts only: how many of those groups were warning-or-worse,\nalso counted pre-cap. With `groups_observed` this is the \"N of M groups\nfiring\" chip. Counting retained state rows instead would silently\nunder-report whenever more than the cap's worth of groups fire, which\nis the silent truncation M-6 forbids."},"groups_firing_is_lower_bound":{"type":["boolean","null"],"description":"Whether `groups_firing` is a `>=` lower bound. Tracked separately\nbecause the two diverge: a full page that still reached healthy groups\nhas seen every firing group, so this stays exact while\n`groups_observed` does not."},"groups_observed":{"type":["integer","null"],"format":"int32","description":"Multi-alerts only (§5.4): how many groups the last evaluation observed,\ncounted **before** the M-6 cap truncated them. Absent for every alert\nthat has not opted in."},"groups_observed_is_lower_bound":{"type":["boolean","null"],"description":"Whether `groups_observed` is a `>=` lower bound — the bounded fetch\npage came back full, so groups beyond it were never seen. Render the\ncount with a `≥`."},"incident":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AlertIncidentLink","description":"The open incident the current firing belongs to. Enterprise only."}]},"is_real_time":{"type":"boolean"},"last_error":{"type":["string","null"],"description":"Last error message from training or detection. Only present for `anomaly_detection` items."},"last_outcome":{"type":["string","null"],"description":"Outcome of the most recent evaluation: \"firing\" | \"normal\" | \"error\" |\n\"notify_failed\" | \"succeeded\". Absent when the alert has never run.\n\nThis is the LAST RUN OUTCOME, not a live \"currently firing\" flag —\nalways render it alongside `last_outcome_at`. See Part IV of alerts.md."},"last_outcome_at":{"type":["integer","null"],"format":"int64","description":"When `last_outcome` was recorded (microseconds)."},"last_outcome_since":{"type":["integer","null"],"format":"int64","description":"When `last_outcome` last CHANGED (microseconds) — i.e. how long the\nalert has been in its current state."},"last_satisfied_at":{"type":["integer","null"],"format":"int64"},"last_trained_at":{"type":["integer","null"],"format":"int64","description":"Timestamp (µs) when the anomaly model was last successfully trained.\nOnly present for `anomaly_detection` items."},"last_triggered_at":{"type":["integer","null"],"format":"int64"},"level":{"type":["string","null"],"description":"Severity of the last classification: \"ok\" | \"warning\" | \"critical\".\n\nA SEPARATE axis from `last_outcome`: that says whether the evaluation\nfired, this says how bad. An alert can be `firing` at `warning`.\nAbsent for single-level alerts that never classified."},"level_since":{"type":["integer","null"],"format":"int64","description":"When `level` last CHANGED — powers \"critical for 20 minutes\"."},"name":{"type":"string"},"oncall_team":{"type":["string","null"],"description":"The on-call team this alert names, when it names one.\n\nRouting's highest-precedence tier, and the only tier a list row can\nreport: every other one resolves from the identity dimensions of the row\nthat fires, which an alert definition does not carry. Absent means\n\"resolved at fire time\", not \"pages nobody\".\n\nThe list has always had a column for this and never had the field, so\nevery alert read as unbound — including ones deliberately pinned."},"owner":{"type":["string","null"]},"priority":{"type":["integer","null"],"format":"int32","description":"Configured priority as the integer storage id 1..=5 (Feature 2, PT-3).\n\nA THIRD axis: `enabled` is is-it-running, `last_outcome` is\ndid-it-fire, `level` is how-bad-now, and this is how much humans care.\nAbsent when unset, which is every pre-Feature-2 alert.","example":3,"minimum":0},"referenced_by_composite_count":{"type":["integer","null"],"description":"Count of parent composites currently readable to the caller.","minimum":0},"status":{"type":["string","null"],"description":"Scheduler status string. Only present for `anomaly_detection` items.\nValues: \"waiting\" | \"ready\" | \"training\" | \"failed\" | \"disabled\""},"stream_name":{"type":["string","null"],"description":"The stream this alert watches. Absent for `composite` alerts (which\nwatch children, not a stream) and for an `anomaly_detection` config\nthat predates stream selection."},"stream_type":{"type":["string","null"],"description":"Paired with `stream_name` — present and absent together."},"tags":{"type":"array","items":{"type":"string"},"description":"Normalized selection tags (PT-6). Omitted when empty."},"template":{"type":["string","null"],"description":"Alert-level template override (`Alert.template`): when set it replaces the\ndestination-level template for every destination above. Absent when the\nalert defers to each destination's own template."},"trigger_condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TriggerCondition"}]}}},"ListDashboardsResponseBody":{"type":"object","description":"HTTP response body for `ListDashboards` endpoint.","required":["dashboards"],"properties":{"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/ListDashboardsResponseBodyItem"}}}},"ListDashboardsResponseBodyItem":{"type":"object","description":"An item in the list returned by the `ListDashboards` endpoint.","required":["version","hash","folder_id","folder_name","dashboard_id","title","description","role","owner","created","updatedAt"],"properties":{"created":{"type":"string","format":"date-time"},"dashboard_id":{"type":"string"},"description":{"type":"string"},"folder_id":{"type":"string"},"folder_name":{"type":"string"},"hash":{"type":"string"},"owner":{"type":"string"},"role":{"type":"string"},"title":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"v1":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Dashboard"}]},"v2":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Dashboard"}]},"v3":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Dashboard"}]},"v4":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Dashboard"}]},"v5":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Dashboard"}]},"v6":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Dashboard"}]},"v7":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Dashboard"}]},"v8":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Dashboard"}]},"version":{"type":"integer","format":"int32"}}},"ListDowntimesResponse":{"type":"object","required":["items","total","counts"],"properties":{"counts":{"$ref":"#/components/schemas/DowntimeStatusCounts"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DowntimeListItem"}},"total":{"type":"integer","minimum":0}}},"ListFoldersResponseBody":{"type":"object","description":"HTTP response body for `ListFolder` endpoint.","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/Folder"}}}},"ListIncidentsQuery":{"type":"object","description":"Query parameters for listing incidents","properties":{"limit":{"type":"integer","format":"int64","description":"Maximum number of results","minimum":0},"offset":{"type":"integer","format":"int64","description":"Offset for pagination","minimum":0},"status":{"type":["string","null"],"description":"Filter by status (open, acknowledged, resolved)"}}},"ListIncidentsResponse":{"type":"object","description":"Response for list incidents","required":["incidents","total"],"properties":{"incidents":{"type":"array","items":{"$ref":"#/components/schemas/Incident"}},"total":{"type":"integer","format":"int64","minimum":0}}},"ListIntegrationsResponse":{"type":"object","required":["integrations"],"properties":{"integrations":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationResponse"}}}},"ListInvoicesResponseBody":{"type":"object","required":["invoices"],"properties":{"invoices":{"type":"array","items":{"type":"object"}}}},"ListQueueReviewsResponseBody":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/QueueReviewSubmission"}}}},"ListRcaRunsQuery":{"type":"object","description":"Query parameters for listing an incident's analysis runs","properties":{"before":{"type":["string","null"],"description":"Return runs older than this run id (the last run of the previous page)"},"limit":{"type":["integer","null"],"format":"int64","description":"Page size (default 25, max 100)","minimum":0}}},"ListRcaRunsResponse":{"type":"object","description":"`GET .../rca/runs` response.","required":["runs","has_more"],"properties":{"has_more":{"type":"boolean"},"runs":{"type":"array","items":{"$ref":"#/components/schemas/RcaRunItem"}}}},"ListRunsResponse":{"type":"object","required":["runs","total"],"properties":{"runs":{"type":"array","items":{"$ref":"#/components/schemas/RunSummary"}},"total":{"type":"integer","format":"int64"}}},"ListStream":{"type":"object","required":["list","total"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/Stream"}},"total":{"type":"integer","minimum":0}}},"ListSubscriptionResponseBody":{"type":"object","required":["subscription_type"],"properties":{"customer_id":{"type":["string","null"]},"provider":{"type":["string","null"],"description":"Billing provider: \"stripe\", \"aws\", or \"azure\". Omitted for external-contract subs."},"subscription_type":{"type":"string"}}},"LlmJudgeScorerParams":{"type":"object","required":["provider_id"],"properties":{"extra_metadata_fields":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ExtraMetadataField"}},"include_reasoning":{"type":["boolean","null"]},"max_tokens":{"type":["integer","null"],"format":"int32","minimum":0},"model":{"type":["string","null"]},"output_parsing":{"type":["string","null"]},"provider_id":{"type":"string"},"temperature":{"type":["number","null"],"format":"double"},"timeout_ms":{"type":["integer","null"],"format":"int64","minimum":0}},"additionalProperties":false},"LlmScoreAnnotationSource":{"type":"string","description":"How an annotation was submitted.\n\nThe distinction is whether a review submission governed it, not which page\nit was typed on: Discovery is where a target is found and queued, so an\nannotation made there is a direct one, the same as any other.","enum":["queue","manual"]},"LlmScoreDataLevel":{"type":"string","enum":["span","trace","session","experiment"]},"LlmScoreDataSourceType":{"type":"string","enum":["llm_judge","code","remote","annotation","feedback","experiment"]},"LlmScoreDataType":{"type":"string","enum":["numeric","categorical","boolean"]},"LlmScoreErrorReason":{"type":"string","description":"Producer identity used to build the read-side deduplication key.\nWhy an errored Score carries no value.\n\nThe mirror of `skip_reason`: that explains a `Skipped` status, this explains\nan `Error` one. Terminality is a scalar comparison on this column, so\ndeciding whether a scorer is finished never depends on parsing a JSON blob.","enum":["attempt_failed","attempts_exhausted"]},"LlmScoreRecord":{"type":"object","description":"Open-ended JSON fields are stored as one string column each.\n\nLog ingestion flattens nested values before schema inference. A plain\n`Option<Value>` field therefore becomes one column per key, no parent key\nsurvives a `SELECT *`, and every key a scorer invents widens the stream\nschema permanently. `evaluation_key` already avoids this by being a\n`String`. Any field added here that holds open-ended JSON needs the same\n`serde_as` attribute.","required":["id","task_id","eval_run_id","evaluator_trace_id","org_id","target_scope","target_id","evaluation_key","score_version","level","name","data_type","source_type","_timestamp"],"properties":{"_timestamp":{"type":"integer","format":"int64"},"agent_env":{"type":["string","null"]},"agent_id":{"type":["string","null"]},"agent_name":{"type":["string","null"]},"agent_version":{"type":["string","null"]},"annotation_id":{"type":["string","null"]},"annotation_metadata":{"description":"Open-ended metadata the annotation request attached to the annotation as\na whole. Set only on the annotation path."},"annotation_source":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LlmScoreAnnotationSource"}]},"attempt_count":{"type":["integer","null"],"format":"int32","description":"Attempts this scorer dimension has consumed, 1-based. Resuming the\nbounded sequence after a restart reads this and nothing else.","minimum":0},"author":{"type":["string","null"]},"client_reported":{"type":["boolean","null"],"description":"True when the customer's own code produced this Score and reported it\nthrough the SDK. A client Score never carries a Scorer reference, so\nthis is what separates it from a platform Score in every query."},"client_scorer_key":{"type":["string","null"],"description":"Stable client-supplied identity for one local scorer. It separates\nmultiple client dimensions that bind the same Score Config."},"data_type":{"$ref":"#/components/schemas/LlmScoreDataType"},"error_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LlmScoreErrorReason"}]},"eval_run_id":{"type":"string"},"evaluation_key":{"type":"string"},"evaluator_trace_id":{"type":"string"},"experiment_id":{"type":["string","null"]},"id":{"type":"string"},"input_preview":{"type":["string","null"],"description":"Bounded excerpt of the target input the scorer evaluated."},"input_span_id":{"type":["string","null"],"description":"Span the scorer read the target input from, when it came from one span."},"job_id":{"type":["string","null"]},"job_version":{"type":["integer","null"],"format":"int32"},"level":{"$ref":"#/components/schemas/LlmScoreDataLevel"},"name":{"type":"string"},"org_id":{"type":"string"},"origin_source_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LlmScoreDataSourceType","description":"Original scorer provenance before an Experiment wraps the score in its\nown queryable source type. Older records omit this field."}]},"output_preview":{"type":["string","null"],"description":"Bounded excerpt of the target output the scorer evaluated."},"output_span_id":{"type":["string","null"],"description":"Span the scorer read the target output from, when it came from one span."},"queue_id":{"type":["string","null"],"description":"Queue provenance for Workbench review Scores. Together with\n`review_submission_id`, these fields make `_llm_scores` independently\nqueryable without a relational Review or Review Score table."},"queue_item_id":{"type":["string","null"]},"reasoning":{"type":["string","null"],"description":"Justification for this individual Score dimension."},"record_ts":{"type":["integer","null"],"format":"int64","description":"`_timestamp` of the Experiment execution record being scored. A score\nis fresh only while this still matches the latest execution record."},"ref_timestamp":{"type":["integer","null"],"format":"int64","description":"Timestamp of the evaluated span, trace, or session. This stays distinct\nfrom `_timestamp`, which records when the Score itself was written."},"review_submission_comments":{"type":["string","null"],"description":"Overall comment for the complete Review Submission. Annotation\nprojection repeats this value on each Score in the submission."},"review_submission_id":{"type":["string","null"],"description":"Logical N/N grouping key for authoritative annotation-source Scores."},"review_submission_score_count":{"type":["integer","null"],"format":"int64","description":"Distinct physical Score Config rows required for this complete N/N\nreview submission."},"row_id":{"type":["string","null"]},"score_config_id":{"type":["string","null"]},"score_config_row_id":{"type":["string","null"],"description":"Physical immutable Score Config row used for this Score. Queue reviews\nuse it to prove exact N/N rubric coverage."},"score_config_version":{"type":["string","null"]},"score_version":{"type":"integer","format":"int64"},"scorer_id":{"type":["string","null"]},"scorer_metadata":{"description":"Open-ended metadata that whatever produced this Score's value attached\nto it: LLM judge output, remote scorer output, or a reviewer's per-Score\nmetadata. Never interpreted by the server."},"scorer_version":{"type":["string","null"]},"session_id":{"type":["string","null"]},"skip_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ExperimentSkipReason","description":"Permanent reason this dimension was intentionally not scored."}]},"source_stream":{"type":["string","null"]},"source_stream_type":{"type":["string","null"]},"source_type":{"$ref":"#/components/schemas/LlmScoreDataSourceType"},"span_id":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/LlmScoreStatus"},"target_id":{"type":"string"},"target_scope":{"$ref":"#/components/schemas/LlmScoreTargetScope","description":"Canonical evaluated target identity for latest-score grouping."},"task_id":{"type":"string"},"task_producer":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/EvaluationTaskProducer"}]},"task_trigger_reason":{"type":["string","null"],"description":"Free-text reason a person gave when triggering a manual evaluation.\nDistinct from `reasoning`, which is the scorer's justification for the\nvalue it produced."},"trace_id":{"type":["string","null"]},"trial_index":{"type":["integer","null"],"format":"int32","minimum":0},"value_boolean":{"type":["boolean","null"]},"value_categorical":{"type":["string","null"]},"value_numeric":{"type":["number","null"],"format":"double"}}},"LlmScoreStatus":{"type":"string","description":"Outcome of one scorer dimension for one target.\n\nOlder score records predate this field, so successful scoring remains the\ndeserialization default.","enum":["success","skipped","error"]},"LlmScoreTargetScope":{"type":"string","enum":["span","trace","session","experiment"]},"LocationAgentInfo":{"type":"object","description":"A registered agent as shown on the location detail page (read-only —\nagents self-register; there is nothing to edit).","required":["id","name","last_seen_at","created_at","live"],"properties":{"capabilities":{},"created_at":{"type":"integer","format":"int64"},"id":{"type":"string"},"last_seen_at":{"type":"integer","format":"int64"},"live":{"type":"boolean"},"name":{"type":"string"},"version":{"type":["string","null"]}}},"LocationCheckSummary":{"type":"object","description":"One synthetic assigned to the location, for the detail page's checks table.","required":["id","name","type","interval_secs","enabled","last_check_status"],"properties":{"enabled":{"type":"boolean"},"id":{"type":"string"},"interval_secs":{"type":"integer","format":"int64"},"last_check_status":{"$ref":"#/components/schemas/SyntheticStatus"},"name":{"type":"string"},"type":{"$ref":"#/components/schemas/SyntheticType"}}},"LocationDetail":{"allOf":[{"$ref":"#/components/schemas/LocationEntry"},{"type":"object","required":["agents","checks"],"properties":{"agents":{"type":"array","items":{"$ref":"#/components/schemas/LocationAgentInfo"}},"checks":{"type":"array","items":{"$ref":"#/components/schemas/LocationCheckSummary"}},"install":{"type":["string","null"],"description":"Install command for private rows; withheld without PUT on the default folder."}}}],"description":"`GET /{org}/synthetics/locations/{id}` — the location entry (same stats as\nthe list) plus its agents and assigned checks."},"LocationEntry":{"type":"object","description":"One location as returned by `GET /{org}/synthetics/locations` — a superset\nof the legacy env-derived shape (`id`/`name`/`region`/`provider`) plus\nregistry fields and computed per-type availability.","required":["id","label","region","provider","kind","pool","enabled","types","live_agents","agent_names","agents_total","status","checks_count","checks_per_min"],"properties":{"agent_names":{"type":"array","items":{"type":"string"},"description":"Names of the live agents (most recently seen first) — shown as subtext\nin the check form's private-location rows."},"agents_total":{"type":"integer","description":"Total registered agents (live + stale).","minimum":0},"checks_count":{"type":"integer","description":"Synthetics in the caller's org that run from this location.","minimum":0},"checks_per_min":{"type":"number","format":"double","description":"Σ 60/interval_secs over the enabled synthetics above."},"enabled":{"type":"boolean"},"id":{"type":"string"},"kind":{"type":"string"},"label":{"type":"string","description":"Display label — user/agent-chosen (private) or o2's friendly name (public)."},"last_seen_at":{"type":["integer","null"],"format":"int64","description":"Most recent agent `last_seen_at` (epoch µs)."},"live_agents":{"type":"integer","description":"Number of live agents serving this location.","minimum":0},"live_status_unknown":{"type":"boolean","description":"True when `status` is this region's best guess rather than an\nobservation — see [`resolve_live_status`].\n\nAdditive on purpose. Widening `status` itself with a fourth value would\nbreak every client that switches on it: the locations table renders\n`t(\"synthetics.privateLocations.status.\" + status)`, so an unrecognised\nvalue shows the raw key path, and the check form's tier mapping treats\n\"not online and not pending\" as offline — the exact false alarm this\nexists to remove. An unknown field is ignored instead.\n\nSkipped when false, so a deployment without super cluster serves a\nbyte-identical payload to the one it served before this field existed."},"pool":{"type":"string"},"provider":{"type":"string"},"region":{"type":"string"},"status":{"type":"string","description":"\"online\" (any live agent; public rows always), \"offline\" (agents\nregistered but all stale), \"pending\" (private row, nothing registered)."},"types":{"type":"array","items":{"type":"string"},"description":"Check types runnable at this location (computed: base set for public\nrows, live agents' self-reported capabilities for private rows)."},"version":{"type":["string","null"],"description":"Binary version of the most recently seen agent."}}},"LockoutBackoff":{"type":"string","description":"How lockout duration grows with each successive lockout.","enum":["linear","exponential"]},"LockoutPolicy":{"type":"object","description":"Failed-login lockout knobs.","properties":{"backoff":{"oneOf":[{"$ref":"#/components/schemas/LockoutBackoff"}],"default":"exponential"},"bucket_size":{"type":"integer","format":"int32","description":"Failed attempts before each subsequent lockout. `0` reuses `threshold`.","default":0,"minimum":0},"max_secs":{"type":"integer","format":"int32","default":3600,"minimum":0},"start_secs":{"type":"integer","format":"int32","default":60,"minimum":0},"threshold":{"type":"integer","format":"int32","description":"Failed attempts before the first lockout. `0` disables lockout entirely.","default":5,"minimum":0}}},"LockoutState":{"type":"object","description":"A user's lockout state as an administrator sees it.\n\nThe counters and the escalation level are included because the reader is an authenticated\ninstance admin. They must not be handed to the user they describe: someone who can read the\nlevel and the remaining seconds can derive the thresholds behind them and pace attempts to stay\nunderneath.","required":["email","locked","failed_attempts","lockout_level"],"properties":{"email":{"type":"string"},"failed_attempts":{"type":"integer","format":"int32"},"last_failed_at":{"type":["integer","null"],"format":"int64"},"locked":{"type":"boolean"},"locked_until":{"type":["integer","null"],"format":"int64"},"lockout_level":{"type":"integer","format":"int32","description":"How many lockouts this account has served. Kept after a lock expires, because it is what\nmakes the next one longer."},"retry_after_secs":{"type":["integer","null"],"format":"int64","description":"Seconds until the account may try again, present only while the lock holds."}}},"LogicalOp":{"type":"string","enum":["and","or"]},"LokiEntry":{"type":"object","description":"Loki log entry containing timestamp, message, and optional metadata","required":["timestamp","line"],"properties":{"line":{"type":"string","description":"Log message content"},"structured_metadata":{"type":["object","null"],"description":"Optional structured metadata as key-value pairs","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"timestamp":{"type":"string","description":"Timestamp as nanosecond unix epoch string (e.g., \"1609459200000000000\")"}}},"LokiPushRequest":{"type":"object","description":"Internal Loki JSON types for native Loki push API format\nLoki push request - matches native JSON format exactly","required":["streams"],"properties":{"streams":{"type":"array","items":{"$ref":"#/components/schemas/LokiStream"},"description":"Array of log streams, each containing labels and log entries"}}},"LokiPushResponse":{"type":"object","description":"Loki Push Response (for documentation only - actual responses are 204 No Content or plain text)","required":["success"],"properties":{"success":{"type":"boolean","description":"Success indicator"}}},"LokiStream":{"type":"object","description":"Loki stream containing labels and log entries","required":["stream","values"],"properties":{"stream":{"type":"object","description":"Stream labels as key-value pairs (e.g., {\"service\": \"api\", \"stream_name\": \"logs\"})","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"values":{"type":"array","items":{"$ref":"#/components/schemas/LokiEntry"},"description":"Array of log entries, each containing timestamp, message, and optional structured metadata"}}},"MapSymbolStyle":{"type":"object","properties":{"size":{"type":"string","default":""},"size_by_value":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SizeByValue"}],"default":null},"size_fixed":{"type":"number","format":"double","default":0.0}}},"MapType":{"type":"object","properties":{"type":{"type":["string","null"],"default":null}}},"MapView":{"type":"object","properties":{"lat":{"type":"number","format":"double","default":0.0},"lng":{"type":"number","format":"double","default":0.0},"zoom":{"type":"number","format":"double","default":0.0}}},"Mapping":{"type":"object","properties":{"color":{"type":["string","null"],"default":null},"from":{"type":["string","null"],"default":null},"match":{"type":["string","null"],"default":null},"pattern":{"type":["string","null"],"default":null},"text":{"type":["string","null"],"default":null},"textColor":{"type":["string","null"],"default":null},"to":{"type":["string","null"],"default":null},"type":{"type":["string","null"],"default":null},"value":{"type":["string","null"],"default":null}}},"MarkArea":{"type":"object","description":"Shaded band on a cartesian chart; `axis` is \"x\" or \"y\", `from`/`to` are axis values as strings.","properties":{"axis":{"type":["string","null"],"default":null},"color":{"type":["string","null"],"default":null},"from":{"type":["string","null"],"default":null},"name":{"type":["string","null"],"default":null},"to":{"type":["string","null"],"default":null}}},"MarkFalsePositiveRequest":{"type":"object","properties":{"snooze_hours":{"type":"integer","format":"int64","description":"Hours to snooze the underlying check org-wide (default 6, per mockup\nB1's \"snooze 6h\")."}}},"MarkLine":{"type":"object","properties":{"name":{"type":["string","null"],"default":null},"type":{"type":["string","null"],"default":null},"value":{"type":["string","null"],"default":null}}},"MarkLookup":{"type":"string","description":"Whether the caller's protection lookup answered; only `Ok` lets `protected` reach the gate.","enum":["ok","failed","not_checked"]},"MarkReadRequest":{"type":"object","description":"`all` is the \"clear my inbox\" button and is bounded server-side.","properties":{"all":{"type":"boolean"},"event_ids":{"type":"array","items":{"type":"string"}},"read":{"type":"boolean","description":"`false` puts them back to unread: a 3am dismissal by accident must be undoable."}}},"MatchKind":{"type":"string","description":"How an object was matched when no query referencing the metric could be parsed.","enum":["text"]},"MatchOp":{"type":"string","description":"How a rule value is compared with a field: `in` lists every value, the rest take one each.","enum":["eq","in","prefix","suffix","contains","regex"]},"MemberLoad":{"type":"object","description":"What one person carried.","required":["user_email","pages","nights","acks"],"properties":{"acks":{"type":"integer","format":"int64"},"nights":{"type":"integer","format":"int64","description":"How many of those arrived between 22:00 and 06:00 in the team's zone."},"pages":{"type":"integer","format":"int64","description":"Pages sent to them — counted off the delivery ledger, so a firing that\nclimbed three rungs counts once for each of the three people it reached."},"user_email":{"type":"string"}}},"MemberReachability":{"type":"object","description":"What would happen if the ladder tried to reach one person right now.","required":["user_email","is_org_user","mailbox_shaped","channels","deliverable_channels","configured_but_unverified","would_a_page_land"],"properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/ChannelReadiness"},"description":"Every channel, with its verdict. The UI's row of chips."},"configured_but_unverified":{"type":"array","items":{"type":"string"},"description":"Methods on file that no transport may use — `phone`, `push`."},"deliverable_channels":{"type":"array","items":{"$ref":"#/components/schemas/Channel"},"description":"Channels that could carry a page to this person today."},"is_org_user":{"type":"boolean","description":"The address resolves to a user of this organization. When false, nothing\nelse can be true: there is no inbox, no login, and no way for this person\nto acknowledge anything."},"mailbox_shaped":{"type":"boolean","description":"The address is shaped like a mailbox. `root@example` and `admin` are\nboth perfectly valid OpenObserve logins and neither can receive mail."},"user_email":{"type":"string"},"why_not":{"type":["string","null"],"description":"Why a page would not land. `None` when it would."},"would_a_page_land":{"type":"boolean","description":"The one boolean the badge renders. True iff at least one channel could\ndeliver."}}},"MemberResponseItem":{"type":"object","required":["id","payer_org_id","payer_org_name","member_org_id","member_org_name","created_at","created_by"],"properties":{"accepted_by":{"type":["string","null"]},"created_at":{"type":"integer","format":"int64"},"created_by":{"type":"string"},"id":{"type":"integer","format":"int32"},"member_org_id":{"type":"string"},"member_org_name":{"type":"string"},"payer_org_id":{"type":"string"},"payer_org_name":{"type":"string"}}},"MemberState":{"type":"string","enum":["pending","assigned","sent","accepted","running","rejected","removed"]},"MembershipResponse":{"type":"object","properties":{"membership":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MemberResponseItem"}]}}},"MentionRule":{"oneOf":[{"type":"string","enum":["default"]},{"type":"string","enum":["here"]},{"type":"string","enum":["channel"]},{"type":"string","enum":["none"]},{"type":"object","required":["subteam"],"properties":{"subteam":{"type":"object","required":["subteam_id","handle"],"properties":{"handle":{"type":"string"},"subteam_id":{"type":"string"}}}}}],"description":"Who a repeat or a level-up mentions; `Default` is `@here` for critical and nobody otherwise."},"Metadata":{"type":"object","required":["metric_type","metric_family_name","help","unit"],"properties":{"help":{"type":"string"},"metric_family_name":{"type":"string"},"metric_type":{"$ref":"#/components/schemas/MetricType"},"unit":{"type":"string"}}},"MetadataObject":{"type":"object","required":["type","help","unit"],"properties":{"help":{"type":"string"},"type":{"type":"string"},"unit":{"type":"string"}}},"MetricType":{"type":"string","enum":["Unknown","Counter","Gauge","Histogram","GaugeHistogram","ExponentialHistogram","Summary","Info","StateSet","Empty"]},"MetricUsage":{"type":"object","description":"The objects that use a metric, and how many unparseable queries name it.","required":["dashboards","alerts","slos","pipelines","unparsed"],"properties":{"alerts":{"type":"array","items":{"$ref":"#/components/schemas/AlertUsage"}},"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/DashboardUsage"}},"pipelines":{"type":"array","items":{"$ref":"#/components/schemas/ObjectUsage"}},"slos":{"type":"array","items":{"$ref":"#/components/schemas/ObjectUsage"}},"unparsed":{"type":"integer","description":"Queries that name the metric but could not be parsed, so matched only as text.","minimum":0}}},"ModelPricingDefinition":{"type":"object","description":"A model pricing definition that maps model names (via regex) to pricing tiers.","properties":{"children":{"type":"array","items":{"type":"object"},"description":"Definitions shadowed by this one (same match_pattern, lower source/sort priority).\nOnly populated in list responses — not stored in the database.","default":[]},"created_at":{"type":"integer","format":"int64","description":"Created timestamp in microseconds","default":0},"description":{"type":"string","description":"Human-readable description. Populated for built-in entries.","default":""},"enabled":{"type":"boolean","description":"Whether this definition is active","default":false},"id":{"type":["string","null"],"description":"Unique identifier (KSUID)","default":null},"match_pattern":{"type":"string","description":"Regex pattern to match model names from incoming spans.\nExample: \"(?i)^gpt-4o\" or \"(?i)^(claude-sonnet-4-6)$\"\nMax length: 512 characters.","default":""},"name":{"type":"string","description":"Display name for the model (e.g., \"GPT-4o\", \"Claude Sonnet 4.6\")","default":""},"org_id":{"type":"string","description":"Organization ID","default":""},"provider":{"type":"string","description":"Provider name (e.g., \"OpenAI\", \"Anthropic\"). Populated for built-in entries.","default":""},"sort_order":{"type":"integer","format":"int32","description":"Explicit sort order for deterministic tie-breaking when multiple definitions match the\nsame model name and have equal (or absent) `valid_from` values.\nLower values are checked first; the first match wins.\nDefaults to 0 — set a lower number to make a definition take priority.","default":0},"source":{"oneOf":[{"$ref":"#/components/schemas/PricingSource","description":"Ownership source: built_in (synced from GitHub), meta_org, or org."}],"default":"org"},"tiers":{"type":"array","items":{"$ref":"#/components/schemas/PricingTierDefinition"},"description":"Pricing tiers; `ranks_tiers()` decides between first-match and highest-rank selection.","default":[]},"updated_at":{"type":"integer","format":"int64","description":"Updated timestamp in microseconds","default":0},"valid_from":{"type":["integer","null"],"format":"int64","description":"Optional Unix timestamp (microseconds) from which this definition is valid.\nWhen multiple definitions match the same model name, the one with the\ngreatest `valid_from` that is still <= the span's start time is used.\nIf None, the definition is valid for all time.","default":null}}},"ModelUsage":{"type":"object","required":["spans","tokens"],"properties":{"model":{"type":["string","null"],"description":"Null for spans that carry no model name."},"spans":{"type":"integer","format":"int64"},"tokens":{"type":"integer","format":"int64"}}},"MoveAlertsRequestBody":{"type":"object","description":"HTTP request body for `MoveAlerts` endpoint.","required":["alert_ids","dst_folder_id"],"properties":{"alert_ids":{"type":"array","items":{"type":"string"},"description":"IDs of the alerts to move."},"anomaly_config_ids":{"type":"array","items":{"type":"string"},"description":"IDs of anomaly detection configs to move. Defaults to empty when not\nprovided. Callers should always supply this to avoid per-ID DB lookups."},"dst_folder_id":{"type":"string","description":"Indicates the folder to which alerts should be moved."}}},"MoveDashboardRequestBody":{"type":"object","description":"HTTP request body for `MoveDashboard` endpoint.","required":["from","to"],"properties":{"from":{"type":"string"},"to":{"type":"string"}}},"MoveDashboardsRequestBody":{"type":"object","description":"HTTP request body for `MoveDashboards` endpoint.","required":["dashboard_ids","dst_folder_id"],"properties":{"dashboard_ids":{"type":"array","items":{"type":"string"},"description":"IDs of the dashboards to move."},"dst_folder_id":{"type":"string","description":"Indicates the folder to which dashboard should be moved."}}},"MoveDowntimesRequest":{"type":"object","required":["downtime_ids","dst_folder_id"],"properties":{"downtime_ids":{"type":"array","items":{"type":"string"}},"dst_folder_id":{"type":"string"}}},"MoveSyntheticsRequestBody":{"type":"object","required":["synthetic_ids","dst_folder_id"],"properties":{"dst_folder_id":{"type":"string"},"synthetic_ids":{"type":"array","items":{"type":"string"}}}},"MoveWorkflowsRequestBody":{"type":"object","description":"MoveWorkflows","required":["workflow_ids","dst_folder_id"],"properties":{"dst_folder_id":{"type":"string","description":"Destination folder id."},"workflow_ids":{"type":"array","items":{"type":"string"},"description":"IDs of the workflows to move."}}},"MultiSearchResponse":{"type":"object","required":["took","hits","total","from","size","cached_ratio","scan_size","idx_scan_size","scan_records"],"properties":{"advisory":{"type":["string","null"],"description":"Human/agent-readable note about server-side formatting decisions."},"cached_ratio":{"type":"integer","minimum":0},"columns":{"type":"array","items":{"type":"string"}},"converted_histogram_query":{"type":["string","null"]},"data":{"type":["string","null"],"description":"Formatted result block when `format` is set; `hits` is emptied."},"format":{"type":["string","null"],"description":"Set when `agent_options.output_format` reformatted `hits` into `data`:\n\"csv\", \"md_table\", or \"ndjson\" (automatic fallback for sparse results)."},"from":{"type":"integer","format":"int64"},"function_error":{"type":"array","items":{"type":"string"}},"histogram_breakdown_field":{"type":["string","null"]},"histogram_interval":{"type":["integer","null"],"format":"int64"},"hits":{"type":"array","items":{"anyOf":[{"type":"object"},{"type":"array","items":{}}]},"description":"Rows, or with `per_query_response` one array of values per query"},"idx_scan_size":{"type":"integer","minimum":0},"is_histogram_eligible":{"type":["boolean","null"]},"is_partial":{"type":"boolean"},"new_end_time":{"type":["integer","null"],"format":"int64"},"new_start_time":{"type":["integer","null"],"format":"int64"},"order_by":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/OrderBy"}]},"order_by_metadata":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string"},{"type":"string","enum":["desc","asc"]}]}},"peak_memory_usage":{"type":["number","null"],"format":"double"},"query_index":{"type":["integer","null"],"minimum":0},"result_cache_ratio":{"type":"integer","minimum":0},"scan_records":{"type":"integer","minimum":0},"scan_size":{"type":"integer","minimum":0},"size":{"type":"integer","format":"int64"},"took":{"type":"integer","minimum":0},"took_detail":{"$ref":"#/components/schemas/ResponseTook"},"total":{"type":"integer","minimum":0},"trace_id":{"type":"string"},"work_group":{"type":["string","null"]}}},"MuteSource":{"type":"string","description":"Where a quick mute came from; the web app's own calls are `openobserve`.","enum":["slack","openobserve","api"]},"MutedPage":{"type":"object","description":"One page a mute snoozed until it ends; `refused` says why it was not.","required":["response_id","team"],"properties":{"refused":{"type":["string","null"]},"response_id":{"type":"string"},"snoozed_until":{"type":["integer","null"],"format":"int64"},"team":{"type":"string"}}},"NamedEvent":{"type":"object","required":["id","app","name","rules","version","createdBy","createdAt","updatedBy","updatedAt"],"properties":{"app":{"type":"string"},"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"rules":{"type":"array","items":{"$ref":"#/components/schemas/Rule"}},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"version":{"type":"integer","format":"int32"}}},"NamedEventList":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/NamedEvent"}}}},"NamedEventRef":{"type":"object","description":"A deleted named event's id and the name it had when it was deleted.","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"NamedEventRefList":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/NamedEventRef"}}}},"Node":{"type":"object","required":["id","data","position","io_type"],"properties":{"data":{"type":"object","description":"Node configuration. Structure depends on node_type:\n- stream: { \"node_type\": \"stream\", \"org_id\": \"org\", \"stream_name\": \"name\", \"stream_type\":\n  \"logs\"|\"metrics\"|\"traces\" }\n- function: { \"node_type\": \"function\", \"name\": \"func_name\", \"after_flatten\": bool }\n- condition: { \"node_type\": \"condition\", \"conditions\": {...} }\n- query: { \"node_type\": \"query\", \"org_id\": \"org\", \"stream_type\": \"logs\", \"query_condition\":\n  {...}, \"trigger_condition\": {...} }\n- remote_stream: { \"node_type\": \"remote_stream\", \"org_id\": \"org\", \"destination_name\":\n  \"dest\" }"},"id":{"type":"string","description":"Unique identifier for the node (use UUID format)"},"io_type":{"type":"string","description":"Node role in the pipeline. MUST be one of:\n- \"input\": Source stream node (first node in pipeline)\n- \"output\": Destination stream node (last node in pipeline)\n- \"default\": Processing node (function, condition, etc.)","example":"input"},"is_disabled":{"type":"boolean"},"meta":{"type":["object","null"],"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"position":{"$ref":"#/components/schemas/Position","description":"Visual position for UI rendering"},"style":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/NodeStyle"}]}}},"NodeErrors":{"type":"object","required":["node_id","node_type","errors","error_count"],"properties":{"error_count":{"type":"integer","format":"int32"},"errors":{"type":"array","items":{"type":"array","items":{}}},"function_name":{"type":["string","null"]},"node_id":{"type":"string"},"node_type":{"type":"string"}}},"NodeStyle":{"type":"object","properties":{"backgroundColor":{"type":["string","null"]}}},"NotAvailableReason":{"type":"string","description":"Why a panel is withheld; deliberately generic, it never names a stream on the public plane.","enum":["unauthorized","unsupported","no_query","too_large","too_many_panels","truncated","build_error","too_old","changed"]},"NoticeAdminView":{"type":"object","description":"Admin view of a notice: unlike [`PublicNotice`], this carries the internal\nid and mapped component ids the edit UI needs to round-trip — it must\nnever be reachable from the public plane.","required":["id","kind","impact","source","title","body","state","starts_at","excluded_from_uptime","component_ids","created_at","updated_at"],"properties":{"body":{"type":"string"},"component_ids":{"type":"array","items":{"type":"string"}},"created_at":{"type":"integer","format":"int64"},"excluded_from_uptime":{"type":"boolean"},"id":{"type":"string"},"impact":{"type":"integer","format":"int32"},"kind":{"type":"integer","format":"int32"},"resolved_at":{"type":["integer","null"],"format":"int64"},"source":{"type":"integer","format":"int32","description":"0 auto, 1 manual."},"starts_at":{"type":"integer","format":"int64"},"state":{"type":"integer","format":"int32"},"title":{"type":"string"},"updated_at":{"type":"integer","format":"int64"}}},"NoticeKind":{"type":"string","enum":["incident","maintenance","info"]},"NoticeState":{"type":"string","enum":["scheduled","active","resolved"]},"NoticeUpdateRequest":{"type":"object","required":["body"],"properties":{"body":{"type":"string"}}},"NoticeUpdateView":{"type":"object","required":["id","body","created_at"],"properties":{"body":{"type":"string"},"created_at":{"type":"integer","format":"int64"},"id":{"type":"string"},"owner":{"type":["string","null"]}}},"NotificationEvent":{"type":"string","enum":["started","ending_soon","ended","cancelled","extended"]},"NotificationEvents":{"type":"object","properties":{"cancelled":{"type":"boolean"},"ended":{"type":"boolean"},"ending_soon":{"type":"boolean"},"extended":{"type":"boolean"},"started":{"type":"boolean"}}},"NotificationKind":{"type":"string","enum":["alert","incident","anomaly","synthetics","downtime","on_call"]},"O2EntityAuthorization":{"type":"object","required":["object","permission"],"properties":{"object":{"type":"string"},"permission":{"$ref":"#/components/schemas/Permission"}}},"ObjectUsage":{"type":"object","description":"An SLO or scheduled pipeline whose query reads the metric.","required":["id","name"],"properties":{"id":{"type":"string"},"match":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MatchKind","description":"`text` when only an unparseable query names the metric; absent for a parsed match."}]},"name":{"type":"string"}}},"OnCallPersonRef":{"type":"object","required":["email","team"],"properties":{"email":{"type":"string"},"name":{"type":["string","null"]},"team":{"type":"string"}}},"OnCallPosition":{"type":"object","description":"Who one rotation puts on call at an instant.\n\nOne per rotation, and only a rotation produces one — so a position cannot\nappear here because something derived it rather than because it is staffed.","required":["rotation_id","rotation_name","rule","user_email"],"properties":{"next_user_email":{"type":["string","null"],"description":"Who takes over at the next handover.\n\nDisplay only — nothing pages this. It once doubled as the secondary,\nwhich is how one team got two different people both correctly labelled\n\"the secondary\"."},"override_id":{"type":["string","null"],"description":"Set when a cover, rather than a shift rule, put this person here."},"rotation_id":{"type":"string","description":"The rotation's id. What a level of the escalation policy points at."},"rotation_name":{"type":"string","description":"The rotation's name, for a human reading a page or a calendar."},"rule":{"type":"string","description":"Which shift rule inside it produced this answer."},"user_email":{"type":"string"}}},"OnCallResponse":{"type":"object","description":"The record itself, as the API and the UI see it.","required":["id","org_id","subject","priority","state","opened_at"],"properties":{"acked_at":{"type":["integer","null"],"format":"int64"},"acked_by":{"type":["string","null"]},"cause":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ResolutionCause","description":"Why it happened, captured at resolve — the history the next firing of\nthis rule reads."}]},"cause_note":{"type":["string","null"],"description":"The sentence beside the structured cause. One dropdown plus one line is\nthe whole ask — anything longer does not get filled in at 3am."},"closed_at":{"type":["integer","null"],"format":"int64"},"exhausted_at":{"type":["integer","null"],"format":"int64","description":"When the ladder ran out with nobody answering. `None` while it is still\nclimbing, or if somebody took it first.\n\nDeliberately NOT a `ResponseState`. An exhausted page can still be\nacknowledged and resolved, so a lifecycle state would force a false\neither/or: exhaustion is a property of the ladder, the state is a\nproperty of the human."},"id":{"type":"string"},"incident_id":{"type":["string","null"],"description":"Set only when this firing also produced an incident. A record is never\nowned by an incident, so this stays `None` for most firings."},"ladder_anchor":{"type":["integer","null"],"format":"int64","description":"Where step delays count from: `opened_at`, moved by a snooze or a triage-held first page."},"ladder_run":{"type":["integer","null"],"format":"int32","description":"Which run of the ladder the record is on.\n\nHanding a page to another person or team starts a new run, and the ledger\nis read per run — which is what makes the receiving responder's ladder\nbegin at its first rung. Absent means the first run."},"opened_at":{"type":"integer","format":"int64"},"org_id":{"type":"string"},"origin_response_id":{"type":["string","null"],"description":"For an impacted record, the owner record it was opened alongside."},"priority":{"type":"integer","format":"int32","description":"`AlertPriority::to_i32` — the same scale alerts already use."},"responder_role":{"$ref":"#/components/schemas/ResponderRole"},"snoozed_until":{"type":["integer","null"],"format":"int64","description":"Quiet until this instant, in micros.\n\nNot an acknowledgement: snoozing says \"I know, stop shouting\", not \"I\nhave this\". The record stays open and unowned and the ladder resumes when\nit expires — which is what makes it safe to offer."},"state":{"$ref":"#/components/schemas/ResponseState"},"subject":{"$ref":"#/components/schemas/SubjectRef"},"team_id":{"type":["string","null"],"description":"The team that owns this firing, or `None` when routing found nobody.\n\nA teamless record pages nobody — no policy, no rotation, no ladder — and\nexists so the firing appears beside the ones that did page. Handing it to\na team gives it an owner and starts its ladder (R-D6)."},"title":{"type":["string","null"],"description":"What the page is about. Kept on the record so it survives the alert\nbeing renamed or deleted."},"updated_at":{"type":"integer","format":"int64","description":"Revision of the write this record came from, and what a replica accepts\nor refuses a snapshot on. The queue redelivers an unacked message behind\nnewer ones, so a blind apply lets an older snapshot un-acknowledge a\npage that a human already answered."}}},"OpenQuestion":{"type":"object","description":"The question a paused run waits on.","required":["question_id","question","need"],"properties":{"deadline_at":{"type":["integer","null"],"format":"int64","description":"µs; the run's `input_deadline_at`."},"hypothesis_id":{"type":["string","null"]},"need":{"type":"string"},"question":{"type":"string"},"question_id":{"type":"string"}}},"Operator":{"type":"string","enum":["=","!=",">",">=","<","<=","contains","not_contains","is_null","is_not_null","is_empty","is_not_empty"]},"OrderBy":{"type":"string","enum":["desc","asc"]},"OrgCleanupTask":{"type":"object","required":["id","org_id","org_name","step","step_order","status","attempts","created_at","updated_at"],"properties":{"attempts":{"type":"integer","format":"int32"},"created_at":{"type":"integer","format":"int64"},"id":{"type":"string"},"last_error":{"type":["string","null"]},"lease_until":{"type":["integer","null"],"format":"int64"},"org_id":{"type":"string"},"org_name":{"type":"string"},"running_by":{"type":["string","null"]},"status":{"type":"string"},"step":{"type":"string"},"step_order":{"type":"integer","format":"int32"},"updated_at":{"type":"integer","format":"int64"}}},"OrgDetails":{"type":"object","required":["id","identifier","name","user_email","ingest_threshold","search_threshold","type","UserObj"],"properties":{"UserObj":{"$ref":"#/components/schemas/OrgUser"},"created_at":{"type":"integer","format":"int64","description":"When the organization was created, as a Unix timestamp in microseconds; 0 when unknown."},"id":{"type":"integer","format":"int64"},"identifier":{"type":"string"},"ingest_threshold":{"type":"integer","format":"int64"},"name":{"type":"string"},"owner_email":{"type":"string","description":"The org admin/owner's email — used by the frontend to disambiguate\ntwo orgs that share a display name (e.g. two orgs both named\n\"default\"). Empty when no admin could be resolved (e.g. root-user\nview of a stale org)."},"owner_first_name":{"type":"string","description":"The org admin/owner's first name, when set; the frontend falls back\nto the local part of `owner_email` when this is empty."},"plan":{"type":"integer","format":"int32"},"search_threshold":{"type":"integer","format":"int64"},"type":{"type":"string"},"user_email":{"type":"string"}}},"OrgDomainOwnership":{"type":"object","required":["id","org_id","domain","verification_token","verification_state","created_at","updated_at","meta_mapped"],"properties":{"created_at":{"type":"integer","format":"int64"},"domain":{"type":"string"},"id":{"type":"string"},"last_checked_at":{"type":["integer","null"],"format":"int64"},"meta_mapped":{"type":"boolean"},"org_id":{"type":"string"},"released_at":{"type":["integer","null"],"format":"int64"},"updated_at":{"type":"integer","format":"int64"},"verification_failure_reason":{"type":["integer","null"],"format":"int32"},"verification_state":{"type":"integer","format":"int32"},"verification_token":{"type":"string"},"verified_at":{"type":["integer","null"],"format":"int64"}}},"OrgDomainRequest":{"type":"object","required":["id","org_id","domain","created_at","updated_at","requested_by","status"],"properties":{"answered_by":{"type":["string","null"]},"created_at":{"type":"integer","format":"int64"},"domain":{"type":"string"},"id":{"type":"string"},"org_id":{"type":"string"},"reason":{"type":["string","null"]},"requested_by":{"type":"string"},"status":{"type":"integer","format":"int32"},"updated_at":{"type":"integer","format":"int64"}}},"OrgIngestionToken":{"type":"object","required":["name","token","description","is_default","enabled","created_by","created_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"created_by":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"is_default":{"type":"boolean"},"name":{"type":"string"},"splunk_token":{"type":["string","null"]},"token":{"type":"string"}}},"OrgMetricUsage":{"type":"object","description":"Usage counts for each current metric stream that visible objects read; other names are dropped.","required":["metrics"],"properties":{"metrics":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/UsageCounts"},"propertyNames":{"type":"string"}}}},"OrgPublicDashboardSettings":{"type":"object","description":"The org's settings as the settings API has them; a null `max_links` is the env default.","required":["enabled"],"properties":{"enabled":{"type":"boolean"},"max_links":{"type":["integer","null"],"format":"int32"}}},"OrgRenameBody":{"type":"object","required":["new_name"],"properties":{"new_name":{"type":"string"}}},"OrgRoleMapping":{"type":"object","required":["org_id","org_name","role"],"properties":{"org_id":{"type":"string"},"org_name":{"type":"string"},"role":{"$ref":"#/components/schemas/UserRole"}}},"OrgSummary":{"type":"object","required":["streams","pipelines","alerts","total_functions","total_dashboards"],"properties":{"alerts":{"$ref":"#/components/schemas/AlertSummary"},"pipelines":{"$ref":"#/components/schemas/PipelineSummary"},"streams":{"$ref":"#/components/schemas/StreamSummary"},"total_dashboards":{"type":"integer","format":"int64"},"total_functions":{"type":"integer","format":"int64"}}},"OrgTelephonyView":{"type":"object","description":"The org's own account without its token.","required":["provider","account_sid","from_number"],"properties":{"account_sid":{"type":"string"},"from_number":{"type":"string"},"provider":{"type":"string"}}},"OrgTraceTimeRangeResponse":{"type":"object","required":["results","partial_coverage"],"properties":{"partial_coverage":{"type":"boolean","description":"True when some trace streams could not be searched (no index, no\npermission, or indexing disabled), so `not_found` is not org-wide proof."},"results":{"type":"array","items":{"$ref":"#/components/schemas/TimeRangeResult"}},"searched_range":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TraceTimeRange"}]}}},"OrgUser":{"type":"object","required":["first_name","last_name","email"],"properties":{"email":{"type":"string"},"first_name":{"type":"string"},"last_name":{"type":"string"}}},"Organization":{"type":"object","required":["name"],"properties":{"identifier":{"type":"string"},"name":{"type":"string","description":"Only alphanumeric characters (A-Z, a-z, 0-9), spaces, and underscores are allowed"},"org_type":{"type":"string"},"service_account":{"type":["string","null"],"description":"Optional service account email to add to the organization\nWhen specified, only this service account will be added (not the API caller)"}}},"OrganizationInviteResponseData":{"type":"object","properties":{"existing_members":{"type":["array","null"],"items":{"type":"string"}},"invalid_email":{"type":["string","null"]},"valid_members":{"type":["array","null"],"items":{"type":"string"}}}},"OrganizationResponse":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OrgDetails"}}}},"OrganizationSetting":{"type":"object","properties":{"ai_rca_thread_tool_output":{"type":"boolean","description":"Show raw tool input and output in incident investigation threads."},"budget_config":{"type":"array","items":{"$ref":"#/components/schemas/BudgetNotificationConfiguration"}},"claim_parser_function":{"type":"string"},"cross_links":{"type":"array","items":{"$ref":"#/components/schemas/CrossLink"}},"dark_mode_theme_color":{"type":["string","null"]},"data_retention":{"$ref":"#/components/schemas/DataRetentionDefaults"},"domain_management_config":{"$ref":"#/components/schemas/DomainManagementConfig"},"domain_org_mappings":{"type":"array","items":{"$ref":"#/components/schemas/DomainOrgMapping"}},"enable_streaming_search":{"type":"boolean"},"enforce_allowed_orgs_only":{"type":"boolean"},"free_trial_expiry":{"type":["integer","null"],"format":"int64"},"light_mode_theme_color":{"type":["string","null"]},"max_series_per_query":{"type":["integer","null"],"minimum":0},"min_auto_refresh_interval":{"type":"integer","format":"int32","minimum":0},"org_storage_enabled":{"type":"boolean"},"red_insights_enabled":{"type":"boolean"},"scrape_interval":{"type":"integer","format":"int32","description":"Ideally this should be the same as prometheus-scrape-interval (in\nseconds).","minimum":0},"span_id_field_name":{"type":"string"},"streaming_aggregation_enabled":{"type":"boolean"},"toggle_ingestion_logs":{"type":"boolean"},"trace_id_field_name":{"type":"string"},"usage_stream_enabled":{"type":"boolean"}}},"OrganizationSettingResponse":{"type":"object","required":["data","resolved_data_retention"],"properties":{"data":{"$ref":"#/components/schemas/OrganizationSetting"},"resolved_data_retention":{"$ref":"#/components/schemas/DataRetentionDefaults","description":"The default each stream type resolves to here, computed on read and never stored."}}},"OtlpLogsExportJson":{"type":"object","properties":{"partialSuccess":{"type":"object","properties":{"errorMessage":{"type":"string"},"rejectedLogRecords":{"type":"string","pattern":"^-?[0-9]+$"}},"additionalProperties":false}},"additionalProperties":false},"OtlpMetricsExportJson":{"type":"object","properties":{"partialSuccess":{"type":"object","properties":{"errorMessage":{"type":"string"},"rejectedDataPoints":{"type":"string","pattern":"^-?[0-9]+$"}},"additionalProperties":false}},"additionalProperties":false},"OtlpProfilesExportJson":{"type":"object","properties":{"partialSuccess":{"type":"object","properties":{"errorMessage":{"type":"string"},"rejectedProfiles":{"type":"string","pattern":"^-?[0-9]+$"}},"additionalProperties":false}},"additionalProperties":false},"OtlpProtobufBody":{"type":"string","format":"binary","description":"The protobuf-encoded `Export*ServiceResponse`, sent when the request was protobuf."},"OtlpTracesExportJson":{"type":"object","properties":{"partialSuccess":{"type":"object","properties":{"errorMessage":{"type":"string"},"rejectedSpans":{"type":"string","pattern":"^-?[0-9]+$"}},"additionalProperties":false}},"additionalProperties":false},"OutcomeReason":{"type":"string","description":"The rule that set the outcome.","enum":["answer_deadline","root_cause_graded","root_causes_graded","leading_blocked","contributing_graded","cause_below_medium","no_hypothesis","no_confirmed_cause"]},"OutputFormat":{"type":"string","enum":["json","csv","md_table"]},"OverrideConfig":{"type":"object","properties":{"config":{"type":["array","null"],"items":{"$ref":"#/components/schemas/Config"},"default":null},"field":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Field"}],"default":null}}},"OwnershipRule":{"type":"object","description":"A team's claim over part of the identity space.","required":["id","org_id","team_id","dimensions","created_at","updated_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"dimensions":{"type":"object","description":"Every pair that must match for this rule to apply. An empty map is a\ncatch-all and is rejected by [`Self::validate`] — an accidental one\nwould silently capture every alert in the org.\n\nA value may end in `*` to claim the subtree below a literal prefix\n(`host=db-*`), which §7 asks for on deployments whose finest dimension\nis a numbered host rather than a namespace.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"id":{"type":"string"},"org_id":{"type":"string"},"team_id":{"type":"string"},"updated_at":{"type":"integer","format":"int64"}}},"OwnershipRuleStats":{"type":"object","required":["rule_id","team_id","path","dimensions","created_at","pages_caught","health","health_summary","shadowed_by"],"properties":{"created_at":{"type":"integer","format":"int64"},"dimensions":{"type":"object","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"health":{"type":"string","description":"`active`, `never_used`, or `shadowed`."},"health_summary":{"type":"string"},"last_matched_at":{"type":["integer","null"],"format":"int64","description":"Micros. `None` when it has never matched."},"pages_caught":{"type":"integer","format":"int64"},"path":{"type":"string"},"rule_id":{"type":"string"},"shadowed_by":{"type":"array","items":{"$ref":"#/components/schemas/ShadowingRule"}},"team_id":{"type":"string"},"team_name":{"type":["string","null"]}}},"OwnershipStats":{"type":"object","required":["from","to","total","rules"],"properties":{"from":{"type":"integer","format":"int64"},"rules":{"type":"array","items":{"$ref":"#/components/schemas/OwnershipRuleStats"}},"to":{"type":"integer","format":"int64"},"total":{"type":"integer","description":"Rules matching the filter, before paging.","minimum":0}}},"OwnershipStatsBody":{"allOf":[{"$ref":"#/components/schemas/OwnershipStats"},{"type":"object","required":["days","limit","offset"],"properties":{"days":{"type":"integer","format":"int64"},"limit":{"type":"integer","minimum":0},"offset":{"type":"integer","minimum":0}}}]},"PageAdminView":{"type":"object","description":"Admin view of a page. Deliberately omits `password_hash`; carries only\nwhether a password is set.","required":["id","name","slug","visibility","password_set","noindex","show_uptime_percent","show_timeline_bars","show_response_time","confirm_failures","confirm_recovery","created_at","updated_at","component_count"],"properties":{"accent_color":{"type":["string","null"]},"brand_name":{"type":["string","null"]},"component_count":{"type":"integer","format":"int64"},"components":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ComponentView"},"description":"Populated only by the detail GET (not the list), so the edit UI can\nrender and round-trip the existing component→check mapping."},"confirm_after_secs":{"type":["integer","null"],"format":"int32"},"confirm_failures":{"type":"integer","format":"int32"},"confirm_recovery":{"type":"integer","format":"int32"},"created_at":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"favicon_img":{"type":["string","null"]},"health":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ComponentStatus","description":"Live health summary for the list view (worst component status)."}]},"id":{"type":"string"},"logo_img":{"type":["string","null"]},"name":{"type":"string"},"noindex":{"type":"boolean"},"owner":{"type":["string","null"]},"password_set":{"type":"boolean"},"show_response_time":{"type":"boolean"},"show_timeline_bars":{"type":"boolean"},"show_uptime_percent":{"type":"boolean"},"slug":{"type":"string"},"tracking_since":{"type":["integer","null"],"format":"int64"},"updated_at":{"type":"integer","format":"int64"},"visibility":{"type":"integer","format":"int32"}}},"PageListResponse":{"type":"object","required":["pages","total"],"properties":{"pages":{"type":"array","items":{"$ref":"#/components/schemas/PageAdminView"}},"total":{"type":"integer","format":"int64"}}},"PageOp":{"type":"string","description":"How an ignored-page rule compares its value with a page key.","enum":["eq","prefix","regex"]},"PageRule":{"type":"object","description":"Takes `PageOp`, not `ViewOp`, because `param` and `ref` mean nothing on a page key.","required":["op","value"],"properties":{"op":{"$ref":"#/components/schemas/PageOp"},"value":{"type":"string"}},"additionalProperties":false},"PaginatedResponse":{"type":"object","description":"Paginated response used by list-style APIs (sessions, traces, users).","required":["took","total","from","size","hits"],"properties":{"from":{"type":"integer","format":"int64"},"function_error":{"type":"string"},"hits":{"type":"array","items":{"type":"object"}},"size":{"type":"integer","format":"int64"},"took":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0},"trace_id":{"type":"string"}}},"PaidOverageBillingStatus":{"type":"string","description":"Billing eligibility attached to cumulative paid-overage state.","enum":["eligible","subscription_required","additional_credits_required"]},"PaidOverageOrganizationStatus":{"type":"object","description":"One organization's cumulative authorization state for a quota feature.","required":["org_id","enabled","can_manage"],"properties":{"can_manage":{"type":"boolean"},"enabled":{"type":"boolean"},"org_id":{"type":"string"}}},"PaidOverageStatus":{"type":"object","description":"Public cumulative state. Internal feature-row keys are intentionally absent.","required":["feature","organization","effective","billing_status"],"properties":{"billing_status":{"$ref":"#/components/schemas/PaidOverageBillingStatus"},"effective":{"type":"boolean"},"feature":{"type":"string"},"organization":{"$ref":"#/components/schemas/PaidOverageOrganizationStatus"},"payer":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PaidOverageOrganizationStatus"}]}}},"PaidOverageUpdateRequest":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean"}},"additionalProperties":false},"PairOperator":{"type":"string","enum":["=","!="]},"Panel":{"type":"object","required":["id","type","title","description","config","queries"],"properties":{"config":{"$ref":"#/components/schemas/PanelConfig"},"customChartContent":{"type":["string","null"]},"description":{"type":"string"},"htmlContent":{"type":["string","null"]},"id":{"type":"string"},"layout":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Layout"}]},"markdownContent":{"type":["string","null"]},"queries":{"type":"array","items":{"$ref":"#/components/schemas/Query"}},"queryType":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"}}},"PanelConfig":{"type":"object","required":["show_legends"],"properties":{"aggregation":{"type":["string","null"]},"alert_list_folder":{"type":["string","null"]},"alert_list_max":{"type":["number","null"],"format":"double"},"alert_list_sort":{"type":["string","null"]},"alert_list_state":{"type":["array","null"],"items":{"type":"string"}},"axis_border_show":{"type":["boolean","null"]},"axis_label_mode":{"type":["string","null"]},"axis_label_rotate":{"type":["number","null"],"format":"double"},"axis_label_truncate_width":{"type":["number","null"],"format":"double"},"axis_width":{"type":["number","null"],"format":"double"},"background":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Background"}]},"bar_gauge_mode":{"type":["string","null"]},"bar_gauge_orientation":{"type":["string","null"]},"bar_gauge_show_unfilled":{"type":["boolean","null"]},"bar_radius":{"type":["number","null"],"format":"double"},"bar_width":{"type":["number","null"],"format":"double"},"base_map":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/BaseMap"}]},"boxplot_whisker":{"type":["string","null"]},"bucket_unit":{"type":["string","null"]},"bucket_unit_custom":{"type":["string","null"]},"chart_align":{"type":["string","null"]},"color":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ColorCfg"}]},"column_order":{"type":["array","null"],"items":{"type":"string"}},"connect_nulls":{"type":["boolean","null"]},"connect_nulls_threshold":{"type":["number","null"],"format":"double"},"decimals":{"type":["number","null"],"format":"double"},"distribution_bucket_count":{"type":["number","null"],"format":"double"},"distribution_bucket_offset":{"type":["number","null"],"format":"double"},"distribution_bucket_size":{"type":["number","null"],"format":"double"},"donut_inner_radius":{"type":["number","null"],"format":"double"},"drilldown":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DrillDown"}},"enable_roam":{"type":["boolean","null"]},"fill_gradient":{"type":["boolean","null"]},"fill_opacity":{"type":["number","null"],"format":"double"},"flame_graph_stack_field":{"type":["string","null"]},"flame_graph_value_field":{"type":["string","null"]},"funnel_orient":{"type":["string","null"]},"funnel_show_percent":{"type":["boolean","null"]},"funnel_sort":{"type":["string","null"]},"gauge_neutral":{"type":["number","null"],"format":"double"},"gauge_round_cap":{"type":["boolean","null"]},"gauge_segments":{"type":["number","null"],"format":"double"},"gauge_style":{"type":["string","null"]},"heatmap_cell_gap":{"type":["number","null"],"format":"double"},"heatmap_color_max":{"type":["number","null"],"format":"double"},"heatmap_color_min":{"type":["number","null"],"format":"double"},"heatmap_color_scale":{"type":["string","null"]},"heatmap_hide_below":{"type":["number","null"],"format":"double"},"heatmap_mode":{"type":["string","null"]},"heatmap_palette":{"type":["string","null"]},"heatmap_palette_reverse":{"type":["boolean","null"]},"heatmap_y_bucket":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HeatmapYBucket"}]},"heatmap_y_max":{"type":["number","null"],"format":"double"},"heatmap_y_min":{"type":["number","null"],"format":"double"},"heatmap_y_sort":{"type":["string","null"]},"hidden_columns":{"type":["array","null"],"items":{"type":"string"}},"hostmap_cell_label":{"type":["string","null"]},"hostmap_cell_shape":{"type":["string","null"]},"hostmap_cell_sort":{"type":["string","null"]},"hostmap_entity_label":{"type":["string","null"]},"hostmap_group_by":{"type":["array","null"],"items":{"type":"string"}},"hostmap_group_sort":{"type":["string","null"]},"hostmap_reduction":{"type":["string","null"]},"label_option":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LabelOption"}]},"lat_label":{"type":["string","null"]},"legend_height":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LegendHeight"}]},"legend_values":{"type":["array","null"],"items":{"type":"string"}},"legend_width":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LegendWidth"}]},"legends_position":{"type":["string","null"]},"legends_type":{"type":["string","null"]},"line_interpolation":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LineInterpolation"}]},"line_style":{"type":["string","null"]},"line_thickness":{"type":["number","null"],"format":"double"},"logs_level_field":{"type":["string","null"]},"logs_message_field":{"type":["string","null"]},"logs_order":{"type":["string","null"]},"logs_prettify_json":{"type":["boolean","null"]},"logs_show_time":{"type":["boolean","null"]},"logs_time_field":{"type":["string","null"]},"logs_wrap":{"type":["boolean","null"]},"lon_label":{"type":["string","null"]},"map_cluster":{"type":["boolean","null"]},"map_cluster_radius":{"type":["number","null"],"format":"double"},"map_symbol_style":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MapSymbolStyle"}]},"map_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MapType"}]},"map_view":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MapView"}]},"mappings":{"type":["array","null"],"items":{"$ref":"#/components/schemas/Mapping"}},"mark_area":{"type":["array","null"],"items":{"$ref":"#/components/schemas/MarkArea"}},"mark_line":{"type":["array","null"],"items":{"$ref":"#/components/schemas/MarkLine"}},"merge_gaps":{"type":["number","null"],"format":"double"},"name_label":{"type":["string","null"]},"no_data_text":{"type":["string","null"]},"no_value_replacement":{"type":["string","null"]},"node_graph_layout":{"type":["string","null"]},"node_graph_show_edge_labels":{"type":["boolean","null"]},"override_config":{"type":["array","null"],"items":{"$ref":"#/components/schemas/OverrideConfig"}},"panel_time_enabled":{"type":["boolean","null"]},"panel_time_range":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DateTimeOptions"}]},"pie_label_content":{"type":["array","null"],"items":{"type":"string"}},"pie_other_threshold":{"type":["number","null"],"format":"double"},"promql_series_limit":{"type":["number","null"],"format":"double"},"promql_table_mode":{"type":["string","null"]},"row_gap":{"type":["number","null"],"format":"double"},"row_height":{"type":["number","null"],"format":"double"},"row_sort":{"type":["string","null"]},"scatter_color_field":{"type":["string","null"]},"scatter_size_field":{"type":["string","null"]},"scatter_size_max":{"type":["number","null"],"format":"double"},"scatter_size_min":{"type":["number","null"],"format":"double"},"show_bar_track":{"type":["boolean","null"]},"show_exemplars":{"type":["boolean","null"]},"show_gauge_end_labels":{"type":["boolean","null"]},"show_gridlines":{"type":["boolean","null"]},"show_legends":{"type":"boolean"},"show_state_text":{"type":["boolean","null"]},"show_symbol":{"type":["boolean","null"]},"sort_order":{"type":["string","null"]},"sparkline":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Sparkline"}]},"stack_mode":{"type":["string","null"]},"stat_text_mode":{"type":["string","null"]},"state_timeline_display":{"type":["string","null"]},"state_value_align":{"type":["string","null"]},"step_value":{"type":["string","null"]},"sticky_columns":{"type":["array","null"],"items":{"type":"string"}},"sticky_first_column":{"type":["boolean","null"]},"sunburst_show_labels":{"type":["boolean","null"]},"symbol_opacity":{"type":["number","null"],"format":"double"},"symbol_size":{"type":["number","null"],"format":"double"},"table_aggregations":{"type":["array","null"],"items":{"type":"string"}},"table_density":{"type":["string","null"]},"table_dynamic_columns":{"type":["boolean","null"]},"table_expandable_rows":{"type":["boolean","null"]},"table_filtering":{"type":["boolean","null"]},"table_footer_calcs":{"type":["array","null"],"items":{"type":"string"}},"table_pagination":{"type":["boolean","null"]},"table_pagination_rows_per_page":{"type":["integer","null"],"format":"int64"},"table_pivot_show_col_totals":{"type":["boolean","null"]},"table_pivot_show_row_totals":{"type":["boolean","null"]},"table_pivot_sticky_col_totals":{"type":["boolean","null"]},"table_pivot_sticky_row_totals":{"type":["boolean","null"]},"table_transpose":{"type":["boolean","null"]},"thresholds":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Thresholds"}]},"tooltip_mode":{"type":["string","null"]},"tooltip_sort":{"type":["string","null"]},"top_results":{"type":["number","null"],"format":"double"},"top_results_others":{"type":["boolean","null"]},"treemap_show_breadcrumb":{"type":["boolean","null"]},"trellis":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Trellis"}]},"unit":{"type":["string","null"]},"unit_custom":{"type":["string","null"]},"value_font_size":{"type":["number","null"],"format":"double"},"visible_columns":{"type":["array","null"],"items":{"type":"string"}},"weight_label":{"type":["string","null"]},"wrap_table_cells":{"type":["boolean","null"]},"y_axis_hard_max":{"type":["number","null"],"format":"double"},"y_axis_hard_min":{"type":["number","null"],"format":"double"},"y_axis_label":{"type":["string","null"]},"y_axis_log_base":{"type":["number","null"],"format":"double"},"y_axis_max":{"type":["number","null"],"format":"double"},"y_axis_min":{"type":["number","null"],"format":"double"},"y_axis_min_interval":{"type":["number","null"],"format":"double"},"y_axis_scale":{"type":["string","null"]}}},"PanelFields":{"type":"object","required":["stream","stream_type","x","y","filter"],"properties":{"breakdown":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AxisItem"}},"filter":{"$ref":"#/components/schemas/PanelFilter"},"latitude":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AxisItem"}]},"longitude":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AxisItem"}]},"name":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AxisItem"}]},"promql_labels":{"type":"array","items":{"$ref":"#/components/schemas/PromQLLabelFilter"}},"promql_operations":{"type":"array","items":{"$ref":"#/components/schemas/PromQLOperation"}},"source":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AxisItem"}]},"stream":{"type":"string"},"stream_type":{"$ref":"#/components/schemas/StreamType"},"target":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AxisItem"}]},"value":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AxisItem"}]},"value_for_maps":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AxisItem"}]},"weight":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AxisItem"}]},"x":{"type":"array","items":{"$ref":"#/components/schemas/AxisItem"}},"y":{"type":"array","items":{"$ref":"#/components/schemas/AxisItem"}},"z":{"type":"array","items":{"$ref":"#/components/schemas/AxisItem"}}}},"PanelFilter":{"oneOf":[{"$ref":"#/components/schemas/FilterCondition"},{"$ref":"#/components/schemas/GroupType"}]},"PartErrorBody":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"PartResultBody":{"type":"object","required":["index","rowId","trialIndex","accepted","duplicate"],"properties":{"accepted":{"type":"boolean"},"duplicate":{"type":"boolean","description":"Accepted without writing: this part was already stored as submitted."},"error":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PartErrorBody"}]},"index":{"type":"integer","minimum":0},"rowId":{"type":"string"},"trialIndex":{"type":"integer","format":"int32","minimum":0}}},"PartitionTimeLevel":{"type":"string","enum":["unset","hourly","daily"]},"PartitionTimeLevelChange":{"type":"object","description":"From `since`, a UTC day start in microseconds, the stream's days are at `level`.","required":["since","level"],"properties":{"level":{"$ref":"#/components/schemas/PartitionTimeLevel"},"since":{"type":"integer","format":"int64"}}},"PasscodeResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/IngestionPasscode"}}},"PasswordComplexity":{"type":"object","description":"The subset of the policy safe to show a non-admin: what a password must look like, and nothing\nabout how the instance defends itself.\n\nLockout thresholds and history depth are deliberately absent. A brute-forcer who can read\n`lockout.threshold` and `lockout.start_secs` knows exactly how to pace attempts to stay under\nthem, which turns a defence into a published rate limit.","required":["min_length","max_length","require_uppercase","require_lowercase","require_digit","require_special","special_char_set"],"properties":{"max_length":{"type":"integer","format":"int32","minimum":0},"min_length":{"type":"integer","format":"int32","minimum":0},"require_digit":{"type":"boolean"},"require_lowercase":{"type":"boolean"},"require_special":{"type":"boolean"},"require_uppercase":{"type":"boolean"},"special_char_set":{"type":"string","description":"Empty means any non-alphanumeric character counts as special."}}},"PasswordPolicy":{"type":"object","description":"The resolved instance-wide policy.","properties":{"apply_to_root":{"type":"boolean","description":"Whether root is held to rotation and lockout like every other native user.\n\nDefault `false`, which is the documented exemption: root is the only account that can\nrepair a misconfigured policy, and the only one whose lockout has no remedy from inside\nthe product. Complexity and reuse already apply to root at password-set time whatever\nthis says; the tightening sweep never touches root either way, so root is never\nmass-flagged.","default":false},"cookie_max_age_secs":{"type":"integer","format":"int32","description":"How long a sign-in cookie stays valid, in seconds. `0` defers to `ZO_COOKIE_MAX_AGE`.\n\nThis is the browser's copy of the credential, not a server-side session: shortening it\nmakes the browser stop sending the cookie sooner, and does nothing to a copy taken from\nit. It applies from the next sign-in — cookies already issued keep the lifetime they\nwere given.","default":0,"minimum":0},"history_count":{"type":"integer","format":"int32","description":"`0` disables reuse prevention.","default":0,"minimum":0},"history_max_retained":{"type":"integer","format":"int32","description":"Hashes retained per user; kept at or above `history_count` so a later increase to\n`history_count` has history to check against.","default":30,"minimum":0},"lockout":{"oneOf":[{"$ref":"#/components/schemas/LockoutPolicy"}],"default":{"threshold":5,"bucket_size":0,"start_secs":60,"max_secs":3600,"backoff":"exponential"}},"max_length":{"type":"integer","format":"int32","description":"Between `min_length` and 128; a stored legacy `0` still reads as unbounded.","default":128,"minimum":0},"min_length":{"type":"integer","format":"int32","default":15,"minimum":0},"require_digit":{"type":"boolean","default":true},"require_lowercase":{"type":"boolean","default":true},"require_special":{"type":"boolean","default":true},"require_uppercase":{"type":"boolean","default":true},"rotation_days":{"type":"integer","format":"int32","description":"`0` disables rotation enforcement.","default":0,"minimum":0},"rotation_warning_days":{"type":"integer","format":"int32","description":"Days before expiry to start warning. `0` = never warn; equal to `rotation_days` = warn on\nevery request, since no live password is then outside the window.","default":7,"minimum":0},"special_char_set":{"type":"string","description":"Empty means any non-alphanumeric character counts as special.","default":""}}},"PatternAssociation":{"type":"object","required":["field","pattern_name","description","pattern","pattern_id","policy","apply_at"],"properties":{"apply_at":{"type":"string"},"description":{"type":"string"},"field":{"type":"string"},"pattern":{"type":"string"},"pattern_id":{"type":"string"},"pattern_name":{"type":"string"},"policy":{"type":"string"}}},"PatternExamples":{"type":"object","properties":{"Invalid":{"type":"array","items":{"type":"string"}},"Valid":{"type":"array","items":{"type":"string"}}}},"PatternInfo":{"type":"object","required":["id","name","pattern","description","created_at","updated_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"description":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"pattern":{"type":"string"},"updated_at":{"type":"integer","format":"int64"}}},"Permission":{"type":"string","enum":["AllowAll","AllowDelete","AllowGet","AllowList","AllowPost","AllowPut","None"]},"PersonRef":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"name":{"type":["string","null"]}}},"PhaseStatus":{"type":"string","enum":["pending","deploying","converging","observing","verifying","done","failed","stopped","timed_out"]},"PinnedExperimentScorerBody":{"type":"object","required":["id","version"],"properties":{"id":{"type":"string"},"version":{"type":"integer","format":"int32"}}},"PinnedScoreConfigResponseBody":{"type":"object","required":["rowId","entityId","name","version","dataType"],"properties":{"dataType":{"type":"string"},"entityId":{"type":"string"},"name":{"type":"string"},"rowId":{"type":"string"},"version":{"type":"integer","format":"int32"}}},"Pipeline":{"type":"object","description":"One `service.pipelines` entry of a fleet; collectors on older versions add to the same name.","required":["id","fleet","name","signal","receivers","exporters","issues"],"properties":{"dropped_ratio":{"type":["number","null"],"format":"double","description":"`enqueue_failed / (sent + enqueue_failed)` over the last 5m."},"exporters":{"type":"array","items":{"$ref":"#/components/schemas/PipelineExporter"}},"failed_ratio":{"type":["number","null"],"format":"double","description":"`send_failed / (sent + send_failed)` over the last 5m."},"fleet":{"type":"string"},"id":{"type":"string","description":"`{fleet}/{name}`."},"in_rate":{"type":["number","null"],"format":"double","description":"Items per second over the window; null means no telemetry, 0 a measured zero."},"issues":{"type":"array","items":{"$ref":"#/components/schemas/FlowIssue"}},"name":{"type":"string"},"out_rate":{"type":["number","null"],"format":"double"},"queue_ratio":{"type":["number","null"],"format":"double","description":"The fullest exporter queue over the last 45s."},"receivers":{"type":"array","items":{"$ref":"#/components/schemas/PipelineReceiver"}},"signal":{"$ref":"#/components/schemas/FlowSignal"}}},"PipelineBulkEnableResponse":{"type":"object","required":["successful","unsuccessful"],"properties":{"err":{"type":["string","null"]},"successful":{"type":"array","items":{"type":"string"}},"unsuccessful":{"type":"array","items":{"type":"string"}}}},"PipelineErrorInfo":{"type":"object","required":["last_error_timestamp"],"properties":{"error_summary":{"type":["string","null"]},"last_error_timestamp":{"type":"integer","format":"int64"},"node_errors":{}}},"PipelineExporter":{"type":"object","required":["name","destination","failed","dropped"],"properties":{"destination":{"type":"string","description":"An id in `destinations`."},"dropped":{"type":"number","format":"double","description":"Items per second that failed to enqueue over the last 5m."},"failed":{"type":"number","format":"double","description":"Items per second that failed to send over the last 5m."},"name":{"type":"string"},"queue":{"type":["number","null"],"format":"double"},"rate":{"type":["number","null"],"format":"double"}}},"PipelineFleet":{"type":"object","description":"A readable fleet; without telemetry it lists its stable (else desired) version's pipelines.","required":["id","name","collectors"],"properties":{"collectors":{"type":"integer","minimum":0},"config":{"type":["string","null"]},"id":{"type":"string"},"name":{"type":"string"},"version":{"type":["integer","null"],"format":"int64"}}},"PipelineHistoryEntry":{"type":"object","required":["timestamp","pipeline_name","org","status","is_realtime","is_silenced","start_time","end_time","retries"],"properties":{"delay_in_secs":{"type":["integer","null"],"format":"int64"},"end_time":{"type":"integer","format":"int64"},"error":{"type":["string","null"]},"evaluation_took_in_secs":{"type":["number","null"],"format":"double"},"is_partial":{"type":["boolean","null"]},"is_realtime":{"type":"boolean"},"is_silenced":{"type":"boolean"},"org":{"type":"string"},"pipeline_name":{"type":"string"},"query_took":{"type":["integer","null"],"format":"int64"},"retries":{"type":"integer","format":"int32"},"source_node":{"type":["string","null"]},"start_time":{"type":"integer","format":"int64"},"status":{"type":"string"},"success_response":{"type":["string","null"]},"timestamp":{"type":"integer","format":"int64"}}},"PipelineHistoryResponse":{"type":"object","required":["total","from","size","hits"],"properties":{"from":{"type":"integer","format":"int64"},"hits":{"type":"array","items":{"$ref":"#/components/schemas/PipelineHistoryEntry"}},"size":{"type":"integer","format":"int64"},"total":{"type":"integer","minimum":0}}},"PipelineKind":{"type":"string","description":"Distinguishes user-created pipelines from system-managed evaluation pipelines.\n\n- `User` pipelines are visible in the Pipeline UI and subject to the \"one realtime pipeline per\n  stream\" constraint.\n- `Evaluation` pipelines are hidden from the Pipeline UI, managed exclusively by the Online Eval\n  subsystem, and any number can coexist with a user pipeline on the same stream.","enum":["user","evaluation"]},"PipelineReceiver":{"type":"object","required":["name","refused"],"properties":{"name":{"type":"string"},"rate":{"type":["number","null"],"format":"double"},"refused":{"type":"number","format":"double","description":"Refused items per second over the last 5m."}}},"PipelineSource":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/StreamParams","description":"Real-time pipeline: processes data immediately as it's ingested.\nExample: { \"source_type\": \"realtime\" }"},{"type":"object","required":["source_type"],"properties":{"source_type":{"type":"string","enum":["realtime"]}}}],"description":"Real-time pipeline: processes data immediately as it's ingested.\nExample: { \"source_type\": \"realtime\" }"},{"allOf":[{"$ref":"#/components/schemas/DerivedStream","description":"Scheduled pipeline: runs periodically based on trigger_condition.\nExample: { \"source_type\": \"scheduled\", \"org_id\": \"default\", \"stream_type\": \"logs\",\n\"query_condition\": {...}, \"trigger_condition\": {...} }"},{"type":"object","required":["source_type"],"properties":{"source_type":{"type":"string","enum":["scheduled"]}}}],"description":"Scheduled pipeline: runs periodically based on trigger_condition.\nExample: { \"source_type\": \"scheduled\", \"org_id\": \"default\", \"stream_type\": \"logs\",\n\"query_condition\": {...}, \"trigger_condition\": {...} }"}],"description":"Pipeline source type determines when the pipeline runs.\nUse \"realtime\" for processing data as it arrives, \"scheduled\" for periodic batch processing."},"PipelineSummary":{"type":"object","required":["num_realtime","num_scheduled","trigger_status"],"properties":{"num_realtime":{"type":"integer","format":"int64"},"num_scheduled":{"type":"integer","format":"int64"},"trigger_status":{"$ref":"#/components/schemas/TriggerStatus"}}},"PipelinesResponse":{"type":"object","required":["window","generated_at","fleets","pipelines","destinations","metrics_restricted"],"properties":{"destinations":{"type":"array","items":{"$ref":"#/components/schemas/FlowDestination"}},"fleets":{"type":"array","items":{"$ref":"#/components/schemas/PipelineFleet"}},"generated_at":{"type":"integer","format":"int64","description":"Epoch milliseconds."},"metrics_restricted":{"type":"boolean","description":"Some throughput queries were skipped because the caller may not read their metric streams."},"pipelines":{"type":"array","items":{"$ref":"#/components/schemas/Pipeline"}},"window":{"$ref":"#/components/schemas/FlowWindow"}}},"PlanPreview":{"type":"object","description":"The expanded plan for the fleet's current size.","required":["phases","collapsed","eligible"],"properties":{"collapsed":{"type":"boolean","description":"The first batch covers every eligible collector, so the plan is one batch."},"eligible":{"type":"integer","minimum":0},"phases":{"type":"array","items":{"type":"integer","minimum":0}}}},"PlaygroundColumnBody":{"type":"object","required":["providerId","messages"],"properties":{"messages":{"type":"array","items":{"$ref":"#/components/schemas/PlaygroundMessageBody"}},"model":{"type":["string","null"]},"params":{"type":"object","description":"Sampling parameters, passed to the provider verbatim. `temperature` and\n`max_tokens` are read out for the provider's own fields; the rest ride\nthrough untouched, which is how a caller reaches provider-specific\noptions without a schema change here.","additionalProperties":{},"propertyNames":{"type":"string"}},"providerId":{"type":"string"},"responseFormat":{},"tools":{"description":"Tool definitions, passed through. A tool call comes back as the cell's\noutput; nothing is executed."}},"additionalProperties":false},"PlaygroundMessageBody":{"type":"object","required":["role"],"properties":{"content":{"description":"Structured content is accepted and passed through, so multimodal and\ntool-result messages survive."},"reasoningContent":{"type":["string","null"]},"role":{"type":"string"},"toolCallId":{"type":["string","null"]},"toolCalls":{"type":"array","items":{"$ref":"#/components/schemas/PlaygroundToolCallBody"}}},"additionalProperties":false},"PlaygroundRowBody":{"type":"object","properties":{"expectedOutput":{},"input":{"description":"A string binds `{{input}}`; an object binds each of its fields by name."},"metadata":{}},"additionalProperties":false},"PlaygroundToolCallBody":{"type":"object","required":["id","name","arguments"],"properties":{"arguments":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false},"Polarity":{"type":"string","enum":["supports","contradicts","rules_out"]},"PolicyView":{"allOf":[{"$ref":"#/components/schemas/EscalationPolicy"},{"type":"object","required":["ladder_is_generated"],"properties":{"ladder_is_generated":{"type":"boolean","description":"Still the shape this code wrote, so dropping a rotation rewrites it rather than refusing."}}}],"description":"A team's escalation policy as the API returns it."},"PoolUsageResponse":{"type":"object","description":"One pool's usage for an org. Field names are unit-neutral because AI counts\ncredits and synthetics counts steps.","required":["pool","mode","used","limit","remaining","requires_additional_credits"],"properties":{"limit":{"type":"integer","format":"int64","minimum":0},"mode":{"type":"string","description":"`\"free\"` | `\"consent_required\"` | `\"pay_as_you_go\"` | `\"exhausted\"`."},"payer_org_id":{"type":["string","null"]},"pool":{"type":"string","description":"Stable pool identifier — one of [`TrialQuotaPool::ALL_POOLS`]' keys."},"remaining":{"type":"integer","format":"int64","minimum":0},"requires_additional_credits":{"type":"boolean"},"used":{"type":"integer","format":"int64","minimum":0}}},"Position":{"type":"object","required":["x","y"],"properties":{"x":{"type":"number","format":"float"},"y":{"type":"number","format":"float"}}},"PostUserRequest":{"allOf":[{"$ref":"#/components/schemas/UserRoleRequest"},{"type":"object","required":["email","password"],"properties":{"email":{"type":"string"},"first_name":{"type":"string"},"is_external":{"type":"boolean","description":"Is the user created via ldap flow."},"last_name":{"type":"string"},"password":{"type":"string"},"token":{"type":["string","null"]}}}]},"PresetDescriptor":{"type":"object","description":"One entry of the catalogue.","required":["id","name","description","layers","inputs"],"properties":{"description":{"type":"string","description":"One line: what applying it builds."},"id":{"$ref":"#/components/schemas/PresetId"},"inputs":{"type":"array","items":{"$ref":"#/components/schemas/PresetInput"}},"layers":{"type":"array","items":{"type":"string"},"description":"The layers it generates, highest priority first, in the same words the\ngenerated schedule will use."},"name":{"type":"string","description":"What to call it on a button."}}},"PresetId":{"type":"string","description":"Which preset. Serialises to the id the catalogue publishes.","enum":["follow_the_sun","weekday_weekend","split_the_week","business_hours_plus_nights"]},"PresetInput":{"type":"object","description":"One field of a preset's request body.","required":["field","kind","label","description","required"],"properties":{"default":{"description":"What the server uses when the field is absent, already in wire shape."},"description":{"type":"string","description":"One line of help."},"field":{"type":"string","description":"The JSON key, exactly as the request body spells it."},"fields":{"type":"array","items":{"type":"object"},"description":"For `group` and `group_list`: the fields each group carries."},"kind":{"$ref":"#/components/schemas/PresetInputKind"},"label":{"type":"string","description":"What to put beside the control."},"max":{"type":["integer","null"],"format":"int64"},"min":{"type":["integer","null"],"format":"int64"},"required":{"type":"boolean"}}},"PresetInputKind":{"type":"string","description":"What kind of control a field is. Enough for a form to be generated rather\nthan hardcoded — the UI should not have to know that `follow_the_sun` wants\nbetween two and four groups, because then it would have to be told twice.","enum":["group","group_list","day_of_week","day_list","minute_of_day","timezone","duration_micros","timestamp_micros","text","member_list"]},"PresetSpec":{"oneOf":[{"type":"object","description":"Two to four regional layers over one catch-all.","required":["groups","preset"],"properties":{"catch_all":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Group","description":"Who covers the hours no region claims. Absent means everybody named\nabove, in the order they were named — what a follow-the-sun team\nalmost always wants and never has to think about."}]},"groups":{"type":"array","items":{"$ref":"#/components/schemas/RegionGroup"}},"preset":{"type":"string","enum":["follow_the_sun"]}}},{"type":"object","description":"A Mon–Fri layer over a weekend layer.","required":["weekdays","weekend","preset"],"properties":{"preset":{"type":"string","enum":["weekday_weekend"]},"weekdays":{"$ref":"#/components/schemas/Group"},"weekend":{"$ref":"#/components/schemas/Group"}}},{"type":"object","description":"The week cut at one boundary, each half to a group.","required":["first","second","preset"],"properties":{"boundary_day":{"type":"integer","format":"int32","description":"0 = Monday … 6 = Sunday. Defaults to Thursday.","minimum":0},"boundary_minute":{"type":"integer","format":"int32","description":"Minutes from midnight in the team's timezone. Defaults to 00:00.","minimum":0},"first":{"$ref":"#/components/schemas/Group","description":"Covers from Monday 00:00 up to the boundary."},"preset":{"type":"string","enum":["split_the_week"]},"second":{"$ref":"#/components/schemas/Group","description":"Covers from the boundary to the end of the week."}}},{"type":"object","description":"A working-hours layer over an out-of-hours catch-all.","required":["business_hours","after_hours","preset"],"properties":{"after_hours":{"$ref":"#/components/schemas/Group"},"business_hours":{"$ref":"#/components/schemas/Group"},"days":{"type":"array","items":{"type":"integer","format":"int32","minimum":0},"description":"0 = Monday … 6 = Sunday. Defaults to Mon–Fri."},"end_minute":{"type":"integer","format":"int32","description":"Minutes from midnight in the team's timezone, exclusive. 17:00.","minimum":0},"preset":{"type":"string","enum":["business_hours_plus_nights"]},"start_minute":{"type":"integer","format":"int32","description":"Minutes from midnight in the team's timezone, inclusive. 09:00.","minimum":0}}}],"description":"The inputs of one preset, tagged by which preset they are for.\n\nInternally tagged on `preset`, so the wire shape is §C.3's. Each variant\nnames its layers rather than taking a positional array: \"which of these two\ngroups is the weekend one\" is exactly the question a positional API leaves\nopen until somebody is paged on a Saturday."},"PresignedArtifact":{"type":"object","required":["key","url"],"properties":{"key":{"type":"string"},"url":{"type":"string"}}},"PresignedURLGeneratorResponse":{"type":"object","required":["url"],"properties":{"url":{"type":"string"}}},"PreviewKv":{"type":"object","required":["label","value"],"properties":{"label":{"type":"string"},"value":{"type":"string"}}},"PreviewL0":{"type":"object","required":["mode","triage_budget_seconds","available","summary","allow_suppress","allow_promotion","allow_downgrade"],"properties":{"allow_downgrade":{"type":"boolean"},"allow_promotion":{"type":"boolean"},"allow_suppress":{"type":"boolean"},"available":{"type":"boolean","description":"Whether this deployment can actually run the agent.\n\nSame honesty rule the channel list follows: a policy naming a thing that\ncannot happen is worse than one that does not name it, because the screen\nreads as configured. A `gate` with no agent reachable does not hold the\npage — it pages immediately — and this is what lets the screen say so."},"mode":{"type":"string","description":"`parallel` | `gate` | `only` | `off`, already resolved for this\npriority — so a caller never re-derives the P1 invariant or the\npages-nobody rule."},"summary":{"type":"string","description":"One sentence, ready to render."},"triage_budget_seconds":{"type":"integer","format":"int64","description":"How long a `gate` holds the page waiting for a verdict."}}},"PreviewLink":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string"},"url":{"type":"string"}}},"PreviewMatch":{"type":"object","required":["id","name","folder_id"],"properties":{"applies":{"type":["boolean","null"],"description":"SLOs on the detail page: false when the current or next window holds no slice start."},"folder_id":{"type":"string"},"id":{"type":"string"},"matched_by":{"type":["string","null"]},"missing":{"type":["string","null"]},"name":{"type":"string"}}},"PreviewModel":{"type":"object","required":["title","body_html","fields","links","color","footer","chart_placeholder"],"properties":{"body_html":{"type":"string","description":"Server-rendered markdown; the FE sanitizes with dompurify."},"chart_placeholder":{"type":"boolean"},"color":{"type":"string","description":"Severity color hex."},"fields":{"type":"array","items":{"$ref":"#/components/schemas/PreviewKv"}},"footer":{"type":"string"},"links":{"type":"array","items":{"$ref":"#/components/schemas/PreviewLink"}},"severity":{"type":["string","null"]},"title":{"type":"string"}}},"PreviewRecipient":{"type":"object","description":"One person a rung would reach, and whether the page would land.","required":["user_email","reason","would_a_page_land","deliverable_channels"],"properties":{"deliverable_channels":{"type":"array","items":{"$ref":"#/components/schemas/Channel"}},"reason":{"type":"string","description":"Why this rung names them — \"you are on call\"."},"user_email":{"type":"string"},"why_not":{"type":["string","null"]},"would_a_page_land":{"type":"boolean"}}},"PreviewRequest":{"type":"object","required":["targets"],"properties":{"condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DimensionCondition"}]},"targets":{"type":"array","items":{"$ref":"#/components/schemas/DowntimeTarget"}}}},"PreviewResolvedScheduleRequest":{"type":"object","description":"An unsaved rotation and the window to resolve it over, in micros.","required":["rotation","from","to"],"properties":{"from":{"type":"integer","format":"int64"},"rotation":{"$ref":"#/components/schemas/Rotation"},"to":{"type":"integer","format":"int64"}}},"PreviewResponse":{"type":"object","required":["alerts","resolved_at_fire_time","anomalies","synthetics","slos","alerts_total","anomalies_total","synthetics_total","slos_total","undecidable"],"properties":{"alerts":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMatch"}},"alerts_total":{"type":"integer","minimum":0},"anomalies":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMatch"}},"anomalies_total":{"type":"integer","minimum":0},"resolved_at_fire_time":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMatch"}},"slos":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMatch"}},"slos_total":{"type":"integer","minimum":0},"synthetics":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMatch"}},"synthetics_total":{"type":"integer","minimum":0},"undecidable":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/PreviewMatch"}},"propertyNames":{"type":"string"}}}},"PreviewRoutingRequest":{"type":"object","description":"Resolves the same rules a real firing would and sends nothing.","properties":{"dimensions":{"type":"object","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"oncall_team":{"type":["string","null"]}}},"PreviewRung":{"type":"object","description":"One rung, resolved against right now.","required":["after_micros","targets","recipients","resolves_to_nobody"],"properties":{"after_micros":{"type":"integer","format":"int64"},"recipients":{"type":"array","items":{"$ref":"#/components/schemas/PreviewRecipient"}},"resolves_to_nobody":{"type":"boolean","description":"The rung resolves to nobody at this instant. The single most important\nthing this endpoint can say."},"targets":{"type":"array","items":{"type":"string"},"description":"What the rung says, before resolution — `the on-call`, `ana@o2.ai`."}}},"PreviousResult":{"type":"object","description":"The newest usable result of an earlier run.","required":["run_id","ended_at"],"properties":{"confidence":{"type":["string","null"]},"ended_at":{"type":"integer","format":"int64"},"outcome":{"type":["string","null"]},"run_id":{"type":"string"}}},"PricingMatchKind":{"type":"string","description":"How a pricing pattern matched a model name.\n\nOrdered so that `Exact > Approximate`: when several patterns of the same source match, an exact\nmatch wins.","enum":["approximate","exact"]},"PricingRuleRef":{"type":"object","description":"The name and source of a pricing rule.","required":["name","source"],"properties":{"name":{"type":"string"},"source":{"$ref":"#/components/schemas/PricingSource"}}},"PricingSource":{"type":"string","description":"Ownership source of a model pricing definition.","enum":["built_in","meta_org","org"]},"PricingTierDefinition":{"type":"object","description":"A pricing tier within a model definition.","properties":{"condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TierCondition","description":"Optional condition that must be met for this tier to apply.\nIf None, this is the default (fallback) tier."}],"default":null},"name":{"type":"string","description":"Display name for this tier (e.g., \"Default\", \"Extended Context\")","default":""},"prices":{"type":"object","description":"Prices per token, keyed by usage type.\nKeys must exactly match usage keys produced by the span extractor:\n  \"input\", \"output\", \"cache_read_input_tokens\", \"cache_creation_input_tokens\", etc.\nValues are price per single token (e.g., 0.000003 = $3/1M tokens).\n\n**Precision note:** `f64` provides ~15 significant decimal digits, which is more\nthan sufficient for cost *estimation* on observability data. These values are not\nused for billing or financial accounting — they produce approximate cost figures\nfor dashboards and alerts. The multiplication `token_count as f64 * price` is\nexact for token counts < 2^53 (~9 quadrillion), well beyond practical span sizes.","default":{},"additionalProperties":{"type":"number","format":"double"},"propertyNames":{"type":"string"}},"priority":{"type":"integer","format":"int32","description":"Breaks ties between matching tiers before the restriction count; higher wins.","default":0},"rules":{"type":"array","items":{"$ref":"#/components/schemas/TierRule"},"description":"Span-attribute rules (service tier, speed, region) that must all hold.","default":[]},"utc_windows":{"type":"array","items":{"$ref":"#/components/schemas/UtcTimeWindow"},"description":"Recurring UTC time-of-day windows during which this tier applies.\n\nEmpty (the default) means the tier is not time-restricted. Providers such as\nDeepSeek publish \"peak\" and \"off-peak\" rates that repeat every day, which is a\ntime-of-day range rather than an absolute cutover (that is what `valid_from` is\nfor). A tier applies when the span falls in ANY of its windows *and* its\n`condition` (if set) passes, so windows compose with context-length tiering.","default":[]}}},"PriorityRung":{"type":"object","description":"One priority's ladder and channel set.","required":["priority","steps","channels"],"properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/Channel"},"description":"Applies to everyone paged at this priority — the primary and the\nsecondary are not treated differently."},"priority":{"type":"integer","format":"int32","example":3,"minimum":0},"steps":{"type":"array","items":{"$ref":"#/components/schemas/LadderStep"},"description":"Empty means this priority never pages a human."}}},"ProblemAckRequest":{"type":"object","description":"The optional body of the page and incident acknowledge routes.","properties":{"take_over":{"type":"boolean","default":false}}},"ProfileFilter":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"op":{"type":"string"},"value":{"type":"string"}}},"ProfileTypeMeta":{"type":"object","required":["type","unit"],"properties":{"type":{"type":"string"},"unit":{"type":"string"}}},"ProfilesDiffBody":{"type":"object","required":["baseline","comparison"],"properties":{"baseline":{"$ref":"#/components/schemas/ProfilesQueryBody","description":"The \"before\" query; same fields as a merge request."},"comparison":{"$ref":"#/components/schemas/ProfilesQueryBody","description":"The \"after\" query; `profile_type` and `profile_unit` must match the baseline."},"max_nodes":{"type":["integer","null"],"minimum":0}}},"ProfilesDiffResponse":{"type":"object","required":["unit","profile_type","baseline_total","comparison_total","truncated","tree_truncated","root","top","took"],"properties":{"baseline_total":{"type":"integer","format":"int64","description":"Baseline total over all its stacks; above `root.before_total` when `truncated`."},"comparison_total":{"type":"integer","format":"int64","description":"Comparison total over all its stacks; above `root.total` when `truncated`."},"profile_type":{"type":"string"},"root":{"type":"object","description":"Call tree: `total` / `self` are the comparison side, `before_*` the baseline."},"took":{"type":"integer","format":"int64","minimum":0},"top":{"type":"array","items":{"type":"object"},"description":"One row per function from both sides, largest share change first (pre-truncation)."},"tree_truncated":{"type":"boolean","description":"True when the call tree was cut to `max_nodes` and light nodes folded into `other`."},"truncated":{"type":"boolean","description":"True when either side exceeded the unique-stack limit."},"unit":{"type":"string"}}},"ProfilesMergeResponse":{"type":"object","required":["unit","profile_type","total","merged_total","truncated","tree_truncated","root","top","took"],"properties":{"merged_total":{"type":"integer","format":"int64","description":"Sample weight represented in `root` / `top` after the unique-stack cap."},"profile_type":{"type":"string"},"root":{"type":"object","description":"Call tree root (`name` / `self` / `total` / `children`)."},"took":{"type":"integer","format":"int64","minimum":0},"top":{"type":"array","items":{"type":"object"},"description":"Flattened top functions by exclusive (`self`) value (pre-truncation)."},"total":{"type":"integer","format":"int64","description":"Full sample weight in scope (from `sum(value)` when stacks were capped)."},"tree_truncated":{"type":"boolean","description":"True when the call tree was cut to `max_nodes` and light nodes folded into `other`."},"truncated":{"type":"boolean","description":"True when unique stacks exceeded the query size limit."},"unit":{"type":"string"}}},"ProfilesMetaResponse":{"type":"object","required":["data_sources","services","profile_types","label_names","took"],"properties":{"data_sources":{"type":"array","items":{"type":"string"}},"label_names":{"type":"array","items":{"type":"string"}},"profile_types":{"type":"array","items":{"$ref":"#/components/schemas/ProfileTypeMeta"}},"services":{"type":"array","items":{"type":"string"}},"took":{"type":"integer","format":"int64","minimum":0}}},"ProfilesQueryBody":{"type":"object","properties":{"data_source":{"type":["string","null"]},"end_time":{"type":"integer","format":"int64"},"filters":{"type":"array","items":{"$ref":"#/components/schemas/ProfileFilter"}},"group_by":{"type":["string","null"],"description":"Label column that splits `series` into `groups` (series endpoint only)."},"group_limit":{"type":["integer","null"],"description":"Groups returned before the rest fold into one `others` group: 1..=50, default 10.","minimum":0},"max_nodes":{"type":["integer","null"],"minimum":0},"profile_type":{"type":["string","null"]},"profile_unit":{"type":["string","null"]},"service_name":{"type":["string","null"]},"start_time":{"type":"integer","format":"int64","description":"Missing reads as 0 so `parse_required_time_range` reports it, not the JSON parser."},"step":{"type":["string","null"]},"timeout":{"type":["integer","null"],"format":"int64"}}},"ProfilesSeriesGroup":{"type":"object","required":["value","total","others","series"],"properties":{"others":{"type":"boolean","description":"True for the single group that sums every value past `group_limit`."},"series":{"type":"array","items":{"$ref":"#/components/schemas/ProfilesSeriesPoint"}},"total":{"type":"number","format":"double"},"value":{"type":"string","description":"Label value; \"\" when rows lack the label, and for the `others` group."}}},"ProfilesSeriesPoint":{"type":"object","required":["timestamp","value"],"properties":{"rate":{"type":["number","null"],"format":"double","description":"Value per second of profiled time, summed over instances; CPU ns / 1e9 = cores."},"timestamp":{"type":"integer","format":"int64"},"value":{"type":"number","format":"double"}}},"ProfilesSeriesResponse":{"type":"object","required":["unit","profile_type","step_secs","series","took"],"properties":{"groups":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ProfilesSeriesGroup"},"description":"Only when `group_by` is set: top `group_limit` values by total, then one `others` group."},"profile_type":{"type":"string"},"series":{"type":"array","items":{"$ref":"#/components/schemas/ProfilesSeriesPoint"},"description":"Sum over all groups per bucket."},"step_secs":{"type":"integer","format":"int64"},"took":{"type":"integer","format":"int64","minimum":0},"unit":{"type":"string"}}},"ProfilesTagValuesResponse":{"type":"object","required":["tag","values","took"],"properties":{"tag":{"type":"string"},"took":{"type":"integer","format":"int64","minimum":0},"values":{"type":"array","items":{"type":"string"}}}},"PromQLLabelFilter":{"type":"object","properties":{"group":{"type":["integer","null"],"format":"int32","description":"The OR group the matcher belongs to; absent means the base list every group is ANDed with.","default":null,"minimum":0},"label":{"type":"string","default":""},"negate":{"type":["boolean","null"],"description":"Set on every matcher of a negated group.","default":null},"op":{"type":"string","default":""},"value":{"type":"string","default":""}}},"PromQLOperation":{"type":"object","properties":{"id":{"type":"string","default":""},"params":{"type":["array","null"],"items":{"$ref":"#/components/schemas/PromQLOperationParam"},"default":null}}},"PromQLOperationParam":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"string"},{"type":"number","format":"double"},{"type":"boolean"}]},"PrometheusExemplarsResponse":{"type":"object","required":["status","data"],"properties":{"data":{"anyOf":[{"type":"object","required":["metric","value"],"properties":{"metric":{"type":"object","additionalProperties":{"type":"string"}},"value":{"type":"array","items":false,"prefixItems":[{"type":"number"},{"type":"string"}],"maxItems":2,"minItems":2}}},{"anyOf":[{"type":"object","required":["metric","values"],"properties":{"metric":{"type":"object","additionalProperties":{"type":"string"}},"values":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"number"},{"type":"string"}],"maxItems":2,"minItems":2}}}},{"type":"object","required":["seriesLabels","exemplars"],"properties":{"exemplars":{"type":"array","items":{"type":"object","required":["timestamp","value","labels"],"properties":{"labels":{"type":"object","additionalProperties":{"type":"string"}},"timestamp":{"type":"number"},"value":{"type":"string"}}}},"seriesLabels":{"type":"object","additionalProperties":{"type":"string"}}}}]},{"type":"array","items":{"type":"object","required":["metric","value"],"properties":{"metric":{"type":"object","additionalProperties":{"type":"string"}},"value":{"type":"array","items":false,"prefixItems":[{"type":"number"},{"type":"string"}],"maxItems":2,"minItems":2}}}},{"type":"array","items":{"anyOf":[{"type":"object","required":["metric","values"],"properties":{"metric":{"type":"object","additionalProperties":{"type":"string"}},"values":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"number"},{"type":"string"}],"maxItems":2,"minItems":2}}}},{"type":"object","required":["seriesLabels","exemplars"],"properties":{"exemplars":{"type":"array","items":{"type":"object","required":["timestamp","value","labels"],"properties":{"labels":{"type":"object","additionalProperties":{"type":"string"}},"timestamp":{"type":"number"},"value":{"type":"string"}}}},"seriesLabels":{"type":"object","additionalProperties":{"type":"string"}}}}]}},{"type":"array","items":false,"prefixItems":[{"type":"number"},{"type":"string"}],"maxItems":2,"minItems":2},{"type":"number"},{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["success"]},"trace_id":{"type":"string"},"warnings":{"type":"array","items":{"type":"string"}}}},"PrometheusQueryResponse":{"type":"object","required":["status","data"],"properties":{"data":{"type":"object","required":["resultType","result"],"properties":{"result":{"anyOf":[{"type":"object","required":["metric","value"],"properties":{"metric":{"type":"object","additionalProperties":{"type":"string"}},"value":{"type":"array","items":false,"prefixItems":[{"type":"number"},{"type":"string"}],"maxItems":2,"minItems":2}}},{"anyOf":[{"type":"object","required":["metric","values"],"properties":{"metric":{"type":"object","additionalProperties":{"type":"string"}},"values":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"number"},{"type":"string"}],"maxItems":2,"minItems":2}}}},{"type":"object","required":["seriesLabels","exemplars"],"properties":{"exemplars":{"type":"array","items":{"type":"object","required":["timestamp","value","labels"],"properties":{"labels":{"type":"object","additionalProperties":{"type":"string"}},"timestamp":{"type":"number"},"value":{"type":"string"}}}},"seriesLabels":{"type":"object","additionalProperties":{"type":"string"}}}}]},{"type":"array","items":{"type":"object","required":["metric","value"],"properties":{"metric":{"type":"object","additionalProperties":{"type":"string"}},"value":{"type":"array","items":false,"prefixItems":[{"type":"number"},{"type":"string"}],"maxItems":2,"minItems":2}}}},{"type":"array","items":{"anyOf":[{"type":"object","required":["metric","values"],"properties":{"metric":{"type":"object","additionalProperties":{"type":"string"}},"values":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"number"},{"type":"string"}],"maxItems":2,"minItems":2}}}},{"type":"object","required":["seriesLabels","exemplars"],"properties":{"exemplars":{"type":"array","items":{"type":"object","required":["timestamp","value","labels"],"properties":{"labels":{"type":"object","additionalProperties":{"type":"string"}},"timestamp":{"type":"number"},"value":{"type":"string"}}}},"seriesLabels":{"type":"object","additionalProperties":{"type":"string"}}}}]}},{"type":"array","items":false,"prefixItems":[{"type":"number"},{"type":"string"}],"maxItems":2,"minItems":2},{"type":"number"},{"type":"string"},{"type":"null"}]},"resultType":{"type":"string","enum":["vector","matrix","scalar","string"]}}},"status":{"type":"string","enum":["success"]},"trace_id":{"type":"string"},"warnings":{"type":"array","items":{"type":"string"}}}},"PromoteRequest":{"type":"object","description":"Promotes a firing to a full incident.","properties":{"severity":{"type":["string","null"],"description":"Absent derives it from the record's priority, so a promotion cannot silently downgrade."},"title":{"type":["string","null"],"description":"Absent takes the record's own title, which is one less field to fill in mid-page."}}},"PromptActivityResponseBody":{"type":"object","required":["id","entityId","label","actor","via","createdAt"],"properties":{"actor":{"type":"string"},"createdAt":{"type":"integer","format":"int64"},"entityId":{"type":"string"},"fromVersion":{"type":["integer","null"],"format":"int32"},"id":{"type":"string"},"label":{"type":"string"},"toVersion":{"type":["integer","null"],"format":"int32"},"via":{"type":"string"}}},"PromptConfig":{"type":"object","properties":{"model":{"type":["string","null"]},"params":{},"responseFormat":{},"tools":{}},"additionalProperties":false},"PromptLabelResponseBody":{"type":"object","required":["name","updatedBy","updatedAt"],"properties":{"deletedAt":{"type":["integer","null"],"format":"int64"},"name":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"version":{"type":["integer","null"],"format":"int32"}}},"PromptMatchResponseBody":{"type":"object","required":["id","entityId","name","version","contentHash"],"properties":{"contentHash":{"type":"string"},"entityId":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"version":{"type":"integer","format":"int32"}}},"PromptMessageBody":{"type":"object","required":["role","content"],"properties":{"content":{"type":"string"},"role":{"type":"string"}},"additionalProperties":false},"PromptRefOverridesBody":{"type":"object","properties":{"model":{"type":["string","null"]},"params":{},"responseFormat":{},"tools":{}},"additionalProperties":false},"PromptResponseBody":{"type":"object","required":["entityId","name","folderId","type","tags","status","latestVersion","createdBy","createdAt","updatedBy","updatedAt","labels"],"properties":{"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"folderId":{"type":"string"},"labels":{"type":"array","items":{"$ref":"#/components/schemas/PromptLabelResponseBody"}},"latestVersion":{"type":"integer","format":"int32"},"name":{"type":"string"},"status":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"}}},"PromptVersionResponseBody":{"type":"object","required":["id","entityId","version","payload","config","commitMessage","source","contentHash","createdBy","createdAt"],"properties":{"baseVersion":{"type":["integer","null"],"format":"int32"},"commitMessage":{"type":"string"},"config":{"$ref":"#/components/schemas/PromptConfig"},"contentHash":{"type":"string"},"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"entityId":{"type":"string"},"id":{"type":"string"},"payload":{},"source":{"type":"string"},"version":{"type":"integer","format":"int32"}}},"PromptWebhookSettingsRequestBody":{"type":"object","required":["endpoint"],"properties":{"endpoint":{"type":"string"},"events":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"PromptWebhookSettingsResponseBody":{"type":"object","required":["endpoint","events","secretConfigured"],"properties":{"endpoint":{"type":"string"},"events":{"type":"array","items":{"type":"string"}},"secretConfigured":{"type":"boolean"}}},"ProviderRequestBody":{"type":"object","description":"HTTP request body for creating/updating a Provider.","required":["name","providerType","authConfig"],"properties":{"authConfig":{},"availableModels":{"type":"array","items":{"type":"string"}},"defaultModel":{"type":"string"},"endpoint":{"type":["string","null"]},"isDefault":{"type":"boolean"},"name":{"type":"string"},"providerType":{"type":"string"},"rateLimits":{"type":["object","null"]}}},"ProviderResponseBody":{"type":"object","description":"HTTP response body for a Provider (auth_config masked).","required":["id","orgId","name","providerType","resolvedEndpoint","defaultModel","availableModels","authConfigMasked","isDefault","createdAt","updatedAt"],"properties":{"authConfigMasked":{"type":"boolean","description":"API key / auth config is masked in responses."},"availableModels":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"integer","format":"int64"},"defaultModel":{"type":"string"},"endpoint":{"type":["string","null"],"description":"Null for a provider on the built-in default, so the form field stays empty."},"id":{"type":"string"},"isDefault":{"type":"boolean"},"name":{"type":"string"},"orgId":{"type":"string"},"providerType":{"type":"string"},"rateLimits":{"type":["object","null"]},"resolvedEndpoint":{"type":"string","description":"The URL actually called, with the default filled in when `endpoint` is null."},"updatedAt":{"type":"integer","format":"int64"}}},"PublicDashboardConfig":{"type":"object","description":"Admin body to create or update a link; variables stay frozen at the author's values.","required":["time_range"],"properties":{"expires_at":{"type":["integer","null"],"format":"int64"},"frozen_variables":{"type":"object"},"name":{"type":"string","description":"Label that tells a dashboard's links apart; empty is allowed."},"refresh_secs":{"type":"integer","format":"int32"},"time_range":{"$ref":"#/components/schemas/TimeRangePolicy"},"visibility":{"$ref":"#/components/schemas/PublicDashboardVisibility"}}},"PublicDashboardTimeRange":{"oneOf":[{"type":"object","required":["secs","type"],"properties":{"secs":{"type":"integer","format":"int64"},"type":{"type":"string","enum":["relative"]}}},{"type":"object","description":"UTC micros.","required":["start","end","type"],"properties":{"end":{"type":"integer","format":"int64"},"start":{"type":"integer","format":"int64"},"type":{"type":"string","enum":["absolute"]}}}],"description":"One window a link offers: rolling and refreshed on read, or fixed and built once."},"PublicDashboardVisibility":{"type":"string","description":"Draft configures the share without exposing it; Public serves it and is the default.","enum":["draft","public"]},"PublicLinkList":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/PublicLinkView"}}}},"PublicLinkStatus":{"type":"string","description":"A link's state as the admin UI shows it; `NeedsAttention` comes from the batch status call.","enum":["live","paused","not_viewed","needs_attention","expired","dashboard_deleted","disabled"]},"PublicLinkView":{"type":"object","description":"A link as the admin API returns it; the slug is a bearer secret for authenticated routes only.","required":["id","name","dashboard_id","status","enabled","time_range","frozen_variables","refresh_secs","published_by","publisher_left","created_at","updated_at","access_count"],"properties":{"access_count":{"type":"integer","format":"int64"},"created_at":{"type":"integer","format":"int64"},"dashboard_id":{"type":"string"},"dashboard_title":{"type":["string","null"]},"enabled":{"type":"boolean"},"expires_at":{"type":["integer","null"],"format":"int64"},"folder_id":{"type":["string","null"]},"folder_name":{"type":["string","null"]},"frozen_variables":{"type":"object","additionalProperties":{},"propertyNames":{"type":"string"}},"id":{"type":"string"},"last_accessed_at":{"type":["integer","null"],"format":"int64"},"name":{"type":"string"},"published_by":{"type":"string"},"publisher_left":{"type":"boolean","description":"The publisher is no longer an org member; the link may still be enabled while cleanup lags."},"refresh_secs":{"type":"integer","format":"int32"},"slug":{"type":["string","null"],"description":"Null when the caller cannot read the link's dashboard."},"status":{"$ref":"#/components/schemas/PublicLinkStatus"},"time_range":{"$ref":"#/components/schemas/TimeRangePolicy"},"updated_at":{"type":"integer","format":"int64"},"updated_by":{"type":["string","null"]}}},"PublicNotice":{"type":"object","required":["kind","impact","title","body","state","starts_at","excluded_from_uptime","updates"],"properties":{"body":{"type":"string"},"excluded_from_uptime":{"type":"boolean"},"impact":{"$ref":"#/components/schemas/StatusPageImpact"},"kind":{"$ref":"#/components/schemas/NoticeKind"},"resolved_at":{"type":["integer","null"],"format":"int64"},"starts_at":{"type":"integer","format":"int64"},"state":{"$ref":"#/components/schemas/NoticeState"},"title":{"type":"string"},"updates":{"type":"array","items":{"$ref":"#/components/schemas/PublicNoticeUpdate"},"description":"The \"investigating / mitigated / resolved\" narrative timeline, oldest\nfirst. No internal update id — same IDOR reasoning as the notice."}}},"PublicNoticeUpdate":{"type":"object","required":["body","at"],"properties":{"at":{"type":"integer","format":"int64"},"body":{"type":"string"}}},"PublicStatusPageSnapshot":{"type":"object","required":["name","current","history"],"properties":{"accent_color":{"type":["string","null"]},"brand_name":{"type":["string","null"]},"current":{"$ref":"#/components/schemas/SnapshotCurrent"},"favicon_img":{"type":["string","null"]},"history":{"$ref":"#/components/schemas/SnapshotHistory"},"logo_img":{"type":["string","null"]},"name":{"type":"string"}}},"PublishRequest":{"type":"object","required":["yaml"],"properties":{"message":{"type":"string"},"yaml":{"type":"string"}}},"Published":{"type":"object","required":["version","warnings"],"properties":{"version":{"type":"integer","format":"int64"},"warnings":{"$ref":"#/components/schemas/BTreeMap"}}},"PutAppSettings":{"type":"object","description":"The body of a settings PUT: the built-in bot switch, session rules and ignored pages.","required":["bots","sessions","pages","version"],"properties":{"bots":{"type":"boolean"},"pages":{"type":"array","items":{"$ref":"#/components/schemas/PageRule"}},"sessions":{"type":"array","items":{"$ref":"#/components/schemas/SessionRule"}},"version":{"type":"integer","format":"int32","description":"0 creates; any other must equal the stored version."}},"additionalProperties":false},"PutSampleDataRequest":{"type":"object","required":["start_time","end_time"],"properties":{"end_time":{"type":"integer","format":"int64"},"start_time":{"type":"integer","format":"int64"}}},"PutTelephonyRequest":{"type":"object","description":"A missing or blank `auth_token` keeps the stored one; no `Debug`, since it carries the token.","required":["provider","account_sid","from_number"],"properties":{"account_sid":{"type":"string"},"auth_token":{"type":["string","null"]},"from_number":{"type":"string"},"provider":{"type":"string"}}},"QualityBucket":{"type":"object","required":["key","count"],"properties":{"count":{"type":"integer","format":"int64","minimum":0},"key":{"type":"object","description":"Numeric: bucket index, usable as `bucket_from` / `bucket_to` on the\nScores list. Boolean / categorical: the value, usable as `value`."},"lower":{"type":["number","null"],"format":"double","description":"Numeric only: inclusive lower edge. Bucket 0 also holds values below it."},"unhealthy":{"type":["integer","null"],"format":"int64","description":"`None` when the config has no healthy threshold.","minimum":0},"upper":{"type":["number","null"],"format":"double","description":"Numeric only: exclusive upper edge. The last bucket also holds values\nat or above it."}}},"QualityConfigSummary":{"type":"object","required":["configId","name","dataType","status","total","scopeCounts"],"properties":{"average":{"type":["number","null"],"format":"double","description":"Numeric configs only."},"configId":{"type":"string","description":"Score Config `entity_id`."},"dataType":{"type":"string"},"lastScoredAt":{"type":["integer","null"],"format":"int64","description":"Newest Score `_timestamp`, in microseconds."},"name":{"type":"string"},"scopeCounts":{"$ref":"#/components/schemas/QualityScopeCounts","description":"Counts for every scope, ignoring the `scope` filter, so the UI can\nrender the scope toggle."},"status":{"$ref":"#/components/schemas/QualityStatus"},"topValue":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/QualityTopValue","description":"Boolean and categorical configs: the most frequent value. Ties go to\nthe smaller value."}]},"total":{"type":"integer","format":"int64","minimum":0},"unhealthy":{"type":["integer","null"],"format":"int64","description":"`None` when the config has no healthy threshold.","minimum":0}}},"QualityScopeCounts":{"type":"object","required":["span","trace","session"],"properties":{"session":{"type":"integer","format":"int64","minimum":0},"span":{"type":"integer","format":"int64","minimum":0},"trace":{"type":"integer","format":"int64","minimum":0}}},"QualityScore":{"type":"object","required":["id","timestamp","refTimestamp","sourceType","targetScope","value"],"properties":{"evaluatorTraceId":{"type":["string","null"]},"id":{"type":"string"},"inputPreview":{"type":["string","null"]},"inputSpanId":{"type":["string","null"],"description":"Span the scorer read the input from: the stored id, or `span_id` for a\nspan Score. `None` for older trace and session Scores."},"outputPreview":{"type":["string","null"]},"outputSpanId":{"type":["string","null"],"description":"Span the scorer read the output from, with the same fallback."},"reasoning":{"type":["string","null"]},"refTimestamp":{"type":"integer","format":"int64","description":"Start time of the scored span, trace or session, in microseconds. Use\nit, not `timestamp`, to open the target. Older Scores without it fall\nback to `timestamp`."},"sessionId":{"type":["string","null"]},"sourceStream":{"type":["string","null"]},"sourceStreamType":{"type":["string","null"]},"sourceType":{"type":"string","description":"`llm_judge`, `code` or `remote`."},"spanId":{"type":["string","null"]},"targetId":{"type":["string","null"]},"targetScope":{"type":"string"},"taskId":{"type":["string","null"]},"timestamp":{"type":"integer","format":"int64","description":"Score write time, in microseconds."},"traceId":{"type":["string","null"]},"unhealthy":{"type":["boolean","null"],"description":"`None` when the config has no healthy threshold."},"value":{"type":"object","description":"Number, boolean or string, following the config data type."}}},"QualityStatus":{"type":"string","enum":["attention","healthy","unset","no_data"]},"QualityTimelineBucket":{"type":"object","description":"Latest Scores written in one slice of the time range.","required":["start","end","count"],"properties":{"average":{"type":["number","null"],"format":"double","description":"Numeric configs only; `None` for a bucket without Scores."},"count":{"type":"integer","format":"int64","minimum":0},"end":{"type":"integer","format":"int64","description":"Exclusive bucket end, in microseconds. The last one ends at `end_time`."},"p95":{"type":["number","null"],"format":"double","description":"Numeric configs only: approximate 95th percentile."},"start":{"type":"integer","format":"int64","description":"Inclusive bucket start, in microseconds. Buckets align to multiples of\ntheir width, so the first one starts at `start_time`, not earlier."},"trueCount":{"type":["integer","null"],"format":"int64","description":"Boolean configs only: Scores with the value `true`.","minimum":0},"unhealthy":{"type":["integer","null"],"format":"int64","description":"`None` when the config has no healthy threshold.","minimum":0}}},"QualityTopValue":{"type":"object","required":["key","count"],"properties":{"count":{"type":"integer","format":"int64","minimum":0},"key":{"type":"object"}}},"Query":{"type":"object","required":["customQuery","fields","config"],"properties":{"config":{"$ref":"#/components/schemas/QueryConfig"},"customQuery":{"type":"boolean"},"fields":{"$ref":"#/components/schemas/PanelFields"},"joins":{"type":["array","null"],"items":{"$ref":"#/components/schemas/Join"}},"query":{"type":["string","null"]},"tabName":{"type":["string","null"]},"vrlFunctionQuery":{"type":["string","null"]}}},"QueryCondition":{"type":"object","properties":{"aggregation":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Aggregation"}]},"conditions":{"type":["object","null"]},"multi_time_range":{"type":["array","null"],"items":{"$ref":"#/components/schemas/CompareHistoricData"}},"promql":{"type":["string","null"]},"promql_condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Condition"}]},"promql_multi_alert":{"type":"boolean","description":"Per-group alerting for a PromQL alert (M-9), where a \"group\" is one\nreturned SERIES.\n\nA sibling of `promql_condition` rather than a member of\n[`Aggregation::multi_alert`], because a PromQL alert has no\n`aggregation` at all — its grouping is expressed in the PromQL itself\n(`sum by (pod) (…)`), not in a `group_by` column list.\n\nThe group key is the series' FULL label set. That is what a series'\nidentity already is in Prometheus, and it means the expression stays\nthe single place grouping is decided — a separate label picker could\nonly ever disagree with the `by (…)` clause beside it.\n\n`#[serde(default)]` carries the same backward-compatibility guarantee\nas its aggregation counterpart: an alert stored before this field\nexisted deserializes to `false` and keeps its collapsed evaluation\nbyte-for-byte. Nothing is inferred from the query returning several\nseries — that would change paging cadence for every existing PromQL\nalert that happens to be unaggregated."},"promql_rule_mode":{"type":"boolean"},"promql_warning_value":{"type":["number","null"],"format":"double","description":"WARNING value for the PromQL condition (alerts_2.md Feature 1).\n\nA sibling field rather than a member of `Condition`, which is shared by\nevery filter in the product and must not grow alert-specific knobs.\nShares `promql_condition.operator` with critical. `None` = single-level.\n\nLenient deserialization: this arrives through\n`CreateAlertRequestBody`'s `#[serde(flatten)]`, which buffers via\n`Value`, where `arbitrary_precision` makes a number a map (D61).\nWithout it a FRACTIONAL warning is rejected while an integer one works\n— found by end-to-end testing."},"search_event_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventType"}]},"slo_condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SloCondition","description":"Feature 5 (D42): the SLO condition, when `query_type` is `Slo`.\n\nPersisted in its own `alerts.query_slo_condition` column following the\n`query_aggregation` precedent — deliberately not `trigger_thresholds`,\nwhose documented scope is threshold and level configuration only (D1)."}]},"sql":{"type":["string","null"]},"type":{"$ref":"#/components/schemas/QueryType"},"vrl_function":{"type":["string","null"]}}},"QueryConfig":{"type":"object","required":["promql_legend"],"properties":{"formula":{"type":["string","null"]},"hide":{"type":["boolean","null"]},"layer_type":{"type":["string","null"]},"limit":{"type":["number","null"],"format":"double"},"max":{"type":["number","null"],"format":"double"},"min":{"type":["number","null"],"format":"double"},"promql_legend":{"type":"string"},"promql_legend_fallback":{"type":["string","null"]},"query_label":{"type":["string","null"]},"query_type":{"type":["string","null"]},"range_mode":{"type":["string","null"]},"ref":{"type":["string","null"]},"step_value":{"type":["string","null"]},"time_shift":{"type":["array","null"],"items":{"$ref":"#/components/schemas/TimeShift"}},"weight_fixed":{"type":["number","null"],"format":"double"}}},"QueryData":{"type":"object","properties":{"field":{"type":"string","default":""},"filter":{"type":["array","null"],"items":{"$ref":"#/components/schemas/Filters"},"default":null},"max_record_size":{"type":["integer","null"],"format":"int64","default":null},"stream":{"type":"string","default":""},"stream_type":{"oneOf":[{"$ref":"#/components/schemas/StreamType"}],"default":"logs"}}},"QueryFunctionsResponse":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/CatalogFunction"}}}},"QueryHistoryClearResponse":{"type":"object","required":["deleted"],"properties":{"deleted":{"type":"integer","format":"int64","description":"Number of entries deleted.","minimum":0}}},"QueryHistoryCountResponse":{"type":"object","required":["count"],"properties":{"count":{"type":"integer","format":"int64","description":"Entries matching the filters, ignoring limit and offset.","minimum":0}}},"QueryHistoryEntry":{"type":"object","required":["id","source","query","streams","context","status","starred","run_count","created_at","updated_at"],"properties":{"context":{"description":"What the page needs to restore the run."},"created_at":{"type":"integer","format":"int64","description":"First run, in microseconds since the epoch; the last run on entries recorded by v1.1.x."},"id":{"type":"string","description":"Entry id."},"query":{"type":"string","description":"The query text."},"query_key":{"type":["string","null"],"description":"Hex sha256 of the merge key; null on entries recorded before keys existed."},"run_count":{"type":"integer","format":"int64","description":"How many runs merged into this entry; 1 on entries recorded by v1.1.x."},"source":{"type":"string","description":"Page the query ran on."},"starred":{"type":"boolean","description":"Starred entries are kept until deleted."},"status":{"type":"string","description":"`ok` or `error`, from the latest run; `ok` on entries recorded by v1.1.x."},"streams":{"type":"array","items":{"type":"string"},"description":"Streams the query ran on."},"updated_at":{"type":"integer","format":"int64","description":"Latest run, in microseconds since the epoch."}}},"QueryHistoryListResponse":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/QueryHistoryEntry"}},{"$ref":"#/components/schemas/QueryHistoryCountResponse"}],"description":"The entries, or with `count_only=true` how many entries match."},"QueryHistoryRequest":{"type":"object","required":["query","context"],"properties":{"context":{"description":"What the page needs to restore the run, at most 64 KB; stored as given."},"query":{"type":"string","description":"The query text, at most 16 KB and not blank."},"query_key":{"type":["string","null"],"description":"Runs with the same source and key merge into one entry; defaults to the query text."},"source":{"type":["string","null"],"description":"`logs`, `traces`, `metrics`, `dbm` or `profiles`; defaults to `metrics`."},"status":{"type":["string","null"],"description":"`ok` or `error`; defaults to `ok`."},"streams":{"type":"array","items":{"type":"string"},"description":"Streams the query ran on, at most 50; each name non-empty and without a comma."}}},"QueryHistoryStarRequest":{"type":"object","required":["starred"],"properties":{"starred":{"type":"boolean","description":"`true` stars the entry, `false` unstars it."}}},"QueryInfo":{"type":"object","required":["sql","start_time","end_time"],"properties":{"end_time":{"type":"integer","format":"int64"},"sql":{"type":"string"},"start_time":{"type":"integer","format":"int64"}}},"QueryLanguage":{"type":"string","description":"Query language for a time-slice aggregate. Carried explicitly rather than\ninferred from the stream type, so the evaluator never guesses.","enum":["sql","prom_ql"]},"QueryStatus":{"type":"object","required":["trace_id","status","created_at","started_at","work_group"],"properties":{"created_at":{"type":"integer","format":"int64"},"org_id":{"type":["string","null"]},"query":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/QueryInfo"}]},"scan_stats":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ScanStats"}]},"search_event_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventContext"}]},"search_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventType"}]},"started_at":{"type":"integer","format":"int64"},"status":{"type":"string"},"stream_type":{"type":["string","null"]},"trace_id":{"type":"string"},"user_id":{"type":["string","null"]},"work_group":{"type":"string"}}},"QueryStatusResponse":{"type":"object","required":["status"],"properties":{"status":{"type":"array","items":{"$ref":"#/components/schemas/QueryStatus"}}}},"QueryType":{"type":"string","enum":["custom","sql","promql","slo"]},"QueueReviewSubmission":{"type":"object","required":["submissionId","submittedAt","scores"],"properties":{"comments":{"type":["string","null"]},"reviewer":{"type":["string","null"]},"scores":{"type":"array","items":{"$ref":"#/components/schemas/LlmScoreRecord"}},"submissionId":{"type":"string"},"submittedAt":{"type":"integer","format":"int64"}}},"QueueReviewSubmissionResponseBody":{"type":"object","required":["submissionId","submittedAt","scores"],"properties":{"comments":{"type":["string","null"]},"reviewer":{"type":["string","null"]},"scores":{"type":"array","items":{"$ref":"#/components/schemas/AnnotationQueueMachineScoreResponseBody"}},"submissionId":{"type":"string"},"submittedAt":{"type":"integer","format":"int64"}}},"RangeState":{"type":"string","description":"One range's result on the querier that owns the link, as the publisher's status call reports.","enum":["cached","not_cached","building","needs_attention"]},"RangeStatus":{"type":"object","description":"Status of one offered range, read from the owning querier's result file.","required":["key","state","withheld_panels","unavailable_count","incomplete_count"],"properties":{"built_at":{"type":["integer","null"],"format":"int64"},"incomplete_count":{"type":"integer","format":"int32","minimum":0},"key":{"type":"string"},"last_error":{"type":["string","null"]},"next_retry_at":{"type":["integer","null"],"format":"int64","description":"When the next build may start after a failure; absent from a querier that predates it."},"sources":{"type":["object","null"],"description":"Panel id to the typed streams its data was read from; left out of the batch call.","additionalProperties":{"type":"array","items":{"type":"array","items":{"type":"string"}}},"propertyNames":{"type":"string"}},"state":{"$ref":"#/components/schemas/RangeState"},"unavailable_count":{"type":"integer","format":"int32","minimum":0},"withheld_panels":{"type":"array","items":{"$ref":"#/components/schemas/WithheldPanel"}}}},"RcaDetailFields":{"type":"object","description":"The detail endpoint's run fields.","required":["history"],"properties":{"current_run":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RcaRun","description":"The latest run, without its report."}]},"history":{"type":"array","items":{"$ref":"#/components/schemas/RcaRunItem"}},"report_run":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RcaRunItem","description":"The newest `completed` run."}]},"resume_run_id":{"type":["string","null"]}}},"RcaOutcome":{"type":"string","enum":["root_cause_identified","multiple_root_causes","contributing_factor","inconclusive","blocked"]},"RcaResumedResponse":{"type":"object","description":"Response for a resumed RCA run (202)","required":["message","run_id","resumed_from","reused_steps","from_step"],"properties":{"from_step":{"$ref":"#/components/schemas/ResumeStep","description":"The step the new run redoes first"},"message":{"type":"string"},"resumed_from":{"type":"string","description":"The failed or cancelled run it continues"},"reused_steps":{"type":"integer","format":"int32","description":"Finished steps of the earlier run that the new run keeps","minimum":0},"run_id":{"type":"string","description":"The new run"}}},"RcaRun":{"type":"object","description":"One analysis run (`rca_runs` row).","required":["run_id","report_format","subject_type","subject_id","trigger","mode","started_by","state","started_at","updated_at"],"properties":{"cancelled_by":{"type":["string","null"]},"confidence":{"type":["string","null"]},"context_used":{"description":"`{past_causes: [{id, summary}], skills: [name], toolsets: [name]}`."},"continuations":{"type":"integer","format":"int32","description":"Continuation turns the run used."},"deadline_closed_at":{"type":["integer","null"],"format":"int64","description":"When the sweeper closed the answer deadline, µs."},"ended_at":{"type":["integer","null"],"format":"int64"},"error":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RunError"}]},"guidance":{"type":["string","null"]},"incident_id":{"type":["string","null"]},"input_deadline_at":{"type":["integer","null"],"format":"int64","description":"Answer deadline of a `waiting_input` run, µs."},"mode":{"$ref":"#/components/schemas/RunMode"},"oncall_subjects":{"description":"Serialized `Vec<SubjectRef>` of an alert run's pending on-call records."},"outcome":{"type":["string","null"]},"pending_question_id":{"type":["string","null"],"description":"`callID` of the open question of a `waiting_input` run."},"questions_asked":{"type":"integer","format":"int32","description":"Questions the run asked."},"report":{"type":["string","null"],"description":"Absent rather than null while the run has no report."},"report_format":{"$ref":"#/components/schemas/ReportFormat"},"result":{},"run_id":{"type":"string"},"session_id":{"type":["string","null"]},"stage":{"type":["string","null"],"description":"Current stage of the seven-stage protocol."},"stage_index":{"type":["integer","null"],"format":"int32"},"started_at":{"type":"integer","format":"int64"},"started_by":{"type":"string"},"state":{"$ref":"#/components/schemas/RunState"},"stats":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RunStats"}]},"subject_id":{"type":"string"},"subject_type":{"$ref":"#/components/schemas/RunSubjectType"},"trigger":{"$ref":"#/components/schemas/RunTrigger"},"updated_at":{"type":"integer","format":"int64"}}},"RcaRunItem":{"type":"object","description":"One row of a run history list.","required":["run_id","report_format","subject_type","trigger","mode","started_by","state","started_at"],"properties":{"cancelled_by":{"type":["string","null"]},"confidence":{"type":["string","null"]},"ended_at":{"type":["integer","null"],"format":"int64"},"error_reason":{"type":["string","null"],"description":"`error.reason` of a failed run."},"has_record":{"type":"boolean","description":"The run stored a record, so a cancelled or failed run's partial ledger still opens."},"mode":{"$ref":"#/components/schemas/RunMode"},"outcome":{"type":["string","null"]},"report_format":{"$ref":"#/components/schemas/ReportFormat"},"run_id":{"type":"string"},"started_at":{"type":"integer","format":"int64"},"started_by":{"type":"string"},"state":{"$ref":"#/components/schemas/RunState"},"subject_type":{"$ref":"#/components/schemas/RunSubjectType"},"trigger":{"$ref":"#/components/schemas/RunTrigger"}}},"RcaRunSummary":{"type":"object","description":"The run summary route body.","required":["run_id","state","state_version","not_modified","legacy","card"],"properties":{"blind_spots":{"type":"array","items":{"$ref":"#/components/schemas/BlindSpot"}},"card":{"$ref":"#/components/schemas/SummaryCard"},"evidence":{"type":"array","items":{"$ref":"#/components/schemas/EvidenceEntry"}},"hypotheses":{"type":"array","items":{"$ref":"#/components/schemas/SummaryHypothesis"}},"legacy":{"type":"boolean","description":"A finished run with no stored record: only the report shows."},"not_modified":{"type":"boolean"},"run_id":{"type":"string"},"state":{"$ref":"#/components/schemas/RunState"},"state_version":{"type":"string"},"timeline":{"type":"array","items":{"$ref":"#/components/schemas/SummaryTimelineEntry"}},"unverified":{"type":"array","items":{"$ref":"#/components/schemas/UnverifiedCitation"}}}},"RcaStartedResponse":{"type":"object","description":"Response for a started RCA analysis (202)","required":["message","run_id"],"properties":{"message":{"type":"string"},"run_id":{"type":"string","description":"The started run"}}},"RcaSummary":{"allOf":[{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RcaDetailFields","description":"Filled by the detail endpoint only."}]},{"type":"object","required":["run_id","report_format","state","stale","started_at","updated_at","summary"],"properties":{"confidence":{"type":["string","null"]},"outcome":{"type":["string","null"]},"report_format":{"$ref":"#/components/schemas/ReportFormat"},"run_id":{"type":"string"},"stale":{"type":"boolean","description":"Computed by the server."},"started_at":{"type":"integer","format":"int64"},"state":{"$ref":"#/components/schemas/RunState"},"summary":{"$ref":"#/components/schemas/RunSummaryFields"},"updated_at":{"type":"integer","format":"int64"}}}],"description":"Run summary of an incident's latest run."},"RcaThread":{"type":"object","description":"`GET .../rca/runs/{run_id}/thread` response.","required":["run_id","state_version","not_modified","active","transcript","steps","user_messages","questions","report_submitted","stats","truncated"],"properties":{"active":{"type":"boolean"},"not_modified":{"type":"boolean"},"questions":{"type":"array","items":{"$ref":"#/components/schemas/ThreadQuestion"},"description":"The run's questions to responders, in call order."},"report_submitted":{"type":"boolean"},"reusable_steps":{"type":["integer","null"],"format":"int32","description":"Finished steps a Resume of this ended run keeps; `None` while live or once reported.","minimum":0},"run_id":{"type":"string"},"saved_through_seq":{"type":["integer","null"],"format":"int64","description":"With `truncated`: the last seq that was saved (-1: none)."},"started":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ThreadStart"}]},"state_version":{"type":"string"},"stats":{"$ref":"#/components/schemas/ThreadStats"},"steps":{"type":"array","items":{"$ref":"#/components/schemas/ThreadStep"}},"transcript":{"$ref":"#/components/schemas/Transcript"},"truncated":{"type":"boolean","description":"The end of the transcript was lost; the thread shows the part that was saved."},"user_messages":{"type":"array","items":{"$ref":"#/components/schemas/ThreadUserMessage"}}}},"RcaThreadQuery":{"type":"object","description":"Query parameters for reading an analysis run's investigation thread","properties":{"known_version":{"type":["string","null"],"description":"The `state_version` of the caller's copy; an equal version returns `not_modified`"}}},"ReasonCode":{"type":"string","description":"Why the gate ran or skipped an investigation; the first matching rule wins.","enum":["not_fire","not_critical","rca_running","cooldown","flapping","always_firing","budget","eligible"]},"RecentRejections":{"type":"object","description":"`tracked` is false when the org has user data, for which no rejection is ever stored.","required":["tracked","list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/IngestRejection"}},"tracked":{"type":"boolean"}}},"RecordStatus":{"type":"object","required":["successful","failed"],"properties":{"error":{"type":"string"},"failed":{"type":"integer","format":"int32","minimum":0},"successful":{"type":"integer","format":"int32","minimum":0}}},"Redelivered":{"type":"object","required":["revision"],"properties":{"revision":{"type":"integer","format":"int64"}}},"ReferenceState":{"type":"string","description":"Whether a parent's subtest references can run as stored.","enum":["ok","missing","nested"]},"References":{"type":"object","description":"Why a reference-protected delete was refused (409).","required":["fleets","collectors","rollouts","tokens"],"properties":{"collectors":{"type":"integer","minimum":0},"fleets":{"type":"integer","minimum":0},"rollouts":{"type":"integer","minimum":0},"tokens":{"type":"integer","minimum":0}}},"RefusalCode":{"type":"string","enum":["ack_refused","mute_refused"]},"RefusalRule":{"type":"string","description":"Which rule refused an Ack or a Mute.","enum":["role","fga"]},"RegionGroup":{"type":"object","description":"One region of a follow-the-sun setup: who, and which hours they hold.\n\nThe name is required here, unlike [`Group`]. A region is the one thing the\npreset genuinely cannot guess — \"APAC\" is knowledge the operator has — and a\ncalendar showing `Region 2` would be a worse schedule than the one they\nmeant to describe.","required":["name","members","start_minute","end_minute"],"properties":{"end_minute":{"type":"integer","format":"int32","description":"Minutes from midnight in the team's timezone, exclusive. May be less\nthan `start_minute`, which means the region's window wraps midnight.","minimum":0},"members":{"type":"array","items":{"type":"string"},"description":"Emails, in handover order."},"name":{"type":"string"},"start_minute":{"type":"integer","format":"int32","description":"Minutes from midnight **in the team's timezone**, inclusive.","minimum":0}}},"RejectionReason":{"type":"string","enum":["invalid_credentials","malformed_body","batch_too_large","rate_or_quota"]},"RelatedStreams":{"type":"object","description":"Related streams grouped by type","required":["logs","traces","metrics","profiles"],"properties":{"logs":{"type":"array","items":{"$ref":"#/components/schemas/StreamInfo"}},"metrics":{"type":"array","items":{"$ref":"#/components/schemas/StreamInfo"}},"profiles":{"type":"array","items":{"$ref":"#/components/schemas/StreamInfo"}},"traces":{"type":"array","items":{"$ref":"#/components/schemas/StreamInfo"}}}},"RemoteScorerAuth":{"oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["none"]}}},{"type":"object","required":["token","type"],"properties":{"token":{"type":"string"},"type":{"type":"string","enum":["bearer"]}}},{"type":"object","required":["username","password","type"],"properties":{"password":{"type":"string"},"type":{"type":"string","enum":["basic"]},"username":{"type":"string"}}},{"type":"object","required":["token","header_name","type"],"properties":{"header_name":{"type":"string"},"token":{"type":"string"},"type":{"type":"string","enum":["api_key"]}}}]},"RemoteScorerHeader":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{"type":"string"}},"additionalProperties":false},"RemoteScorerParams":{"type":"object","required":["endpoint"],"properties":{"auth":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RemoteScorerAuth"}]},"content_type":{"type":["string","null"]},"custom_headers":{"type":["array","null"],"items":{"$ref":"#/components/schemas/RemoteScorerHeader"}},"endpoint":{"type":"string"},"http_method":{"type":["string","null"]},"max_retries":{"type":["integer","null"],"format":"int32","minimum":0},"timeout_ms":{"type":["integer","null"],"format":"int64","minimum":0}},"additionalProperties":false},"RemoteTaskAuthResponse":{"type":"object","description":"Auth on the way out: the shape, and whether a Secret is configured.","required":["type","usesSecret"],"properties":{"headerName":{"type":["string","null"]},"type":{"type":"string"},"usesSecret":{"type":"boolean"}}},"RemoteTaskHeaderResponse":{"type":"object","description":"What a header looks like on the way out: its key, and its literal value only\nwhen it has one. A header backed by a Secret reports that it is, never what.","required":["key","usesSecret"],"properties":{"key":{"type":"string"},"usesSecret":{"type":"boolean"},"value":{"type":["string","null"]}}},"RemoteTaskLatencyStatsBody":{"type":"object","properties":{"p50":{"type":["number","null"],"format":"double"},"p95":{"type":["number","null"],"format":"double"}}},"RemoteTaskOverridesBody":{"type":"object","description":"The two runtime overrides an Experiment may set on a registered Remote Task.","properties":{"maxConcurrency":{"type":["integer","null"],"format":"int32","minimum":0},"timeoutMs":{"type":["integer","null"],"format":"int64","minimum":0}},"additionalProperties":false},"RemoteTaskResponseBody":{"type":"object","required":["id","orgId","entityId","version","isDraft","isReferenceable","name","endpoint","httpMethod","auth","customHeaders","contentType","responseSchema","timeoutMs","maxAttempts","maxConcurrency","signing","verificationStatus","isActive","createdAt","updatedAt"],"properties":{"auth":{"$ref":"#/components/schemas/RemoteTaskAuthResponse"},"contentType":{"type":"string"},"createdAt":{"type":"integer","format":"int64"},"customHeaders":{"type":"array","items":{"$ref":"#/components/schemas/RemoteTaskHeaderResponse"}},"description":{"type":["string","null"]},"draftSourceVersion":{"type":["integer","null"],"format":"int32"},"endpoint":{"type":"string"},"entityId":{"type":"string"},"httpMethod":{"type":"string"},"id":{"type":"string"},"isActive":{"type":"boolean"},"isDraft":{"type":"boolean"},"isReferenceable":{"type":"boolean","description":"Whether an Experiment may pin this row."},"maxAttempts":{"type":"integer","format":"int32","minimum":0},"maxConcurrency":{"type":"integer","format":"int32","minimum":0},"name":{"type":"string"},"orgId":{"type":"string"},"referencedBy":{"type":["integer","null"],"format":"int64","description":"Number of live Experiments pinned to any published version of this\nhead. Populated by the list endpoint, which can compute all heads in one\nbatch; omitted from single-version responses.","minimum":0},"requestTemplate":{"type":["string","null"]},"responseSchema":{"type":"string"},"signing":{"$ref":"#/components/schemas/RemoteTaskSigningResponse"},"taskRef":{"type":["string","null"],"description":"`name@version`, present only when there is a version to pin."},"timeoutMs":{"type":"integer","format":"int64","minimum":0},"updatedAt":{"type":"integer","format":"int64"},"verificationError":{"type":["string","null"]},"verificationStatus":{"type":"string"},"verifiedAt":{"type":["integer","null"],"format":"int64"},"version":{"type":"integer","format":"int32","description":"`0` marks the head's draft, which no Experiment can reference."}}},"RemoteTaskSecretMaterialBody":{"oneOf":[{"type":"object","required":["value","type"],"properties":{"type":{"type":"string","enum":["token"]},"value":{"type":"string"}}},{"type":"object","required":["username","password","type"],"properties":{"password":{"type":"string"},"type":{"type":"string","enum":["basic"]},"username":{"type":"string"}}}]},"RemoteTaskSecretMaterialResponseBody":{"oneOf":[{"type":"object","required":["value","type"],"properties":{"type":{"type":"string","enum":["token"]},"value":{"type":"string"}}},{"type":"object","required":["username","password","type"],"properties":{"password":{"type":"string"},"type":{"type":"string","enum":["basic"]},"username":{"type":"string"}}}]},"RemoteTaskSecretMetadataBody":{"type":"object","required":["purpose","state","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"graceExpiresAt":{"type":["integer","null"],"format":"int64"},"keyId":{"type":["string","null"]},"lastVerifiedAt":{"type":["integer","null"],"format":"int64"},"purpose":{"$ref":"#/components/schemas/RemoteTaskSecretPurposeBody"},"state":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"}}},"RemoteTaskSecretPurposeBody":{"type":"string","enum":["auth","signing"]},"RemoteTaskSigningResponse":{"type":"object","description":"Signing on the way out. The key id is shown because the receiver needs it to\nselect a key; the secret behind it is not.","required":["enabled","usesSecret"],"properties":{"enabled":{"type":"boolean"},"keyId":{"type":["string","null"]},"usesSecret":{"type":"boolean"}}},"RenameCollectorRequest":{"type":"object","description":"The nickname; an empty name falls back to the host name.","required":["name"],"properties":{"name":{"type":"string"}},"additionalProperties":false},"RenameFleetRequest":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}},"additionalProperties":false},"Repeat":{"type":"string","enum":["none","daily","weekly"]},"Report":{"type":"object","required":["orgId","dashboards","destinations"],"properties":{"createdAt":{"type":"string","format":"date-time"},"dashboards":{"type":"array","items":{"$ref":"#/components/schemas/ReportDashboard"}},"description":{"type":"string"},"destinations":{"type":"array","items":{"$ref":"#/components/schemas/ReportDestination"}},"enabled":{"type":"boolean"},"frequency":{"$ref":"#/components/schemas/ReportFrequency","description":"Frequency of report generation. E.g. - Weekly."},"imagePreview":{"type":"boolean","description":"When `true` and the report type is PDF, a PNG screenshot is also captured and embedded\ninline in the email body alongside the PDF attachment."},"lastEditedBy":{"type":"string"},"message":{"type":"string","description":"Message to include in the email"},"name":{"type":"string"},"orgId":{"type":"string"},"owner":{"type":"string"},"start":{"type":"integer","format":"int64","description":"Start time of report generation in UNIX microseconds."},"timezone":{"type":"string"},"timezoneOffset":{"type":"integer","format":"int32","description":"Fixed timezone offset in minutes"},"title":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}}},"ReportAttachmentDimensions":{"type":"object","required":["width","height"],"properties":{"height":{"type":"integer","format":"int32","minimum":0},"width":{"type":"integer","format":"int32","minimum":0}}},"ReportDashboard":{"type":"object","required":["dashboard","folder","tabs"],"properties":{"attachment_dimensions":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ReportAttachmentDimensions","description":"Optional override for the browser viewport dimensions used when capturing the report.\nWhen `None` the report server's configured defaults are used."}]},"dashboard":{"type":"string"},"email_attachment_type":{"$ref":"#/components/schemas/ReportEmailAttachmentType","description":"How the attachment is sent in the email — as a downloadable file or embedded inline."},"folder":{"type":"string"},"report_type":{"$ref":"#/components/schemas/ReportMediaType","description":"The type of report attachment — PDF or PNG."},"tabs":{"type":"array","items":{"type":"string"}},"timerange":{"$ref":"#/components/schemas/ReportTimerange","description":"The timerange of dashboard data."},"variables":{"type":"array","items":{"$ref":"#/components/schemas/ReportDashboardVariable"}}}},"ReportDashboardVariable":{"type":"object","required":["key","value"],"properties":{"id":{"type":["string","null"]},"key":{"type":"string"},"value":{"type":"string"}}},"ReportDestination":{"oneOf":[{"type":"object","required":["email"],"properties":{"email":{"type":"string"}}}]},"ReportEmailAttachmentType":{"type":"string","enum":["standard","inline"]},"ReportFormat":{"type":"string","description":"Where a report lives: `v1` in pre-run `topology_context`, `v2` in an `rca_runs` row.","enum":["v1","v2"]},"ReportFrequency":{"type":"object","properties":{"align_time":{"type":"boolean"},"cron":{"type":"string","description":"Cron expression"},"interval":{"type":"integer","format":"int64","description":"Frequency interval in the `frequency_type` unit"},"type":{"$ref":"#/components/schemas/ReportFrequencyType"}}},"ReportFrequencyType":{"type":"string","enum":["once","hours","days","weeks","months","cron"]},"ReportMediaType":{"type":"string","enum":["pdf","png","csv"]},"ReportRunCounts":{"type":"object","description":"Run counts over the filtered range, ignoring the status and cached filters.","required":["succeeded","cached","error","skipped","total"],"properties":{"cached":{"type":"integer","format":"int64","description":"Cache-warming runs that succeeded."},"error":{"type":"integer","format":"int64"},"skipped":{"type":"integer","format":"int64"},"succeeded":{"type":"integer","format":"int64","description":"Emailed runs that succeeded."},"total":{"type":"integer","format":"int64"}}},"ReportRunHit":{"type":"object","description":"One report run as the history API returns it.","required":["timestamp","report_id","report_name","status","is_cached","trigger_source","is_partial","retries"],"properties":{"attachment_type":{"type":["string","null"]},"dashboard_count":{"type":["integer","null"],"format":"int32"},"delay_in_secs":{"type":["integer","null"],"format":"int64"},"delivery_attempted":{"type":["boolean","null"]},"duration_ms":{"type":["integer","null"],"format":"int64"},"error":{"type":["string","null"]},"finished_at":{"type":["integer","null"],"format":"int64"},"is_cached":{"type":"boolean"},"is_partial":{"type":"boolean"},"next_run_at":{"type":["integer","null"],"format":"int64","description":"The run after this one; provisional on a failed row."},"recipient_count":{"type":["integer","null"],"format":"int32"},"report_id":{"type":"string"},"report_name":{"type":"string","description":"Empty when the report was deleted."},"retries":{"type":"integer","format":"int32"},"scheduled_for":{"type":["integer","null"],"format":"int64","description":"The run's due time; null on rows written before it was recorded."},"scheduler_trace_id":{"type":["string","null"]},"source_node":{"type":["string","null"]},"status":{"type":"string"},"time_in_queue_ms":{"type":["integer","null"],"format":"int64"},"timestamp":{"type":"integer","format":"int64","description":"`_timestamp` of the row: when the run was picked up."},"trigger_source":{"type":"string"},"triggered_by":{"type":["string","null"]}}},"ReportTimerange":{"type":"object","required":["type","period","from","to"],"properties":{"from":{"type":"integer","format":"int64"},"period":{"type":"string"},"to":{"type":"integer","format":"int64"},"type":{"$ref":"#/components/schemas/ReportTimerangeType"}}},"ReportTimerangeType":{"type":"string","enum":["relative","absolute"]},"RequestDecision":{"type":"object","required":["reason"],"properties":{"reason":{"type":"string"}}},"RequestEncoding":{"type":"string","enum":["base64","Empty"]},"RequestParseTree":{"type":"object","description":"The PromQL query to parse into a syntax tree.","required":["query"],"properties":{"query":{"type":"string"}}},"ResolutionCause":{"type":"string","description":"Why a page turned out to happen.\n\nA fixed list rather than free text, so the next firing of the same rule can\nsay \"3× config change\". Free text fragments into near-duplicates and never\ngroups. Nuance goes in `cause_note`.","enum":["config_change_or_deploy","capacity_or_load","dependency_failure","expected_or_maintenance","noisy_threshold","data_or_ingestion_issue","genuine_defect","still_unknown"]},"ResolveRequest":{"type":"object","description":"Closes a page and optionally records what it turned out to be; the whole body may be omitted.","properties":{"cause":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ResolutionCause","description":"Optional, but it is what makes the next firing history rather than a list of dates."}]},"cause_note":{"type":["string","null"],"description":"One sentence beside the structured cause."}}},"ResolvedVariableView":{"type":"object","description":"One name in a check's resolved set, and where it comes from.","required":["name","kind","scope","overridden","example","description","has_value"],"properties":{"description":{"type":"string"},"example":{"type":"string"},"has_value":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/SyntheticsVariableKind"},"name":{"type":"string"},"overridden":{"type":"boolean"},"scope":{"type":"string","description":"`global`, an environment name, or `check`."}}},"ResolvedVariablesAnswer":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/ResolvedVariableView"}},{"$ref":"#/components/schemas/ResolvedVariablesGrouped"}]},"ResolvedVariablesGrouped":{"type":"object","description":"Every environment's resolved set in one response, keyed by environment name.","required":["environments","resolved"],"properties":{"environments":{"type":"array","items":{"type":"string"},"description":"Environment names in the check's stored order; a single `\"\"` when unscoped."},"resolved":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/ResolvedVariableView"}},"propertyNames":{"type":"string"}}}},"ResourceValue":{"type":"object","required":["value","last_seen","streams"],"properties":{"last_seen":{"type":"integer","format":"int64"},"streams":{"type":"array","items":{"type":"string"},"description":"Flattened from `ServiceStreams` as `<type>/<name>`."},"value":{"type":"string"}}},"ResourceView":{"type":"object","required":["key","display_name","order","parent","visible","has_entities","top_level"],"properties":{"display_name":{"type":"string"},"has_entities":{"type":"boolean"},"key":{"type":"string"},"order":{"type":"integer","format":"int32","minimum":0},"parent":{"type":"string"},"top_level":{"type":"boolean"},"visible":{"type":"boolean"}}},"ResourcesRequest":{"type":"object","required":["condition","refine_by"],"properties":{"condition":{"$ref":"#/components/schemas/DimensionCondition"},"refine_by":{"type":"string"}}},"ResourcesResponse":{"type":"object","required":["dimension","values","total","source"],"properties":{"dimension":{"type":"string"},"source":{"type":"string"},"total":{"type":"integer","minimum":0},"values":{"type":"array","items":{"$ref":"#/components/schemas/ResourceValue"}}}},"ResponderRole":{"type":"string","description":"Why this team was paged.\n\nA database goes down and five services break. The owner fixes the database;\nthe impacted teams contain the blast radius on their own service. Different\njobs, so they get different records, and each team acks and resolves its own.","enum":["owner","impacted"]},"ResponseState":{"type":"string","description":"Lifecycle of a response record: `triggered → triaged → acknowledged →\nresolved`. `triaged` comes from the L0 agent and is skipped entirely when\nthe agent is absent or disabled.","enum":["triggered","triaged","acknowledged","resolved"]},"ResponseTook":{"type":"object","required":["total","cache_took","file_list_took","wait_in_queue","idx_took","search_took"],"properties":{"cache_took":{"type":"integer","minimum":0},"file_list_took":{"type":"integer","minimum":0},"idx_took":{"type":"integer","minimum":0},"search_took":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0},"wait_in_queue":{"type":"integer","minimum":0}}},"RestartQueued":{"type":"object","required":["queued"],"properties":{"queued":{"type":"boolean","description":"False when the collector does not accept restart commands."}}},"ResultSchemaResponse":{"type":"object","required":["projections","group_by"],"properties":{"cross_links":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CrossLinksResponse"}]},"group_by":{"type":"array","items":{"type":"string"}},"having":{"type":["object","null"]},"projections":{"type":"array","items":{"type":"string"}},"timeseries_field":{"type":["string","null"]},"where_by_stream":{"type":"object","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"where_clause":{"type":"string"}}},"ResumeStep":{"type":"object","description":"A step of the source run, as the thread names it.","required":["index","stage","title"],"properties":{"index":{"type":"integer","format":"int32","description":"1-based, as the thread numbers the run's steps.","minimum":0},"stage":{"type":"string","description":"One of the seven stages; empty when the step named none."},"title":{"type":"string"}}},"ResyncSummary":{"type":"object","description":"What `_resync` actually enqueued, and the environments whose batch could not be built.","required":["environments","variables","failed"],"properties":{"environments":{"type":"integer","minimum":0},"failed":{"type":"array","items":{"type":"string"}},"variables":{"type":"integer","minimum":0}}},"RetryExperimentSlotRequestBody":{"type":"object","required":["idempotencyKey"],"properties":{"idempotencyKey":{"type":"string","description":"Caller-generated key. Repeating the same request does not execute the slot again."}}},"Role":{"type":"string","enum":["user","assistant","system"]},"Rollout":{"type":"object","required":["id","fleet","config","to_version","start","batching","verify","auto_rollback","status","total","running","phases","members","events","started_by","started_at"],"properties":{"auto_rollback":{"type":"boolean"},"batching":{"$ref":"#/components/schemas/Batching"},"config":{"type":"string"},"ended_at":{"type":["integer","null"],"format":"int64","description":"Epoch milliseconds."},"events":{"type":"array","items":{"$ref":"#/components/schemas/RolloutEvent"}},"fleet":{"$ref":"#/components/schemas/CollectorFleet"},"from_version":{"type":["integer","null"],"format":"int64"},"halt":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RolloutHalt"}]},"id":{"type":"string"},"members":{"type":"array","items":{"$ref":"#/components/schemas/RolloutMember"}},"phases":{"type":"array","items":{"$ref":"#/components/schemas/RolloutPhase"}},"running":{"type":"integer","description":"Members running the new version.","minimum":0},"start":{"$ref":"#/components/schemas/RolloutStart"},"started_at":{"type":"integer","format":"int64","description":"Epoch milliseconds."},"started_by":{"type":"string"},"status":{"$ref":"#/components/schemas/RolloutStatus"},"to_version":{"type":"integer","format":"int64"},"total":{"type":"integer","description":"Members fixed at creation, so the denominator never changes.","minimum":0},"verify":{"type":"boolean"}}},"RolloutEvent":{"type":"object","required":["at","key"],"properties":{"at":{"type":"integer","format":"int64","description":"Epoch milliseconds."},"detail":{"type":["string","null"]},"key":{"type":"string"},"phase":{"type":["integer","null"],"minimum":0}}},"RolloutHalt":{"type":"object","required":["class","reason","at","exits"],"properties":{"at":{"type":"integer","format":"int64","description":"Epoch milliseconds."},"class":{"$ref":"#/components/schemas/HaltClass"},"exits":{"type":"array","items":{"$ref":"#/components/schemas/HaltExit"}},"reason":{"type":"string"}}},"RolloutList":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Rollout"}},"total":{"type":"integer","minimum":0}}},"RolloutMember":{"type":"object","required":["collector_id","phase","state","excluded"],"properties":{"collector_id":{"type":"string"},"evidence":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DeliveryEvidence"}]},"excluded":{"type":"boolean","description":"Skipped after a halt; included again by default in the next rollout."},"phase":{"type":"integer","minimum":0},"state":{"$ref":"#/components/schemas/MemberState"}}},"RolloutPhase":{"type":"object","required":["index","size","status","targeted","sent","confirmed","rejected"],"properties":{"confirmed":{"type":"integer","minimum":0},"gate":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/GateResult"}]},"index":{"type":"integer","minimum":0},"rejected":{"type":"integer","minimum":0},"sent":{"type":"integer","minimum":0},"size":{"type":"integer","minimum":0},"status":{"$ref":"#/components/schemas/PhaseStatus"},"targeted":{"type":"integer","minimum":0}}},"RolloutStart":{"oneOf":[{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","enum":["now"]}}},{"type":"object","description":"Epoch milliseconds.","required":["at","kind"],"properties":{"at":{"type":"integer","format":"int64"},"kind":{"type":"string","enum":["at"]}}}]},"RolloutStatus":{"type":"string","enum":["scheduled","waiting","in_progress","halted","completed","superseded","rolled_back"]},"Rotation":{"type":"object","description":"A named position, and the only thing here that puts a person on call.\n\nZenduty's *schedule*, incident.io's *rota*. Resolves to exactly one person\nat any instant — several people on call means several rotations, which is\nwhat an escalation level is for.\n\nA rotation exists because a row exists; delete it and the position is gone.\nThe `slot: String` field it replaced was a name anything could claim, so a\nposition could exist with no roster behind it.","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string","description":"What an escalation level names it, and what a page calls it.\nRenameable — levels store the id, so a typo fix cannot move who is\npaged."},"shift_rules":{"type":"array","items":{"$ref":"#/components/schemas/ShiftRule"},"description":"The stack. Highest priority whose restrictions match at `at` wins, and\nexactly one does.\n\nFollow-the-sun is several rules here, in one rotation. Two rotations\nare two people on call; three regional rules are one person across\nthree timezones' working hours."},"source":{"type":["string","null"],"description":"Where this rotation came from. `Some(\"default\")` marks one the system\nstaffed when the team was created."}}},"RotationFairness":{"type":"object","description":"A rotation, and whether it is carried evenly.","required":["rotation","shares","verdict","summary"],"properties":{"rotation":{"type":"string"},"shares":{"type":"array","items":{"$ref":"#/components/schemas/ShiftShare"}},"summary":{"type":"string","description":"\"Even\", \"Aarav 2× load\" — the sentence."},"verdict":{"type":"string","description":"`even`, `uneven`, or `single_member` — the machine name."}}},"RotationMode":{"type":"string","description":"How much of a rotation a level pages. Mirrors incident.io's `schedule_mode`,\nand is why three kinds are enough: \"everyone in this rotation\" is a mode,\nnot a fourth kind.","enum":["on_call","all"]},"RotationTimeWindow":{"type":"object","description":"When a rotation applies, in the schedule's own timezone.\n\nLocal wall time, because that is how people state their hours: \"I cover\n09:00 to 17:00\" means their 09:00, not UTC's.","required":["start_minute","end_minute"],"properties":{"days":{"type":"array","items":{"type":"integer","format":"int32","minimum":0},"description":"0 = Monday … 6 = Sunday. Empty means every day."},"end_minute":{"type":"integer","format":"int32","description":"Minutes from local midnight, exclusive.\n\nMay be LESS than `start_minute`, meaning the window wraps midnight (a\n22:00–06:00 night shift).","minimum":0},"start_minute":{"type":"integer","format":"int32","description":"Minutes from local midnight, inclusive.","minimum":0}}},"RowTemplateType":{"type":"string","enum":["String","Json"]},"RowsSpec":{"type":"object","properties":{"columns":{"type":["array","null"],"items":{"type":"string"},"description":"Column names to include; None = all columns in table column order.","default":null},"enabled":{"type":"boolean","description":"Whether to render rows in the notification.","default":false},"format":{"type":["string","null"],"description":"Per-row line template over selected row columns; operates on full row regardless of columns\nselection.","default":null},"max":{"type":"integer","format":"int32","description":"Maximum number of rows to include in the notification (default 5).","default":5,"minimum":0}}},"Rule":{"oneOf":[{"type":"object","required":["op","t"],"properties":{"name":{"type":["string","null"]},"onPage":{"type":["string","null"]},"op":{"$ref":"#/components/schemas/ViewOp"},"t":{"type":"string","enum":["view"]},"value":{"type":["string","null"]}}},{"type":"object","required":["t"],"properties":{"onPage":{"type":["string","null"]},"op":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MatchOp","description":"Absent means `in`, the form stored before click ops existed."}]},"t":{"type":"string","enum":["action"]},"targets":{"type":"array","items":{"type":"string"}},"value":{"type":["string","null"]}}},{"type":"object","required":["op","value","t"],"properties":{"onPage":{"type":["string","null"]},"op":{"$ref":"#/components/schemas/MatchOp"},"t":{"type":"string","enum":["error"]},"value":{"type":"string"}}}],"description":"One way a named event matches: a page view, a click, or an error."},"RuleOp":{"type":"string","description":"Operators for [`TierRule`].","enum":["in","not_in","exists","not_exists","gt","gte","lt","lte","unknown"]},"RumConfig":{"type":"object","required":["enabled","client_token","application_id","site","service","env","version","organization_identifier","api_version","insecure_http"],"properties":{"api_version":{"type":"string"},"application_id":{"type":"string"},"client_token":{"type":"string"},"enabled":{"type":"boolean"},"env":{"type":"string"},"insecure_http":{"type":"boolean"},"organization_identifier":{"type":"string"},"service":{"type":"string"},"site":{"type":"string"},"version":{"type":"string"}}},"RumIngestionResponse":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/RumIngestionToken"}}},"RumIngestionToken":{"type":"object","required":["user"],"properties":{"rum_token":{"type":["string","null"]},"user":{"type":"string"}}},"RumLookupRequest":{"type":"object","description":"Body of a trace-to-RUM lookup.","required":["trace_id","start_time","end_time"],"properties":{"end_time":{"type":"integer","format":"int64","description":"Latest end of the backend spans, in microseconds."},"start_time":{"type":"integer","format":"int64","description":"Earliest start of the backend spans, in microseconds."},"trace_id":{"type":"string"}}},"RumLookupResponse":{"type":"object","description":"One result per query; a query that did not run because it had no ids is `null`.","required":["status","partial","took"],"properties":{"actions":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RumQueryResult"}]},"context_events":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RumQueryResult"}]},"partial":{"type":"boolean","description":"Some query was cut at its limit or did not complete."},"status":{"$ref":"#/components/schemas/RumLookupStatus"},"took":{"type":"integer","description":"Wall time of the whole lookup, in milliseconds.","minimum":0},"traced_resources":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RumQueryResult"}]},"views":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RumQueryResult"}]}}},"RumLookupStatus":{"type":"string","enum":["found","not_found","unavailable","incomplete"]},"RumPaErrorBody":{"type":"object","description":"Every error body: a stable `code`, a message, and the conflict detail where there is one.","required":["code","message"],"properties":{"code":{"type":"string"},"current":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Current"}]},"funnels":{"type":["array","null"],"items":{"$ref":"#/components/schemas/FunnelRef"}},"message":{"type":"string"}}},"RumQueryError":{"type":"object","required":["kind","message"],"properties":{"kind":{"$ref":"#/components/schemas/RumQueryErrorKind"},"message":{"type":"string"}}},"RumQueryErrorKind":{"type":"string","enum":["timeout","cancelled","failed","partial"]},"RumQueryResult":{"type":"object","required":["hits","truncated"],"properties":{"error":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RumQueryError"}]},"hits":{"type":"array","items":{"type":"object"}},"stats":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RumQueryStats","description":"Absent when the search did not return."}]},"truncated":{"type":"boolean","description":"The query hit its limit, so more rows were left out."}}},"RumQueryStats":{"type":"object","required":["start_time","end_time","took","search_took","wait_in_queue","scan_files","scan_size","scan_records","cached_ratio","result_cache_ratio"],"properties":{"cached_ratio":{"type":"integer","minimum":0},"end_time":{"type":"integer","format":"int64"},"result_cache_ratio":{"type":"integer","minimum":0},"scan_files":{"type":"integer","minimum":0},"scan_records":{"type":"integer","minimum":0},"scan_size":{"type":"integer","minimum":0},"search_took":{"type":"integer","minimum":0},"start_time":{"type":"integer","format":"int64"},"took":{"type":"integer","description":"Wall time of the sub-query as seen by the lookup, in milliseconds.","minimum":0},"wait_in_queue":{"type":"integer","minimum":0}}},"RunError":{"type":"object","description":"`rca_runs.error` of a `failed` run.","required":["code","reason"],"properties":{"code":{"type":"string"},"details":{"type":["string","null"]},"reason":{"type":"string"},"trigger_type":{"type":["string","null"]}}},"RunMode":{"type":"string","enum":["fresh","build_on_previous"]},"RunState":{"type":"string","description":"State of one analysis run. `stale` is computed, not a state.","enum":["running","waiting_input","completed","failed","cancelled"]},"RunStats":{"type":"object","description":"`rca_runs.stats`.","properties":{"credits":{"type":["number","null"],"format":"double"},"duration_ms":{"type":["integer","null"],"format":"int64","minimum":0},"ignored_acks":{"type":["integer","null"],"format":"int32","description":"Acks after the first for the same steering row.","minimum":0},"steered":{"type":["integer","null"],"format":"int32","minimum":0},"steps":{"type":["integer","null"],"format":"int32","minimum":0},"tokens":{},"tool_calls":{"type":["integer","null"],"format":"int32","minimum":0}}},"RunSubjectType":{"type":"string","enum":["incident","alert"]},"RunSummary":{"type":"object","description":"One run in the list response. `status` is a human-readable string derived from `run_result`.","required":["id","synthetics_id","org_id","scheduled_ts","trigger_type","job_count","jobs_done","status","created_at"],"properties":{"completed_at":{"type":["integer","null"],"format":"int64"},"created_at":{"type":"integer","format":"int64"},"id":{"type":"string"},"job_count":{"type":"integer","format":"int32"},"jobs_done":{"type":"integer","format":"int32"},"org_id":{"type":"string"},"run_result":{"type":["integer","null"],"format":"int32"},"scheduled_ts":{"type":"integer","format":"int64"},"status":{"type":"string","description":"Derived from run_result: \"passed\"|\"warning\"|\"failed\"|\"error\"|\"pending\""},"synthetics_id":{"type":"string"},"trigger_type":{"type":"string"}}},"RunSummaryFields":{"type":"object","description":"The `alert_incidents.rca_summary` JSON: display-only fields of the latest run.","properties":{"cancelled_by":{"type":["string","null"],"description":"Who cancelled the latest run (display only).","default":null},"deadline_at":{"type":["integer","null"],"format":"int64","description":"Answer deadline of a `waiting_input` run, µs.","default":null},"detail":{"type":["string","null"],"description":"One short line for the list cell (the failure reason).","default":null},"previous":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PreviousResult"}],"default":null},"reusable_steps":{"type":["integer","null"],"format":"int32","description":"Finished steps a Resume of the ended run keeps; `None` before the run ends.","default":null,"minimum":0},"stage":{"type":["string","null"],"default":null},"stage_count":{"type":"integer","format":"int32","default":7,"minimum":0},"stage_index":{"type":["integer","null"],"format":"int32","default":null,"minimum":0},"steered_by":{"type":"array","items":{"type":"string"},"description":"Up to three users who steered the latest run, newest first.","default":[]},"steps":{"type":"integer","format":"int32","default":0,"minimum":0},"tool_calls":{"type":"integer","format":"int32","default":0,"minimum":0},"unblocked_by":{"type":["string","null"],"default":null}}},"RunTrigger":{"type":"string","description":"What started a run.","enum":["auto_new_incident","auto_new_alert_type","auto_reopen","manual","reanalyze","oncall_page","resume","legacy"]},"RungSummary":{"type":"object","description":"One priority's ladder, summarised for the header.","required":["priority","rungs","pages_anyone","ends_with_whole_team","channels"],"properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/Channel"},"description":"What this priority sends, as the policy lists it; empty when it has no rung."},"ends_with_whole_team":{"type":"boolean","description":"Whether the last rung reaches the whole team."},"nobody_after_micros":{"type":["integer","null"],"format":"int64","description":"Micros after opening at which the ladder has nobody left — the\n\"nobody after 20m\" line. `None` when the priority pages nobody at all."},"pages_anyone":{"type":"boolean","description":"Whether this priority pages a human at all."},"priority":{"type":"string"},"rungs":{"type":"integer","minimum":0}}},"SampleDataState":{"type":"object","description":"The time window the org's sample data was loaded into, in microseconds since the epoch.","required":["status"],"properties":{"end_time":{"type":["integer","null"],"format":"int64"},"start_time":{"type":["integer","null"],"format":"int64"},"status":{"$ref":"#/components/schemas/SampleDataStatus"}}},"SampleDataStatus":{"type":"string","enum":["none","loaded"]},"SaveDraftRequest":{"type":"object","required":["yaml"],"properties":{"yaml":{"type":"string"}}},"SaveUserAnswer":{"anyOf":[{"$ref":"#/components/schemas/ServiceAccountCreateResponse"},{"$ref":"#/components/schemas/HttpResponse"}]},"SavedFunnel":{"type":"object","description":"A saved funnel; `sql` is a snapshot compiled by the web at save time, never re-run here.","required":["id","app","name","def","sql","eventIds","version","createdBy","createdAt","updatedBy","updatedAt","currentRulesHash"],"properties":{"app":{"type":"string"},"createdAt":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"currentRulesHash":{"type":"string","description":"The app's `rulesHash` now; a different `rulesHash` means `sql` is stale."},"def":{"$ref":"#/components/schemas/FunnelDef"},"description":{"type":["string","null"]},"eventIds":{"type":"array","items":{"type":"string"}},"id":{"type":"string"},"name":{"type":"string"},"rulesHash":{"type":["string","null"],"description":"Null for a funnel saved before rules existed, which counts as changed."},"sql":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"updatedBy":{"type":"string"},"version":{"type":"integer","format":"int32"}}},"SavedFunnelList":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/SavedFunnel"}}}},"ScanStats":{"type":"object","required":["files","records","original_size","compressed_size","querier_files","querier_memory_cached_files","querier_disk_cached_files","idx_scan_size","idx_took","file_list_took","aggs_cache_ratio","peak_memory_usage","wait_in_queue"],"properties":{"aggs_cache_ratio":{"type":"integer","format":"int64"},"compressed_size":{"type":"integer","format":"int64"},"file_list_took":{"type":"integer","format":"int64"},"files":{"type":"integer","format":"int64"},"idx_scan_size":{"type":"integer","format":"int64"},"idx_took":{"type":"integer","format":"int64"},"original_size":{"type":"integer","format":"int64"},"peak_memory_usage":{"type":"integer","format":"int64"},"querier_disk_cached_files":{"type":"integer","format":"int64"},"querier_files":{"type":"integer","format":"int64"},"querier_memory_cached_files":{"type":"integer","format":"int64"},"records":{"type":"integer","format":"int64"},"wait_in_queue":{"type":"integer","format":"int64"}}},"Schedule":{"type":"object","description":"A team's rotations, one per staffed level.","required":["id","org_id","team_id","timezone","rotations","created_at","updated_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"id":{"type":"string"},"org_id":{"type":"string"},"overrides":{"type":"array","items":{"$ref":"#/components/schemas/ScheduleOverride"},"description":"Covers in force over this schedule.\n\nCarried on the schedule rather than fetched at each call site because\nevery resolution has to see them. An override the page path forgets to\nload is worse than no override feature at all: the engineer who arranged\ncover stops watching, and the page still goes to them.\n\nStored in `oncall_overrides`, not in the schedule row — they have their\nown lifecycle and audit trail."},"rotations":{"type":"array","items":{"$ref":"#/components/schemas/Rotation"}},"team_id":{"type":"string"},"timezone":{"type":"string"},"unavailability":{"type":"array","items":{"$ref":"#/components/schemas/Unavailability"},"description":"Absences in force over this schedule, for the people on its rotations.\n\nCarried here for the same reason as the covers, against the same\nfailure: a path that loads the schedule and forgets the absences gets a\nplausible answer that pages somebody on a beach. Stored org-wide in\n`oncall_unavailability` and narrowed to this schedule's members by the\nloader."},"updated_at":{"type":"integer","format":"int64"}}},"ScheduleOverride":{"type":"object","description":"One person taking a bounded slice of somebody else's on-call.\n\n`architecture/02` §5: absolute ranges, no recurrence, stored in micros. A\nseparate record rather than an edit to the member list, so deleting it\nrestores the computed result.","required":["id","org_id","team_id","rotation_id","user_email","start_at","end_at","created_by","created_at"],"properties":{"covering_for":{"type":["string","null"],"description":"Who is being covered. Optional: \"cover tonight\" is a real request even\nwhen nobody has worked out whose shift tonight is."},"created_at":{"type":"integer","format":"int64"},"created_by":{"type":"string"},"end_at":{"type":"integer","format":"int64","description":"Exclusive, so two back-to-back overrides never both cover the instant\nbetween them — the same rule the handover boundary follows."},"id":{"type":"string"},"org_id":{"type":"string"},"reason":{"type":["string","null"]},"rotation_id":{"type":"string","description":"Which rotation is being covered.\n\nA cover stands in for one position. Covering two of them is two covers,\nsaid out loud, rather than one that silently lands the same person in\nboth."},"start_at":{"type":"integer","format":"int64","description":"Inclusive."},"team_id":{"type":"string"},"user_email":{"type":"string","description":"Who is actually holding the pager for this window."}}},"ScoreConfigResponseBody":{"type":"object","description":"HTTP response body for a Score Config.","required":["id","entityId","orgId","name","version","dataType","isActive","createdAt","updatedAt"],"properties":{"categories":{},"createdAt":{"type":"integer","format":"int64"},"dataType":{"type":"string"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"healthyThreshold":{},"id":{"type":"string"},"isActive":{"type":"boolean"},"name":{"type":"string"},"numericRange":{},"orgId":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int32"}}},"ScoreOutcomeBody":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/ScoreValueBody"},{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["scored"]}}}]},{"type":"object","required":["reason","status"],"properties":{"reason":{"$ref":"#/components/schemas/SkipReasonBody"},"status":{"type":"string","enum":["skipped"]}}},{"type":"object","required":["error","status"],"properties":{"error":{"type":"string"},"status":{"type":"string","enum":["failed"]}}}]},"ScoreResultBody":{"allOf":[{"$ref":"#/components/schemas/ScoreOutcomeBody"},{"type":"object","required":["scorerId","scorerName","scorerVersion"],"properties":{"scorerId":{"type":"string"},"scorerName":{"type":"string"},"scorerVersion":{"type":"integer","format":"int32"}}}]},"ScoreValueBody":{"type":"object","required":["latencyMs"],"properties":{"boolean":{"type":["boolean","null"]},"categorical":{"type":["string","null"]},"completionTokens":{"type":["integer","null"],"format":"int64"},"latencyMs":{"type":"integer","format":"int64"},"metadata":{},"modelUsed":{"type":["string","null"]},"numeric":{"type":["number","null"],"format":"double"},"promptTokens":{"type":["integer","null"],"format":"int64"},"reasoning":{"type":["string","null"]}}},"ScorerCreateConfig":{"oneOf":[{"type":"object","required":["template","params","type"],"properties":{"outputSchema":{},"params":{"$ref":"#/components/schemas/LlmJudgeScorerParams"},"producesScoreConfigId":{"type":["string","null"]},"producesScoreConfigVersion":{"type":["integer","null"],"format":"int32"},"template":{"type":"string"},"type":{"type":"string","enum":["llm_judge"]}},"additionalProperties":false},{"type":"object","required":["template","params","type"],"properties":{"params":{"$ref":"#/components/schemas/RemoteScorerParams"},"producesScoreConfigId":{"type":["string","null"]},"producesScoreConfigVersion":{"type":["integer","null"],"format":"int32"},"template":{"type":"string"},"type":{"type":"string","enum":["remote"]}},"additionalProperties":false}]},"ScorerRefForm":{"oneOf":[{"type":"string"},{"type":"object","required":["id"],"properties":{"id":{"type":"string"},"version":{"type":["integer","null"],"format":"int32"}}}]},"ScorerResponseBody":{"type":"object","description":"HTTP response body for a Scorer.","required":["id","entityId","orgId","name","version","scorerType","template","variables","referenceBased","params","isActive","createdAt","updatedAt"],"properties":{"createdAt":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"entityId":{"type":"string"},"id":{"type":"string"},"isActive":{"type":"boolean"},"name":{"type":"string"},"orgId":{"type":"string"},"outputSchema":{},"params":{},"producesScoreConfigId":{"type":["string","null"]},"producesScoreConfigVersion":{"type":["integer","null"],"format":"int32"},"referenceBased":{"type":"boolean","description":"True when the scorer contract declares the `expected_output` variable."},"scorerType":{"type":"string"},"template":{"type":"string"},"updatedAt":{"type":"integer","format":"int64"},"variables":{"type":"array","items":{"type":"string"}},"version":{"type":"integer","format":"int32"}}},"ScorerUpdateConfig":{"oneOf":[{"type":"object","required":["template","params","type"],"properties":{"outputSchema":{},"params":{"$ref":"#/components/schemas/LlmJudgeScorerParams"},"producesScoreConfigId":{"type":["string","null"]},"producesScoreConfigVersion":{"type":["integer","null"],"format":"int32"},"template":{"type":"string"},"type":{"type":"string","enum":["llm_judge"]}},"additionalProperties":false},{"type":"object","required":["template","params","type"],"properties":{"params":{"$ref":"#/components/schemas/RemoteScorerParams"},"producesScoreConfigId":{"type":["string","null"]},"producesScoreConfigVersion":{"type":["integer","null"],"format":"int32"},"template":{"type":"string"},"type":{"type":"string","enum":["remote"]}},"additionalProperties":false}]},"SearchAgentOptions":{"type":"object","description":"Agent-oriented response options. When absent the response is unchanged, so\nexisting clients (UI) are unaffected.","properties":{"mode":{"$ref":"#/components/schemas/AgentSearchMode","description":"Query execution mode. `partition` runs the partitioned streaming pipeline\n(per-partition early termination, streaming-aggs cache) and collects\nthe result into this single response."},"output_format":{"$ref":"#/components/schemas/OutputFormat","description":"Render `hits` as a compact string block in `data` instead of a JSON\narray. Tabular results shrink to ~60% of their JSON token cost as csv."}}},"SearchEventContext":{"type":"object","properties":{"alert_key":{"type":["string","null"]},"alert_name":{"type":["string","null"]},"dashboard_id":{"type":["string","null"]},"dashboard_name":{"type":["string","null"]},"derived_stream_key":{"type":["string","null"]},"folder_id":{"type":["string","null"]},"folder_name":{"type":["string","null"]},"panel_id":{"type":["string","null"]},"public_dashboard_link_id":{"type":["string","null"]},"range_key":{"type":["string","null"]},"report_id":{"type":["string","null"]}}},"SearchEventType":{"type":"string","enum":["ui","dashboards","reports","alerts","values","other","rum","derivedstream","searchjob","download","insights","public_dashboard"]},"SearchHistoryRequest":{"type":"object","description":"Request parameters for querying search history","required":["start_time","end_time"],"properties":{"end_time":{"type":"integer","format":"int64","description":"end time in micro seconds"},"org_id":{"type":["string","null"],"description":"Organization ID to filter search history by"},"size":{"type":"integer","format":"int64","description":"Maximum number of search history records to return"},"start_time":{"type":"integer","format":"int64","description":"start time in micro seconds"},"stream_name":{"type":["string","null"],"description":"Name of the specific stream to filter by"},"stream_type":{"type":["string","null"],"description":"Type of stream to filter by (e.g., logs, metrics, traces)"},"trace_id":{"type":["string","null"],"description":"Trace ID to filter search history by"},"user_email":{"type":["string","null"],"description":"Email of the user to filter search history by"}}},"SearchInspector":{"type":"object","required":["sql","start_time","end_time","total_duration","scan_size","scan_records","data_records","events"],"properties":{"data_records":{"type":"integer","minimum":0},"end_time":{"type":"string"},"events":{"type":"array","items":{"$ref":"#/components/schemas/SearchInspectorFields"}},"scan_records":{"type":"integer","minimum":0},"scan_size":{"type":"integer","minimum":0},"sql":{"type":"string"},"start_time":{"type":"string"},"total_duration":{"type":"integer","minimum":0}}},"SearchInspectorFields":{"type":"object","properties":{"cluster":{"type":["string","null"]},"component":{"type":["string","null"]},"data_records":{"type":["integer","null"],"minimum":0},"desc":{"type":["string","null"]},"duration":{"type":["integer","null"],"minimum":0},"events":{"type":["array","null"],"items":{"type":"object"}},"node_name":{"type":["string","null"]},"org_id":{"type":["string","null"]},"region":{"type":["string","null"]},"scan_records":{"type":["integer","null"],"minimum":0},"scan_size":{"type":["integer","null"],"minimum":0},"search_role":{"type":["string","null"]},"sql":{"type":["string","null"]},"time_range":{"type":["array","null"],"items":{"type":"string"}},"timestamp":{"type":["string","null"]},"trace_id":{"type":["string","null"]}}},"SearchJob":{"type":"object","required":["id","trace_id","org_id","user_id","stream_type","stream_names","payload","start_time","end_time","created_at","updated_at","status"],"properties":{"cluster":{"type":["string","null"]},"created_at":{"type":"integer","format":"int64"},"end_time":{"type":"integer","format":"int64"},"ended_at":{"type":["integer","null"],"format":"int64"},"error_message":{"type":["string","null"]},"id":{"type":"string"},"node":{"type":["string","null"]},"org_id":{"type":"string"},"partition_num":{"type":["integer","null"],"format":"int64"},"payload":{"type":"string"},"result_path":{"type":["string","null"]},"start_time":{"type":"integer","format":"int64"},"started_at":{"type":["integer","null"],"format":"int64"},"status":{"type":"integer","format":"int64"},"stream_names":{"type":"string"},"stream_type":{"type":"string"},"trace_id":{"type":"string"},"updated_at":{"type":"integer","format":"int64"},"user_id":{"type":"string"}}},"SearchPartitionRequest":{"type":"object","required":["sql","start_time","end_time"],"properties":{"clusters":{"type":"array","items":{"type":"string"}},"encoding":{"$ref":"#/components/schemas/RequestEncoding"},"end_time":{"type":"integer","format":"int64"},"histogram_interval":{"type":"integer","format":"int64"},"query_fn":{"type":["string","null"]},"regions":{"type":"array","items":{"type":"string"}},"sampling_ratio":{"type":["number","null"],"format":"double"},"search_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventType"}]},"sql":{"type":"string"},"start_time":{"type":"integer","format":"int64"},"streaming_output":{"type":"boolean"}}},"SearchPartitionResponse":{"type":"object","required":["trace_id","file_num","records","original_size","compressed_size","max_query_range","partitions","order_by","limit","streaming_output","streaming_aggs"],"properties":{"compressed_size":{"type":"integer","minimum":0},"file_num":{"type":"integer","minimum":0},"histogram_interval":{"type":["integer","null"],"format":"int64"},"is_histogram_eligible":{"type":"boolean"},"limit":{"type":"integer","format":"int64"},"max_query_range":{"type":"integer","format":"int64"},"order_by":{"$ref":"#/components/schemas/OrderBy"},"original_size":{"type":"integer","minimum":0},"partitions":{"type":"array","items":{"type":"array","items":{"type":"integer","format":"int64"}}},"records":{"type":"integer","minimum":0},"streaming_aggs":{"type":"boolean"},"streaming_id":{"type":["string","null"]},"streaming_output":{"type":"boolean"},"trace_id":{"type":"string"}}},"SearchQuery":{"type":"object","required":["sql","start_time","end_time"],"properties":{"analyze_profile":{"type":"boolean","description":"Adds the structured `profile` column to EXPLAIN ANALYZE output."},"end_time":{"type":"integer","format":"int64"},"from":{"type":"integer","format":"int64"},"histogram_interval":{"type":"integer","format":"int64","description":"Seconds; 0 uses the SQL `histogram()` interval, falling back to one from the time range."},"query_fn":{"type":["string","null"],"description":"Base64-encoded VRL program applied to the result hits."},"quick_mode":{"type":"boolean","description":"For `SELECT *` on streams wider than `quick_mode_num_fields`, reads only some columns."},"sampling_config":{"type":["object","null"]},"sampling_ratio":{"type":["number","null"],"format":"double","description":"Simplified sampling API: just specify ratio (0.0-1.0), backend uses optimal defaults\nTakes precedence over sampling_config if both are provided"},"size":{"type":"integer","format":"int64"},"skip_wal":{"type":"boolean","description":"Not read by the search path; skipping the WAL is controlled by `feature_query_skip_wal`."},"sql":{"type":"string"},"start_time":{"type":"integer","format":"int64"},"streaming_id":{"type":["string","null"]},"streaming_output":{"type":"boolean","description":"Set with `streaming_id` by the streaming search endpoints; other callers leave both unset."},"timezone":{"type":["string","null"],"description":"Default fixed-offset timezone (e.g. \"+08:00\") applied to histogram() buckets\nthat don't carry their own 3rd timezone argument. None / \"UTC\" / \"\" => UTC."},"track_total_hits":{"type":"boolean","description":"Turns the query into a `count(*)` of matching rows; also skips the cache and streaming."},"uses_zo_fn":{"type":"boolean","description":"Set when the SQL calls a saved VRL function, which makes the result hits get flattened."}}},"SearchRequest":{"type":"object","required":["query"],"properties":{"agent_options":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchAgentOptions"}]},"clear_cache":{"type":"boolean"},"clusters":{"type":"array","items":{"type":"string"}},"encoding":{"$ref":"#/components/schemas/RequestEncoding"},"local_mode":{"type":["boolean","null"]},"query":{"$ref":"#/components/schemas/SearchQuery"},"regions":{"type":"array","items":{"type":"string"}},"search_event_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventContext"}]},"search_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SearchEventType"}]},"timeout":{"type":"integer","format":"int64"},"use_cache":{"type":"boolean"},"use_index":{"type":"boolean","description":"Set to false to skip the inverted index for this query.","default":true}}},"SearchResponse":{"type":"object","required":["took","hits","total","from","size","cached_ratio","scan_size","idx_scan_size","scan_records"],"properties":{"advisory":{"type":["string","null"],"description":"Human/agent-readable note about server-side formatting decisions."},"cached_ratio":{"type":"integer","minimum":0},"columns":{"type":"array","items":{"type":"string"}},"converted_histogram_query":{"type":["string","null"]},"data":{"type":["string","null"],"description":"Formatted result block when `format` is set; `hits` is emptied."},"format":{"type":["string","null"],"description":"Set when `agent_options.output_format` reformatted `hits` into `data`:\n\"csv\", \"md_table\", or \"ndjson\" (automatic fallback for sparse results)."},"from":{"type":"integer","format":"int64"},"function_error":{"type":"array","items":{"type":"string"}},"histogram_breakdown_field":{"type":["string","null"]},"histogram_interval":{"type":["integer","null"],"format":"int64"},"hits":{"type":"array","items":{"type":"object"}},"idx_scan_size":{"type":"integer","minimum":0},"is_histogram_eligible":{"type":["boolean","null"]},"is_partial":{"type":"boolean"},"new_end_time":{"type":["integer","null"],"format":"int64"},"new_start_time":{"type":["integer","null"],"format":"int64"},"order_by":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/OrderBy"}]},"order_by_metadata":{"type":"array","items":{"type":"array","items":false,"prefixItems":[{"type":"string"},{"type":"string","enum":["desc","asc"]}]}},"peak_memory_usage":{"type":["number","null"],"format":"double"},"query_index":{"type":["integer","null"],"minimum":0},"result_cache_ratio":{"type":"integer","minimum":0},"scan_records":{"type":"integer","minimum":0},"scan_size":{"type":"integer","minimum":0},"size":{"type":"integer","format":"int64"},"took":{"type":"integer","minimum":0},"took_detail":{"$ref":"#/components/schemas/ResponseTook"},"total":{"type":"integer","minimum":0},"trace_id":{"type":"string"},"work_group":{"type":["string","null"]}}},"SelectedField":{"type":"object","required":["field"],"properties":{"field":{"type":"string"},"streamAlias":{"type":["string","null"]}}},"SemanticGroupDiff":{"type":"object","required":["additions","modifications","unchanged"],"properties":{"additions":{"type":"array","items":{"$ref":"#/components/schemas/FieldAlias"},"description":"Groups that exist in the imported JSON but not in DB (new)"},"modifications":{"type":"array","items":{"$ref":"#/components/schemas/SemanticGroupModification"},"description":"Groups that exist in both but have different content"},"unchanged":{"type":"array","items":{"$ref":"#/components/schemas/FieldAlias"},"description":"Groups that are identical in both"}}},"SemanticGroupModification":{"type":"object","required":["current","proposed"],"properties":{"current":{"$ref":"#/components/schemas/FieldAlias","description":"Current version in DB"},"proposed":{"$ref":"#/components/schemas/FieldAlias","description":"New version from import"}}},"SeriesHideFrom":{"type":"object","properties":{"chart":{"type":["boolean","null"],"default":null},"legend":{"type":["boolean","null"],"default":null},"tooltip":{"type":["boolean","null"],"default":null}}},"ServiceAccountCreateResponse":{"type":"object","required":["code","message","token","user"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"token":{"type":"string"},"user":{"type":"string"}}},"ServiceAccountTokenInfo":{"type":"object","required":["email","role","message"],"properties":{"email":{"type":"string"},"message":{"type":"string","description":"Instructions for obtaining a temporary session token"},"role":{"type":"string"}}},"ServiceEdge":{"type":"object","description":"Edge in service graph","required":["to","total_requests","failed_requests","error_rate","p50_latency_ns","p95_latency_ns","p99_latency_ns"],"properties":{"baseline_p50_latency_ns":{"type":["integer","null"],"format":"int64","description":"Baseline Pxx from the previous time slot (same duration, one slot older).\nNone when this edge had no data in the previous slot.","minimum":0},"baseline_p95_latency_ns":{"type":["integer","null"],"format":"int64","minimum":0},"baseline_p99_latency_ns":{"type":["integer","null"],"format":"int64","minimum":0},"connection_type":{"type":["string","null"],"description":"Inferred-dependency category (\"database\"/\"queue\"/\"rpc\"/\"external\") when the\ntarget (`to`) is an uninstrumented dependency; `None` for instrumented\nservice-to-service edges. Presence signals the UI to draw a dotted edge."},"error_rate":{"type":"number","format":"double"},"failed_requests":{"type":"integer","format":"int64","minimum":0},"from":{"type":["string","null"],"description":"Source service; None for entry-point services"},"p50_latency_ns":{"type":"integer","format":"int64","minimum":0},"p95_latency_ns":{"type":"integer","format":"int64","minimum":0},"p99_latency_ns":{"type":"integer","format":"int64","minimum":0},"to":{"type":"string"},"total_requests":{"type":"integer","format":"int64","minimum":0}}},"ServiceFieldSource":{"type":"object","description":"Describes a raw field name that was used to populate a semantic group,\nalong with which stream types it appeared in and how many services used it.","required":["field_name","stream_types","hit_count"],"properties":{"field_name":{"type":"string","description":"The raw field name in the stream, e.g. \"kubernetes_labels_app\""},"hit_count":{"type":"integer","description":"Number of services where this field provided the semantic group value","minimum":0},"stream_types":{"type":"array","items":{"type":"string"},"description":"Stream types where this field was used, e.g. [\"logs\", \"traces\"]"}}},"ServiceGraphData":{"type":"object","description":"Graph format for frontend visualization","required":["nodes","edges"],"properties":{"edges":{"type":"array","items":{"$ref":"#/components/schemas/ServiceEdge"}},"meta":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TopologyMeta"}]},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/ServiceNode"}}}},"ServiceIdentityConfig":{"type":"object","description":"Org-level service identity configuration.\n\nContains 1–5 identity sets. Service name is always derived from the \"service\"\nsemantic group — hardcoded, not configurable.\n\nAt processing time each record is matched against ALL sets and ranked by\ncoverage of the record's non-empty dimensions: full coverage > highest ratio >\nhighest count, ties broken by declaration order. The same ranking is used on the\ncorrelation read path so ingest files records under the set reads will select.\nIf no set has any coverage the record is skipped.","required":["sets"],"properties":{"service_optional":{"type":"boolean","description":"When true, correlation matches streams to services without requiring the `service`\ndimension. Useful when some streams (e.g. metrics) lack `service.name` but share\ninfrastructure attributes (e.g. `k8s-namespace`) with streams that do (e.g. logs).\nTrade-off: multiple services in the same namespace/cluster can collapse into one\ncorrelated bucket. Defaults to false (current behavior preserved)."},"sets":{"type":"array","items":{"$ref":"#/components/schemas/IdentitySet"}},"tracked_alias_ids":{"type":"array","items":{"type":"string"},"description":"Semantic alias group IDs whose values are tracked per service record.\nEach entry is the `id` of a `FieldAlias` group (e.g. \"k8s-cluster\", \"environment\").\nThe \"service\" group is always tracked implicitly and must NOT be listed here."}}},"ServiceNode":{"type":"object","description":"Node in service graph","required":["id","label","requests","errors","error_rate"],"properties":{"error_rate":{"type":"number","format":"double"},"errors":{"type":"integer","format":"int64","minimum":0},"id":{"type":"string"},"instances":{"type":["integer","null"],"format":"int64","description":"Agent nodes only: upper bound on the distinct instances seen in the range.","minimum":0},"kind":{"type":"string","description":"`service|database|queue|rpc|external|agent|tool|model`."},"label":{"type":"string"},"p50_server_ns":{"type":["integer","null"],"format":"int64","minimum":0},"p95_server_ns":{"type":["integer","null"],"format":"int64","minimum":0},"p99_server_ns":{"type":["integer","null"],"format":"int64","minimum":0},"requests":{"type":"integer","format":"int64","minimum":0},"service_type":{"type":["string","null"],"description":"Inferred-service category (\"database\"/\"queue\"/\"rpc\"/\"external\") when this\nnode is an uninstrumented dependency; `None` for instrumented services.\nThe UI renders inferred nodes with a dotted style + type icon."},"stream_name":{"type":["string","null"]},"unattributed_inbound":{"type":["integer","null"],"format":"int64","description":"Org-scope `requests_server - instrumented inbound`; signed, service nodes only."}}},"SessionField":{"type":"string","description":"A built-in session field a rule can select on, named as its `_rumdata` column.","enum":["user_agent_user_agent_family","user_agent_os_family","user_agent_device_family","geo_info_country","geo_info_city","usr_id","usr_email","usr_anonymous_id","env","version"]},"SessionRule":{"type":"object","description":"An app filter that hides sessions whose `field` matches one of `values`.","required":["field","op","values"],"properties":{"field":{"$ref":"#/components/schemas/SessionField"},"op":{"$ref":"#/components/schemas/MatchOp"},"values":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"SetComponentsRequest":{"type":"object","required":["components"],"properties":{"components":{"type":"array","items":{"$ref":"#/components/schemas/ComponentInput"}}}},"SetContactRequest":{"type":"object","description":"`double_option` throughout: a screen that omits push tokens would otherwise erase one.","properties":{"phone":{"type":["string","null"]},"push_token":{"type":["string","null"]},"quiet_hours":{"type":["string","null"]}}},"SetDesiredRequest":{"type":"object","description":"A fleet's new desired version and how the rollout converges to it; unknown fields refused.","required":["config","version"],"properties":{"auto_rollback":{"type":"boolean","description":"Pre-authorizes Rollback for the `proven_bad` and `looks_worse` halts."},"batching":{"$ref":"#/components/schemas/Batching"},"config":{"type":"string"},"start":{"$ref":"#/components/schemas/RolloutStart"},"verify":{"type":"boolean","description":"Health gate after every phase, the last one included."},"version":{"type":"integer","format":"int64"}},"additionalProperties":false},"SetEnabledPayload":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean"}}},"SetPasswordPolicyResponse":{"type":"object","description":"A tightening write forces a password reset on every affected user, so the count comes back with\nthe policy rather than leaving the admin to discover the blast radius from support tickets.","required":["policy","users_flagged"],"properties":{"policy":{"$ref":"#/components/schemas/PasswordPolicy"},"users_flagged":{"type":"integer","format":"int64","minimum":0}}},"SetPolicyRequest":{"type":"object","description":"`rungs` is a full replace; the two optional fields are left as they were when absent.","required":["rungs"],"properties":{"destinations":{"type":["array","null"],"items":{"type":"string"},"description":"Alert Destination names to page through. Absent leaves them unchanged."},"l0":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/L0Policy","description":"Absent leaves it unchanged, so editing rungs cannot silently un-configure L0."}]},"rungs":{"type":"array","items":{"$ref":"#/components/schemas/PriorityRung"}},"template":{"type":["string","null"],"description":"Template override for on-call messages; absent leaves it, null or \"\" clears it."}}},"SetRoutingConfigRequest":{"type":"object","description":"One field, so absent or `null` clears the nomination without a second endpoint.","properties":{"default_team_id":{"type":["string","null"]}}},"SetScheduleRequest":{"type":"object","description":"A full replace: rotations absent from the body are removed, not left standing.","properties":{"rotations":{"type":"array","items":{"$ref":"#/components/schemas/Rotation"}},"timezone":{"type":["string","null"],"description":"Absent means the team's own zone; UTC silently shifts an Asia/Kolkata team by 5.5 hours."}}},"SetTeamChannelRequest":{"type":"object","description":"Absent restores \"never set\" so the policy takes over, `[]` says no channel; do not collapse.","properties":{"clear_slack":{"type":"boolean","description":"Empties the team's Slack channel and its same-room destination."},"destinations":{"type":["array","null"],"items":{"type":"string"}},"slack_same_room_destination":{"type":["string","null"],"description":"RO-1: the team's webhook that posts to its Slack room; omitted keeps it, `\"\"` unticks it."}}},"SettingScope":{"type":"string","description":"Setting scope levels","enum":["system","org","user"]},"Settings":{"type":"object","description":"Organization fleet settings; `PUT` replaces every field.","properties":{"fleet_defaults":{"$ref":"#/components/schemas/FleetSettings","description":"Every field set on read; a field left null on write is the built-in default."},"restricted_components":{"type":"array","items":{"type":"string"}},"target_collector_version":{"type":["string","null"],"description":"A null target means the built-in default."}},"additionalProperties":false},"SeverityFilter":{"type":"object","properties":{"levels":{"type":"array","items":{"$ref":"#/components/schemas/AlertLevel"},"default":[]}}},"ShadowingRule":{"type":"object","description":"A narrower rule, belonging to another team, that takes pages this rule would\notherwise catch.\n\nDeliberately not \"another rule claims the same path\". That state cannot\nexist: `idx_oncall_ownership_org_path` is unique on `(org_id, path)`, so a\nsecond claim is a 409 at write time. What does happen is a deeper or more\nexact rule quietly absorbing the firings somebody expected this rule to\ntake — worth saying only when the deeper rule belongs to a different team,\nbecause within one team it changes nothing about who gets woken.","required":["rule_id","team_id","path","outcome"],"properties":{"outcome":{"type":"string","description":"What it takes, and why it takes it."},"path":{"type":"string"},"rule_id":{"type":"string"},"team_id":{"type":"string"},"team_name":{"type":["string","null"]}}},"ShardResponse":{"type":"object","required":["total","successful","failed"],"properties":{"failed":{"type":"integer","format":"int64"},"successful":{"type":"integer","format":"int64"},"total":{"type":"integer","format":"int64"}}},"ShareView":{"type":"object","description":"A share as its owner sees it.","required":["id","mode","visibility","created_at","updated_at","access_count","session_id","title","redact_tools"],"properties":{"access_count":{"type":"integer","format":"int64"},"created_at":{"type":"integer","format":"int64"},"expires_at":{"type":["integer","null"],"format":"int64","description":"Microseconds since the epoch; absent when the share never expires."},"id":{"type":"string"},"last_accessed_at":{"type":["integer","null"],"format":"int64"},"mode":{"type":"string"},"owner_email":{"type":["string","null"],"description":"The creator's email; only in the org-wide admin listing."},"owner_name":{"type":["string","null"],"description":"The creator's display name (email when unnamed); only in the org-wide admin listing."},"redact_tools":{"type":"boolean","description":"Readers see assistant text and tool names, never tool inputs or outputs."},"session_id":{"type":"string"},"snapshot_seq":{"type":["integer","null"],"format":"int64"},"title":{"type":"string"},"token":{"type":["string","null"],"description":"Bearer secret of the link; absent on other creators' rows of the org-wide listing."},"updated_at":{"type":"integer","format":"int64"},"url_path":{"type":["string","null"],"description":"Path of the web page that shows the share; absent whenever `token` is."},"visibility":{"type":"string"}}},"ShiftRule":{"type":"object","description":"One level's rotation within a schedule.","required":["members","shift_micros","anchor_micros"],"properties":{"anchor_micros":{"type":"integer","format":"int64","description":"Instant at which `members[0]`'s first shift begins, in microseconds.\n\nShifts before it resolve too — the sequence extends backwards — so an\nanchor in the future is not an error.\n\nThis is the whole \"secondary\" mechanism. Two rotations with the same\nroster and anchors one shift apart can never resolve to the same\nperson, and that is data, not a rule: nothing at resolution time knows\nthey are related."},"ends_at":{"type":["integer","null"],"format":"int64","description":"The rule stops applying at or after this instant. `None` means \"until\nfurther notice\".\n\nHow a rule is retired (`architecture/02` §3b). Deleting it instead\nwould throw away the record of who covered those hours. Exclusive, like\nevery boundary here."},"members":{"type":"array","items":{"type":"string"},"description":"Participants in handover order. Emails, because email is the login and\ntherefore the one identifier every user is guaranteed to have."},"name":{"type":"string","description":"What this rule is called on the calendar. \"APAC business hours\",\n\"Weekend\", \"Base rotation\"."},"priority":{"type":"integer","format":"int32","description":"Higher wins when two rules in the same rotation both apply.\n\nExplicit rather than positional, so reordering the UI list cannot\nsilently change who gets paged."},"restrictions":{"type":"array","items":{"$ref":"#/components/schemas/RotationTimeWindow"},"description":"When this rule applies. Empty means always — the catch-all every\nfollow-the-sun setup needs underneath the restricted rules."},"shift_micros":{"type":"integer","format":"int64","description":"Length of one shift, in microseconds. Must be > 0."},"starts_at":{"type":["integer","null"],"format":"int64","description":"The rule is not in effect before this instant. `None` means \"since\nforever\"."}}},"ShiftShare":{"type":"object","description":"One member's share of the shifts still to come.","required":["user_email","micros","percent"],"properties":{"micros":{"type":"integer","format":"int64"},"percent":{"type":"integer","format":"int64","description":"Whole percent of the covered time in the window."},"user_email":{"type":"string"}}},"ShortenUrlRequest":{"type":"object","required":["original_url"],"properties":{"original_url":{"type":"string"}}},"ShortenUrlResponse":{"type":"object","required":["short_url"],"properties":{"short_url":{"type":"string"}}},"ShownChangeState":{"type":"string","description":"The suspect change as code reads it.","enum":["confirmed","not_read"]},"SignInResponse":{"type":"object","required":["status","message"],"properties":{"lockout_retry_after_secs":{"type":["integer","null"],"format":"int64","description":"Seconds until a locked-out account may try again, present only on that refusal. The number\nrather than a sentence, so the console can render it in the viewer's own language."},"message":{"type":"string"},"password_rotation_warning":{"type":["integer","null"],"format":"int64","description":"Days left before the caller's password expires, present only inside the rotation warning\nwindow. Advisory: a client that ignores it is never broken by one."},"status":{"type":"boolean"}}},"SignInUser":{"type":"object","required":["name","password"],"properties":{"name":{"type":"string"},"password":{"type":"string"}}},"SignalClass":{"type":"string","enum":["logs","metrics","traces","change","infra","context","unclassified"]},"SizeByValue":{"type":"object","properties":{"max":{"type":"number","format":"double","default":0.0},"min":{"type":"number","format":"double","default":0.0}}},"SkipReasonBody":{"type":"string","enum":["no_reference","requires_trace"]},"SkipRequest":{"type":"object","required":["collector_ids"],"properties":{"collector_ids":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"SlackAppFields":{"type":"object","description":"`SlackAppTarget` with every field optional, so an omitted one takes the type's default.","properties":{"auto_investigate":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AutoInvestigate"}]},"buttons":{"type":["boolean","null"],"description":"Acknowledge, Mute and Investigate on each message; default true."},"channel_id":{"type":["string","null"],"example":"C0FAKE00001"},"channel_name":{"type":["string","null"]},"installation_id":{"type":["string","null"]},"mention":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MentionRule"}]},"oncall_room_confirmed":{"type":["boolean","null"],"description":"Required true when an on-call team pages into this channel through a Slack webhook."},"previous_webhook":{"type":["object","null"],"description":"The webhook a switch replaced, kept so it can be switched back; never sent to."},"refire_reuse_minutes":{"type":["integer","null"],"format":"int32","description":"0 to 240; default 30.","minimum":0},"shared_channel_confirmed":{"type":["boolean","null"],"description":"Required true when the channel is shared with another company."}}},"SlackAppTarget":{"type":"object","description":"A Slack app destination: posts through an installation's bot into one channel.","properties":{"auto_investigate":{"oneOf":[{"$ref":"#/components/schemas/AutoInvestigate"}],"default":"off"},"buttons":{"type":"boolean","default":true},"channel_id":{"type":"string","default":""},"channel_name":{"type":"string","default":""},"installation_id":{"type":"string","default":""},"mention":{"oneOf":[{"$ref":"#/components/schemas/MentionRule"}],"default":"default"},"oncall_room_confirmed":{"type":"boolean","default":false},"previous_webhook":{"type":["object","null"],"description":"Kept from a switch off a webhook destination so it can be switched back; never sent to."},"refire_reuse_minutes":{"type":"integer","format":"int32","default":30,"minimum":0},"shared_channel_confirmed":{"type":"boolean","default":false}}},"SlackOAuthConnection":{"type":"object","description":"Only the channel-bound incoming webhook; the access token never leaves the server.","required":["webhookUrl","channel","channelId","teamId","teamName"],"properties":{"channel":{"type":"string"},"channelId":{"type":"string"},"teamId":{"type":"string"},"teamName":{"type":"string"},"webhookUrl":{"type":"string"}}},"SlackOAuthExchangeRequest":{"type":"object","description":"Slack's callback code plus the still-unexpired state issued by `start`.","required":["code","state"],"properties":{"code":{"type":"string"},"state":{"type":"string"}}},"SlackOAuthStartResponse":{"type":"object","description":"Where to send the browser to authorize the app; the signed state is already embedded in the URL.","required":["authorizationUrl"],"properties":{"authorizationUrl":{"type":"string"}}},"SliConfig":{"oneOf":[{"type":"object","required":["config","sli_type"],"properties":{"config":{"type":"object","required":["source"],"properties":{"source":{"$ref":"#/components/schemas/CountSource"}}},"sli_type":{"type":"string","enum":["count"]}}},{"type":"object","required":["config","sli_type"],"properties":{"config":{"type":"object","required":["stream","stream_type","query_language","query","comparator","threshold"],"properties":{"absent_is_bad":{"type":"boolean","description":"Freshness semantics: a slice the query PROVED empty is **bad**\nrather than a gap. For a pipeline-freshness SLO, absence is the\nfailure signal — a silent pipeline is a broken pipeline, and under\nS-8's default it could never read as bad.\n\nOnly flips the meaning of a *successful* query's empty bucket; a\nFAILED query still writes nothing and coverage falls, so a search\noutage freezes the SLO exactly as before. That distinction is\nstructural — gap fill runs only after a successful query.\n\n`#[serde(default)]` is the upgrade guarantee: every stored\ntime-slice SLO predates the field and keeps S-8 byte-for-byte.\nUngrouped SLOs only (validated) — gap fill cannot see a group that\nis absent from the whole pass, so a grouped freshness SLO would\nfreeze instead of firing for precisely the failure it watches for."},"comparator":{"$ref":"#/components/schemas/Operator","description":"Orderable comparators only — a slice with no value is a *gap*, not\na failure, so `=`/`!=` have no meaning here."},"query":{"type":"string"},"query_language":{"$ref":"#/components/schemas/QueryLanguage"},"scope":{"type":["string","null"]},"stream":{"type":"string"},"stream_type":{"type":"string"},"threshold":{"type":"number","format":"double"}}},"sli_type":{"type":"string","enum":["time_slice"]}}},{"type":"object","required":["config","sli_type"],"properties":{"config":{"type":"object","required":["alert_id"],"properties":{"alert_id":{"type":"string"}}},"sli_type":{"type":"string","enum":["alert"]}}}],"description":"What \"good\" means, tagged on [`SliType`] (§6b.7).\n\n`group_by` is deliberately **not** here — it lives on [`SloDefinition`],\nthe single source of truth for slice identity.\n**Adjacently tagged** (`{\"sli_type\": …, \"config\": {…}}`) rather than\ninternally tagged, because `TimeSlice` carries an `f64` threshold and this\nworkspace's `serde_json` has `arbitrary_precision` enabled — see\n[`CountSource`] for the full explanation. `sli_type` stays a top-level key\nso the storage layer can keep denormalizing it into `slos.sli_type` for\nlist filtering."},"Slo":{"allOf":[{"$ref":"#/components/schemas/SloDefinition","description":"Everything a slice's meaning depends on."},{"type":"object","required":["name","target"],"properties":{"definition_generation":{"type":"integer","format":"int32","description":"Bumped by every computation-affecting edit, including reverts (D59).\nAlso the writing epoch and the CAS fence for writer commits."},"description":{"type":"string"},"enabled":{"type":"boolean"},"folder_id":{"type":"string"},"groups_estimate":{"type":["integer","null"],"format":"int64","description":"Preflight `COUNT(DISTINCT …)` estimate; feeds the S-10 cap and the\nS-14 budget."},"groups_reserved":{"type":"integer","format":"int64","description":"Budget reservation: 1 when ungrouped, else `clamp(2 × estimate, 64, hard cap)`."},"id":{"type":"string"},"name":{"type":"string"},"org":{"type":"string"},"owner":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"target":{"type":"number","format":"double","description":"Percentage in (0, 100), up to 3 decimals. Applied at READ time."}}}],"description":"A Service Level Objective (S-1)."},"SloAlertKind":{"type":"string","description":"The two SLO-alert shapes we offer.","enum":["error_budget","burn_rate"]},"SloCondition":{"type":"object","description":"The SLO alert's condition, persisted in `alerts.query_slo_condition`\n(D42). `slo_id` is additionally written to the indexed `alerts.slo_id`\ncolumn, which is authoritative for reverse lookups (D60).","required":["slo_id","kind","operator","critical"],"properties":{"critical":{"type":"number","format":"double","description":"Finite and strictly positive (SA-3).\n\nLenient deserialization is required, not cosmetic: this struct arrives\nnested inside `CreateAlertRequestBody`'s `#[serde(flatten)]`, and a\nflatten buffers through `Value`, where `arbitrary_precision` represents\nevery number as a map (D61). A plain `f64` fails there with\n`invalid type: map, expected f64`."},"kind":{"$ref":"#/components/schemas/SloAlertKind"},"long_window_secs":{"type":["integer","null"],"format":"int64","description":"`BurnRate` only. 1h–48h, ≤ the SLO window, an exact multiple of and\n≥ 2× the slice interval (SA-8)."},"multi_alert":{"type":"boolean","description":"Per-group fan-out — Feature 3's flag, same semantics (SA-13)."},"operator":{"$ref":"#/components/schemas/Operator","description":"Orderable ascending only: `>` or `>=` (SA-5)."},"short_window_secs":{"type":["integer","null"],"format":"int64","description":"`BurnRate` only. Defaults to long ÷ 12 (Google SRE workbook)."},"slo_id":{"type":"string"},"warning":{"type":["number","null"],"format":"double"}}},"SloCorrectionMode":{"type":"string","enum":["exclude","count_as_good"]},"SloDefinition":{"allOf":[{"$ref":"#/components/schemas/SliConfig","description":"Flattened, so `sli_type` and `config` sit at the SLO's top level rather\nthan nested under `sli_config`. `SloDefinition` is itself flattened\ninto [`Slo`], so this is what makes the wire shape\n`{\"sli_type\": \"count\", \"config\": {...}, \"target\": ...}` — one flat\nobject, matching what the form actually posts."},{"type":"object","required":["window_secs","slice_interval_secs"],"properties":{"group_by":{"type":["array","null"],"items":{"type":"string"},"description":"THE canonical location for grouping."},"slice_interval_secs":{"type":"integer","format":"int64"},"window_secs":{"type":"integer","format":"int64"}}}],"description":"The computation-affecting shape of an SLO — everything a slice's meaning\ndepends on.\n\nDeliberately excludes `target`: it is applied at read time (D56), so\nediting it never invalidates a slice and never triggers a rebuild."},"SloListItem":{"allOf":[{"$ref":"#/components/schemas/Slo"},{"type":"object","properties":{"status":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SloStatusView","description":"`None` until the first pass has measured anything. Deliberately not\nzeroed: \"not yet measured\" and \"measured as zero\" are different, and a\nUI that conflates them shows a brand-new SLO as 0% available."}]}}}],"description":"An SLO plus its current measurement, which is what a list view needs."},"SloListResponse":{"type":"object","required":["list"],"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/SloListItem"}}}},"SloStatusView":{"type":"object","description":"What the UI and the API render for one SLO or one group.","required":["group_key","coverage","no_data","good","total","covered_slices"],"properties":{"burn_rate":{"type":["number","null"],"format":"double","description":"Current burn rate — multiples of the budget-neutral rate."},"computed_at":{"type":["integer","null"],"format":"int64"},"corrections":{"type":"array","items":{"$ref":"#/components/schemas/CorrectionRef"}},"coverage":{"type":"number","format":"double","description":"Fraction of the window actually measured, 0..1."},"covered_slices":{"type":"integer","format":"int64"},"error_budget_remaining":{"type":["number","null"],"format":"double","description":"**Percentage** of the error budget still unspent, not a fraction.\nNegative once the budget is overspent, which is meaningful and\ndeliberately not clamped: \"-80% remaining\" is what a user needs to see\nwhen they have burned 180% of the budget."},"good":{"type":"number","format":"double"},"group_key":{"type":"string"},"measuring_since":{"type":["integer","null"],"format":"int64","description":"The earliest instant this SLO is allowed to measure from, epoch seconds\n— set only when it is LATER than the window's own start, i.e. only when\nit is the reason the window is not full (S-16 PR 4).\n\nAn alert-sourced SLO cannot measure back to the start of its window: it\nhas no evidence before the ledger begins, and history before the source\nalert's last edit was produced under a config the eligibility rules\nnever saw. The window is therefore genuinely partial for a while, and\nthe honest reading is \"measuring since <date>, N of 30 days\" rather than\na coverage percentage that invites the user to hunt for a gap that does\nnot exist."},"no_data":{"type":"boolean","description":"True when coverage is below the floor. Every derived figure is `None`\nin that case — the SLO is frozen, not healthy and not breached."},"sli":{"type":["number","null"],"format":"double","description":"Percentage, 0..100. `None` when frozen or not yet measured."},"stale_watermark":{"type":"boolean","description":"The OTHER freeze door (§2). A source that stops evaluating leaves the\nwindow pinned with its coverage still high, so [`Self::no_data`] — which\nis the coverage floor and nothing else — cannot see that freeze at all.\nSet by the read path, which knows the clock; `derive` has no opinion."},"time_to_exhaust_secs":{"type":["integer","null"],"format":"int64","description":"Seconds until the budget is exhausted at the current burn. `None` when\nthe burn is at or below neutral, because nothing is being exhausted."},"total":{"type":"number","format":"double"},"watermark_end":{"type":["integer","null"],"format":"int64","description":"How far measurement actually got, epoch seconds. Reads up to ~K\nrecompute slices later than the last real evaluation (§2) — close\nenough for a banner, and the only timestamp there is."}}},"SnapshotCurrent":{"type":"object","description":"The hot snapshot half: rewritten on state change (~1-2KB).","required":["overall","generated_at","components","notices"],"properties":{"components":{"type":"array","items":{"$ref":"#/components/schemas/CurrentComponent"}},"generated_at":{"type":"integer","format":"int64"},"notices":{"type":"array","items":{"$ref":"#/components/schemas/PublicNotice"}},"overall":{"$ref":"#/components/schemas/ComponentStatus"}}},"SnapshotHistory":{"type":"object","description":"The cold snapshot half: rewritten on day rollover or notice change (~30KB).","required":["generated_at","components"],"properties":{"components":{"type":"array","items":{"$ref":"#/components/schemas/HistoryComponent"}},"generated_at":{"type":"integer","format":"int64"}}},"SnoozeRequest":{"type":"object","description":"Not an acknowledgement: the ladder resumes when the snooze lapses.","required":["minutes"],"properties":{"minutes":{"type":"integer","format":"int64","description":"`1`–`1440`: negative silences a live page into the past, unbounded overflows the i64."}}},"SourceData":{"type":"object","required":["source","source_line_start","source_line_end","stack_line","stack_col"],"properties":{"source":{"type":"string"},"source_line_end":{"type":"integer","format":"int32","minimum":0},"source_line_start":{"type":"integer","format":"int32","minimum":0},"stack_col":{"type":"integer","format":"int32","minimum":0},"stack_line":{"type":"integer","format":"int32","minimum":0}}},"SourceMapRepr":{"type":"object","required":["source_file_name","source_map_file_name","file_type","created_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"env":{"type":["string","null"]},"file_type":{"$ref":"#/components/schemas/FileType"},"service":{"type":["string","null"]},"source_file_name":{"type":"string"},"source_map_file_name":{"type":"string"},"version":{"type":["string","null"]}}},"SourcemapValues":{"type":"object","required":["services","envs","versions"],"properties":{"envs":{"type":"array","items":{"type":"string"}},"services":{"type":"array","items":{"type":"string"}},"versions":{"type":"array","items":{"type":"string"}}}},"Sparkline":{"type":"object","description":"Optional trend sparkline drawn inside the metric (\"Metric Text\") panel — the\nvalue + a small line/area/bar chart of the underlying series (KPI stat card).","properties":{"color":{"type":["string","null"],"default":null},"enabled":{"type":"boolean","default":false},"fillOpacity":{"type":["number","null"],"format":"double","default":null},"layout":{"type":["string","null"],"default":null},"lineWidth":{"type":["number","null"],"format":"double","default":null},"type":{"type":["string","null"],"default":null}}},"SplunkTokenAction":{"type":"string","description":"Requested change to a Splunk HEC token.","enum":["generate","revoke"]},"SqlQuery":{"type":"object","required":["sql"],"properties":{"end_time":{"type":["integer","null"],"format":"int64"},"is_old_format":{"type":"boolean"},"query_fn":{"type":["string","null"]},"sql":{"type":"string"},"start_time":{"type":["integer","null"],"format":"int64"}}},"StacktraceResponse":{"type":"object","required":["stacktrace"],"properties":{"stacktrace":{"$ref":"#/components/schemas/TranslatedStack"}}},"StatusCounts":{"type":"object","required":["total","unknown","online","degraded","offline","outdated"],"properties":{"degraded":{"type":"integer","minimum":0},"offline":{"type":"integer","minimum":0},"online":{"type":"integer","minimum":0},"outdated":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0},"unknown":{"type":"integer","minimum":0}}},"StatusPageImpact":{"type":"string","enum":["none","degraded","partial_outage","major_outage"]},"StatusPagePreview":{"type":"object","description":"The admin preview response: both snapshot halves through the exact same\nserializer the public plane uses, so preview cannot diverge from what\nvisitors will see once published.","required":["current","history"],"properties":{"current":{"$ref":"#/components/schemas/SnapshotCurrent"},"history":{"$ref":"#/components/schemas/SnapshotHistory"}}},"SteerAction":{"type":"string","description":"A hypothesis action.","enum":["disprove","reopen","test_first"]},"SteerKind":{"type":"string","description":"What a steering row carries.","enum":["message","answer","hypothesis_action","guidance"]},"SteerOutcome":{"type":"object","description":"The steer route's 201 body; `steer.status` may be `rejected`.","required":["steer","run_state"],"properties":{"run_state":{"$ref":"#/components/schemas/RunState"},"steer":{"$ref":"#/components/schemas/SteerRecord"}}},"SteerRecord":{"type":"object","description":"One `rca_steering` row. Times are µs.","required":["org_id","steer_id","run_id","incident_id","author_email","kind","text","status","created_at"],"properties":{"acted_at":{"type":["integer","null"],"format":"int64"},"action":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SteerAction"}]},"agent_note":{"type":["string","null"]},"author_email":{"type":"string"},"created_at":{"type":"integer","format":"int64"},"delivered_at":{"type":["integer","null"],"format":"int64"},"hypothesis_id":{"type":["string","null"]},"incident_id":{"type":"string"},"kind":{"$ref":"#/components/schemas/SteerKind"},"opencode_message_id":{"type":["string","null"]},"org_id":{"type":"string"},"question_id":{"type":["string","null"],"description":"`callID` of the `ask_responders` call this row answers."},"read_at":{"type":["integer","null"],"format":"int64"},"run_id":{"type":"string"},"status":{"$ref":"#/components/schemas/SteerStatus"},"status_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SteerStatusReason"}]},"steer_id":{"type":"string"},"text":{"type":"string"}}},"SteerRequestBody":{"type":"object","description":"Derive author from authentication and reject unknown body fields.","required":["kind"],"properties":{"action":{"type":["string","null"],"description":"For `hypothesis_action`: `disprove`, `reopen` or `test_first`."},"hypothesis_id":{"type":["string","null"],"description":"For `hypothesis_action`: the hypothesis id in the run's ledger."},"kind":{"type":"string","description":"`message` or `hypothesis_action`."},"text":{"type":"string","description":"The message; ignored for `hypothesis_action`, where the server writes the text."}},"additionalProperties":false},"SteerStatus":{"type":"string","description":"Status of a steering row.","enum":["queued","delivered","read","applied","declined","not_read","rejected"]},"SteerStatusReason":{"type":"string","description":"Why a row ended `rejected` or `not_read`.","enum":["finalizing","no_active_turn","agent_unreachable","run_completed","run_cancelled","run_failed"]},"SteeringView":{"type":"object","description":"The steering route's body.","required":["items","can_steer"],"properties":{"can_steer":{"type":"boolean","description":"The run takes messages and the user may send them."},"items":{"type":"array","items":{"$ref":"#/components/schemas/SteerRecord"},"description":"The run's rows in `created_at` order, merged with what the transcript shows."},"open_question":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/OpenQuestion"}]}}},"StillPaging":{"type":"object","required":["response_id","team"],"properties":{"response_id":{"type":"string"},"team":{"type":"string"}}},"StorageType":{"type":"string","enum":["normal","compliance"]},"Stream":{"type":"object","required":["name","storage_type","stream_type","stats","schema","settings","total_fields"],"properties":{"inherited_retention_days":{"type":["integer","null"],"format":"int64","description":"Days the stream keeps data with no value of its own, 0 for forever; set by the schema read."},"is_derived":{"type":["boolean","null"]},"is_internal":{"type":"boolean","description":"True for streams OpenObserve writes itself; omitted when false."},"metrics_meta":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Metadata"}]},"name":{"type":"string"},"pattern_associations":{"type":"array","items":{"$ref":"#/components/schemas/PatternAssociation"}},"schema":{"type":"array","items":{"$ref":"#/components/schemas/StreamField"}},"settings":{"$ref":"#/components/schemas/StreamSettings"},"stats":{"$ref":"#/components/schemas/StreamStats"},"storage_type":{"type":"string"},"stream_type":{"$ref":"#/components/schemas/StreamType"},"total_fields":{"type":"integer","minimum":0},"uds_schema":{"type":"array","items":{"$ref":"#/components/schemas/StreamField"}}}},"StreamCreate":{"type":"object","required":["fields","settings"],"properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/StreamField"}},"settings":{"$ref":"#/components/schemas/StreamSettings"}}},"StreamDeleteFields":{"type":"object","required":["fields"],"properties":{"fields":{"type":"array","items":{"type":"string"}}}},"StreamField":{"type":"object","required":["name","type"],"properties":{"name":{"type":"string"},"type":{"type":"string"}}},"StreamFieldObj":{"type":"object","properties":{"field":{"type":["string","null"]},"streamAlias":{"type":["string","null"]}}},"StreamInfo":{"type":"object","description":"Information about a stream where a service was discovered","required":["stream_name"],"properties":{"dropped_dimensions":{"type":"array","items":{"type":"string"},"description":"Identity dimensions that could not be resolved to a queryable field on\nthis stream's schema and were therefore omitted from `filters`.\nConsumers should warn: queries on this stream are wider than the chips imply."},"filters":{"type":"object","description":"Optional filter conditions that identify this service in the stream\nExample: {\"namespace\": \"production\", \"cluster\": \"us-east-1\"}","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"stream_name":{"type":"string","description":"Stream name"},"stream_type":{"$ref":"#/components/schemas/StreamType","description":"Stream type (logs, metrics, traces, profiles)\n\nThis field explicitly identifies the stream type, enabling UIs to:\n1. Query the correct API endpoint (logs/_search vs metrics/_search)\n2. Display appropriate type badges/icons\n3. Handle flattened stream lists without losing type information"}}},"StreamOrder":{"type":"object","properties":{"applyBeforeFlattening":{"type":"boolean"},"isRemoved":{"type":"boolean"},"order":{"type":"integer","format":"int32","minimum":0},"stream":{"type":"string"},"streamType":{"$ref":"#/components/schemas/StreamType"}}},"StreamParams":{"type":"object","properties":{"org_id":{"type":"string","default":""},"stream_name":{"type":"string","default":""},"stream_type":{"oneOf":[{"$ref":"#/components/schemas/StreamType"}],"default":"logs"}}},"StreamPartition":{"type":"object","required":["field"],"properties":{"disabled":{"type":"boolean"},"field":{"type":"string"},"types":{"$ref":"#/components/schemas/StreamPartitionType"}}},"StreamPartitionTimeLevel":{"type":"object","description":"A stream's partition level per day; a day's level never changes once the day has begun.","properties":{"changes":{"type":"array","items":{"$ref":"#/components/schemas/PartitionTimeLevelChange"}},"dynamic":{"type":["boolean","null"],"description":"The stream's own classifier switch; unset follows `ZO_DYNAMIC_PARTITION_STREAM_TYPES`."}}},"StreamPartitionType":{"oneOf":[{"type":"string","enum":["value"]},{"type":"object","required":["hash"],"properties":{"hash":{"type":"integer","format":"int64","minimum":0}}},{"type":"string","enum":["prefix"]}]},"StreamSettings":{"type":"object","properties":{"approx_partition":{"type":"boolean"},"bloom_filter_fields":{"type":"array","items":{"type":"string"}},"cross_links":{"type":"array","items":{"$ref":"#/components/schemas/CrossLink"}},"data_retention":{"type":"integer","format":"int64"},"defined_schema_fields":{"type":"array","items":{"type":"string"}},"distinct_value_fields":{"type":"array","items":{"$ref":"#/components/schemas/DistinctField"}},"enable_distinct_fields":{"type":"boolean"},"enable_log_patterns_extraction":{"type":"boolean"},"extended_retention_days":{"type":"array","items":{"$ref":"#/components/schemas/TimeRange"}},"flatten_level":{"type":["integer","null"],"format":"int64"},"full_text_search_keys":{"type":"array","items":{"type":"string"}},"index_all_values":{"type":"boolean"},"index_fields":{"type":"array","items":{"type":"string"}},"index_fields_updated_at":{"type":"object","additionalProperties":{"type":"integer","format":"int64"},"propertyNames":{"type":"string"}},"index_original_data":{"type":"boolean"},"index_updated_at":{"type":"integer","format":"int64"},"is_llm_stream":{"type":"boolean"},"max_query_range":{"type":"integer","format":"int64"},"partition_keys":{"type":"array","items":{"$ref":"#/components/schemas/StreamPartition"}},"partition_time_level":{"$ref":"#/components/schemas/StreamPartitionTimeLevel"},"storage_type":{"$ref":"#/components/schemas/StorageType"},"store_original_data":{"type":"boolean"}}},"StreamStats":{"type":"object","required":["created_at","doc_time_min","doc_time_max","doc_num","file_num","storage_size","compressed_size","index_size"],"properties":{"compressed_size":{"type":"number","format":"double"},"created_at":{"type":"integer","format":"int64"},"doc_num":{"type":"integer","format":"int64"},"doc_time_max":{"type":"integer","format":"int64"},"doc_time_min":{"type":"integer","format":"int64"},"file_num":{"type":"integer","format":"int64"},"index_size":{"type":"number","format":"double"},"mindex_size":{"type":"number","format":"double"},"storage_size":{"type":"number","format":"double"}}},"StreamStatus":{"allOf":[{"$ref":"#/components/schemas/RecordStatus"},{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}}]},"StreamSummary":{"type":"object","required":["num_streams","total_records","total_storage_size","total_compressed_size","total_index_size"],"properties":{"num_streams":{"type":"integer","format":"int64"},"num_user_streams":{"type":"integer","format":"int64","description":"Streams holding data the user sent; `num_streams` also counts the ones O2 writes itself."},"total_compressed_size":{"type":"number","format":"double"},"total_index_size":{"type":"number","format":"double"},"total_mindex_size":{"type":"number","format":"double"},"total_records":{"type":"integer","format":"int64"},"total_storage_size":{"type":"number","format":"double"}}},"StreamType":{"type":"string","enum":["logs","metrics","traces","profiles","service_graph","enrichment_tables","file_list","metadata","index"]},"Strength":{"type":"string","enum":["decisive","supporting"]},"StripeBillingPortalSession":{"type":"object","required":["id","url","customer","created","livemode"],"properties":{"created":{"type":"integer","format":"int64"},"customer":{"type":"string"},"id":{"type":"string"},"livemode":{"type":"boolean"},"locale":{"type":["string","null"]},"on_behalf_of":{"type":["string","null"]},"return_url":{"type":["string","null"]},"url":{"type":"string"}}},"StripeCheckoutSession":{"type":"object","required":["id","mode","payment_status","payment_method_types","created","expires_at","livemode"],"properties":{"amount_subtotal":{"type":["integer","null"],"format":"int64"},"amount_total":{"type":["integer","null"],"format":"int64"},"cancel_url":{"type":["string","null"]},"client_reference_id":{"type":["string","null"]},"created":{"type":"integer","format":"int64"},"currency":{"type":["string","null"]},"customer_email":{"type":["string","null"]},"expires_at":{"type":"integer","format":"int64"},"id":{"type":"string"},"livemode":{"type":"boolean"},"metadata":{"type":["object","null"],"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"mode":{"type":"string"},"payment_method_types":{"type":"array","items":{"type":"string"}},"payment_status":{"type":"string"},"status":{"type":["string","null"]},"success_url":{"type":["string","null"]},"url":{"type":["string","null"]}}},"SubjectRef":{"type":"object","description":"Points at one firing of one thing. `source_id` is the rule or check that\nproduced it; `firing` counts firings of that source. Together they form the\n`subject_id` stored on the record.","required":["subject_type","source_id","firing"],"properties":{"firing":{"type":"integer","format":"int32","description":"1-based firing counter. The first firing of a source is `#1`.","minimum":0},"source_id":{"type":"string","description":"The rule, check or incident this firing came from."},"subject_type":{"$ref":"#/components/schemas/SubjectType"}}},"SubjectType":{"type":"string","description":"What kind of thing paged a human.","enum":["alert","incident"]},"SummaryCard":{"type":"object","description":"The verdict card.","properties":{"band":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Confidence","description":"Graded runs only."}]},"causes":{"type":"array","items":{"$ref":"#/components/schemas/SummaryCause"},"description":"`multiple_root_causes` only: each root cause, in first-seen order."},"confidence":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ConfidenceBreakdown","description":"Why the band is what it is; graded runs only."}]},"headline":{"type":["string","null"]},"impact":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Impact","description":"Completed runs only."}]},"leading":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/LeadingEntry","description":"Live only."}]},"needs":{"type":["string","null"],"description":"Blocked runs: the title of the first blind spot with a fix."},"outcome":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/RcaOutcome"}]},"outcome_reason":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/OutcomeReason"}]},"suspect_change":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SummarySuspectChange","description":"Completed runs only."}]},"verdict_so_far":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/VerdictSoFar","description":"Live only."}]}}},"SummaryCause":{"type":"object","description":"One root cause of a run with several.","required":["id","statement","band"],"properties":{"band":{"$ref":"#/components/schemas/Confidence","description":"This cause's own band, never above the claimed one."},"id":{"type":"string"},"onset_us":{"type":["integer","null"],"format":"int64","description":"Microseconds; the agent's claim."},"statement":{"type":"string"}}},"SummaryHypothesis":{"type":"object","required":["id","statement","status","reason","first_seen_seq"],"properties":{"evidence_numbers":{"type":"array","items":{"type":"integer","format":"int32","minimum":0},"description":"Numbers of the evidence entries that cite this hypothesis."},"first_seen_seq":{"type":"integer","format":"int64"},"history":{"type":"array","items":{"$ref":"#/components/schemas/SummaryStatusChange"}},"id":{"type":"string"},"lead_ids":{"type":"array","items":{"type":"string"}},"onset_us":{"type":["integer","null"],"format":"int64","description":"Microseconds; the agent's claim."},"reason":{"type":"string"},"statement":{"type":"string"},"status":{"$ref":"#/components/schemas/HypothesisStatus"},"unverified_ids":{"type":"array","items":{"type":"string"},"description":"Evidence ids of this hypothesis that did not verify."}}},"SummaryStatusChange":{"type":"object","required":["at","status"],"properties":{"at":{"type":"integer","format":"int64","description":"Microseconds."},"run_ended":{"type":"boolean"},"status":{"$ref":"#/components/schemas/HypothesisStatus"},"steered_by":{"type":["string","null"]}}},"SummarySuspectChange":{"type":"object","required":["kind","reference","occurred_at","shown_state"],"properties":{"author":{"type":["string","null"]},"kind":{"$ref":"#/components/schemas/ChangeKind"},"lead_author":{"type":["string","null"],"description":"The email of the author of the subject hypothesis' first steering lead."},"occurred_at":{"type":"integer","format":"int64","description":"Microseconds."},"reference":{"type":"string"},"shown_state":{"$ref":"#/components/schemas/ShownChangeState"}}},"SummaryTimelineEntry":{"type":"object","required":["at","text","status"],"properties":{"at":{"type":"integer","format":"int64","description":"Microseconds."},"evidence_numbers":{"type":"array","items":{"type":"integer","format":"int32","minimum":0},"description":"Numbers of the verified entries of the entry's evidence ids."},"status":{"$ref":"#/components/schemas/TimelineView"},"text":{"type":"string"}}},"SyncResult":{"type":"object","description":"Result of a sync operation.","required":["created","updated","disabled"],"properties":{"created":{"type":"integer","minimum":0},"disabled":{"type":"integer","minimum":0},"updated":{"type":"integer","minimum":0}}},"Synthetic":{"type":"object","required":["name","type","target","config","frequency","locations","enabled"],"properties":{"alert_if_fails":{"type":"integer","format":"int32","description":"Alert only after this many consecutive failures (like alerts trigger_tolerance)."},"auth":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SyntheticAuth","description":"Optional authentication config (basic auth, bearer token, etc.)."}]},"collect_rum_data":{"type":"boolean","description":"Collect RUM data for browser checks (session replay / performance)."},"config":{"description":"Type-specific config, stored as JSONB. Shape depends on check_type."},"cookies":{"type":"array","items":{"$ref":"#/components/schemas/SyntheticCookie"},"description":"Cookies injected into the browser context before any steps run.\nOrthogonal to auth — can be combined with basic/bearer auth."},"cooldown_mins":{"type":"integer","format":"int32","description":"Silence period (minutes) between repeated alert notifications."},"created_at":{"type":"integer","format":"int64"},"description":{"type":"string"},"destinations":{"type":"array","items":{"type":"string"},"description":"Alert destination names to notify on check failure."},"enabled":{"type":"boolean"},"environments":{"type":"array","items":{"type":"string"},"description":"Environments this check runs against, by id."},"folder_id":{"type":"string","description":"Folder this synthetic belongs to, as the public folder slug the API\naccepts and returns; it is resolved to the `folders.id` KSUID on write."},"frequency":{"$ref":"#/components/schemas/SyntheticFrequency","description":"Schedule — same modular format as reports frequency."},"id":{"type":"string"},"last_check_status":{"$ref":"#/components/schemas/SyntheticStatus","description":"Denormalised status from the most recent completed check. Updated by ack handler."},"last_triggered_at":{"type":"integer","format":"int64","description":"When the scheduler last fanned out this synthetic (microseconds). UI: \"LAST CHECK\"."},"locations":{"type":"array","items":{"type":"string"}},"name":{"type":"string"},"next_run_at":{"type":"integer","format":"int64","description":"Pre-computed next fire time (microseconds). 0 = fire on first tick."},"org_id":{"type":"string"},"owner":{"type":["string","null"],"description":"Email of the user who created this synthetic. Set on create, never updated."},"retries":{"type":"integer","format":"int32","description":"Number of retries before marking a check failed (0 = no retry)."},"session_replay":{"type":"boolean","description":"Enable session replay capture (browser checks only)."},"start":{"type":["integer","null"],"format":"int64","description":"Unix epoch microseconds — when to first run the check (\"schedule later\").\nWhen set, the scheduler uses this as the initial next_run_at instead of firing immediately."},"tags":{"type":"array","items":{"type":"string"},"description":"User-defined tags for filtering/grouping (e.g. [\"prod\", \"checkout\"])."},"target":{"type":"string","description":"Target URL (HTTP/Browser) or host:port (TCP/TLS/SSH)."},"template":{"type":["string","null"],"description":"Template override for this check's messages; null or \"\" uses the destination's."},"type":{"$ref":"#/components/schemas/SyntheticType"},"tz_offset":{"type":"integer","format":"int32","description":"UTC offset in minutes, used only when `frequency.timezone` is absent or unparseable."},"updated_at":{"type":"integer","format":"int64"},"variables":{"type":"array","items":{"$ref":"#/components/schemas/SyntheticVariable"},"description":"Key-value variables injected into the probe environment."},"wait_before_retry_secs":{"type":"integer","format":"int32","description":"Seconds to wait between retry attempts."}}},"SyntheticAuth":{"oneOf":[{"type":"object","required":["username","password","type"],"properties":{"password":{"type":"string"},"type":{"type":"string","enum":["basic"]},"username":{"type":"string"}}},{"type":"object","required":["token","type"],"properties":{"token":{"type":"string"},"type":{"type":"string","enum":["bearer"]}}},{"type":"object","description":"Reference to a secret stored in OO secrets manager.","required":["secret_name","type"],"properties":{"secret_name":{"type":"string"},"type":{"type":"string","enum":["secret"]}}}]},"SyntheticCookie":{"type":"object","required":["name","value","domain"],"properties":{"domain":{"type":"string"},"http_only":{"type":"boolean"},"name":{"type":"string"},"path":{"type":"string"},"secure":{"type":"boolean"},"value":{"type":"string","description":"Cookie value — encrypted at rest with org DEK."}}},"SyntheticFrequency":{"type":"object","properties":{"cron":{"type":"string"},"interval":{"type":"integer","format":"int64"},"timezone":{"type":["string","null"],"description":"IANA timezone name (e.g. \"America/New_York\"). Used for cron scheduling and display."},"type":{"$ref":"#/components/schemas/SyntheticFrequencyType"}}},"SyntheticFrequencyType":{"type":"string","enum":["seconds","minutes","hours","days","weeks","months","cron"]},"SyntheticListItem":{"type":"object","required":["id","org_id","folder_id","name","description","tags","type","target","frequency","locations","enabled","created_at","updated_at","last_triggered_at","status","referenced_by"],"properties":{"active_downtime":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ActiveDowntime"}]},"created_at":{"type":"integer","format":"int64"},"description":{"type":"string"},"enabled":{"type":"boolean"},"folder_id":{"type":"string"},"frequency":{"$ref":"#/components/schemas/SyntheticFrequency"},"id":{"type":"string"},"last_check_at":{"type":["integer","null"],"format":"int64"},"last_response_ms":{"type":["number","null"],"format":"double"},"last_triggered_at":{"type":"integer","format":"int64"},"locations":{"type":"array","items":{"type":"string"}},"name":{"type":"string"},"org_id":{"type":"string"},"reference_state":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ReferenceState","description":"Omitted for a check that holds no subtest reference."}]},"referenced_by":{"type":"integer","format":"int32","description":"How many checks embed this one as a subtest."},"references":{"type":["integer","null"],"format":"int32","description":"Subtest steps this browser check holds; None for protocol checks."},"status":{"$ref":"#/components/schemas/SyntheticStatus"},"steps":{"type":["integer","null"],"format":"int32","description":"Executed (expanded) steps, browser only: what bills and draws down the pool (§5.11)."},"tags":{"type":"array","items":{"type":"string"}},"target":{"type":"string"},"type":{"$ref":"#/components/schemas/SyntheticType"},"updated_at":{"type":"integer","format":"int64"}}},"SyntheticListResponse":{"type":"object","required":["checks","total"],"properties":{"checks":{"type":"array","items":{"$ref":"#/components/schemas/SyntheticListItem"}},"total":{"type":"integer","format":"int64"}}},"SyntheticStatus":{"type":"string","enum":["passed","warning","failed","unknown","error"]},"SyntheticType":{"type":"string","enum":["http","tcp","tls","ssh","browser"]},"SyntheticVariable":{"type":"object","required":["name","value"],"properties":{"example":{"type":"string","description":"Placeholder shown in the UI when secure=true and value is empty/redacted."},"name":{"type":"string"},"secure":{"type":"boolean","description":"UI display flag: true = mask value as ••••. No effect on storage — all values are\nAES-encrypted at rest unconditionally."},"value":{"type":"string"}}},"SyntheticsAlertDecision":{"type":"string","description":"The notification a completed run should send, resolved against the check's\n`alert_if_fails` / `cooldown_mins` settings and its persisted alert state.","enum":["Silent","Firing","Recovered","Flaky","Degraded"]},"SyntheticsBrowserDevice":{"type":"object","description":"One engine+device combination with a pre-generated execution_id (from the scheduler).","required":["execution_id","engine","device","viewport"],"properties":{"device":{"type":"string"},"engine":{"type":"string"},"execution_id":{"type":"string"},"viewport":{"$ref":"#/components/schemas/SyntheticsViewport"}}},"SyntheticsCapabilitiesV2":{"type":"object","description":"Capabilities response sourced from the location registry.","required":["locations","browsers","devices"],"properties":{"browsers":{"type":"array","items":{"type":"string"}},"devices":{"type":"array","items":{"$ref":"#/components/schemas/SyntheticsDevice"}},"locations":{"type":"array","items":{"$ref":"#/components/schemas/LocationEntry"}}}},"SyntheticsDevice":{"type":"object","description":"A device class with its viewport dimensions — returned by the capabilities\nendpoint.","required":["id","label","width","height"],"properties":{"height":{"type":"integer","format":"int32","minimum":0},"id":{"type":"string"},"label":{"type":"string"},"width":{"type":"integer","format":"int32","minimum":0}}},"SyntheticsEnvironmentView":{"type":"object","required":["id","name","description","is_global","created_at","updated_at","checks_count","variables"],"properties":{"checks_count":{"type":"integer","format":"int64","minimum":0},"created_at":{"type":"integer","format":"int64"},"description":{"type":"string"},"id":{"type":"string"},"is_global":{"type":"boolean"},"name":{"type":"string"},"owner":{"type":["string","null"]},"updated_at":{"type":"integer","format":"int64"},"variables":{"type":"array","items":{"$ref":"#/components/schemas/SyntheticsVariableView"}}}},"SyntheticsIngestInfo":{"type":"object","description":"Ingest destination for probe result records.","required":["base_url","org","stream","step_stream","token"],"properties":{"base_url":{"type":"string"},"org":{"type":"string"},"step_stream":{"type":"string","description":"One row per (execution, step) — the step-grain stream (B10).\n\nSent explicitly rather than derived as `{stream}_steps` by convention.\nA convention is undocumented coupling: a reader of either side cannot see\nit, and renaming the results stream would silently redirect step writes.\nBoth sides are ours and the feature is dev/introspection-only, so there is\nno version-skew argument for guessing.\n\nWritten by the BROWSER probe only. Steps are a browser concept; protocol\nchecks have no steps and the Go agent never writes here."},"stream":{"type":"string","description":"One row per execution. Carries `last_attempt_steps` as a JSON blob."},"token":{"type":"string"}}},"SyntheticsJobAckResponse":{"type":"object","required":["run_complete","job_count","org_id","job_id","run_id","synthetics_id","synthetics_name","synthetic_type","target","destinations","location","pool","trigger_type","alert","consecutive_failures","failing_locations","passing_locations","failing_environments"],"properties":{"alert":{"$ref":"#/components/schemas/SyntheticsAlertDecision","description":"Whether this completed run should notify, and with what.\n\nThe caller used to notify on every completed run that had a destination,\nwhich ignored `alert_if_fails` and `cooldown_mins` entirely. The\ndecision belongs here because it needs the persisted failure streak,\nwhich only the ack path holds."},"consecutive_failures":{"type":"integer","format":"int32"},"destinations":{"type":"array","items":{"type":"string"}},"failing_environments":{"type":"array","items":{"type":"string"},"description":"Environments of this run that did not pass, worst first, by name."},"failing_locations":{"type":"array","items":{"type":"string"},"description":"Locations of this run's jobs that did not pass, worst first.\n\nEmpty unless the run completed and something failed. Without it a\nnotification for a six-location check could only say \"the check is\nfailing\" — the reader had to open the UI to find out where."},"job_count":{"type":"integer","format":"int32","description":"Total number of jobs (locations) in this run — for notification context."},"job_id":{"type":"string"},"location":{"type":"string"},"org_id":{"type":"string"},"passing_locations":{"type":"array","items":{"type":"string"},"description":"Locations of this run's jobs that passed, alphabetical.\n\nCarried alongside the failing set because a recovery notification has no\nfailing locations to name — that is what \"recovered\" means — so without\nthis the message degraded to a bare count. Both sides also make a\npartial recovery expressible."},"pool":{"type":"string"},"run_complete":{"type":"boolean"},"run_id":{"type":"string"},"run_status":{"type":["string","null"],"description":"Aggregate run status string when run_complete = true: \"passed\"|\"warning\"|\"failed\"|\"error\".\nNone while the run still has pending jobs."},"status_reason":{"type":["string","null"],"description":"Runs that had failed back to back when `alert` was resolved. 0 unless\nfiring — a notification that says \"failing\" is more useful when it also\nsays for how long.\nWhy the run was a warning, echoed from the ack so the notification can say\n\"the certificate is expiring\" rather than a generic \"degrading\"."},"synthetic_type":{"type":"string"},"synthetics_id":{"type":"string"},"synthetics_name":{"type":"string"},"target":{"type":"string"},"trigger_type":{"type":"string"}}},"SyntheticsJobResolveResponse":{"type":"object","required":["job_id","run_id","synthetic","location","location_label","scheduled_ts","trigger_type","browser_devices","metadata","valid_until","ssrf_policy"],"properties":{"browser_devices":{"type":"array","items":{"$ref":"#/components/schemas/SyntheticsBrowserDevice"},"description":"One entry per engine+device combination — browser checks only. Empty for protocol\nchecks."},"env_inject":{"type":"object","description":"Decrypted credential env vars for this check, sent over TLS.\nKeys: `_AUTH_USERNAME`, `_AUTH_PASSWORD` (basic) or `_AUTH_TOKEN` (bearer).\nAuth is redacted from `check.auth` — probe reads credentials from here only.\nEmpty when the synthetic has no auth configured.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"ingest":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SyntheticsIngestInfo","description":"Result-stream destination + the org's `o2oi_` ingest token, looked up at\nresolve time (01 §7.1) so it is never at rest in the queue. Consumed by\nagent-mode probes; the Lambda path receives ingest creds in the invoke\npayload instead. None when the org has no enabled ingest token."}]},"job_id":{"type":"string"},"location":{"type":"string"},"location_label":{"type":"string","description":"Human-readable location label (falls back to the id if the row is gone)."},"metadata":{"description":"Check-level metadata from the job row — flattened into stream records by the probe.\nToday carries `tags`; future fields added to `JobMetadata` flow automatically."},"run_id":{"type":"string"},"scheduled_ts":{"type":"integer","format":"int64"},"ssrf_policy":{"type":"string","description":"\"strict\" (public pools) | \"relaxed\" (private locations — probing the\ncustomer's own network is the point; loopback/metadata still blocked)."},"synthetic":{"$ref":"#/components/schemas/Synthetic","description":"The synthetic definition (terminology rule: never \"check\" on the wire)."},"trigger_type":{"type":"string"},"valid_until":{"type":"integer","format":"int64","description":"Drop-dead time for stale catch-up work (mirrors the job row)."}}},"SyntheticsLocationRecord":{"type":"object","required":["id","kind","provider","region","label","pool","enabled","created_at","updated_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"enabled":{"type":"boolean"},"id":{"type":"string"},"kind":{"type":"string"},"label":{"type":"string"},"org_id":{"type":["string","null"]},"pool":{"type":"string"},"provider":{"type":"string"},"region":{"type":"string"},"updated_at":{"type":"integer","format":"int64"}}},"SyntheticsVariableKind":{"type":"string","description":"Whether a value is ever readable again after it is written.","enum":["plain","secret"]},"SyntheticsVariableView":{"allOf":[{"$ref":"#/components/schemas/VariableValueView"},{"type":"object","required":["id","name","description","example","tags","created_at","updated_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"description":{"type":"string"},"example":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"updated_at":{"type":"integer","format":"int64"},"used_by":{"type":"array","items":{"type":"string"},"description":"Names of those checks, so a destructive action can list them before it is confirmed."},"used_by_checks":{"type":"integer","format":"int64","description":"Checks whose definition references `{{NAME}}`.","minimum":0}}}],"description":"What every read path returns for a shared variable."},"SyntheticsViewport":{"type":"object","description":"Viewport dimensions delivered to the probe so it doesn't need hardcoded device tables.","required":["width","height"],"properties":{"height":{"type":"integer","format":"int32","minimum":0},"width":{"type":"integer","format":"int32","minimum":0}}},"SystemSetting":{"type":"object","description":"A system setting record","required":["scope","setting_key","setting_value"],"properties":{"created_at":{"type":"integer","format":"int64","description":"Created timestamp (microseconds)"},"created_by":{"type":["string","null"],"description":"User who created this setting"},"description":{"type":["string","null"],"description":"Optional description"},"id":{"type":["integer","null"],"format":"int64","description":"Unique identifier"},"org_id":{"type":["string","null"],"description":"Organization ID (required for org/user scope)"},"scope":{"$ref":"#/components/schemas/SettingScope","description":"Setting scope (system, org, user)"},"setting_category":{"type":["string","null"],"description":"Optional category for grouping"},"setting_key":{"type":"string","description":"Setting key identifier"},"setting_value":{"description":"The setting value (JSON)"},"updated_at":{"type":"integer","format":"int64","description":"Updated timestamp (microseconds)"},"updated_by":{"type":["string","null"],"description":"User who last updated this setting"},"user_id":{"type":["string","null"],"description":"User ID (required for user scope)"}}},"SystemSettingPayload":{"type":"object","description":"Request to create or update a setting","required":["setting_key","setting_value"],"properties":{"description":{"type":["string","null"],"description":"Optional description"},"setting_category":{"type":["string","null"],"description":"Optional category"},"setting_key":{"type":"string","description":"Setting key"},"setting_value":{"description":"Setting value (JSON)"}}},"Tab":{"type":"object","required":["tabId","name"],"properties":{"name":{"type":"string"},"panels":{"type":"array","items":{"$ref":"#/components/schemas/Panel"}},"tabId":{"type":"string"}}},"TakeOverRequest":{"type":"object","description":"Admin body to take over a link; a publisher other than the one the caller saw is a 409.","required":["expected_publisher"],"properties":{"expected_publisher":{"type":"string"}}},"TargetFolders":{"oneOf":[{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","enum":["all"]}}},{"type":"object","required":["folder_ids","kind"],"properties":{"folder_ids":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["some"]}}}]},"TargetModule":{"type":"string","enum":["alerts","anomaly_detections","synthetics","slos"]},"Team":{"type":"object","description":"A group of people who can be paged together.","required":["id","org_id","name","timezone","created_at","updated_at"],"properties":{"channel_destinations":{"type":["array","null"],"items":{"type":"string"},"description":"Alert Destination names this team is talked to on — the room the record\nis posted to, as opposed to the people the ladder wakes.\n\n`None` means never set and falls back to\n`EscalationPolicy::destinations`, so stored policies keep working;\n`Some([])` means deliberately no channel. Precedence lives in\n`config::meta::oncall::policy::team_channel`.\n\nOn the team rather than the policy because a team's room is not a\nproperty of its ladder — you want it without editing a rung — and a\nwhole-row super-cluster snapshot built from `Team` would otherwise have\nto carry a column it cannot see."},"created_at":{"type":"integer","format":"int64"},"description":{"type":["string","null"]},"id":{"type":"string"},"name":{"type":"string"},"org_id":{"type":"string"},"slack_channel_id":{"type":["string","null"]},"slack_channel_name":{"type":["string","null"],"description":"Display only."},"slack_enterprise_id":{"type":["string","null"],"description":"Slack Enterprise Grid id of the team's room, if any; matched with `slack_workspace_id`\nby the Slack app's team rule (D45)."},"slack_same_room_destination":{"type":["string","null"],"description":"The team's webhook destination that posts to the same Slack room."},"slack_workspace_id":{"type":["string","null"],"description":"Slack team id of the team's room, set by `/o2 oncall here` (RO-1)."},"timezone":{"type":"string","description":"IANA name, used to render schedules in the team's own working hours.\nStored, not interpreted — resolution is in absolute micros."},"updated_at":{"type":"integer","format":"int64"}}},"TeamChannelResponse":{"allOf":[{"$ref":"#/components/schemas/TeamSlackView"},{"type":"object","required":["team_id","destinations","source"],"properties":{"destinations":{"type":"array","items":{"type":"string"}},"source":{"type":"string","description":"`team` or `policy`, or \"pages still go to the old room\" is unanswerable from the API."},"team_id":{"type":"string"}}}],"description":"A team's channel and where the answer came from."},"TeamLoad":{"type":"object","required":["team_id","from","to","days","members","upcoming_from","upcoming_to","rotations"],"properties":{"days":{"type":"integer","format":"int64"},"from":{"type":"integer","format":"int64"},"members":{"type":"array","items":{"$ref":"#/components/schemas/MemberLoad"}},"rotations":{"type":"array","items":{"$ref":"#/components/schemas/RotationFairness"}},"team_id":{"type":"string"},"to":{"type":"integer","format":"int64"},"upcoming_from":{"type":"integer","format":"int64","description":"The forward window the shares are measured over."},"upcoming_to":{"type":"integer","format":"int64"}}},"TeamMember":{"type":"object","description":"Membership — a flat list of who is on the team.\n\nDeliberately carries no level. Which rung somebody covers is a property of\nthe rotation (`Schedule.rotations`): a person is on the team, and the\nschedule says when they are primary, secondary, or neither. A level here\nwould force one row per level per person and split one fact across two\nplaces.","required":["id","team_id","user_email"],"properties":{"id":{"type":"string"},"team_id":{"type":"string"},"user_email":{"type":"string"}}},"TeamOverview":{"type":"object","description":"The team screen's header, in one read.","required":["team_id","team_name","timezone","members","alerts_assigned","ownership_paths","covered_now","on_call_now","rungs","from","to","days","stats"],"properties":{"acked_under_5m_percent":{"type":["integer","null"],"format":"int64","description":"Pages acknowledged within five minutes, as a whole percent of the pages\nthat were acknowledged at all. `None` when nothing was acknowledged — a\nzero would read as \"we are slow\" rather than \"nothing happened\"."},"alerts_assigned":{"type":"integer","format":"int64","description":"Alert rules whose own `oncall_team` field names this team.\n\n\"Assigned\" and not \"owned\" on purpose. Alerts that would reach this team\nthrough one of its ownership rules are not counted and not approximated:\nan alert's identity dimensions are not known until it fires, so at rest\nthere is nothing to match a rule against.","minimum":0},"covered_now":{"type":"boolean","description":"A page raised right now would reach somebody.\n\nAsks the default slot, not every slot, and so is deliberately not\n`!on_call_now.is_empty()`. A team whose secondary is staffed and whose\nprimary is not wakes nobody when the alert fires, so reporting it as\ncovered would be a badge that lies and would disagree with\n`/coverage-gaps` and `/config-risks`."},"days":{"type":"integer","format":"int64"},"from":{"type":"integer","format":"int64","description":"Micros, inclusive."},"members":{"type":"integer","minimum":0},"on_call_now":{"type":"array","items":{"type":"string"},"description":"Everybody on call in any slot — the wider question, kept wide on\npurpose. This is who to *show*; `covered_now` is whether a page lands."},"ownership_paths":{"type":"integer","description":"Identity-dimension paths this team owns.\n\nA separate number because an ownership rule is a path, not an alert rule:\n`k8s-cluster=prod` is one row here and may catch a thousand alerts or\nnone. Folding the two into one \"owns N\" would state something that is not\ntrue of either.","minimum":0},"rungs":{"type":"array","items":{"$ref":"#/components/schemas/RungSummary"}},"stats":{"$ref":"#/components/schemas/TeamPageStats"},"team_id":{"type":"string"},"team_name":{"type":"string"},"timezone":{"type":"string"},"to":{"type":"integer","format":"int64","description":"Micros, exclusive."}}},"TeamPageStats":{"type":"object","description":"What a team's last N days looked like, in six numbers.","required":["pages","acknowledged","acked_under_5m","night_pages","reached_second_rung","reached_final_rung"],"properties":{"acked_under_5m":{"type":"integer","format":"int64","description":"Acknowledged within five minutes of opening — the number a team\nactually manages against."},"acknowledged":{"type":"integer","format":"int64"},"night_pages":{"type":"integer","format":"int64","description":"Opened inside one of `night_windows`, which the caller computes in the\nteam's own zone. \"2am\" is a fact about a person, not about UTC."},"pages":{"type":"integer","format":"int64","description":"Records opened in the window."},"reached_final_rung":{"type":"integer","format":"int64","description":"Climbed to the last rung its own priority's ladder has — which, in the\nshipped default policy, is the whole team."},"reached_second_rung":{"type":"integer","format":"int64","description":"Climbed past the first rung, so the first person did not answer."}}},"TeamReachability":{"type":"object","description":"The team-level roll-up: \"5 of 6 team members\".","required":["team_id","team_name","smtp_configured","members","reachable","total","unreachable_members"],"properties":{"members":{"type":"array","items":{"$ref":"#/components/schemas/MemberReachability"}},"reachable":{"type":"integer","minimum":0},"smtp_configured":{"type":"boolean","description":"Whether this deployment has an SMTP transport and a valid From address. One false here\nexplains every unreachable row below it, and a team screen that did not\nsay so would read as \"our people are misconfigured\"."},"team_id":{"type":"string"},"team_name":{"type":"string"},"total":{"type":"integer","minimum":0},"unreachable_members":{"type":"array","items":{"type":"string"},"description":"The people a page would be silently dropped for, named. The sentence\nthe UI puts under the count."}}},"TeamSlackTestResponse":{"type":"object","description":"RO-6: what a test post to the team's Slack channel found.","required":["ok","class","advice"],"properties":{"advice":{"type":"string"},"class":{"type":"string","description":"`ok`, `channel_problem`, `not_connected` or `no_channel`."},"ok":{"type":"boolean"}}},"TeamSlackView":{"type":"object","description":"What the team-channel read and write show of the team's Slack channel (RO-1, RO-2); never its\nworkspace id.","required":["slack_channel_set","slack_native","slack_connected"],"properties":{"slack_channel_name":{"type":["string","null"],"description":"Display only."},"slack_channel_set":{"type":"boolean"},"slack_connected":{"type":"boolean","description":"The org has an active Slack app installation."},"slack_native":{"type":"boolean","description":"Pages post in the channel through a Slack app installation serving the org."},"slack_post_problem":{"type":["string","null"],"description":"RO-2: \"Pages can't post to #{channel}: {reason}\"."},"slack_same_room_destination":{"type":["string","null"],"description":"Only while it is still one of the team's webhook destinations."},"slack_unavailable_reason":{"type":["string","null"],"description":"SA-8 / RO-2: why pages cannot post in Slack."}}},"TelemetryDatasetItemRefType":{"type":"string","enum":["trace","span"]},"TelephonyState":{"type":"string","description":"The wire name of a [`TelephonyStatus`]'s state, serialized snake_case.","enum":["ok","account_rejected","from_not_on_account","unavailable","unreadable","none"]},"TelephonyStatus":{"type":"object","description":"The live state of the account an org would page with; never a SID or token.","required":["state","trial","can_text","can_call"],"properties":{"can_call":{"type":"boolean"},"can_text":{"type":"boolean"},"state":{"$ref":"#/components/schemas/TelephonyState"},"trial":{"type":"boolean"}}},"TelephonyView":{"type":"object","description":"What the Telephony page shows; never a token, never the deployment's SID (U7, P6).","required":["deployment_account_present","press4_available"],"properties":{"deployment_account_present":{"type":"boolean"},"deployment_from_number":{"type":["string","null"]},"org":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/OrgTelephonyView"}]},"press4_available":{"type":"boolean","description":"Whether calls can offer \"press 4 to acknowledge\", which needs a callback URL."}}},"Template":{"type":"object","properties":{"applies_to":{"type":["array","null"],"items":{"type":"string"},"description":"Kinds the template is meant for; [] is every kind. Absent on update keeps the stored list."},"body":{"type":"string"},"isDefault":{"type":["boolean","null"]},"isPrebuilt":{"type":"boolean","description":"True for system-managed prebuilt templates (those whose name starts\nwith `prebuilt_`). The public API refuses updates and deletes for\nthese, so the UI should render them as read-only."},"kind":{"type":["string","null"],"description":"Template kind: \"custom\" (default) or \"content\". Absent on write means\n\"unspecified\" — create defaults to custom, update preserves the\nstored kind (sticky-kind rule, design §6.2)."},"name":{"type":"string"},"title":{"type":"string"},"type":{"$ref":"#/components/schemas/DestinationType","description":"Indicates whether the body is\nhttp or email body"}}},"TemplatePreviewResponse":{"type":"object","required":["payload","preview_model","unknown_variables","empty_variables","variables","variable_groups"],"properties":{"empty_variables":{"type":"array","items":{"type":"string"},"description":"Variables the draft uses that render blank in the previewed kind's sample."},"payload":{"description":"The real wire payload (raw tab)."},"preview_model":{"$ref":"#/components/schemas/PreviewModel","description":"FE card rendering schema."},"unknown_variables":{"type":"array","items":{"type":"string"}},"variable_groups":{"type":"array","items":{"$ref":"#/components/schemas/VariableGroup"},"description":"`common` and one group per kind whose producer renders templates in this release."},"variables":{"type":"array","items":{"type":"string"},"description":"Every variable a template of the requested kind can use."}}},"TestModelMatchRequest":{"type":"object","description":"Request body for the test-model-match endpoint.","properties":{"attributes":{"type":"object","description":"Optional span attributes (e.g. {\"openai.response.service_tier\": \"flex\"}) for tier rules.","additionalProperties":{"type":"object"},"propertyNames":{"type":"string"}},"match_pattern":{"type":["string","null"],"description":"An unsaved rule pattern to preview. When set, the response lists in `captured_models`\nevery known model this pattern would price if it were saved in this org. The\n`model_name` test is unaffected and still runs against the saved rules."},"model_name":{"type":"string","description":"The model name to test (e.g. \"gpt-4o\", \"claude-opus-3-5\"). Empty skips the single-name\ntest, e.g. when only previewing `match_pattern`."},"rule_id":{"type":["string","null"],"description":"Id of the rule being edited. It is left out of the preview, so its saved pattern does\nnot compete with the edited one."},"timestamp":{"type":["integer","null"],"format":"int64","description":"Optional span timestamp in microseconds. When provided, only definitions\nwhose `valid_from` <= timestamp are considered, and tiers restricted to\nrecurring UTC time-of-day windows (peak / off-peak) are resolved against it."},"usage":{"type":"object","description":"Optional token counts keyed by usage type (e.g. {\"input\": 1000, \"output\": 500}).\nWhen provided, cost is calculated using the matched pricing definition.","additionalProperties":{"type":"integer","format":"int64"},"propertyNames":{"type":"string"}}}},"TestModelMatchResponse":{"type":"object","description":"Response for the test-model-match endpoint.","required":["costs","total_cost","captured_models"],"properties":{"captured_models":{"type":"array","items":{"$ref":"#/components/schemas/CapturedModel"},"description":"The known models the previewed `match_pattern` would price, the model the pattern names\nfirst. Empty when no pattern was sent."},"costs":{"type":"object","description":"Per-usage-key costs (excluding \"total\").","additionalProperties":{"type":"number","format":"double"},"propertyNames":{"type":"string"}},"match_kind":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PricingMatchKind","description":"How the matched pattern covers the model name: `exact` when it matches the whole name,\n`approximate` when the name continues before or after the match (the price may belong\nto a different model). Null if nothing matched."}]},"matched":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ModelPricingDefinition","description":"The matched pricing definition, or null if no definition matched."}]},"tier":{"type":["string","null"],"description":"The name of the selected pricing tier, or null if no definition matched."},"tier_index":{"type":["integer","null"],"description":"Index of the selected tier in `matched.tiers`, which stays unambiguous when names repeat.","minimum":0},"total_cost":{"type":"number","format":"double","description":"Sum of all per-key costs."}}},"TestPageRequest":{"type":"object","description":"Priorities page differently, so the caller has to say which ladder to prove.","properties":{"priority":{"type":"integer","format":"int32","description":"Defaults to P2, the highest priority whose ladder starts with one person, not everyone."}}},"TestRunRowResultBody":{"type":"object","required":["rowId","input","status","rawRequest","rawResponse","latencyMs","attempts"],"properties":{"attempts":{"type":"integer","format":"int32","description":"Attempts the registered retry policy took. A bench runs the same policy\na real Slot would, so this is how a reader sees a retried sample.","minimum":0},"error":{"type":["string","null"]},"httpStatus":{"type":["integer","null"],"format":"int32","minimum":0},"input":{},"latencyMs":{"type":"integer","format":"int64"},"parsedOutput":{},"rawRequest":{"type":"string"},"rawResponse":{"type":"string"},"rowId":{"type":"string"},"status":{"type":"string"}}},"TestRunSampleBody":{"type":"object","description":"One sample a test run should try: a hand-entered input or a Dataset row the\ncaller already resolved.","required":["input"],"properties":{"input":{},"metadata":{},"rowId":{"type":["string","null"],"description":"A stable handle to line a result back up with its input. A Dataset row\nid, or a caller-chosen label for a hand-entered sample."}},"additionalProperties":false},"TestVRLRequest":{"type":"object","required":["function","events"],"properties":{"events":{"type":"array","items":{}},"function":{"type":"string"},"trans_type":{"type":["integer","null"],"format":"int32","minimum":0}}},"TestVRLResponse":{"type":"object","required":["results"],"properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/VRLResult"}}}},"ThreadQuestion":{"type":"object","description":"A question the agent asked the responders.","required":["question_id","question","need"],"properties":{"answered_at":{"type":["integer","null"],"format":"int64","description":"µs: when that answer reached the session."},"answered_by":{"type":["string","null"],"description":"The author of the first answer to it."},"at":{"type":["integer","null"],"format":"int64","description":"µs."},"hypothesis_id":{"type":["string","null"]},"need":{"type":"string"},"question":{"type":"string"},"question_id":{"type":"string","description":"The `ask_responders` call's `callID`."}}},"ThreadStart":{"type":"object","required":["prompt"],"properties":{"at":{"type":["integer","null"],"format":"int64","description":"Microseconds."},"prompt":{"type":"string"}}},"ThreadStats":{"type":"object","required":["steps","tool_calls","duration_ms","tokens"],"properties":{"duration_ms":{"type":"integer","format":"int64"},"steps":{"type":"integer","format":"int32","minimum":0},"tokens":{"$ref":"#/components/schemas/ThreadTokens"},"tool_calls":{"type":"integer","format":"int32","minimum":0}}},"ThreadStep":{"type":"object","required":["index","title","note_truncated","citations","from_steering","tool_calls"],"properties":{"citations":{"type":"array","items":{"type":"string"}},"ended_at":{"type":["integer","null"],"format":"int64","description":"`null` while this is the open step of a live run."},"from_steering":{"type":"boolean","description":"The first step that starts after the agent read a steering message."},"index":{"type":"integer","format":"int32","description":"1-based.","minimum":0},"note":{"type":["string","null"]},"note_truncated":{"type":"boolean"},"stage":{"type":["string","null"],"description":"`null` for tool calls made before the first `record_step`."},"started_at":{"type":["integer","null"],"format":"int64"},"title":{"type":"string"},"tool_calls":{"type":"array","items":{"$ref":"#/components/schemas/ThreadToolCall"}}}},"ThreadTokens":{"type":"object","required":["input","output","reasoning","cache_read"],"properties":{"cache_read":{"type":"integer","format":"int64","minimum":0},"input":{"type":"integer","format":"int64","minimum":0},"output":{"type":"integer","format":"int64","minimum":0},"reasoning":{"type":"integer","format":"int64","minimum":0}}},"ThreadToolCall":{"type":"object","required":["call_id","tool","status","interrupted"],"properties":{"call_id":{"type":"string"},"duration_ms":{"type":["integer","null"],"format":"int64"},"error":{"type":["string","null"]},"input":{"type":["object","null"],"description":"Only with the org setting `ai_rca_thread_tool_output`."},"interrupted":{"type":"boolean"},"key_arg":{"type":["string","null"]},"output":{"type":["string","null"],"description":"Only with the org setting `ai_rca_thread_tool_output`; at most 16 KB."},"result_summary":{"type":["string","null"]},"started_at":{"type":["integer","null"],"format":"int64"},"status":{"$ref":"#/components/schemas/ToolCallStatus"},"tool":{"type":"string"}}},"ThreadUserMessage":{"type":"object","required":["text"],"properties":{"at":{"type":["integer","null"],"format":"int64"},"author":{"type":["string","null"],"description":"The responder's email."},"kind":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SteerKind"}]},"question_id":{"type":["string","null"],"description":"The question an answer replies to."},"read_at":{"type":["integer","null"],"format":"int64","description":"µs: when the agent read the message."},"steer_id":{"type":["string","null"]},"text":{"type":"string"}}},"ThresholdStep":{"type":"object","properties":{"color":{"type":["string","null"],"default":null},"value":{"type":["number","null"],"format":"double","default":null}}},"Thresholds":{"type":"object","properties":{"baseColor":{"type":["string","null"],"default":null},"mode":{"type":["string","null"],"default":null},"showAs":{"type":["string","null"],"default":null},"steps":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ThresholdStep"},"default":null}}},"TierCondition":{"type":"object","description":"Condition for a pricing tier.","properties":{"operator":{"oneOf":[{"$ref":"#/components/schemas/TierOperator","description":"Comparison operator"}],"default":"gt"},"usage_key":{"type":"string","description":"The usage key to evaluate (e.g., \"input\")","default":""},"value":{"type":"number","format":"double","description":"Threshold value (e.g., 200000 for extended context pricing)","default":0.0}}},"TierOperator":{"type":"string","description":"Comparison operators for tier conditions.","enum":["gt","gte","lt","lte","eq","neq"]},"TierRule":{"type":"object","description":"A rule on a span attribute; `keys` are tried in order and the first present one is compared.","properties":{"keys":{"type":"array","items":{"type":"string"},"description":"Attribute keys tried in order; compared ignoring case and `_`/`-`/`.` separators.","default":[]},"op":{"oneOf":[{"$ref":"#/components/schemas/RuleOp","description":"Comparison operator; one this build does not know parses as `unknown` and never matches."}],"default":"in"},"value":{"type":["number","null"],"format":"double","description":"Threshold for the numeric operators.","default":null},"values":{"type":"array","items":{"type":"string"},"description":"Accepted values for `in` / `not_in`, compared trimmed and case-insensitively.","default":[]}}},"TimeRange":{"type":"object","required":["start","end"],"properties":{"end":{"type":"integer","format":"int64","description":"End timestamp in microseconds"},"start":{"type":"integer","format":"int64","description":"Start timestamp in microseconds"}}},"TimeRangePolicy":{"type":"object","description":"The ranges a link offers; with more than one, viewers can switch between them.","required":["ranges","default"],"properties":{"default":{"$ref":"#/components/schemas/PublicDashboardTimeRange"},"ranges":{"type":"array","items":{"$ref":"#/components/schemas/PublicDashboardTimeRange"}}}},"TimeRangeResult":{"type":"object","required":["status"],"properties":{"partial":{"type":"boolean","description":"True when the scan timed out while expanding this found range, so the\nrange is a lower bound of the real one; retry may extend it."},"range":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TraceTimeRange"}]},"session_id":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/TimeRangeStatus"},"stream":{"type":["string","null"]},"trace_id":{"type":["string","null"]}}},"TimeRangeStatus":{"type":"string","description":"Per-key lookup verdict. `NotFound` means the searched bounds were fully\nscanned without a hit; `Timeout` means the scan gave up, so the key may\nstill exist.","enum":["found","not_found","timeout"]},"TimeShift":{"type":"object","properties":{"offSet":{"type":["string","null"],"default":null}}},"TimeWindow":{"type":"object","description":"Microseconds.","required":["start","end"],"properties":{"end":{"type":"integer","format":"int64"},"start":{"type":"integer","format":"int64"}}},"TimedAnnotation":{"type":"object","properties":{"annotation_id":{"type":["string","null"],"default":null},"end_time":{"type":["integer","null"],"format":"int64","default":null},"panels":{"type":"array","items":{"type":"string"},"default":[]},"start_time":{"type":"integer","format":"int64","default":0},"tags":{"type":"array","items":{"type":"string"},"default":[]},"text":{"type":["string","null"],"default":null},"title":{"type":"string","default":""}}},"TimedAnnotationDelete":{"type":"object","required":["annotation_ids"],"properties":{"annotation_ids":{"type":"array","items":{"type":"string"}}}},"TimedAnnotationReq":{"type":"object","required":["timed_annotations"],"properties":{"timed_annotations":{"type":"array","items":{"$ref":"#/components/schemas/TimedAnnotation"}}}},"TimedAnnotationUpdate":{"type":"object","properties":{"end_time":{"type":["integer","null"],"format":"int64"},"panels":{"type":["array","null"],"items":{"type":"string"}},"start_time":{"type":["integer","null"],"format":"int64"},"tags":{"type":["array","null"],"items":{"type":"string"}},"text":{"type":["string","null"]},"title":{"type":["string","null"]}}},"TimelineView":{"type":"string","description":"How a timeline entry shows.","enum":["confirmed","refuted","likely","unverified"]},"TokenExchangeResponseBody":{"type":"object","required":["access_token","token_type","expires_in","issued_token_type"],"properties":{"access_token":{"type":"string"},"expires_in":{"type":"integer","format":"int64","minimum":0},"issued_token_type":{"type":"string"},"token_type":{"type":"string"}}},"TokenExchangeType":{"type":"string","enum":["AccessToken","IdToken"]},"TokenList":{"type":"object","required":["total","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/EnrollmentToken"}},"total":{"type":"integer","minimum":0}}},"ToolCallStatus":{"type":"string","enum":["ok","error","running"]},"ToolsetKind":{"type":"string","description":"The type of AI toolset integration.","enum":["mcp","cli","skill","generic"]},"ToolsetListResponse":{"type":"object","description":"Response body for the list endpoint.","required":["toolsets"],"properties":{"toolsets":{"type":"array","items":{"$ref":"#/components/schemas/ToolsetResponse"}}}},"ToolsetResponse":{"type":"object","description":"Single toolset as returned by the API.\n\nAlways construct via [`ToolsetResponse::from_toolset`] to ensure sensitive\ncredential values are redacted before the response leaves the server.","required":["id","org","name","kind","created_by","created_at","updated_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"created_by":{"type":"string"},"data":{"description":"Kind-specific JSON config with sensitive values redacted."},"description":{"type":["string","null"]},"id":{"type":"string"},"kind":{"$ref":"#/components/schemas/ToolsetKind"},"name":{"type":"string"},"org":{"type":"string"},"updated_at":{"type":"integer","format":"int64"}}},"TopologyMeta":{"type":"object","description":"The v4 job's progress and unresolved counts behind a topology response.","required":["source","unresolved"],"properties":{"degraded":{"type":"array","items":{"type":"string"},"description":"Non-essential queries that failed and were read as empty."},"processed_up_to":{"type":["integer","null"],"format":"int64","description":"Seconds; max over the org's trace streams."},"source":{"type":"string","description":"Always \"v4\"; kept so the response shape does not change."},"unresolved":{"$ref":"#/components/schemas/UnresolvedCounts"}}},"TraceDetailsCursor":{"type":"object","description":"Keyset cursor; `start_time` is a string because 19-digit ns lose precision as JSON numbers.","required":["start_time","span_id"],"properties":{"span_id":{"type":"string"},"start_time":{"type":"string"}}},"TraceDetailsResponse":{"allOf":[{"$ref":"#/components/schemas/SearchResponse"},{"type":"object","required":["has_more"],"properties":{"has_more":{"type":"boolean","description":"More spans follow this page."},"next_after":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TraceDetailsCursor","description":"Send back as `after_start_time` and `after_span_id` to fetch the next page."}]}}}]},"TraceTimeRange":{"type":"object","required":["start_time","end_time"],"properties":{"end_time":{"type":"integer","format":"int64"},"start_time":{"type":"integer","format":"int64"}}},"TraceTimeRangeResponse":{"type":"object","required":["stream","results"],"properties":{"partial_coverage":{"type":"boolean"},"range":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TraceTimeRange","description":"Legacy single-id field; always null for multi-id requests."}]},"results":{"type":"array","items":{"$ref":"#/components/schemas/TimeRangeResult"}},"searched_range":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/TraceTimeRange"}]},"session_id":{"type":["string","null"]},"stream":{"type":"string"},"trace_id":{"type":["string","null"]}}},"Transcript":{"type":"string","description":"Whether the run's chat transcript can be read.","enum":["available","expired","none"]},"Transform":{"type":"object","required":["function"],"properties":{"function":{"type":"string"},"name":{"type":"string"},"numArgs":{"type":"integer","format":"int32","minimum":0},"params":{"type":"string"},"streams":{"type":["array","null"],"items":{"$ref":"#/components/schemas/StreamOrder"}},"transType":{"type":["integer","null"],"format":"int32","minimum":0}}},"TranslatedStack":{"type":"object","required":["error","stack"],"properties":{"error":{"type":"string"},"stack":{"type":"array","items":{"$ref":"#/components/schemas/TranslatedStackLine"}}}},"TranslatedStackLine":{"type":"object","required":["line"],"properties":{"line":{"type":"string"},"source_info":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SourceData"}]}}},"Trellis":{"type":"object","properties":{"group_by_y_axis":{"type":["boolean","null"],"default":null},"layout":{"type":["string","null"],"default":null},"num_of_columns":{"type":"integer","format":"int64","default":0}}},"TriggerCondition":{"type":"object","properties":{"align_time":{"type":"boolean","default":false},"cron":{"type":"string","default":""},"frequency":{"type":"integer","format":"int64","description":"(seconds)","default":0},"frequency_type":{"oneOf":[{"$ref":"#/components/schemas/FrequencyType"}],"default":"minutes"},"notify_on_warning":{"type":["boolean","null"],"description":"Whether a Warning-level match delivers a notification (D11).\n`None` = true — warnings notify unless explicitly opted out.\nPersisted in `trigger_thresholds`.","default":null},"operator":{"oneOf":[{"$ref":"#/components/schemas/Operator"}],"default":"="},"period":{"type":"integer","format":"int64","description":"(minutes)","default":0},"silence":{"type":"integer","format":"int64","description":"(minutes)","default":0},"threshold":{"type":"integer","format":"int64","default":0},"timezone":{"type":["string","null"],"default":null},"tolerance_in_secs":{"type":["integer","null"],"format":"int64","description":"(seconds)","default":null},"warning_threshold":{"type":["integer","null"],"format":"int64","description":"Warning threshold, sharing `operator` with `threshold` — one operator\nfor both levels, no mixed directions (T-2). `None` = single-level\nalert, i.e. exactly the legacy behaviour.\nValidated by `level::validate_thresholds` — \"less severe\" is\ndirection-dependent, so this is NOT simply `< threshold`.","default":null}}},"TriggerRcaBody":{"type":"object","description":"Optional body of `POST …/rca`: guidance for the new run. Unknown fields are refused.","properties":{"guidance":{"type":["string","null"],"description":"What the responder wants this analysis to look at; 1 to 2000 characters."}},"additionalProperties":false},"TriggerStatus":{"type":"object","required":["healthy","failed","warning"],"properties":{"failed":{"type":"integer","format":"int64"},"healthy":{"type":"integer","format":"int64"},"warning":{"type":"integer","format":"int64"}}},"UnackRequest":{"type":"object","properties":{"firing_started_at":{"type":["integer","null"],"format":"int64","default":null},"group_key":{"type":"string","default":""}}},"UnackResponse":{"type":"object","required":["changed"],"properties":{"ack":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AckView"}]},"changed":{"type":"boolean"}}},"Unavailability":{"type":"object","description":"One stretch during which a person is not to be given a shift.\n\nOrg-wide, not per team: being on holiday is a fact about a person, and\nsomebody on two teams is away from both. Per team, the window has to be\nwritten twice, and forgetting the second is the exact failure this prevents\n— a page landing on somebody who is on a beach.\n\nAbsolute micros, like an override. Recurrence is a calendar feature, and a\nschedule that guesses which Fridays somebody meant guesses wrong at 3am.","required":["id","org_id","user_email","start_at","end_at","created_by","created_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"created_by":{"type":"string"},"end_at":{"type":"integer","format":"int64","description":"Exclusive, matching every other boundary here: the end instant already\nbelongs to the shift they are back for."},"id":{"type":"string"},"org_id":{"type":"string"},"reason":{"type":["string","null"]},"start_at":{"type":"integer","format":"int64","description":"Inclusive."},"user_email":{"type":"string","description":"Whose absence. Email, because email is the login."}}},"UnpricedModel":{"allOf":[{"$ref":"#/components/schemas/UnpricedModelRow"},{"type":"object","required":["priced_now"],"properties":{"matched":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/UnpricedModelMatch","description":"Null when no definition matches the model today."}]},"priced_now":{"type":"boolean","description":"An exact definition covers new spans; these older spans retain their recorded cost."}}}]},"UnpricedModelMatch":{"type":"object","description":"The pricing definition a listed model resolves to today.","required":["name","match_pattern","source","tiers"],"properties":{"match_pattern":{"type":"string"},"name":{"type":"string"},"source":{"$ref":"#/components/schemas/PricingSource"},"tiers":{"type":"array","items":{"$ref":"#/components/schemas/PricingTierDefinition"}}}},"UnpricedModelRow":{"type":"object","description":"A model whose spans in the window were priced approximately or not at all.","required":["status","spans","tokens","cost","agents","agent_count"],"properties":{"agent_count":{"type":"integer","format":"int64","description":"Distinct agent names behind the row, including those past the cap."},"agents":{"type":"array","items":{"type":"string"},"description":"Up to [`MAX_AGENT_NAMES`] agent names that sent the model."},"cost":{"type":"number","format":"double","description":"Cost recorded at ingest (0 for unpriced spans)."},"model":{"type":["string","null"],"description":"Null for spans that carry no model name: they have tokens but nothing to price."},"spans":{"type":"integer","format":"int64"},"status":{"$ref":"#/components/schemas/CostStatus"},"tokens":{"type":"integer","format":"int64"}}},"UnpricedModelsResponse":{"type":"object","required":["models","model_count","tokens","models_truncated"],"properties":{"model_count":{"type":"integer","format":"int64","description":"Distinct models ingest marked in the window, uncapped and before today's prices are\napplied; spans without a model name count as one."},"models":{"type":"array","items":{"$ref":"#/components/schemas/UnpricedModel"},"description":"Models with recorded pricing gaps, including those priced since ingestion."},"models_truncated":{"type":"boolean","description":"The server listed only the models with the most tokens; `model_count` has them all."},"tokens":{"type":"integer","format":"int64","description":"Tokens on every span ingest marked in the window."}}},"UnresolvedCounts":{"type":"object","required":["no_peer","ip_only","ambiguous","cardinality"],"properties":{"ambiguous":{"type":"integer","format":"int64","minimum":0},"cardinality":{"type":"integer","format":"int64","minimum":0},"ip_only":{"type":"integer","format":"int64","minimum":0},"no_peer":{"type":"integer","format":"int64","minimum":0}}},"UnverifiedCitation":{"type":"object","description":"An evidence item that matches no successful tool call.","required":["hypothesis_id","evidence_id","tool","reason"],"properties":{"evidence_id":{"type":"string"},"hypothesis_id":{"type":"string"},"query":{"type":"string"},"reason":{"$ref":"#/components/schemas/UnverifiedReason"},"ref":{"type":["string","null"]},"tool":{"type":"string"}}},"UnverifiedReason":{"type":"string","enum":["not_run","failed","ambiguous"]},"UpdateAlertRequestBody":{"allOf":[{"oneOf":[{"type":"object","description":"Alert configuration for monitoring streams and triggering notifications.\n\nAn alert watches a stream (logs, metrics, or traces) using SQL or PromQL queries,\nand sends notifications to configured destinations when trigger conditions are met.","properties":{"context_attributes":{"type":["object","null"],"description":"Optional key-value attributes to include in alert notifications.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"creates_incident":{"type":"boolean","description":"When true, this alert routes notifications through the incident system\ninstead of sending direct alert notifications."},"description":{"type":"string","description":"Human-readable description of what this alert monitors.","example":"Fires when error count exceeds threshold in the specified time window"},"destinations":{"type":"array","items":{"type":"string"},"description":"List of destination names to notify when alert fires.\nDestinations must be pre-configured in the system.\nAccepts either `destinations` or `alert_destinations` as the JSON field name.","example":["slack-alerts","pagerduty"]},"enabled":{"type":"boolean","description":"Whether the alert is active. Disabled alerts are not evaluated."},"id":{"type":["string","null"],"description":"Unique identifier for the alert. Auto-generated on creation.","readOnly":true},"incident_title_template":{"type":["string","null"],"description":"Incident title template; the generated title is used when no variable resolves.","example":"{service_name} errors on {host}"},"is_real_time":{"type":"boolean","description":"If true, alert evaluates in real-time as data arrives.\nIf false, alert runs on a schedule defined by trigger_condition.frequency."},"keep_firing_for":{"type":"integer","format":"int64","description":"Seconds the condition must stay clear before the alert recovers.\n0 recovers on the first clear evaluation.","example":0},"last_edited_by":{"type":["string","null"],"description":"Username who last edited the alert.","readOnly":true},"last_satisfied_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of when alert condition was last satisfied.","readOnly":true},"last_triggered_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of when alert was last triggered.","readOnly":true},"name":{"type":"string","description":"Human-readable name for the alert. Must be unique within the organization.","example":"High Error Rate Alert"},"notify_on_recovery":{"type":"boolean","description":"Send one notification when this alert recovers; a multi-alert sends one per recovered\ngroup."},"oncall_team":{"type":["string","null"],"description":"On-call team (a team id) this alert pages, taking precedence over\nownership discovery. Omitted or `null` means \"work the owner out from the\nidentity dimensions\", which is the normal case.\n\nValidated at save against the on-call teams of the same org: a team id\nthat names nothing routes nowhere, and a page that routes nowhere is\nsilence rather than an error.\n\nSave is a full replace, like `tags` — sending the alert back without this\nfield clears the binding.","example":"2f9K3mXQpLrTgYw8vN1cBzHd0Ae"},"org_id":{"type":"string","description":"Organization ID. Usually set automatically from the request context."},"owner":{"type":["string","null"],"description":"Username of the alert owner."},"pending_period_sec":{"type":"integer","format":"int64","example":10},"priority":{"type":["integer","null"],"format":"int32","description":"Priority 1..=5 (P1 = most urgent), Feature 2 / PT-1.\n\nMutable configuration; display + propagation only — it does not affect\nwhen the alert fires. Omitted = unset.\n\n`value_type` is required because the enum serializes as an integer via\nserde `try_from`/`into`; without it the OpenAPI schema would advertise a\nstring enum and lie about the payload.","example":3,"minimum":0},"query_condition":{"$ref":"#/components/schemas/QueryCondition","description":"Query configuration: SQL query or PromQL expression to evaluate."},"recovery_destinations":{"type":"array","items":{"type":"string"},"description":"Where the recovery message goes. Empty = the firing's own destinations. Ticket closes are\nunaffected: a resolve must reach whatever the firing opened."},"row_template":{"type":"string","description":"Template for formatting individual rows in the alert message."},"row_template_type":{"$ref":"#/components/schemas/RowTemplateType","description":"Format type for the row template."},"runbook_url":{"type":["string","null"],"description":"Where the fix for this alert is written down.\n\nCopied onto every on-call response record the alert opens, so whoever is\nwoken is handed the link in the page instead of going to find it while\nthe thing is on fire.\n\nValidated at save: `http://` or `https://` with a host, or the save is\nrefused. A malformed link stored today is a dead click at 3am, and the\nmoment it is read is the worst possible moment to discover it.\n\nFull replace, like `oncall_team`.","example":"https://wiki.example.com/runbooks/checkout"},"scheduler_job_present":{"type":["boolean","null"],"description":"Whether a scheduler job exists for this alert (runtime status, not a\nstored field). Populated on the composite detail path; omitted otherwise.","readOnly":true},"stream_name":{"type":"string","description":"Name of the stream to monitor.","example":"default"},"stream_type":{"$ref":"#/components/schemas/StreamType","description":"Type of stream to monitor: logs, metrics, or traces."},"suppress_repeats":{"type":"boolean","description":"Notify once per state change instead of on every firing evaluation. Enterprise only."},"tags":{"type":"array","items":{"type":"string"},"description":"Selection tags (PT-6): `prod`, `service:checkout`. Normalized and\nvalidated on save; omitted when empty.","example":["prod","service:checkout"]},"template":{"type":["string","null"],"description":"Optional template name. When specified, this template is used for all\ndestinations instead of destination-level templates. This allows using\ndifferent templates for different alerts while reusing the same destinations."},"trigger_condition":{"$ref":"#/components/schemas/TriggerCondition","description":"Trigger configuration: when and how often to evaluate, thresholds."},"tz_offset":{"type":"integer","format":"int32","description":"Timezone offset in minutes. Negative values for western hemisphere."},"updated_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp of last modification.","readOnly":true},"workflows":{"type":"array","items":{"type":"string"},"description":"workflows to trigger when alert triggers","example":["abcde12345"]}}}],"description":"Alert configuration fields (used for scheduled/realtime alerts)."},{"type":"object","properties":{"alert_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/AlertTypeFilter","description":"Discriminates the alert type. When `\"anomaly_detection\"`, delegates to the\nanomaly config update path."}]},"anomaly_config":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/UpdateAnomalyAlertFields","description":"Anomaly-detection-specific fields to update (partial — only supplied fields\nare changed)."}]},"composite_condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/CompositeCondition","description":"Composite-only boolean condition over stable child alert IDs."}]}}}],"description":"HTTP request body for `UpdateAlert` endpoint.\n\nUpdates an existing alert. Provide the full alert configuration — this replaces\nthe existing alert entirely (not a partial update). The request body is the same\nstructure as Alert.\n\nFor anomaly detection configs, set `alert_type = \"anomaly_detection\"` and supply\nanomaly-specific fields directly at the top level (flat). Only fields present in\nthe request body will be updated (partial update semantics for anomaly fields)."},"UpdateAnomalyAlertFields":{"type":"object","description":"Anomaly-detection-specific fields for `UpdateAlertRequestBody` (all optional).","properties":{"alert_budget_per_day":{"type":["number","null"],"format":"double","description":"Absent leaves the stored budget; `null` clears it, back to the trained k."},"alert_direction":{"type":["string","null"],"description":"`both`, `above` or `below`; `null` clears to both."},"alert_enabled":{"type":["boolean","null"]},"alert_window_buckets":{"type":["integer","null"],"format":"int32","description":"Window-share length in buckets, at least 1 and at most 24h of buckets; `null` clears to 1."},"alert_window_fire_pct":{"type":["number","null"],"format":"double","description":"Percent of the window out of band that fires; `null` clears to 100."},"alert_window_recover_pct":{"type":["number","null"],"format":"double","description":"Out-of-band percent below which the window recovers; `null` clears to the fire percent."},"band_width":{"type":["number","null"],"format":"double","description":"Absent leaves the stored value, so pause/resume keeps it; `null` clears to auto."},"custom_sql":{"type":["string","null"]},"description":{"type":["string","null"]},"detection_function":{"type":["string","null"]},"detection_function_field":{"type":["string","null"],"description":"Field to aggregate. Combined with `detection_function` into \"avg(field)\" before saving."},"detection_window_seconds":{"type":["integer","null"],"format":"int64"},"enabled":{"type":["boolean","null"]},"filters":{},"folder_id":{"type":["string","null"],"description":"Moves the config to this folder. Naming a folder you cannot write to\nreturns 403; omit it to leave the config where it is."},"histogram_interval":{"type":["string","null"]},"level_half_width_seconds":{"type":["integer","null"],"format":"int64","description":"Accepted and stored, but ignored by the band model.","deprecated":true},"name":{"type":["string","null"]},"owner":{"type":["string","null"]},"percentile":{"type":["number","null"],"format":"double","description":"Legacy percentile; no longer selects the trained k outside budget mode. Alias `threshold`."},"query_mode":{"type":["string","null"]},"retrain_interval_days":{"type":["integer","null"],"format":"int32"},"schedule_interval":{"type":["string","null"]},"template":{"type":["string","null"],"description":"Absent leaves the stored template override; `null` or \"\" clears it."},"training_window_days":{"type":["integer","null"],"format":"int32"}}},"UpdateAnomalyConfigRequest":{"type":"object","description":"A new `query_mode`, `filters`, `custom_sql`, `detection_function` or `histogram_interval`\nresets the model, and detection pauses until retraining ends; an unchanged value does not.","properties":{"alert_budget_per_day":{"type":["number","null"],"format":"double","description":"Double-option like `priority`: `None` leaves the stored budget, `Some(None)` clears it\n(back to the trained k), `Some(Some(b))` sets it. A plain Option could never clear."},"alert_destinations":{"type":["array","null"],"items":{"type":"string"}},"alert_direction":{"type":["string","null"],"description":"`both`, `above` or `below`; `null` clears to both."},"alert_enabled":{"type":["boolean","null"]},"alert_window_buckets":{"type":["integer","null"],"format":"int32","description":"Window-share length in buckets, at least 1 and at most 24h of buckets; `null` clears to 1."},"alert_window_fire_pct":{"type":["number","null"],"format":"double","description":"Percent of the window out of band that fires; `null` clears to 100."},"alert_window_recover_pct":{"type":["number","null"],"format":"double","description":"Out-of-band percent below which the window recovers; `null` clears to the fire percent."},"band_width":{"type":["number","null"],"format":"double","description":"Double-option like the budget: `null` clears back to the trained k."},"custom_sql":{"type":["string","null"]},"description":{"type":["string","null"]},"detection_function":{"type":["string","null"]},"detection_function_field":{"type":["string","null"]},"detection_window_seconds":{"type":["integer","null"],"format":"int64","description":"At most 100,000 histogram buckets; a stored row over the limit runs clamped to it."},"enabled":{"type":["boolean","null"]},"filters":{},"folder_id":{"type":["string","null"]},"histogram_interval":{"type":["string","null"]},"level_half_width_seconds":{"type":["integer","null"],"format":"int64","description":"Accepted and stored, but ignored by the band model.","deprecated":true},"name":{"type":["string","null"]},"owner":{"type":["string","null"]},"percentile":{"type":["number","null"],"format":"double","description":"Legacy, read back as `threshold` for read-modify-write; k trains at p99, within 3 to 6."},"priority":{"type":["integer","null"],"format":"int32","description":"Double-option so \"absent\" and \"explicit null\" stay distinguishable\n(same shape as `TimedAnnotationUpdate::end_time`):\n  * `None`             — field not supplied, leave the stored value\n  * `Some(None)`       — clear the priority\n  * `Some(Some(p))`    — set it\n\nA plain `Option` cannot express \"clear\", which made priority the only\nfield on an anomaly config that could be set but never unset — and\ninconsistent with alerts, where clearing works.","example":3,"minimum":0},"query_mode":{"type":["string","null"]},"retrain_interval_days":{"type":["integer","null"],"format":"int32"},"schedule_interval":{"type":["string","null"],"description":"At least 1 minute; a stored row below it runs every minute."},"tags":{"type":["array","null"],"items":{"type":"string"},"description":"`None` leaves stored tags untouched; `Some(vec![])` clears them."},"template":{"type":["string","null"],"description":"Absent leaves the stored override; null or \"\" clears it."},"training_window_days":{"type":["integer","null"],"format":"int32","description":"At most 3,000,000 histogram buckets; a stored row over the limit trains clamped to it."}}},"UpdateFolderRequestBody":{"$ref":"#/components/schemas/Folder","description":"HTTP request body for `UpdateFolder` endpoint."},"UpdateFunctionAnswer":{"anyOf":[{"$ref":"#/components/schemas/Transform"},{"$ref":"#/components/schemas/HttpResponse"}]},"UpdateFunnel":{"type":"object","required":["name","def","sql","version"],"properties":{"def":{"$ref":"#/components/schemas/FunnelDef"},"description":{"type":["string","null"]},"name":{"type":"string"},"rules_hash":{"type":["string","null"],"description":"The `rulesHash` of the settings `sql` was compiled with."},"sql":{"type":"string"},"version":{"type":"integer","format":"int32"}},"additionalProperties":false},"UpdateIntegrationPayload":{"type":"object","description":"PATCH payload for updating an integration's name and/or destinations.\nBoth fields are optional — only the fields present are updated.","properties":{"destinations":{"type":["array","null"],"items":{"type":"string"}},"name":{"type":["string","null"]}}},"UpdateNamedEvent":{"type":"object","required":["name","rules","version"],"properties":{"name":{"type":"string"},"rules":{"type":"array","items":{"$ref":"#/components/schemas/Rule"}},"version":{"type":"integer","format":"int32","description":"The edit counter the caller read; a different stored one is a `version_conflict`."}},"additionalProperties":false},"UpdateNoticeRequest":{"type":"object","description":"Partial edit of a manual notice. `state`/`resolved_at` are the manual\nresolve path; auto-incidents are otherwise owned by the rebuilder and this\nmust not race it (the handler rejects editing state on an auto-sourced\nnotice — see R-4 in the design).","properties":{"body":{"type":["string","null"]},"component_ids":{"type":["array","null"],"items":{"type":"string"}},"impact":{"type":["integer","null"],"format":"int32"},"state":{"type":["integer","null"],"format":"int32","description":"0 scheduled, 1 active, 2 resolved."},"title":{"type":["string","null"]}}},"UpdatePageRequest":{"type":"object","properties":{"accent_color":{"type":["string","null"]},"brand_name":{"type":["string","null"]},"confirm_after_secs":{"type":["integer","null"],"format":"int32"},"confirm_failures":{"type":["integer","null"],"format":"int32"},"confirm_recovery":{"type":["integer","null"],"format":"int32"},"description":{"type":["string","null"]},"favicon_img":{"type":["string","null"],"description":"Base64-encoded browser-tab icon; gated like `logo_img`."},"logo_img":{"type":["string","null"],"description":"Base64-encoded image. Enterprise-gated on write (see\n`apply_logo_field`); an already-set logo keeps rendering under a\nlapsed license or an OSS build."},"name":{"type":["string","null"]},"noindex":{"type":["boolean","null"]},"password":{"type":["string","null"],"description":"Plaintext in; hashed at rest; never returned. Setting an empty string\nclears the password (visibility must then leave 2)."},"show_response_time":{"type":["boolean","null"]},"show_timeline_bars":{"type":["boolean","null"]},"show_uptime_percent":{"type":["boolean","null"]},"visibility":{"type":["integer","null"],"format":"int32","description":"0 draft, 1 public, 2 password."}}},"UpdatePayload":{"oneOf":[{"type":"object","description":"Update incident title","required":["title"],"properties":{"title":{"type":"string"}}},{"type":"object","description":"Update incident severity","required":["severity"],"properties":{"severity":{"$ref":"#/components/schemas/IncidentSeverity"}}},{"type":"object","description":"Update incident status","required":["status"],"properties":{"status":{"$ref":"#/components/schemas/IncidentStatus"}}}],"description":"One field per request; `deny_unknown_fields` rejects a payload that sends a second one."},"UpdateServiceAccountAnswer":{"anyOf":[{"$ref":"#/components/schemas/APIToken"},{"$ref":"#/components/schemas/HttpResponse"}]},"UpdateSettingsWrapper_CrossLink":{"type":"object","properties":{"add":{"type":"array","items":{"type":"object","description":"A cross-link entry for drill-down/navigation from log/trace records","required":["name","url"],"properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/CrossLinkField"},"description":"Show link only when at least one field matches the record.\nIf empty, the link is always shown."},"name":{"type":"string","description":"Display name for the link"},"url":{"type":"string","description":"URL template with {field_name} placeholders"}}}},"remove":{"type":"array","items":{"type":"object","description":"A cross-link entry for drill-down/navigation from log/trace records","required":["name","url"],"properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/CrossLinkField"},"description":"Show link only when at least one field matches the record.\nIf empty, the link is always shown."},"name":{"type":"string","description":"Display name for the link"},"url":{"type":"string","description":"URL template with {field_name} placeholders"}}}}}},"UpdateSettingsWrapper_PatternAssociation":{"type":"object","properties":{"add":{"type":"array","items":{"type":"object","required":["field","pattern_name","description","pattern","pattern_id","policy","apply_at"],"properties":{"apply_at":{"type":"string"},"description":{"type":"string"},"field":{"type":"string"},"pattern":{"type":"string"},"pattern_id":{"type":"string"},"pattern_name":{"type":"string"},"policy":{"type":"string"}}}},"remove":{"type":"array","items":{"type":"object","required":["field","pattern_name","description","pattern","pattern_id","policy","apply_at"],"properties":{"apply_at":{"type":"string"},"description":{"type":"string"},"field":{"type":"string"},"pattern":{"type":"string"},"pattern_id":{"type":"string"},"pattern_name":{"type":"string"},"policy":{"type":"string"}}}}}},"UpdateSettingsWrapper_StreamPartition":{"type":"object","properties":{"add":{"type":"array","items":{"type":"object","required":["field"],"properties":{"disabled":{"type":"boolean"},"field":{"type":"string"},"types":{"$ref":"#/components/schemas/StreamPartitionType"}}}},"remove":{"type":"array","items":{"type":"object","required":["field"],"properties":{"disabled":{"type":"boolean"},"field":{"type":"string"},"types":{"$ref":"#/components/schemas/StreamPartitionType"}}}}}},"UpdateSettingsWrapper_String":{"type":"object","properties":{"add":{"type":"array","items":{"type":"string"}},"remove":{"type":"array","items":{"type":"string"}}}},"UpdateSettingsWrapper_TimeRange":{"type":"object","properties":{"add":{"type":"array","items":{"type":"object","required":["start","end"],"properties":{"end":{"type":"integer","format":"int64","description":"End timestamp in microseconds"},"start":{"type":"integer","format":"int64","description":"Start timestamp in microseconds"}}}},"remove":{"type":"array","items":{"type":"object","required":["start","end"],"properties":{"end":{"type":"integer","format":"int64","description":"End timestamp in microseconds"},"start":{"type":"integer","format":"int64","description":"Start timestamp in microseconds"}}}}}},"UpdateStreamSettings":{"type":"object","properties":{"approx_partition":{"type":["boolean","null"]},"bloom_filter_fields":{"$ref":"#/components/schemas/UpdateSettingsWrapper_String"},"cross_links":{"$ref":"#/components/schemas/UpdateSettingsWrapper_CrossLink"},"data_retention":{"type":["integer","null"],"format":"int64"},"defined_schema_fields":{"$ref":"#/components/schemas/UpdateSettingsWrapper_String"},"distinct_value_fields":{"$ref":"#/components/schemas/UpdateSettingsWrapper_String"},"dynamic_partition":{"type":["boolean","null"],"description":"Whether the classifier decides the level; a value equal to the env's follows the env."},"enable_distinct_fields":{"type":["boolean","null"]},"enable_log_patterns_extraction":{"type":["boolean","null"]},"extended_retention_days":{"$ref":"#/components/schemas/UpdateSettingsWrapper_TimeRange"},"flatten_level":{"type":["integer","null"],"format":"int64"},"full_text_search_keys":{"$ref":"#/components/schemas/UpdateSettingsWrapper_String"},"index_all_values":{"type":["boolean","null"]},"index_fields":{"$ref":"#/components/schemas/UpdateSettingsWrapper_String"},"index_original_data":{"type":["boolean","null"]},"is_llm_stream":{"type":["boolean","null"]},"max_query_range":{"type":["integer","null"],"format":"int64"},"partition_keys":{"$ref":"#/components/schemas/UpdateSettingsWrapper_StreamPartition"},"partition_time_level":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PartitionTimeLevel","description":"`hourly` or `daily`, accepted only while the stream's dynamic partition is off."}]},"pattern_associations":{"$ref":"#/components/schemas/UpdateSettingsWrapper_PatternAssociation"},"storage_type":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/StorageType"}]},"store_original_data":{"type":["boolean","null"]}}},"UpdateTeamRequest":{"type":"object","description":"A partial edit of a team: every field absent leaves that part alone.","properties":{"description":{"type":["string","null"],"description":"Needs `double_option`: `#[serde(default)]` decodes an explicit `null` to the outer `None`."},"name":{"type":["string","null"]},"timezone":{"type":["string","null"]}}},"UpdateUser":{"allOf":[{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/UserRoleRequest"}]},{"type":"object","properties":{"change_password":{"type":"boolean"},"first_name":{"type":["string","null"]},"last_name":{"type":["string","null"]},"new_password":{"type":["string","null"]},"old_password":{"type":["string","null"]},"remove_lockout":{"type":"boolean","description":"Releases an active failed-login lockout and resets the counters. Nothing else ends one\nearly — not even a password change, since the lock records attempts rather than the\npassword — and it is gated like a password reset by an administrator."},"token":{"type":["string","null"]}}}]},"UpdateViewRequest":{"type":"object","required":["data","view_name"],"properties":{"data":{"description":"Base64 encoded string, containing all the data for a given view.\nThis data is expected to be versioned so that the frontend can\ndeserialize as required."},"view_name":{"type":"string","description":"User-readable name of the view, must be unique within the organization."}}},"UpsertDatasetItemBody":{"type":"object","description":"One Dataset Case a client declares should exist.\n\nThe body is serialized back for the idempotency request hash, so every field\na client can vary has to round-trip through it.","required":["input"],"properties":{"expectedOutput":{},"ifRowId":{"type":["string","null"],"description":"The `rowId` the client read. Required when `logicalId` names an existing\nCase."},"input":{},"logicalId":{"type":["string","null"],"description":"Stable Dataset Case identity, at most 27 characters. Omit to append a new\nCase with a server-generated identity.","maxLength":27},"metadata":{},"restore":{"type":"boolean","description":"Bring a soft-deleted Case back instead of conflicting on it."},"tags":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"UpsertOutcomeBody":{"type":"string","enum":["created","updated","restored","unchanged"]},"UpsertedDatasetItemBody":{"type":"object","required":["logicalId","rowId","globalVersion","outcome"],"properties":{"globalVersion":{"type":"integer","format":"int64"},"logicalId":{"type":"string"},"outcome":{"$ref":"#/components/schemas/UpsertOutcomeBody"},"rowId":{"type":"string"}}},"UptimeWindows":{"type":"object","properties":{"d1":{"type":["number","null"],"format":"double"},"d30":{"type":["number","null"],"format":"double"},"d7":{"type":["number","null"],"format":"double"},"d90":{"type":["number","null"],"format":"double"}}},"UsageCounts":{"type":"object","description":"How many objects of each kind read one metric, counted as `MetricUsage` lists them.","required":["dashboards","alerts","slos","pipelines"],"properties":{"alerts":{"type":"integer","minimum":0},"dashboards":{"type":"integer","minimum":0},"pipelines":{"type":"integer","minimum":0},"slos":{"type":"integer","minimum":0}}},"UsageResult":{"type":"object","required":["ts","value"],"properties":{"ts":{"type":"string"},"value":{"type":"number","format":"double"}}},"UsedBy":{"type":"object","description":"Where a template is referenced (Data section 2, GET template).","required":["destinations","alerts","anomaly","synthetics","on_call","composites"],"properties":{"alerts":{"type":"integer","minimum":0},"anomaly":{"type":"integer","minimum":0},"composites":{"type":"integer","minimum":0},"destinations":{"type":"integer","minimum":0},"on_call":{"type":"integer","minimum":0},"synthetics":{"type":"integer","minimum":0}}},"UserDetailsResponse":{"allOf":[{"$ref":"#/components/schemas/UserResponse"},{"type":"object","required":["lockout"],"properties":{"lockout":{"$ref":"#/components/schemas/LockoutState"}}}],"description":"One organization member, as the list endpoint reports them, plus their lockout state.\n\nThe counters are an administrator's view and must not be handed to the user they describe:\nsomeone who can read the escalation level and the remaining seconds can derive the thresholds\nbehind them and pace attempts to stay underneath."},"UserInvite":{"type":"object","required":["org_name","org_id","inviter_id","token","role","status","expires_at"],"properties":{"expires_at":{"type":"integer","format":"int64"},"inviter_id":{"type":"string"},"org_id":{"type":"string"},"org_name":{"type":"string"},"role":{"type":"string"},"status":{"$ref":"#/components/schemas/InviteStatus"},"token":{"type":"string"}}},"UserInviteList":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/UserInvite"}}}},"UserList":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/UserResponse"}}}},"UserOrgRole":{"type":"object","required":["role"],"properties":{"custom_role":{"type":["array","null"],"items":{"type":"string"}},"role":{"$ref":"#/components/schemas/UserRole"}}},"UserResponse":{"type":"object","required":["email","role","created_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"description":{"type":["string","null"],"description":"Human-readable description of what this account is used for."},"email":{"type":"string"},"first_name":{"type":"string"},"is_external":{"type":"boolean"},"is_system":{"type":"boolean","description":"True when this account is a system-managed service account.\nThe UI should display \"System Managed\" for the role instead of the raw role string."},"last_name":{"type":"string"},"orgs":{"type":["array","null"],"items":{"$ref":"#/components/schemas/OrgRoleMapping"}},"role":{"type":"string"},"token":{"type":["string","null"]}}},"UserRole":{"type":"string","enum":["root","admin","editor","viewer","user","service_account","sre_agent"]},"UserRoleRequest":{"type":"object","required":["role"],"properties":{"custom_role":{"type":["array","null"],"items":{"type":"string"}},"role":{"type":"string"}}},"UtcTimeWindow":{"type":"object","description":"A recurring UTC time-of-day window during which a pricing tier applies.\n\nBounds are minutes since UTC midnight and the range is half-open:\n`[start_minute, end_minute)`. A window whose `start_minute` is greater than its\n`end_minute` wraps past midnight (e.g. `990 -> 30` is 16:30–00:30 UTC). Equal\nbounds are rejected on write — leave `utc_windows` empty for an always-on tier.","properties":{"end_minute":{"type":"integer","format":"int32","description":"Exclusive end, minutes since UTC midnight (0–1440).","default":0,"minimum":0},"start_minute":{"type":"integer","format":"int32","description":"Inclusive start, minutes since UTC midnight (0–1440).","default":0,"minimum":0}}},"VRLResult":{"type":"object","required":["message","event"],"properties":{"event":{},"message":{"type":"string"}}},"ValidateRequest":{"type":"object","required":["yaml"],"properties":{"yaml":{"type":"string"}}},"ValidationFailed":{"type":"object","required":["code","message","issues"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"issues":{"$ref":"#/components/schemas/BTreeMap"},"message":{"type":"string"}}},"ValidationResult":{"type":"object","required":["issues"],"properties":{"issues":{"$ref":"#/components/schemas/BTreeMap"}}},"ValueSuggestion":{"type":"object","required":["value","source","items"],"properties":{"items":{"type":"integer","description":"Alerts, anomaly detections and SLOs whose identity carries this value.","minimum":0},"last_seen":{"type":["integer","null"],"format":"int64","description":"Newest sighting in microseconds, when a source knows one."},"source":{"type":"string","description":"`inventory`, `registry` or `search`."},"value":{"type":"string"}}},"ValuesRequest":{"type":"object","required":["key"],"properties":{"condition":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DimensionCondition","description":"The condition typed so far; only its And-spine pairs narrow the sources."}]},"key":{"type":"string","description":"A semantic group id, as `refine_by` in `ResourcesRequest`."},"prefix":{"type":"string","description":"Case-insensitive prefix; empty lists the top values."}}},"ValuesResponse":{"type":"object","required":["values","partial"],"properties":{"partial":{"type":"boolean","description":"True when a source timed out; the list is what answered in time."},"values":{"type":"array","items":{"$ref":"#/components/schemas/ValueSuggestion"}}}},"VariableGroup":{"type":"object","description":"One group of the variable guide: `common`, or a kind whose producer renders templates.","required":["name","variables"],"properties":{"name":{"type":"string"},"variables":{"type":"array","items":{"type":"string"}}}},"VariableList":{"type":"object","properties":{"customMultiSelectValue":{"type":["array","null"],"items":{"type":"string"},"default":null},"dateFormat":{"type":["string","null"],"description":"A date variable's output when its placeholder names no format: `iso`, `dmy`, `mdy`,\n`epoch`, `epochms` or `epochus`; `iso` when unset.","default":null},"escapeSingleQuotes":{"type":["boolean","null"],"default":null},"hideOnDashboard":{"type":["boolean","null"],"default":null},"label":{"type":"string","default":""},"multiSelect":{"type":["boolean","null"],"default":null},"name":{"type":"string","default":""},"options":{"type":["array","null"],"items":{"$ref":"#/components/schemas/CustomFieldsOption"},"default":null},"panels":{"type":["array","null"],"items":{"type":"string"},"default":null},"query_data":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/QueryData"}],"default":null},"scope":{"type":["string","null"],"default":null},"selectAllValueForMultiSelect":{"type":["string","null"],"default":null},"tabs":{"type":["array","null"],"items":{"type":"string"},"default":null},"type":{"type":"string","default":""},"value":{"type":["string","null"],"default":null}}},"VariableValueView":{"oneOf":[{"type":"object","required":["value","kind"],"properties":{"has_value":{"type":"boolean"},"kind":{"type":"string","enum":["plain"]},"value":{"type":"string"}}},{"type":"object","description":"Write-only: presence is all a client ever learns.","required":["has_value","kind"],"properties":{"has_value":{"type":"boolean"},"kind":{"type":"string","enum":["secret"]}}}],"description":"A variable's value as a read path may carry it."},"Variables":{"type":"object","properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/VariableList"},"default":[]},"showDynamicFilters":{"type":["boolean","null"],"default":null}}},"VerdictSoFar":{"type":"object","description":"\"Verdict so far\" of a live run.","required":["label"],"properties":{"label":{"$ref":"#/components/schemas/VerdictSoFarLabel"},"was":{"type":["string","null"],"description":"Revised: the statement that led before the current one."}}},"VerdictSoFarLabel":{"type":"string","enum":["preliminary","revised"]},"VerificationReportBody":{"type":"object","description":"The raw exchange a test connection produced, shown to the operator whether\nit passed or failed.","required":["rawRequest","rawResponse","latencyMs"],"properties":{"latencyMs":{"type":"integer","format":"int64"},"parsedOutput":{},"rawRequest":{"type":"string"},"rawResponse":{"type":"string"},"statusCode":{"type":["integer","null"],"format":"int32","minimum":0}}},"VersionCount":{"type":"object","required":["version","count"],"properties":{"count":{"type":"integer","minimum":0},"version":{"type":"string"}}},"VersionState":{"type":"string","enum":["published","rolling_out"]},"View":{"type":"object","required":["org_id","data","view_id","view_name"],"properties":{"data":{},"org_id":{"type":"string"},"view_id":{"type":"string"},"view_name":{"type":"string"},"view_type":{"type":["string","null"]}}},"ViewOp":{"type":"string","enum":["eq","prefix","regex","param","ref"]},"ViewWithoutData":{"type":"object","description":"Save the bandwidth for a given view, without sending the actual data\nThis is expected to be used for listing views.","required":["org_id","view_id","view_name"],"properties":{"org_id":{"type":"string"},"view_id":{"type":"string"},"view_name":{"type":"string"},"view_type":{"type":["string","null"]}}},"ViewsWithoutData":{"type":"object","required":["views"],"properties":{"views":{"type":"array","items":{"$ref":"#/components/schemas/ViewWithoutData"}}}},"WithheldPanel":{"type":"object","description":"A panel the result file masks on every serve, and why.","required":["panel_id","reason"],"properties":{"panel_id":{"type":"string"},"reason":{"$ref":"#/components/schemas/NotAvailableReason"}}},"WorkflowAssociation":{"type":"object","required":["id","org_id","entity_id","entity_type","workflow_id","trigger_type","created_at"],"properties":{"created_at":{"type":"integer","format":"int64"},"entity_id":{"type":"string"},"entity_type":{"type":"string"},"id":{"type":"integer","format":"int32"},"org_id":{"type":"string"},"trigger_type":{"type":"string"},"workflow_id":{"type":"string"}}},"WorkflowError":{"type":"object","required":["node_id","error"],"properties":{"error":{"type":"array","items":{"type":"string"}},"node_id":{"type":"string"}}},"WorkflowErrorResponse":{"type":"object","properties":{"data":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/InputMap"}]},"errors":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/WorkflowRunErrors"}]}}},"WorkflowHistoryRow":{"type":"object","required":["_timestamp","org","start_time","end_time","evaluation_took_in_secs","source_node","key"],"properties":{"_timestamp":{"type":"integer","format":"int64"},"end_time":{"type":"integer","format":"int64"},"error":{"type":["string","null"]},"evaluation_took_in_secs":{"type":"number","format":"double"},"event_type":{"$ref":"#/components/schemas/WorkflowTriggerType"},"http_request":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/HttpRequestFacts"}]},"key":{"type":"string"},"org":{"type":"string"},"run_id":{"type":"string"},"source_id":{"type":"string"},"source_node":{"type":"string"},"start_time":{"type":"integer","format":"int64"},"status":{"type":["string","null"]}}},"WorkflowListItem":{"type":"object","required":["associations","id","org_id","created_at","updated_at","created_by","enabled","name","description","nodes","edges","is_draft"],"properties":{"associations":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowAssociation"}},"created_at":{"type":"integer","format":"int64"},"created_by":{"type":"string"},"description":{"type":"string"},"edges":{"type":"array","items":{"$ref":"#/components/schemas/Edge"}},"enabled":{"type":"boolean"},"folder_id":{"type":["string","null"],"description":"Owning folder's URL slug; null when the folder no longer resolves."},"folder_name":{"type":["string","null"],"description":"Display name of the owning folder."},"id":{"type":"string"},"is_draft":{"type":"boolean"},"name":{"type":"string"},"nodes":{"type":"array","items":{"$ref":"#/components/schemas/Node"}},"org_id":{"type":"string"},"updated_at":{"type":"integer","format":"int64"}}},"WorkflowRunErrors":{"type":"object","required":["id","cluster","org_id","workflow_id","run_id","ran_at","data"],"properties":{"cluster":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowError"}},"id":{"type":"integer","format":"int32"},"input_data":{"type":["string","null"]},"org_id":{"type":"string"},"ran_at":{"type":"integer","format":"int64"},"run_id":{"type":"string"},"workflow_id":{"type":"string"}}},"WorkflowTestResult":{"type":"object","required":["errors","inputs","outputs"],"properties":{"errors":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/NodeErrors"},"propertyNames":{"type":"string"}},"inputs":{"type":"object","additionalProperties":{"type":"array","items":{}},"propertyNames":{"type":"string"}},"outputs":{"type":"object","additionalProperties":{"type":"array","items":{}},"propertyNames":{"type":"string"}}}},"WorkflowTriggerResponse":{"allOf":[{"$ref":"#/components/schemas/HttpResponse"},{"type":"object","required":["run_id"],"properties":{"run_id":{"type":"string"}}}]},"WorkflowTriggerType":{"type":"string","enum":["AlertFired","AlertResolved","IncidentEvent","Webhook","Manual","Test","Retry","Unknown"]},"ZoFunction":{"type":"object","required":["name","text"],"properties":{"name":{"type":"string"},"text":{"type":"string"}}}},"securitySchemes":{"Authorization":{"type":"apiKey","in":"header","name":"Authorization"},"BasicAuth":{"type":"http","scheme":"basic"},"FirehoseAccessKey":{"type":"apiKey","in":"header","name":"X-Amz-Firehose-Access-Key","description":"base64 of user:password"},"GcpApiKey":{"type":"apiKey","in":"query","name":"API-Key","description":"base64 of user:password"}}},"tags":[{"name":"Meta","description":"Meta details about the OpenObserve state itself. e.g. healthz"},{"name":"Auth","description":"User login authentication"},{"name":"Logs","description":"Logs data ingestion operations"},{"name":"Dashboards","description":"Dashboard operations"},{"name":"Search","description":"Search/Query operations"},{"name":"Saved Views","description":"Collection of saved search views for easy retrieval"},{"name":"Query History","description":"The caller's own query history"},{"name":"Alerts","description":"Alerts retrieval & management operations"},{"name":"Incidents","description":"Alert incident correlation & management operations"},{"name":"AI","description":"AI agent chat analysis and SRE agent operations (enterprise)"},{"name":"Functions","description":"Functions retrieval & management operations"},{"name":"Organizations","description":"Organizations retrieval & management operations"},{"name":"Streams","description":"Stream retrieval & management operations"},{"name":"Users","description":"Users retrieval & management operations"},{"name":"KV","description":"Key Value retrieval & management operations"},{"name":"Product Analytics","description":"RUM Product Analytics named events and saved funnels"},{"name":"Metrics","description":"Metrics data ingestion operations"},{"name":"Traces","description":"Traces data ingestion operations"},{"name":"Profiles","description":"Profiles query and discovery operations"},{"name":"Clusters","description":"Super cluster operations"},{"name":"Short Url","description":"Short Url Service"},{"name":"Ratelimit","description":"Ratelimit operations"},{"name":"Patterns","description":"Log pattern extraction operations (enterprise)"},{"name":"Service Streams","description":"Multi-signal correlation across logs, traces, and metrics (enterprise)"},{"name":"Synthetics","description":"Synthetic monitoring — uptime and browser checks (enterprise)"},{"name":"Slack","description":"Slack app install, workspace connections and settings (enterprise)"},{"name":"Downtimes","description":"Scheduled windows that keep evaluating alerts, anomaly detections, synthetics checks and SLOs but notify nobody (enterprise)"},{"name":"Fleet","description":"Fleet Manager: OpAMP collector inventory (enterprise)"},{"name":"Announcements","description":"Operator-authored announcement banners shown across organizations (enterprise)"},{"name":"Alert Calibration","description":"Per-org alert calibration settings and on-demand runs (enterprise)"},{"name":"Anomaly Detection","description":"Anomaly detection configs, model training and detection history (enterprise)"},{"name":"Workflows","description":"Workflow authoring, drafts, runs and run history (enterprise)"},{"name":"AWS Marketplace","description":"AWS Marketplace subscription linking (cloud)"},{"name":"AnnotationQueues","description":"Annotation queues for human review of LLM traces (enterprise)"},{"name":"Annotations","description":"Annotations on traces and spans (enterprise)"},{"name":"Azure Marketplace","description":"Azure Marketplace subscription linking (cloud)"},{"name":"Billings","description":"Subscriptions, invoices and billing groups (cloud)"},{"name":"Datasets","description":"LLM evaluation datasets (enterprise)"},{"name":"Discovery","description":"Discovery of LLM evaluation entities (enterprise)"},{"name":"Domain Management","description":"Allowed email domains for sign-in (enterprise)"},{"name":"EvalJobs","description":"Online evaluation jobs (enterprise)"},{"name":"Experiments","description":"LLM evaluation experiments (enterprise)"},{"name":"GenAI Settings","description":"GenAI agent mapping, the agent list and AI data health"},{"name":"Groups","description":"User group management"},{"name":"Keys","description":"Cipher key management (enterprise)"},{"name":"LLM","description":"LLM model pricing definitions"},{"name":"License","description":"License management (enterprise)"},{"name":"MCP","description":"Model Context Protocol server"},{"name":"OnCall","description":"On-call teams, schedules, routing and pages (enterprise)"},{"name":"Pipelines","description":"Pipeline management"},{"name":"Providers","description":"LLM provider configuration (enterprise)"},{"name":"Public Dashboards","description":"Public links to dashboards"},{"name":"RePattern","description":"Regular expression patterns for sensitive data redaction (enterprise)"},{"name":"Reports","description":"Report management"},{"name":"Resources","description":"Resources available for role permissions"},{"name":"Roles","description":"Role management"},{"name":"Sample Data","description":"Sample data state for the onboarding tour"},{"name":"ScoreConfigs","description":"Score configurations for LLM evaluation (enterprise)"},{"name":"Scorers","description":"LLM evaluation scorers (enterprise)"},{"name":"ServiceAccounts","description":"Service account management"},{"name":"Sourcemaps","description":"Source map upload and stack trace translation"},{"name":"Status Pages","description":"Public status pages, notices and custom domains"},{"name":"Templates","description":"Alert notification templates"},{"name":"SLOs","description":"Service level objectives and their alert previews"},{"name":"Folders","description":"Folders that group dashboards, alerts and other resources"},{"name":"GenAI Settings","description":"Gen-AI agent registry and agent mapping settings"},{"name":"Ingestion","description":"Ingestion diagnostics such as recently rejected records"},{"name":"Search Jobs","description":"Asynchronous search jobs and their results"},{"name":"Rum","description":"Real user monitoring data ingestion"},{"name":"Playground","description":"LLM playground runs, scores and shared snapshots (enterprise)"},{"name":"Prompts","description":"Versioned LLM prompts and their labels (enterprise)"},{"name":"RemoteTasks","description":"Remote tasks, their drafts, secrets and signing keys (enterprise)"}]}