Changelog
Sep 2, 2026
- Preview (experimental). Added two optional geomap field-config variants,
ibmRegionConfigandallRegionConfig, to the dashboard payload. Both are published at the preview stability tier and carryx-stability: previewin the OpenAPI document: they are usable and documented, but experimental. Preview elements are not covered by the backward-compatibility guarantee — they may change shape, be renamed, or be withdrawn in any release, and such a change is not announced as breaking. Do not depend on them in production integrations until they are promoted to stable, which will be its own changelog entry. They join the existingcoordinateConfigandawsRegionConfigas alternatives in the geomapconfigobject atdashboard.layout.sections[].rows[].widgets[].definition.dynamic.visualization.geomap.config, which accepts exactly one of the four.ibmRegionConfigtakes aregionFieldwhose data returns IBM Cloud region strings (e.g.us-south,eu-de);allRegionConfigtakes aregionFieldwhose data returns region strings from any supported cloud provider, aggregating every provider's regions. Non-breaking; additive — omitting both leaves existing geomap behaviour unchanged. The two variants are reachable across the dashboards REST API as follows:- Request bodies:
POST /dashboards/dashboards/v1(create) andPUT /dashboards/dashboards/v1(replace) accept either variant inside thedashboardobject, andPOST /dashboards/check/v1(validate) accepts them in thedashboardobject it validates. None of these three returns a dashboard payload, so neither field appears in their response bodies. - Response bodies: both variants appear in the
dashboardobject returned byGET /dashboards/dashboards/v1/{dashboard_id}(get) andGET /dashboards/dashboards/v1/slugs/lookup/{slug}(get by URL slug). OnGET /dashboards/dashboards/v1/{dashboard_id}they additionally appear in each entry of theresolvedWidgetsmap, atresolvedWidgets.{widgetId}.definition.dynamic.visualization.geomap.config.
- Request bodies:
- New endpoint
GET /aaa/identity/v1/whoamiresolves the identity behind the credentials used to call the API. It takes no parameters — the identity is derived entirely from theAuthorizationheader — and returns the required integerteamIdand stringteamNamealways, plus the optional stringteamUrlwhen the team has a web-app URL slug configured and the optional stringusernamewhen the caller authenticates as a user. Authenticating with an API key resolves a team but no user, sousernameis absent in that case. Documented responses are401for missing or invalid credentials,404when the authenticated team no longer exists, and500. Non-breaking; new surface. - Team groups can now be created and updated by role name as an alternative to
roleId. OnPOST /aaa/team-groups/v2the request body accepts an optional stringroleName(1-255 characters). OnPUT /aaa/team-groups/v2/{group_id}theroleUpdate.actiononeOf accepts a newsetRoleByNamebranch, selected withactionType: "set_role_by_name"alongside the existingset_role_idandclear; the branch is an object with a single required string propertyvalue(1-255 characters), i.e.{"actionType": "set_role_by_name", "setRoleByName": {"value": "Platform Admin"}}. Names resolve against the team's own custom roles plus the global built-in roles, matching is case-insensitive, and the response reports the resolved role's id and canonical name. On create,roleNameandroleIdare mutually exclusive and setting both is rejected. An unmatched name returns400, and so does a name matching more than one role in the team, with the colliding role ids named in the message rather than one being silently picked. Non-breaking; additive, androleIdremains the canonical form and the only one used in responses. POST /aaa/teams/v2/{team_id}/membersnow returns a per-user result instead of an empty body. The response gainsresults, an array of objects with one entry per requested user in request order. Each entry carries the required stringusername, echoing the request so callers can join on it rather than on position, and the enumstatus; where the outcome produced them it also carries the integeruserAccountIdand the stringuserId, plus the stringmessagefor outcomes a status alone cannot explain. Onlyusernameis required by the schema, so treat the others as optional. Thestatusenum gainsCREATE_USER_STATUS_ALREADY_INVITED,CREATE_USER_STATUS_DOMAIN_NOT_ALLOWED, andCREATE_USER_STATUS_FAILED, so its full set of accepted wire values is nowCREATE_USER_STATUS_UNSPECIFIED,CREATE_USER_STATUS_CREATED,CREATE_USER_STATUS_ALREADY_EXISTS,CREATE_USER_STATUS_INVITED,CREATE_USER_STATUS_ALREADY_INVITED,CREATE_USER_STATUS_DOMAIN_NOT_ALLOWED, andCREATE_USER_STATUS_FAILED. Non-breaking; additive — the response schema previously declared no properties, so callers reading only the status code are unaffected. Note the operation is not atomic: the request is validated before anything is written, but a failure occurring after writing has begun leaves already-created entries in place and returns a non-OK status with no body.
Sep 1, 2026
- Corrected the request body schema for
POSTandPUT /aaa/teams/v2/{team_id}/members. The body is now a top-level array of user objects instead of one user object. OpenAPI does not mark the request body as required. When sent, the body must use the array form required by the runtime. This is a breaking schema correction for clients generated from the previous OpenAPI document. - The OpenAPI document now declares
openapi: 3.1.0(was3.0.0), and schema-levelexamplevalues are emitted asexamplesarrays (JSON Schema 2020-12). Non-breaking at the schema level, but consumers whose OpenAPI tooling only supports 3.0 must upgrade to 3.1-capable tooling to process the document.
Aug 27, 2026
POST /dataplans/policies/v1,PUT /dataplans/log-policies/v1,PUT /dataplans/span-policies/v1, andPUT /dataplans/rum-policies/v1now document a429 Too Many Requestsresponse, returned when the request would exceed the team's maximum number of policies for that data type (logs, spans, or RUM). The response body is the standard error object (code: 429,message: string). To resolve it, request a limit increase or reduce the number of policies. This replaces the400previously returned for this case onPOST /dataplans/policies/v1— breaking for callers that key on400to detect the limit; the overwrite endpoints previously did not report this condition.- Added an
INCIDENT_IOvalue to the notification-centerConnectorTypestring enum, which now holdsCONNECTOR_TYPE_UNSPECIFIED,SLACK,GENERIC_HTTPS,PAGERDUTY,IBM_EVENT_NOTIFICATIONS,SERVICE_NOW,EMAIL,PAGERDUTY_INCIDENTS,MICROSOFT_TEAMS,EVENTBRIDGE, andINCIDENT_IO. Non-breaking; additive. The enum is reachable across the notification-center REST API as follows:- Connectors: the
typefield accepts it in the request and response bodies ofPOST /notifications/notification-center/v1/connectors(create) andPUT /notifications/notification-center/v1/connectors(replace); it also appears in the response body ofGET /notifications/notification-center/v1/connectors(list),GET /notifications/notification-center/v1/connectors/{id}(get), andGET /notifications/notification-center/v1/connectors/all/list(batch-get). Theconnector_typequery parameter onGET /notifications/notification-center/v1/connectorsalso accepts it. The request body'stypefield onPOST /notifications/notification-center/v1/connectors:testConfigaccepts it too. - Connector summaries: the
typefield appears in the response body ofGET /notifications/notification-center/v1/connectors/all/summariesandGET /notifications/notification-center/v1/connectors/list/summaries; theconnector_typequery parameter on the latter also accepts it. - Connector types: the
typefield appears in the response body ofGET /notifications/notification-center/v1/connectors/types/summaries, and both thetypequery parameter and the response body'stypefield onGET /notifications/notification-center/v1/connector-schemasaccept/return it. - Presets: the
connectorTypefield accepts it in the request body, and appears in the response body, ofPOST /notifications/notification-center/v1/presets:createCustom(create custom) andPUT /notifications/notification-center/v1/presets:replaceCustom(replace custom); it also appears in the response body ofGET /notifications/notification-center/v1/presets(batch-get) andGET /notifications/notification-center/v1/presets/{id}(get). Theconnector_typequery parameter, and the returned preset summary'sconnectorTypefield, onGET /notifications/notification-center/v1/presets/summaries/system(system default summary),GET /notifications/notification-center/v1/presets:getDefaultSummary(default summary), andGET /notifications/notification-center/v1/presets:summariesList(list summaries) also accept/return it.
- Connectors: the
- Renamed the OpenAPI tag on
POST /dataplan/data-usage/v1/queryandGET /dataplan/data-usage/v1/capabilitiesfromData Usage Query servicetoData Usage Query Service. Docs grouping only; no path, HTTP method, request, or response change. Non-breaking. - Deprecated: the v2 data usage endpoints are now marked deprecated and are no longer published in the API reference. They continue to be served exactly as before — no path, HTTP method, request body, response shape, field name, or field type changes, and existing integrations keep working — but they are no longer documented, and new integrations should not adopt them. The deprecated operations are
GET /dataplans/data-usage/v2,GET /dataplans/data-usage/v2/spans/count,GET /dataplans/data-usage/v2/logs/count,POST /dataplans/data-usage/v2/daily/units,POST /dataplans/data-usage/v2/daily/processed-gbs,POST /dataplans/data-usage/v2/daily/evaluation-tokens, and bothGETandPOST /dataplans/data-usage/v2/export-status.- Replacement for usage queries:
POST /dataplan/data-usage/v1/query(note the singulardataplanin the new path) returns billable data usage aggregated into daily or hourly buckets, with filtering and grouping by supported labels. UseGET /dataplan/data-usage/v1/capabilitiesto discover the labels, measurement kinds, units, and per-request limits it accepts before submitting a query. Between them these cover the six usage-reading operations above; the v1 query response is bucket-first and is not shaped like the v2 responses, so callers need to map fields rather than swap the path. - No replacement yet for export status:
GETandPOST /dataplans/data-usage/v2/export-statushave no v1 equivalent. They remain available and keep working; callers relying on them should not migrate yet. - No removal date is set, and nothing is being switched off by this change.
- Replacement for usage queries:
- The dashboard API now rejects a spans-query
fieldValuevariable source that has bothobservationField(an object) andvalue(an object) set simultaneously. Both fields live atdashboard.variablesV2[].source.query.spansQuery.type.fieldValuein the request bodies. Previously at least one of the two had to be set, and setting both was silently accepted (the extra field ignored); the API now returns a validation error when both are present, so exactly one of the two must be set. The deprecatedvaluefield (legacy span-field addressing) remains accepted when used alone;observationFieldremains accepted alone and is the preferred field. This is a breaking change for callers that were sending both fields together — they must dropvalueand send onlyobservationField. Affected request bodies:POST /dashboards/dashboards/v1,PUT /dashboards/dashboards/v1, andPOST /dashboards/check/v1(which carries the dashboard in the samedashboardfield); clients can verify the object shapes of both fields from that path in the OpenAPI spec.
v5.0.6 — Aug 12, 2026
- Added new comparison values to the alert threshold enums in the alert-definition payload. Non-breaking; additive. The values are reachable across the alerts REST API as follows:
- Request bodies:
POST /alerts/alerts/v3(create),PUT /alerts/alerts/v3(replace),POST /alerts/alerts/v3/all/create(batch-create), andPUT /alerts/alerts/v3/all/replace(batch-replace). - Response bodies: in the
alertDefobject ofPOST /alerts/alerts/v3,PUT /alerts/alerts/v3,GET /alerts/alerts/v3/{id}, andGET /alerts/alerts/v3/version-ids/{alert_version_id}; and in thealertDefsarray ofGET /alerts/alerts/v3(list),POST /alerts/alerts/v3/all/create, andPUT /alerts/alerts/v3/all/replace. - The metric threshold
conditionTypestring enum gainsMETRIC_THRESHOLD_CONDITION_TYPE_EQUALSandMETRIC_THRESHOLD_CONDITION_TYPE_NOT_EQUALS; it now holdsMETRIC_THRESHOLD_CONDITION_TYPE_MORE_THAN_OR_UNSPECIFIED,METRIC_THRESHOLD_CONDITION_TYPE_LESS_THAN,METRIC_THRESHOLD_CONDITION_TYPE_MORE_THAN_OR_EQUALS,METRIC_THRESHOLD_CONDITION_TYPE_LESS_THAN_OR_EQUALS,METRIC_THRESHOLD_CONDITION_TYPE_EQUALS, andMETRIC_THRESHOLD_CONDITION_TYPE_NOT_EQUALS. - The logs threshold
conditionTypestring enum gainsLOGS_THRESHOLD_CONDITION_TYPE_EQUALSandLOGS_THRESHOLD_CONDITION_TYPE_NOT_EQUALS; it now holdsLOGS_THRESHOLD_CONDITION_TYPE_MORE_THAN_OR_UNSPECIFIED,LOGS_THRESHOLD_CONDITION_TYPE_LESS_THAN,LOGS_THRESHOLD_CONDITION_TYPE_EQUALS, andLOGS_THRESHOLD_CONDITION_TYPE_NOT_EQUALS. - The analytics threshold
operatorstring enum gainsANALYTICS_THRESHOLD_OPERATOR_NOT_EQUALS; it now holdsANALYTICS_THRESHOLD_OPERATOR_MORE_THAN_OR_UNSPECIFIED,ANALYTICS_THRESHOLD_OPERATOR_LESS_THAN,ANALYTICS_THRESHOLD_OPERATOR_MORE_THAN_OR_EQUALS,ANALYTICS_THRESHOLD_OPERATOR_LESS_THAN_OR_EQUALS,ANALYTICS_THRESHOLD_OPERATOR_EQUALS, andANALYTICS_THRESHOLD_OPERATOR_NOT_EQUALS.
- Request bodies:
- Added an optional
customDataprimeQueriesarray of strings to alert indicators in the Cases REST API response payload. It appears atcase.caseIndicators.alertIndicators[].customDataprimeQueriesin the responses ofPUT /cases/acknowledged/v1/{id},DELETE /cases/acknowledged/v1/{id},POST /cases/assigned/v1/{id},DELETE /cases/assigned/v1/{id},GET /cases/cases/v1/{id},PUT /cases/cases/v1/{id},POST /cases/closed/v1/{id},POST /cases/indicators/v1/get,PUT /cases/priority-override/v1/{id},DELETE /cases/priority-override/v1/{id}, andPUT /cases/resolved/v1/{id}; and atcases[].caseIndicators.alertIndicators[].customDataprimeQueriesin the responses ofPOST /cases/acknowledged/v1,PUT /cases/assigned/v1,DELETE /cases/assigned/v1,POST /cases/cases/v1,POST /cases/closed/v1,POST /cases/priority-override/v1,DELETE /cases/priority-override/v1, andPOST /cases/resolved/v1. The array holds up to 1000 entries, each a custom DataPrime query string configured on the alert definition and up to 65535 characters long. Non-breaking; additive. - Added an
EVENTBRIDGEvalue to the notification-centerConnectorTypestring enum, which now holdsCONNECTOR_TYPE_UNSPECIFIED,SLACK,GENERIC_HTTPS,PAGERDUTY,IBM_EVENT_NOTIFICATIONS,SERVICE_NOW,EMAIL,PAGERDUTY_INCIDENTS,MICROSOFT_TEAMS, andEVENTBRIDGE. Non-breaking; additive. The enum is reachable across the notification-center REST API as follows:- Connectors: the
typefield accepts it in the request and response bodies ofPOST /notifications/notification-center/v1/connectors(create),PUT /notifications/notification-center/v1/connectors(replace),POST /notifications/notification-center/v1/connectors:initialize, andPOST /notifications/notification-center/v1/connectors:initializeUpdate; it also appears in the response body ofGET /notifications/notification-center/v1/connectors(list),GET /notifications/notification-center/v1/connectors/{id}(get), andGET /notifications/notification-center/v1/connectors/all/list(batch-get). Theconnector_typequery parameter onGET /notifications/notification-center/v1/connectorsalso accepts it. The request body'stypefield onPOST /notifications/notification-center/v1/connectors:testConfigaccepts it too. - Connector summaries: the
typefield appears in the response body ofGET /notifications/notification-center/v1/connectors/{id}/summary,GET /notifications/notification-center/v1/connectors/all/summaries, andGET /notifications/notification-center/v1/connectors/list/summaries; theconnector_typequery parameter on the latter also accepts it. - Connector types: the
typefield appears in the response body ofGET /notifications/notification-center/v1/connectors/types/summaries, and both thetypequery parameter and the response body'stypefield onGET /notifications/notification-center/v1/connector-schemasaccept/return it. - Presets: the
connectorTypefield accepts it in the request body, and appears in the response body, ofPOST /notifications/notification-center/v1/presets:createCustom(create custom) andPUT /notifications/notification-center/v1/presets:replaceCustom(replace custom); it also appears in the response body ofGET /notifications/notification-center/v1/presets(batch-get) andGET /notifications/notification-center/v1/presets/{id}(get). Theconnector_typequery parameter, and the returned preset summary'sconnectorTypefield, onGET /notifications/notification-center/v1/presets/summaries/system(system default summary),GET /notifications/notification-center/v1/presets:getDefaultSummary(default summary), andGET /notifications/notification-center/v1/presets:summariesList(list summaries) also accept/return it.
- Connectors: the
- Documented the validation the incidents REST API already enforces, across
GETandPOST /incidents/incidents/v1,GET /incidents/incidents/v1/{id},GET /incidents/incidents/v1/{incident_id}/events,POST /incidents/incidents/v1/all/acknowledge,POST /incidents/incidents/v1/all/resolve,POST /incidents/incidents/v1/all/closed,POSTandDELETE /incidents/incidents/v1/all/by-user,GET /incidents/aggregations/v1,GET /incidents/events/v1,GET /incidents/events/v1/{event_id},POST /incidents/events/v1/{event_id}/acknowledge,POST /incidents/events/v1/{event_id}/resolve,GET /incidents/events/v1/all/count,POST /incidents/filter-values/v1, andGET /incidents/filter-values/v1/events. Strings gainedminLength/maxLength/pattern, integersminimum/maximum, and arraysminItems/maxItems. Values outside these bounds were already rejected, so this is non-breaking. By field:- Incident identifiers are UUID strings (
minLengthandmaxLength36, UUIDpattern, hex accepted in either case): theidpath parameter ofGET /incidents/incidents/v1/{id}, theincident_idpath parameter ofGET /incidents/incidents/v1/{incident_id}/events, theidsquery parameter ofGET /incidents/incidents/v1(array of 1–10000 items), theincidentIdsarray in the request bodies ofPOST /incidents/incidents/v1/all/acknowledge,POST /incidents/incidents/v1/all/resolve,POST /incidents/incidents/v1/all/closed, andPOST /incidents/incidents/v1/all/by-user(1–10000 items), theincident_idsquery parameter ofDELETE /incidents/incidents/v1/all/by-user(an array of 1–10000 items — that operation takes no request body), the responsenotFoundIdsarray (0–10000 items), and the incident payload'sid. - Incident payload — returned by
GETandPOST /incidents/incidents/v1,GET /incidents/incidents/v1/{id}, the four bulk operations (POST /incidents/incidents/v1/all/acknowledge,POST /incidents/incidents/v1/all/resolve,POST /incidents/incidents/v1/all/closed, andPOSTandDELETE /incidents/incidents/v1/all/by-user), and the event operationsGET /incidents/events/v1/{event_id},POST /incidents/events/v1/{event_id}/acknowledge, andPOST /incidents/events/v1/{event_id}/resolve:namestring 1–500;descriptionstring 1–2000;lastStateUpdateKeystring 1–2000;assignmentsarray ≤1000 items, each with auserIdstring 1–300;metaLabelsarray ≤1000 items, each withkeyandvaluestrings 1–255;eventsarray ≤10000 items;createdAt,closedAt, andlastStateUpdateTimestrings 20–30 characters. - Aggregation payload (
incidentAggs[]ofGET /incidents/aggregations/v1, which does not carry the incident payload):groupBysValue,aggStateCount,aggStatusCount,aggSeverityCount,aggAssignmentsCount, andaggMetaLabelsCountarrays ≤1000 items;listIncidentsIdarray ≤1000 UUID-string items;allValuesCountand each nestedcountinteger 0–1000000000;firstCreatedAt,lastClosedAt, andlastStateUpdateTimestrings 20–30 characters. - Pagination:
pageSizeinteger 1–10000 andpageTokenstring 1–4096, in thepaginationobject of thePOST /incidents/incidents/v1request body and of thepaginationquery parameter onGET /incidents/aggregations/v1andGET /incidents/events/v1; the responsepagination.nextPageTokenstring is 1–4096.GET /incidents/events/v1accepts at most 1000 items per page and defaults to 100 whenpageSizeis omitted — its operation description and the description of itspaginationparameter now say so, while the sharedpageSizeschema keepsmaximum: 10000because the other two operations do accept 10000. - Filters, ordering and search (
POST /incidents/incidents/v1,POST /incidents/filter-values/v1, thefilterquery parameter ofGET /incidents/aggregations/v1, andGET /incidents/events/v1):assigneearray ≤1000 items of strings 1–300;applicationNameandsubsystemNamearrays ≤1000 items of strings 1–256;searchQuery.querystring 1–4096; the order-by/search field selector'sapplicationNameandsubsystemNamestrings 1–256; thecontextualLabelsanddisplayLabelsmaps'contextualLabelValuesanddisplayLabelValuesarrays hold ≤1000 items of strings 0–4096, and the filter-value responses'contextualLabelValueanddisplayLabelValueare strings 0–4096 — an empty label value is accepted, matching the empty values readable from the incident payload'scontextualLabels/displayLabelsmaps. - Response collections:
incidents(list and bulk responses) andincidentAggs(GET /incidents/aggregations/v1) arrays ≤10000 items, matching the maximum page size; the incident-eventsitemsarray ≤1000;countand the aggregation count fields integers 0–1000000000. The events totalcountonGET /incidents/events/v1/all/countis a numeric string of 1–20 characters. - Incident-event payload (
GET /incidents/events/v1,GET /incidents/events/v1/{event_id},POST /incidents/events/v1/{event_id}/acknowledge,POST /incidents/events/v1/{event_id}/resolve, andGET /incidents/incidents/v1/{incident_id}/events): eachitems[]entry'scxEventKeystring 1–4096 andincidentEvent.idstring 1–64; the extended metadata'salertIdstring 1–64,alertNamestring 1–4096,alertGroupByFieldsarray ≤100 items of strings 1–256, andalertLabelsarray ≤1000 items; the originator'suserIdstring 1–300 andsystemNamestring 1–256; and theincidentEventsarray ofGET /incidents/incidents/v1/{incident_id}/events≤10000 items. On the request side, theevent_idpath parameter is a string 1–64 onGET /incidents/events/v1/{event_id},POST /incidents/events/v1/{event_id}/acknowledge, andPOST /incidents/events/v1/{event_id}/resolve(event IDs are free-form, not UUIDs), and the event filter'snameis a string 1–500 onGET /incidents/events/v1,GET /incidents/events/v1/all/count, andGET /incidents/filter-values/v1/events. - Snooze event:
durationMinutesinteger 1–525960 anduserIdstring 1–300. - Filter, ordering and filter-value collections (
POST /incidents/incidents/v1,GET /incidents/aggregations/v1,POST /incidents/filter-values/v1,GET /incidents/filter-values/v1/events,GET /incidents/events/v1, andGET /incidents/events/v1/all/count): thestatus,state, andseverityfilter arrays hold ≤1000 items;orderBysandgroupBys≤100 items; the filter-value count arrays (assigneeWithCount,statusWithCount,stateWithCount,severityWithCount,metaLabelsWithCount, and the contextual- and display-labelvaluesWithCount) ≤1000 items; thecontextualLabelfield of a group-by, order-by, or search selector is a string 1–256; the contextual-label pair'sfieldNameis 1–256 andfieldValue0–4096; and the list response'stotalSizeis an integer 0–1000000000.
- Incident identifiers are UUID strings (
- Documented the validation the cases REST API already enforces, and corrected three bounds the spec had stated incorrectly. Strings gained
minLength/maxLength/patternand arraysminItems/maxItems. Non-breaking; the service already rejected values outside these bounds. UUID strings below are 36 characters with apatternthat accepts hex in either case. By payload:- Case payload — returned by
POST /cases/cases/v1(list),GETandPUT /cases/cases/v1/{id},POST /cases/indicators/v1/get, and the case-state operationsPOST /cases/acknowledged/v1,PUTandDELETE /cases/acknowledged/v1/{id},PUTandDELETE /cases/assigned/v1,POSTandDELETE /cases/assigned/v1/{id},POST /cases/closed/v1,POST /cases/closed/v1/{id},POST /cases/resolved/v1,PUT /cases/resolved/v1/{id},POSTandDELETE /cases/priority-override/v1, andPUTandDELETE /cases/priority-override/v1/{id}:titleis 1–512, previously documented as 4096;aiSummaryis 1–10000, previously documented as 4096, which understated what the service returns. - Update-case request (
PUT /cases/cases/v1/{id}):title1–512 andresolutionReason1–500, both previously documented as 4096. Requests above the real limits were already rejected, andaiSummaryvalues above 4096 were already being returned, so no working request or response changes behavior. - Case labels —
keyandvaluestrings 1–4096, in both directions. As a request input they appear atfilters.caseLabelsFilter.flatLabels[]ofPOST /cases/cases/v1(list) andPOST /cases/filter-values/v1, and in the indicator label settings ofPOST /cases/cases/case-settings/v1/configsandPATCH /cases/cases/case-settings/v1/configs/{id}. In responses they appear in the case payload'slabels,groupings[], andcaseIndicators.genericIndicators[].labels[]on the operations above, in theflatLabelsAggregation[].filterofPOST /cases/filter-values/v1, and in the settings payload of those two operations plusGET /cases/cases/case-settings/v1/configs/{id},GET /cases/cases/case-settings/v1/configs:getActive, andGET /cases/cases/case-settings/v1/configs:getSystemDefaults. On the case-settings operations the indicator settings'filteringConditionsarray also holds ≤1000 items. - Case events (
POST /cases/cases/v1/{case_id}/comments,GET /cases/cases/v1/{case_id}/events,GET /cases/events/v1/{event_id},PUT /cases/events/v1/{event_id}/comments):eventIda UUID string; the title-changed event'sfrom/to1–512 and the resolution-reason-changed event'sfrom/to1–500; commenttext(request) andunsafeText(response) 1–10000, withattachments≤100 items; a log attachment'slogIda UUID,logContent1–10000, andqueryLinkSuffix0–4096; a dashboard-widget attachment'scustomDashboardIdandwidgetId1–4096 with its ownqueryLinkSuffix0–4096; a file attachment'sfileIda UUID andfileName1–4096;assigneeUserIdandpreviousAssigneeUserIdUUID strings; Slack comment metadataworkspaceId,channelId,threadId,userId, anduserEmail1–256; the notification-sent event'snotificationRequestIda UUID withnotifications≤1000 items, each carrying atokenstring 1–4096; the notification-failed event'serror1–4096; and an unknown-assignee error'sunknownAssigneeEmail1–256. - Case-event actor (same four operations, at
event.actor): a user actor'sidis a UUID string; a Slack actor'sslackUserId,displayName, anduserEmailare strings 1–256 withcoralogixUserIda UUID; a ServiceNow actor'sid,username, anduserEmailare strings 1–256 withcoralogixUserIda UUID; an API-key actor'sidandnameare strings 1–256. event_idpath parameter — a UUID string onGET /cases/events/v1/{event_id}and onPUTandDELETE /cases/events/v1/{event_id}/comments.- Deep links (
GET /cases/cases/v1/{case_id}/deep-links):detailand each impacted entityurlare strings 1–2048,alertDefis 0–2048, andimpactedEntitiesholds ≤1000 items. Every alert-indicator deep-link URL variant underalertIndicatorsis likewise a string 1–2048:logs,metrics,rum,slo, andtracing. - Notification deliveries (
POST /cases/notifications/v1/deliveries): requestcaseIdsarray 1–1000 items of strings 1–64; responsenotificationDeliveriesandmatchedRoutersarrays ≤1000 items;attemptsarray ≤100 items;requestNotificationIda UUID string andtimestamp20–30 characters;connectorIdandrouterIdstrings 1–128 matching^[a-zA-Z0-9][a-zA-Z0-9_-]*$— the same shape the notification-center API documents for connector and router IDs, so custom (non-UUID) IDs stay valid;connectorNameandrouterNamestrings 1–256;evidenceUrl1–2048;errorMessage1–4096. - Whitespace-only values are rejected for the fields the service trims before checking they are non-empty:
title,resolutionReason,aiSummary, commenttextandunsafeText,logContent,fileName,customDashboardId,widgetId, and thefrom/toof the title-changed and resolution-reason-changed events. Theirpatternnow requires at least one non-whitespace character, so a value such as" "no longer validates — it was already rejected by the service. The service also applies the maximum length after trimming, which amaxLengthcannot express, so a value whose trimmed form fits may still exceed the documented maximum.
- Case payload — returned by
v5.0.5 — Aug 6, 2026
- Added an optional
resolveWithSignalboolean to alert indicators in the Cases REST API response payload. It appears atcase.caseIndicators.alertIndicators[].resolveWithSignalin the responses ofPUT /cases/acknowledged/v1/{id},DELETE /cases/acknowledged/v1/{id},POST /cases/assigned/v1/{id},DELETE /cases/assigned/v1/{id},GET /cases/cases/v1/{id},PUT /cases/cases/v1/{id},POST /cases/closed/v1/{id},POST /cases/indicators/v1/get,PUT /cases/priority-override/v1/{id},DELETE /cases/priority-override/v1/{id}, andPUT /cases/resolved/v1/{id}; and atcases[].caseIndicators.alertIndicators[].resolveWithSignalin the responses ofPOST /cases/acknowledged/v1,PUT /cases/assigned/v1,DELETE /cases/assigned/v1,POST /cases/cases/v1,POST /cases/closed/v1,POST /cases/priority-override/v1,DELETE /cases/priority-override/v1, andPOST /cases/resolved/v1.trueor omission means the case resolves together with the alert signal;falsemeans the case stays open for manual resolution. Non-breaking; additive. - Added an optional
pbacTruncatedboolean to the response body ofPOST /cases/cases/v1(list cases). It indicates whether the returned list was truncated because of PBAC (Policy-Based Access Control) restrictions, meaning the caller may not have access to every case matching the filters. Non-breaking; additive. - Added documented validation constraints on the Actions REST API (
GET,POST, andPUTon/actions/actions/v2,GETandDELETEon/actions/actions/v2/{id},POST /actions/order/v2, andPOST /actions/batch/v2). The actionnameis limited to 1–50 characters andurlto 32768 characters and must start withhttp://orhttps://(both matching the validation the service already enforces);descriptionanddpxlFilterallow up to 65535 characters;createdByup to 255. Actionidvalues (including theidpath parameter on get and delete) are documented as 36-character UUID strings. TheapplicationNamesandsubsystemNamesarrays declare up to 1000 items of up to 1024 characters each,urlFieldsup to 1000 items (each entry requires bothnameandrequired, unique byname), the batchrequestsarray up to 1000 items, and theactions/matchingResponsesresponse arrays up to 10000/1000 items. The integer map values ofprivateActionsOrderandsharedActionsOrderdeclare an explicit 0–4294967295 range. Documentation-only — the constraints describe validation the API already enforces. Non-breaking. - Added documented validation constraints on the enrichment-rules REST API (
GET,POST,PUT, andDELETEon/enrichment-rules/enrichment-rules/v1,PUT /enrichment-rules/enrichment-rules/v1/all,GET /enrichment-rules/enrichment-rules/v1/limit,GET /enrichment-rules/enrichment-rules/v1/settings,GET,POST, andPUTon/enrichment-rules/custom-enrichment-rules/v1,GETandDELETEon/enrichment-rules/custom-enrichment-rules/v1/{id}, andPOST /enrichment-rules/custom-enrichment-rules/v1/all/contents). String fields backed by stored columns —name,description,fieldName,enrichedFieldName, andfileName— are limited to 255 characters (the custom enrichmentnameadditionally accepts only letters, digits, and underscores) (name,fieldName, andenrichedFieldNamerequire at least 1 character). The file content fields allow up to 20971520 characters fortextualand 27962028 characters forbinary(base64 of the default 20 MiB file-size limit), and the fileextensionmust becsv(the only supported format). Integer fields such asid,version,fileSize,limit,used,enrichmentAmountLimit,enrichmentsInUse,rowLimit, andqueryOnlyRowLimitdeclare an explicit 0–2147483647 range. Arrays declareminItems/maxItemsbounds:requestEnrichmentsup to 100 items, theenrichment_idsdelete query parameter up to 1000,searchClausesandcustomEnrichmentsDataup to 1000,selectedColumnsup to 100 items of up to 1024 characters, and theenrichmentsresponse arrays up to 1000 (customEnrichmentsup to 30). Documentation-only — the constraints describe validation the API already enforces. Non-breaking. - Added documented validation constraints on the dataplans policies REST API (
GET,POST, andPUTon/dataplans/policies/v1,GETandDELETEon/dataplans/policies/v1/{id},POST /dataplans/policies/v1/all/reorder,POST /dataplans/policies/v1/all/test-policies,POST /dataplans/policies/v1/all/forecast-usage,PUT /dataplans/log-policies/v1,PUT /dataplans/span-policies/v1, andPUT /dataplans/rum-policies/v1). Policyidvalues (including theidpath parameter, reorderorders[].id, andarchiveRetention.id) are documented as 36-character UUID strings.nameanddescriptionare limited to 255 Latin-1 characters (pattern-enforced),tagNameto 255 characters and must start withtags., anddpxlExpression, rulename, andtagValueallow up to 65535 characters (rule values must be non-empty). The targetdatasetallows up to 512 characters. The policyorderinteger documents that negative values occur (range −2147483648 to 2147483647), while reorderorders[].orderrequires a positive value;companyIddeclares 0–2147483647 andusageTiers[].dailyQuotaPercentagedeclares its enforced 0–100 range. Arrays declareminItems/maxItemsbounds matching service limits:targetsup to 5 per policy,tagRulesup to 100,severitiesup to 6,usageTiersup to 3, overwritepoliciesup to 200 per source type (10000 for RUM), reorderordersup to 200,metaFieldsValuesListup to 50 (each field non-empty, up to 1024 characters), and the list responsepoliciesup to 30000. Documentation-only except where noted — the constraints describe validation the API already enforces. Non-breaking. - Message and enum fields across the Management API that previously appeared as a bare
$refnow keep their field-level OpenAPI metadata —description, and where annotated alsoexample,deprecated, andreadOnly— by wrapping the$refinallOf. The same metadata is kept on array fields whose items are a message or enum$ref. Non-breaking; documentation-only — request and response wire shapes are unchanged. - 10 query parameters that were documented as optional are now documented as required, so the spec matches what the services already enforce. Server behavior is unchanged — omitting any of these was already rejected. Affected parameters, with their JSON shapes:
ids, an array of strings:GET /aaa/team-scopes/v1andGET /slo/slos/v1/all/list(the latter is a batch-get by IDs, not a filtered list).enrichment_ids, an array ofint64integers:DELETE /enrichment-rules/enrichment-rules/v1.incident_ids, an array of strings:DELETE /incidents/incidents/v1/all/by-user.alert_ids, an array of strings, andtimestamp_range, an object withfromandto:GET /alerts/alerts/v3/all/events.filter, an object withcxEventKeys,cxEventLabelsFilters,cxEventMetadataFilters,cxEventTypes, andtimestamp:GET /alerts/events/v3,GET /alerts/events/v3/all/count,GET /alerts/events/v3/all/statistics.pagination, an object withpageSizeandpageToken:GET /alerts/events/v3.
- Added documented OpenAPI validation constraints across the integrations and extensions REST API (
GET,POST, andPUTon/integrations/contextual-data/v1;GETandDELETEon/integrations/contextual-data/v1/{id};GET /integrations/contextual-data/v1/definitions/{id};POST /integrations/contextual-data/v1/test/{integration_id};POST /integrations/extensions/v1;GET /integrations/extensions/v1/catalog/{id};GET,POST,PUT, andDELETEon/integrations/extensions/v1/deployed;GET /integrations/integrations/v1;GET /integrations/integrations/v1/{id};GET /integrations/integrations/v1/definitions/{id};GET /integrations/integrations/v1/deployed/{integration_id};DELETE /integrations/integrations/v1/instances/{integration_id};GET /integrations/integrations/v1/rum/app-versions;GET /integrations/managed/v1;GET /integrations/managed/v1/{integration_id};POSTandPUTon/integrations/metadata/v1;POST /integrations/metadata/v1/test; andGET /integrations/template/v1). Non-breaking; the constraints describe values the service already accepts:- Most string fields (for example
id,name,description,version,integrationKey, and parameterkey) now declaremaxLength: 65535and a permissive^[\s\S]*$pattern. - Larger free-form content fields — installation commands/templates, Terraform configuration block values, parameter
apiKey.value/stringValue, and markdown descriptions (descriptionMd,upgradeInstructionsMd) — declaremaxLength: 1048576characters with the same pattern. - Extension binary payloads (
binaries[].data), returned only in the responses ofGET /integrations/contextual-data/v1/{id},GET /integrations/extensions/v1/catalog/{id}, andGET /integrations/integrations/v1/{id}, declaremaxLength: 5000000characters. - Extension item
stableIdfields declaremaxLength: 63. - Array fields declare
maxItems: 10000. - Integer count fields —
amountIntegrationsand the deployed-extension/revision item counts (actions,alerts,customDashboards,enrichments,eventsToMetrics,grafanaDashboards,kibanaDashboards,metricsRuleGroup,parsingRules,savedViews) — declare an explicitmaximumof4294967295.
- Most string fields (for example
- Added an optional
impactedEntitiesarray to the case filters object in the request bodies ofPOST /cases/cases/v1(list cases) andPOST /cases/filter-values/v1(filter values). Each item must set exactly one ofapmService(object with a requirednamestring) orapmDatabase(object with a requirednamestring) — an item with neither arm set is rejected. A case is returned if it impacts ANY of the listed entities (OR logic); names are matched case-insensitively; an empty array applies no filtering. Non-breaking; additive. - Documented the connector summary object in the notification-center REST API. It now declares the title
Connector Summaryand the description "A summary of a connector, excluding sensitive configuration values.", which renders on the values of theconnectorSummariesobject map in theGET /notifications/notification-center/v1/connectors/all/summariesresponse and on the items of theconnectorsarray in theGET /notifications/notification-center/v1/connectors/list/summariesresponse. Non-breaking; documentation-only. - Added an optional
highlightedboolean to a widget in the dashboard payload —truemeans the widget is marked as highlighted for all users of the dashboard,false(or omitted) means it is not. It appears in the request bodies ofPOST /dashboards/dashboards/v1(create),PUT /dashboards/dashboards/v1(replace), andPOST /dashboards/check/v1(check), and in the dashboard read responses ofGET /dashboards/dashboards/v1/{dashboard_id}andGET /dashboards/dashboards/v1/slugs/lookup/{slug}. Not allowed on a widget reference (a widget whosereferencefield is set instead of adefinition); the API rejects it. Additive — the field is new and does not alter existing fields. Note thatPUT /dashboards/dashboards/v1is a full-replace operation: a client must send the currenthighlightedvalue (ortrueto keep the widget highlighted, orfalse/omit it to clear highlighting) when replacing a dashboard, otherwise the field is reset tofalseon the written-back widget. - Added optional
caseLifecycle.autoCloseobject to the case-settings REST API. When present, the object requires apostResolutionPeriodstring for configuring automatic closure of resolved cases. It is accepted in the request bodies ofPOST /cases/cases/case-settings/v1/configsandPATCH /cases/cases/case-settings/v1/configs/{id}; returned ascaseSettings.caseLifecycle.autoClosein the response bodies ofPOST /cases/cases/case-settings/v1/configs,GET /cases/cases/case-settings/v1/configs/{id},PATCH /cases/cases/case-settings/v1/configs/{id}, andGET /cases/cases/case-settings/v1/configs:getActive; and returned ascaseLifecycle.autoClosein the response body ofGET /cases/cases/case-settings/v1/configs:getSystemDefaults. Non-breaking; omitting it preserves existing behavior. - Documented existing requiredness and semantics of the
variablesV2payload in the dashboard REST API — request bodies ofPOST /dashboards/dashboards/v1andPUT /dashboards/dashboards/v1and thedashboardfield ofPOST /dashboards/check/v1, and dashboard read responses ofGET /dashboards/dashboards/v1/{dashboard_id}andGET /dashboards/dashboards/v1/slugs/lookup/{slug}. The spec now declares what the service already enforces, so this is non-breaking: each variable requiresid(UUID string),name(string),displayName(string),displayType(enum string),source(object), andvalue(object); a static source requiresvalues(array of{ value, label }objects),valuesOrderDirection(enum string), andallOption(object), and each static value entry requires bothvalue(string) andlabel(string); a query source requiresvaluesOrderDirection(enum string) andallOption(object), and exactly one of the query objectslogsQuery/metricsQuery/spansQuery/dataprimeQuery(aoneOf) must be set — the service rejects aqueryobject with no arm (this exactly-one rule is enforced by the API, not by the OpenAPIoneOfschema);allOptionrequires an explicitincludeAllboolean. Also documented that the zero valuesVARIABLE_DISPLAY_TYPE_V2_UNSPECIFIEDandORDER_DIRECTION_UNSPECIFIEDare rejected (accepteddisplayType:VARIABLE_DISPLAY_TYPE_V2_LABEL_VALUE/VARIABLE_DISPLAY_TYPE_V2_VALUE/VARIABLE_DISPLAY_TYPE_V2_NOTHING; acceptedvaluesOrderDirection:ORDER_DIRECTION_ASC/ORDER_DIRECTION_DESC/ORDER_DIRECTION_NONE), and that a spans queryfieldValueshould setobservationField(its legacy alternativevalueis documented as deprecated). Also fixed the description of the variablenamefield. Separately, clarified the shareddataModeTypeenum description — an omitted value (orDATA_MODE_TYPE_HIGH_UNSPECIFIED) queries high-priority ("Frequent Search") data whileDATA_MODE_TYPE_ARCHIVEqueries archive ("Monitoring") data. Because that enum is shared, the clarified description also renders on the otherdataModeTypefields that reference it — the dashboard annotation fields (annotations[].source.logs.dataModeType,annotations[].source.spans.dataModeType,annotations[].source.dataprime.dataModeType) the variable textbox Lucene default (variablesV2[].source.textbox.defaultValue.defaultLuceneValue.dataModeType), and the variable Dataprime query default (variablesV2[].source.query.dataprimeQuery.type.queryText.dataModeType) — across the same create/replace/check/read dashboard payloads. Additionally documented several existing backend constraints the spec had not surfaced:displayFullRowmay betrueonly for a textbox source; a logsfieldValuerequiresobservationField; a metricslabelValuerequireslabelName; and PromQL (metricsQuery.type.promqlQuery) and Dataprime (dataprimeQuery.type.queryText) query text is syntax-checked only byPOST /dashboards/check/v1(create and replace accept it without compiling). Non-breaking; documentation-only. - Added a bulk-create operation for alert definitions:
POST /alerts/alerts/v3/all/create. The request body's requiredalertDefsToCreatearray accepts 1–100 items; each item holds a requiredalertDefPropertiesobject (the same alert-definition properties object used by thePOST /alerts/alerts/v3create request) and an optionalaccessPolicystring (raw access-policy JSON, 0–65536 characters; setting it requires thealerts:UpdateAccessPolicypermission, and when it is omitted the alert is created without an access policy). The operation is best-effort per entry: the response'salertDefsarray returns the successfully created alert definitions in the order of their corresponding request entries, andfailedToCreateAlertDefsreports each failed request entry as an object with a required zero-based integerindex(0–99) into the request list and a required human-readablereasonstring; a failed entry does not prevent other entries from being created. Non-breaking; additive (new endpoint). - Capped bulk alert operations at 100 items per request. In the
PUT /alerts/alerts/v3/all/replacerequest body, thealertDefsToReplacearray now accepts at most 100 items (previously up to 1000); requests with more than 100 items are rejected, and an empty array remains valid. This is a breaking change for callers that sent more than 100 alert definitions in a single request — split such requests into batches of at most 100. Batching is safe: the operation updates only the alert definitions referenced in the request (matched byid) and leaves all others unchanged, so consecutive batches do not overwrite each other. The operation description has been clarified accordingly, and now also states that the operation is best-effort — entries that fail are reported in the response arrays (notFoundIds,failedToReplaceAlertDefs,skippedIds) and do not prevent other entries from being applied. These description updates document existing service behavior; the wire behavior is unchanged. Additionally, each item in thefailedToReplaceAlertDefsresponse array now documents an optionalreasonstring explaining why the entry failed to be replaced; the field may be omitted when no further detail is available. Non-breaking; additive. The bulk-delete request limit onPOST /alerts/alerts/v3/all/deleteis unchanged (idsalready accepted 1–100 items). Accordingly, the documented maximum size of the bulk response arrays dropped from 1000 to 100 items:alertDefs,failedToReplaceAlertDefs,notFoundIds, andskippedIdsin thePUT /alerts/alerts/v3/all/replaceresponse, anddeletedIdsandnotFoundIdsin thePOST /alerts/alerts/v3/all/deleteresponse. Non-breaking on the response side. - Added an optional
microsoftTeamsobject to the comment case event payload — a sibling of the existingslackobject — carrying Microsoft Teams source metadata for the comment. In the response bodies it appears atevent.eventData.comment.microsoftTeamsinPOST /cases/cases/v1/{case_id}/comments(create comment),GET /cases/events/v1/{event_id}(get event), andPUT /cases/events/v1/{event_id}/comments(update comment), and atevents[].eventData.comment.microsoftTeamsinGET /cases/cases/v1/{case_id}/events(list case events). The object holds optional string fieldstenantId(a UUID),teamId,channelId,messageId,userId,userEmail, andmessageUrl. Non-breaking; additive. - Added an
OLLY_SCHEDULED_TASKSvalue to the notification-centerEntityTypestring enum, which now holdsENTITY_TYPE_UNSPECIFIED,ALERTS,TEST_NOTIFICATIONS,CASES, andOLLY_SCHEDULED_TASKS. Non-breaking; additive. The enum is reachable across the notification-center REST API as follows:- Entity types:
GET /notifications/notification-center/v1/entity-typesreturns it as a possible value in the responseentityTypes[]array; theentity_typepath parameter onGET /notifications/notification-center/v1/entity-types/{entity_type}/attachment-typesandGET /notifications/notification-center/v1/entity-types/{entity_type}/entity-subtypesalso accepts it. - Connectors: the
configOverrides[].entityTypefield accepts it in the request body ofPOST /notifications/notification-center/v1/connectors(create) andPUT /notifications/notification-center/v1/connectors(replace), and appears in the response body of those two plusGET /notifications/notification-center/v1/connectors(list),GET /notifications/notification-center/v1/connectors/{id}(get),GET /notifications/notification-center/v1/connectors/all/list(batch-get),GET /notifications/notification-center/v1/connectors/all/summaries(batch-get summaries), andGET /notifications/notification-center/v1/connectors/list/summaries(list summaries). Thesupported_by_entity_typequery parameter onGET /notifications/notification-center/v1/connectors,GET /notifications/notification-center/v1/connectors/list/summaries, andGET /notifications/notification-center/v1/connectors/types/summariesalso accepts it. The request body'sentityTypefield onPOST /notifications/notification-center/v1/connectors:testConfigandPOST /notifications/notification-center/v1/destinations:testaccepts it too. - Presets: the
entityTypefield accepts it in the request body ofPOST /notifications/notification-center/v1/presets:createCustom(create custom) andPUT /notifications/notification-center/v1/presets:replaceCustom(replace custom), and appears in the response body of those two plusGET /notifications/notification-center/v1/presets(batch-get) andGET /notifications/notification-center/v1/presets/{id}(get). Theentity_typequery parameter, and the returned preset summary'sentityTypefield, onGET /notifications/notification-center/v1/presets/summaries/system(system default summary),GET /notifications/notification-center/v1/presets:getDefaultSummary(default summary), andGET /notifications/notification-center/v1/presets:summariesList(list summaries) also accept/return it. The request body'sentityTypefield onPOST /notifications/notification-center/v1/presets:testandPOST /notifications/notification-center/v1/presets:testConfigaccepts it too. - Routers: the
entityTypefield, plus the nestedrules[].entityTypeandfallbackTargets[].entityTypefields, accept it in the request body ofPOST /notifications/notification-center/v1/routers(create) andPUT /notifications/notification-center/v1/routers(replace), and appear in the response body of those two plusGET /notifications/notification-center/v1/routers(list),GET /notifications/notification-center/v1/routers/{id}(get), andGET /notifications/notification-center/v1/routers/all/summaries(batch-get). Theentity_typequery parameter onGET /notifications/notification-center/v1/routersalso accepts it. - Testing: the request body's
entityTypefield onPOST /notifications/notification-center/v1/routers:testConditionandPOST /notifications/notification-center/v1/templates:testaccepts it too.
- Entity types:
- Added optional per-alert access-policy support to the alerts REST API. Non-breaking; additive.
- Write requests: an optional
accessPolicystring (raw access-policy JSON, 0–65536 characters) in thePOST /alerts/alerts/v3(create) request body; and an optionalaccessPolicyobject in thePUT /alerts/alerts/v3(replace) request body and in each item of thealertDefsToReplacearray in thePUT /alerts/alerts/v3/all/replace(bulk replace) request body. That object is a choice of eitherupsert(a raw access-policy JSON string, 0–65536 characters) ordelete(an empty object that removes the alert's access policy entirely — after removal a new policy and policy owner can be assigned); omittingaccessPolicyleaves the current policy unchanged. Setting or changingaccessPolicyrequires thealerts:UpdateAccessPolicypermission. - Read requests: an optional
include_access_permissionsboolean query parameter onGET /alerts/alerts/v3/{id},GET /alerts/alerts/v3/version-ids/{alert_version_id}, andGET /alerts/alerts/v3(list). It defaults tofalse; the responseaccessis populated only wheninclude_access_permissionsistrue. - Read responses: an optional
accessobject in theGET /alerts/alerts/v3/{id}andGET /alerts/alerts/v3/version-ids/{alert_version_id}response bodies, and anaccessobject map keyed by alert-definition ID in theGET /alerts/alerts/v3(list) response body. Eachaccessvalue holds an optionalpermissionsobject (booleanscanRead,canManage,canReadAccessPolicy,canUpdateAccessPolicy) and an optionalaccessPolicystring (the alert's raw access-policy JSON, 0–65536 characters, present only when the caller may read it).
- Write requests: an optional
- Added an optional
notFoundIdsfield (an array of up to 1000 UUID strings) to theGET /alerts/alerts/v3/all/download(download alerts) response, populated on the first streamed message with any requestedidsthat were not included in the download because they were not found or are not accessible; it is absent/empty when every requested id was downloaded or when no ids were requested. Non-breaking; additive. - Added an optional
idsquery parameter (an array of up to 1000 UUID strings) toGET /alerts/alerts/v3/all/download(download alerts). When provided, only the listed alert definitions are downloaded, and ids that are not found or not accessible are reported in the responsenotFoundIds; when omitted, all accessible alert definitions are downloaded (unchanged default). Non-breaking; additive. - Added an optional
submittedStartTimestring to the suppression-rule schedule timeframe (schedule.oneTime.timeframeandschedule.recurring.schedule.timeframein the rule payload) across the suppression-rules API (POSTandPUT /alerts/suppression-rules/v1,POSTandPUT /alerts/suppression-rules/v1/all/rules,GET /alerts/suppression-rules/v1, andGET /alerts/suppression-rules/v1/{alert_scheduler_rule_id}). The service populates it only in create and update responses (POST/PUT, including the bulk paths), echoing thestartTimesubmitted in the request before the service normalized it to the next valid occurrence; it is a read-only echo — ignored in requests and omitted fromGETresponses. Non-breaking; additive. - Documented existing validation bounds on the alerts and alert-event REST APIs (
minLength/maxLength/patternon strings,minimum/maximumon integers,minItems/maxItemson arrays). The constraints describe validation the service already enforces; values outside them were already rejected, so this is non-breaking. By field:- Alert-definition properties — request bodies of
POST /alerts/alerts/v3andPUT /alerts/alerts/v3, and response bodies ofGET /alerts/alerts/v3andGET /alerts/alerts/v3/{id}:alertDefProperties.namestring 1–512;alertDefProperties.descriptionstring 0–3000;alertDefProperties.groupByKeysarray 0–100 items, each string 1–1024;alertDefProperties.dataSourcesarray 0–1 items, each withdataSpacestring 1–50 anddataSetstring 1–300;alertDefProperties.notificationGroupExcessarray ≤100 items. - Condition / type-definition fields (same request and response bodies):
evaluationDelayMsinteger 0–10800000; metricmetricFilter.promqland analyticsdataprimeQuery.querystring 1–65535; metricforOverPctandminNonNullValuesPctinteger 0–100; logs-rationumeratorAlias/denominatorAliasstring ≤200;noDataPolicy.autoRetireSecondsinteger ≥60. - Notification group & schedule (same bodies): incident-settings/webhook
retriggeringPeriod.minutesinteger 1–10080; scheduleactiveOn.startTime/endTimehours0–23 andminutes0–59;dayOfWeekarray 1–7 items. - Identifiers: the
idpath parameter onGET /alerts/alerts/v3/{id}andDELETE /alerts/alerts/v3/{id}is a UUID string (maxLength: 36, canonical UUID pattern); thealertVersionIdpath parameter onGET /alerts/alerts/v3/version-ids/{alert_version_id}and theAlertDef.alertVersionIdresponse field are 1–36 free-form strings; the responseAlertDef.idis a UUID string 1–36; responseAlertDef.createdTime/updatedTime/lastTriggeredTimestrings ≤64. - Bulk operations:
POST /alerts/alerts/v3/all/deleterequestidsarray 1–100 items, each a UUID string 1–36;PUT /alerts/alerts/v3/all/replacerequestalertDefsToReplace[].ida UUID string 1–36; bulk response id arrays (notFoundIds,deletedIds,skippedIds) ≤100 UUID-string items. - Pagination (list endpoints): request
pageSizeinteger 0–1000 andpageTokenstring 1–4096; responsealertDefsarray ≤1000 items. - Filter option counts —
GET /alerts/alerts/v3/all/countsresponse: the per-bucketcountintegers (typeCounts[].count,priorityCounts[].count,statusCounts[].count,enabledCounts[].count,entityLabelCounts[].count) are 0–4294967295. - Alert events:
GET /v3/alert-event/{id}idpath parameter free-form string 1–36;GET /v3/alert-event-statsrequestidsarray ≤1000 free-form strings 1–36; responseAlertEvent.alertIda UUID string 1–36, andpermutationId/preGroupingEventId/incidentCorrelationKey/payloadTypestrings ≤256; event-statscount/resolvedCount/triggeredCount/isMutedCountintegers 0–4294967295.
- Alert-definition properties — request bodies of
v5.0.4 — Jul 20, 2026
- Added documented validation constraints across the events-to-metrics REST API (
POST,GET, andPUTon/events2metrics/events2metrics/v2;GETandDELETEon/events2metrics/events2metrics/v2/{id};POST /events2metrics/events2metrics/v2/all/execute;GET /events2metrics/labels/v2/cardinalities; andGET /events2metrics/limits/v2). String fields now declareminLength,maxLength, andpattern; integer fields declareminimumandmaximum; and array fields declareminItemsandmaxItems. This covers request and response fields includingname,description,dataSource,permutationsLimit,metricLabels(items includetargetLabel,sourceField),metricFields(items includetargetBaseMetricName,sourceField,aggregations,targetMetricName), and the nested query fields: logs query (lucene,alias,applicationnameFilters,subsystemnameFilters,severityFilters) and spans query (lucene,applicationnameFilters,subsystemnameFilters,actionFilters,serviceFilters), pluscompanyId,labelsLimit, and theididentifiers. Non-breaking; constraints describe the values the service already accepts. - Added
PUT /dataplans/rum-policies/v1to manage RUM TCO policies as an atomic overwrite: it deletes all existing RUM policies and creates the provided list in order, mirroringPUT /dataplans/log-policies/v1andPUT /dataplans/span-policies/v1. The request body holds apoliciesarray (at most 10000 items); each item carries a requiredpolicyobject (requiredname,description, andpriority; optionalapplicationRule,subsystemRule,archiveRetention,priorityOverride,targets, anddisabled) and a requiredrumRulesobject with the same shape aslogRules(aseveritiesarray and an optionaldpxlExpressionstring). The response holds acreateResponsesarray; each item contains the createdpolicy. Non-breaking; additive. - Added a
SOURCE_TYPE_RUMvalue to the TCO policy source-type string enum, which now holdsSOURCE_TYPE_UNSPECIFIED,SOURCE_TYPE_LOGS,SOURCE_TYPE_SPANS, andSOURCE_TYPE_RUM— accepted by thesource_typequery parameter onGET /dataplans/policies/v1(list) and thesourceTypefield in thePOST /dataplans/policies/v1/all/reorderrequest body — and an optionalrumRulesobject to the policy source-type choice (alongsidelogRulesandspanRules) in the policy payload returned byGET /dataplans/policies/v1(list),GET /dataplans/policies/v1/{id}, thePOST/PUT /dataplans/policies/v1responses,PUT /dataplans/rum-policies/v1(replace RUM policies),PUT /dataplans/log-policies/v1(replace log policies),PUT /dataplans/span-policies/v1(replace span policies), andPOST /dataplans/policies/v1/all/test-policies(test policies).rumRuleshas the same shape aslogRules— aseveritiesarray and an optionaldpxlExpressionstring. Non-breaking; additive. - Added an optional
rumRulesobject to the policy source-type choice (alongsidelogRulesandspanRules) in the request bodies ofPOST /dataplans/policies/v1(create),PUT /dataplans/policies/v1(update), andPOST /dataplans/policies/v1/all/forecast-usage(forecast usage), so RUM policies can also be created, updated, and forecast individually. Non-breaking; additive. - Documented existing validation bounds on the alerts and alert-event REST APIs (
minLength/maxLength/patternon strings,minimum/maximumon integers,minItems/maxItemson arrays). The constraints describe validation the service already enforces; values outside them were already rejected, so this is non-breaking. By field:- Alert-definition properties — request bodies of
POST /alerts/alerts/v3andPUT /alerts/alerts/v3, and response bodies ofGET /alerts/alerts/v3andGET /alerts/alerts/v3/{id}:alertDefProperties.namestring 1–512;alertDefProperties.descriptionstring 0–3000;alertDefProperties.groupByKeysarray 0–100 items, each string 1–1024;alertDefProperties.dataSourcesarray 0–1 items, each withdataSpacestring 1–50 anddataSetstring 1–300;alertDefProperties.notificationGroupExcessarray ≤100 items. - Condition / type-definition fields (same request and response bodies):
evaluationDelayMsinteger 0–10800000; metricmetricFilter.promqland analyticsdataprimeQuery.querystring 1–65535; metricforOverPctandminNonNullValuesPctinteger 0–100; logs-rationumeratorAlias/denominatorAliasstring ≤200;noDataPolicy.autoRetireSecondsinteger ≥60. - Notification group & schedule (same bodies): incident-settings/webhook
retriggeringPeriod.minutesinteger 1–10080; scheduleactiveOn.startTime/endTimehours0–23 andminutes0–59;dayOfWeekarray 1–7 items. - Identifiers: the
idpath parameter onGET /alerts/alerts/v3/{id}andDELETE /alerts/alerts/v3/{id}is a UUID string (maxLength: 36, canonical UUID pattern); thealertVersionIdpath parameter onGET /alerts/alerts/v3/version-ids/{alert_version_id}and theAlertDef.alertVersionIdresponse field are 1–36 free-form strings; the responseAlertDef.idis a UUID string 1–36; responseAlertDef.createdTime/updatedTime/lastTriggeredTimestrings ≤64. - Bulk operations:
POST /alerts/alerts/v3/all/deleterequestidsarray 1–100 items, each a UUID string 1–36;PUT /alerts/alerts/v3/all/replacerequestalertDefsToReplace[].ida UUID string 1–36; bulk response id arrays (notFoundIds,deletedIds,skippedIds) ≤1000 UUID-string items. - Pagination (list endpoints): request
pageSizeinteger 0–1000 andpageTokenstring 1–4096; responsealertDefsarray ≤1000 items. - Filter option counts —
GET /alerts/alerts/v3/all/countsresponse: the per-bucketcountintegers (typeCounts[].count,priorityCounts[].count,statusCounts[].count,enabledCounts[].count,entityLabelCounts[].count) are 0–4294967295. - Alert events:
GET /v3/alert-event/{id}idpath parameter free-form string 1–36;GET /v3/alert-event-statsrequestidsarray ≤1000 free-form strings 1–36; responseAlertEvent.alertIda UUID string 1–36, andpermutationId/preGroupingEventId/incidentCorrelationKey/payloadTypestrings ≤256; event-statscount/resolvedCount/triggeredCount/isMutedCountintegers 0–4294967295.
- Alert-definition properties — request bodies of
v5.0.3 — Jul 10, 2026
- Added non-breaking OpenAPI validation metadata to existing views and folders REST payloads; no endpoints, JSON fields, or field requiredness changed. For view payloads in
POST /data-exploration/views/v1/views,PUT /data-exploration/views/v1/views/{id},GET /data-exploration/views/v1/views, andGET /data-exploration/views/v1/views/{id}, the spec now documents bounds foridinteger (1..2147483647, where present),namestring (1..250),searchQuery.querystring (1..65535),filters.filtersarray (1..1000),filters.filters[].namestring (1..65535),timeSelection.quickSelection.captionstring (1..100),timeSelection.quickSelection.secondsinteger (0..4294967295), andtimeSelection.customSelection.fromTime/timeSelection.customSelection.toTimedate-time strings (1..35). The sharedidpath parameter onGET,PUT, andDELETE /data-exploration/views/v1/views/{id}is also documented as integer1..2147483647; theviewsresponse array onGET /data-exploration/views/v1/viewsis documented as0..100000items. For folder payloads inPOST /data-exploration/views/v1/folders,PUT /data-exploration/views/v1/folders,GET /data-exploration/views/v1/folders, andGET /data-exploration/views/v1/folders/{id}, the spec now documentsnamestring bounds (1..100) and thefoldersresponse array bounds (0..100000items). - Added an optional
arcDisplayobject (withvalueArcandthresholdArcbooleans) and an optionalshowMinMaxboolean to the gauge widget and the dynamic-widget gauge visualization inside the dashboard payload. The fields appear in the request body ofPOST /dashboards/dashboards/v1andPUT /dashboards/dashboards/v1, and in the dashboard read responses ofGET /dashboards/dashboards/v1/{dashboard_id}andGET /dashboards/dashboards/v1/slugs/lookup/{slug}. The presence ofarcDisplayindicates the gauge arcs are shown; omitting it hides them. Deprecated theshowInnerArcandshowOuterArcbooleans on both gauges. Non-breaking; omitting the new fields preserves existing behavior. - Added optional
dpxlExpressionstring to the span-rules object (spanRules) in the quota policy payload, mirroring the existingdpxlExpressionon log rules. It appears in the request bodies ofPOST /dataplans/policies/v1(create),PUT /dataplans/policies/v1(update),PUT /dataplans/span-policies/v1(replace span policies), andPOST /dataplans/policies/v1/all/forecast-usage(forecast usage); and in the response payloads ofGET /dataplans/policies/v1/{id},GET /dataplans/policies/v1(list), thePOST/PUT /dataplans/policies/v1responses,PUT /dataplans/span-policies/v1(replace span policies),PUT /dataplans/log-policies/v1(replace log policies), andPOST /dataplans/policies/v1/all/test-policies(test policies). Optional and non-breaking. - Breaking OpenAPI schema change for
/logs/data-setup/v2: in thePOSTrequest body, thes3object is now documented as required alongsideisActive, matching existing server-side validation. In theGETandPOST200 response bodies,target.archiveSpecis now documented as required. This is an OpenAPI contract clarification only; the REST wire behavior is unchanged. - Added optional
histogramBucketUnitstring enum to the dynamic heatmap widget'sheatmapvisualization object. It is accepted in dashboard request widgets forPOST /dashboards/check/v1,POST /dashboards/dashboards/v1, andPUT /dashboards/dashboards/v1, and returned in dashboard response widgets fromGET /dashboards/dashboards/v1/{dashboard_id}andGET /dashboards/dashboards/v1/slugs/lookup/{slug}. Values areHEATMAP_HISTOGRAM_BUCKET_UNIT_UNSPECIFIED,HEATMAP_HISTOGRAM_BUCKET_UNIT_NANOSECONDS,HEATMAP_HISTOGRAM_BUCKET_UNIT_MICROSECONDS,HEATMAP_HISTOGRAM_BUCKET_UNIT_MILLISECONDS,HEATMAP_HISTOGRAM_BUCKET_UNIT_SECONDS,HEATMAP_HISTOGRAM_BUCKET_UNIT_BYTES_IEC,HEATMAP_HISTOGRAM_BUCKET_UNIT_KIBYTES,HEATMAP_HISTOGRAM_BUCKET_UNIT_MIBYTES,HEATMAP_HISTOGRAM_BUCKET_UNIT_GIBYTES,HEATMAP_HISTOGRAM_BUCKET_UNIT_BYTES,HEATMAP_HISTOGRAM_BUCKET_UNIT_KBYTES,HEATMAP_HISTOGRAM_BUCKET_UNIT_MBYTES, andHEATMAP_HISTOGRAM_BUCKET_UNIT_GBYTES. Non-breaking; omitting it preserves existing behavior. - Added documented validation constraints across the dashboards REST API:
POST /dashboards/check/v1;POSTandPUTon/dashboards/dashboards/v1;GETandDELETEon/dashboards/dashboards/v1/{dashboard_id};GET /dashboards/dashboards/v1/catalog/list;GET /dashboards/dashboards/v1/slugs/lookup/{slug};PUT /dashboards/dashboards/v1/{dashboard_id}/default;POST /dashboards/dashboards/v1/{dashboard_id}/folder;GET,POST, andPUTon/dashboards/folders/v1;GETandDELETEon/dashboards/folders/v1/{folder_id}; andPUTandDELETEon/dashboards/pinned/v1/{dashboard_id}. String, array, and integer fields throughout the dashboard, folder, and widget request and response payloads now declareminLength/maxLength/pattern,minItems/maxItems, andminimum/maximumlimits. Specifically:- Dashboard identifiers are 21-character strings: the
dashboard_idpath parameter onPUT /dashboards/dashboards/v1/{dashboard_id}/defaultandPOST /dashboards/dashboards/v1/{dashboard_id}/folder, thedashboardIdin thePOST /dashboards/dashboards/v1response, each catalog item'sidin theGET /dashboards/dashboards/v1/catalog/listresponse, and the dashboard body'sid(string) all require exactly 21 characters. - Folder and annotation identifiers are UUID strings (36 characters, canonical UUID pattern): a folder's
idandparentIdand thePOST /dashboards/folders/v1response'sfolderId, and each dashboard annotation'sidtogether with its actionidandwidgetId. - Annotation, folder, and variable
nameand variabledisplayNamestrings are limited to 1–100 characters. - Annotation-source
messageTemplatestrings are limited to 0–1000 characters, and theirlabelFields/labelsarrays to at most 10 items. - A folder
path'ssegmentsarray holds 1–2 items, each a 1–100-character string. - The
accessPolicystring in theGET /dashboards/dashboards/v1/{dashboard_id}andGET /dashboards/dashboards/v1/slugs/lookup/{slug}responses accepts an empty string (minLength: 0). - The line chart's
queryDefinitionsarray declaresminItems: 1. Widget, section, row, filter, and variableidfields are UUID strings (36 characters, canonical UUID pattern). - The
slugpath parameter onGET /dashboards/dashboards/v1/slugs/lookup/{slug}is limited to 1–255 characters; therequest_idquery parameter onDELETE /dashboards/dashboards/v1/{dashboard_id},GETandDELETEon/dashboards/folders/v1/{folder_id}, andPUTandDELETEon/dashboards/pinned/v1/{dashboard_id}is limited to 1–128 characters.
- Dashboard identifiers are 21-character strings: the
- The data-usage query API is now public: the following endpoints now appear in the public OpenAPI spec and customer-facing docs.
POST /dataplan/data-usage/v1/queryreturns billable usage aggregated into daily or hourly buckets and supports filtering and grouping by labels.GET /dataplan/data-usage/v1/capabilitiesreturns the supported labels, measurement kinds, units, and per-request limits. Both require thedata-usage:Readpermission. Additive; no request or response shapes changed. - Added documented validation constraints on the recording rules REST API (
POST,GET,PUT, andDELETEon/recording-rules/recording-rules/v1). Request and response fields now declare string length and pattern limits, integer ranges, and array size bounds; nestedgroups[].name,groups[].rules[].record, andgroups[].rules[].exprare required on create and update, andidis required on create responses and on items returned by list and get. Theidpath parameter on get, update, and delete is limited to 1–128 characters. Non-breaking. - Added
GET /notifications/notification-center/v1/entity-types/{entity_type}/attachment-types(List Entity Type Attachment Types). Returns all supported attachment types for the given entity type. The response body containssupportedAttachmentTypes(array, 0–100 items), where each item is{ "name": string, "defaultEnabled": boolean }—nameis the attachment type identifier (e.g."alert_graph") anddefaultEnabledindicates whether the type is included by default when the policy isAUTO. Non-breaking; new endpoint. - Added the time-to-update KPI to Cases. The
KPITypestring enum now containsKPI_TYPE_UNSPECIFIED,KPI_TYPE_TIME_TO_ACKNOWLEDGE,KPI_TYPE_TIME_TO_RESOLVE, andKPI_TYPE_TIME_TO_UPDATE.caseLifecycle.kpi.thresholds[].typein the request bodies forPOST /cases/cases/case-settings/v1/configsandPATCH /cases/cases/case-settings/v1/configs/{id}.caseSettings.caseLifecycle.kpi.thresholds[].typein the response bodies fromPOST /cases/cases/case-settings/v1/configs,GET /cases/cases/case-settings/v1/configs/{id},PATCH /cases/cases/case-settings/v1/configs/{id}, andGET /cases/cases/case-settings/v1/configs:getActive; andcaseLifecycle.kpi.thresholds[].typein the response body fromGET /cases/cases/case-settings/v1/configs:getSystemDefaults.case.kpiBreaches.breachedKpis[].kpiTypein the response bodies fromGET /cases/cases/v1/{id},PUT /cases/cases/v1/{id},PUT /cases/acknowledged/v1/{id},DELETE /cases/acknowledged/v1/{id},POST /cases/assigned/v1/{id},DELETE /cases/assigned/v1/{id},POST /cases/closed/v1/{id},POST /cases/indicators/v1/get,PUT /cases/priority-override/v1/{id},DELETE /cases/priority-override/v1/{id}, andPUT /cases/resolved/v1/{id}.cases[].kpiBreaches.breachedKpis[].kpiTypein the response bodies fromPOST /cases/cases/v1,POST /cases/acknowledged/v1,PUT /cases/assigned/v1,DELETE /cases/assigned/v1,POST /cases/closed/v1,POST /cases/priority-override/v1,DELETE /cases/priority-override/v1, andPOST /cases/resolved/v1.event.eventData.kpiBreached.kpiTypein the response bodies fromPOST /cases/cases/v1/{case_id}/comments,GET /cases/events/v1/{event_id}, andPUT /cases/events/v1/{event_id}/comments; andevents[].eventData.kpiBreached.kpiTypein the response body fromGET /cases/cases/v1/{case_id}/events.- The
KPIFilterstring enum used by optionalfilters.breached[]arrays in the request bodies forPOST /cases/cases/v1andPOST /cases/filter-values/v1now containsKPI_FILTER_UNSPECIFIED,KPI_FILTER_TIME_TO_ACKNOWLEDGE_BREACHED,KPI_FILTER_TIME_TO_RESOLVE_BREACHED,KPI_FILTER_NOT_BREACHED, andKPI_FILTER_TIME_TO_UPDATE_BREACHED. Non-breaking.
v5.0.2 — Jun 30, 2026
- Error responses (
400,401,403,404,409,500) across the Management API now document theirapplication/jsonbody with anErrorschema, where previously the body carried no schema.Erroris{ "code": integer, "message": string }—codeis the HTTP status code (100–599) andmessageis a human-readable description. Response-only; non-breaking. PUT /aaa/custom-roles/v1(create custom role) no longer documents a201response; a successful create returns200with{ "id": integer }— the new role's identifier.DELETE /aaa/custom-roles/v1/{role_id}(delete custom role)204response no longer declares anapplication/jsonbody, matching its no-content semantics.- Added explicit validation bounds to request fields and response arrays across the notification-center REST APIs (
/notifications/notification-center/v1/connectors,/notifications/notification-center/v1/presets,/notifications/notification-center/v1/routers). Specifics:- The
idpath parameter onGET /notifications/notification-center/v1/connectors/{id},DELETE /notifications/notification-center/v1/connectors/{id},GET /notifications/notification-center/v1/presets/{id},DELETE /notifications/notification-center/v1/presets/custom/{id},POST /notifications/notification-center/v1/presets/custom/{id}/default,POST /notifications/notification-center/v1/presets/{id}/default/apply,GET /notifications/notification-center/v1/routers/{id}, andDELETE /notifications/notification-center/v1/routers/{id}now hasminLength: 1,maxLength: 128, and pattern^[a-zA-Z0-9][a-zA-Z0-9_-]*$. - String request fields including
name,id,connectorId,presetId,payloadType,fieldName,template, anddescriptionin the request bodies ofPOST /notifications/notification-center/v1/connectors,PUT /notifications/notification-center/v1/connectors,POST /notifications/notification-center/v1/presets:createCustom,PUT /notifications/notification-center/v1/presets:replaceCustom,POST /notifications/notification-center/v1/routers,PUT /notifications/notification-center/v1/routers, and related:test/:testConfigendpoints now haveminLength,maxLength, andpatternin the spec. - Response arrays on
GET /notifications/notification-center/v1/connectors/all/list,GET /notifications/notification-center/v1/connectors/all/summaries,GET /notifications/notification-center/v1/presets,GET /notifications/notification-center/v1/routers, andGET /notifications/notification-center/v1/routers/all/summariesnow havemaxItemsbounds.
- The
- Added a Microsoft Teams actor variant to case event actors. The
microsoftTeamsactor carriesteamsUserId(string),displayName(string), optionaluserEmail(string), and optionalcoralogixUserId(string, UUID). It appears in theactorfield of events returned byGET /cases/cases/v1/{case_id}/events, in theeventfield of responses fromPOST /cases/cases/v1/{case_id}/comments,GET /cases/events/v1/{event_id}, andPUT /cases/events/v1/{event_id}/comments. Response-only; non-breaking. - Added a
microsoftTeamsresolver variant toresolvedByin theResolutionDetailsobject in case responses. The variant is an empty marker object indicating the case was resolved through a Microsoft Teams connector. It appears wherever acaseobject is returned:GET /cases/cases/v1/{id},PUT /cases/cases/v1/{id},POST /cases/cases/v1(list);PUT /cases/acknowledged/v1/{id},DELETE /cases/acknowledged/v1/{id},POST /cases/acknowledged/v1(bulk);POST /cases/assigned/v1/{id},DELETE /cases/assigned/v1/{id},PUT /cases/assigned/v1(bulk assign),DELETE /cases/assigned/v1(bulk unassign);POST /cases/closed/v1/{id},POST /cases/closed/v1(bulk);POST /cases/indicators/v1/get;PUT /cases/priority-override/v1/{id},DELETE /cases/priority-override/v1/{id},POST /cases/priority-override/v1(bulk set),DELETE /cases/priority-override/v1(bulk clear);PUT /cases/resolved/v1/{id},POST /cases/resolved/v1(bulk). Response-only; non-breaking.
v5.0.1 — Jun 23, 2026
- Added optional
timeBucketMsstring to the request body ofPOST /dataplans/policies/v1/all/forecast-usage(forecast TCO policy usage). When set, the forecast is bucketed into intervals of the given millisecond width. Non-breaking; omitting it preserves existing behavior. - Added optional
usageBucketsarray to the response ofPOST /dataplans/policies/v1/all/forecast-usage(forecast TCO policy usage). Each item is{ "bucketStartMs": string, "bytes": string }, wherebucketStartMsis the bucket window start in epoch milliseconds andbytesis the matched bytes within that bucket. Populated only whentimeBucketMsis set on the request; otherwise empty. Non-breaking;estimatedBytesis unchanged.
Jun 22, 2026
- Added company model pricing REST API under
/ai/model-pricing/v3(company resolved from auth context; non-breaking, new endpoints).GET /ai/model-pricing/v3returns{ "pricing": { "id": string (UUID), "companyId": string, "prices": object } }wherepricesis keyed by model name and each value is{ "inputPricePerMillionTokens": number, "outputPricePerMillionTokens": number, "cacheReadPricePerMillionTokens": number, "cacheWritePricePerMillionTokens": number }(USD per one million tokens).PUT /ai/model-pricing/v3accepts request body{ "prices": object (required) }with the same per-model value shape as a full replacement map and returns{ "pricing": { "id": string (UUID), "companyId": string, "prices": object } }.DELETE /ai/model-pricing/v3returns{ "id": string (UUID) }. - Added
CONNECTOR_TYPE_MICROSOFT_TEAMSto theconnectorTypeenum in the cases connector type schema. The value appears inconnectorTypeFiltersin the request body ofPOST /cases/cases/v1(list cases) andPOST /cases/filter-values/v1, and in theconnectorobject within delivery attempts in the response ofPOST /cases/notifications/v1/deliveries. Non-breaking. - Added read-only
resolvedConnectorConfigfield to theConnectorandConnectorSummaryresponse schemas in the notification-center connectors API. The field exposes the full effective connector configuration including backend auto-resolved values (e.g. a Slack integration ID). It is response-only and ignored on create/replace request bodies. It appears inConnectorresponses fromPOST /notifications/notification-center/v1/connectors(Create),PUT /notifications/notification-center/v1/connectors(Replace),GET /notifications/notification-center/v1/connectors/{id}(Get),GET /notifications/notification-center/v1/connectors(List), andGET /notifications/notification-center/v1/connectors/all/list(BatchGet); and inConnectorSummaryresponses fromGET /notifications/notification-center/v1/connectors/all/summaries(BatchGetConnectorSummaries) andGET /notifications/notification-center/v1/connectors/list/summaries(ListConnectorSummaries). Non-breaking. - Added optional
layoutColumnsinteger to dashboard widgets in the request bodies forPOST /dashboards/check/v1,POST /dashboards/dashboards/v1, andPUT /dashboards/dashboards/v1, and in the response payloads fromGET /dashboards/dashboards/v1/{dashboard_id}andGET /dashboards/dashboards/v1/slugs/lookup/{slug}. Non-breaking; omitting it preserves existing layout behavior. - Added
POST /cases/indicators/v1/getto return acaseobject for a source indicator. The request body supports aprometheusAlertobject with requiredfingerprintstring andstartedAtdate-time string. Non-breaking. - Added
minimum: 0to the optionalthresholdnumber in AI evaluation payloads: request bodies forPOST /ai/evaluations/v3andPATCH /ai/evaluations/v3/{id}, and response payloads fromGET /ai/evaluations/v3,GET /ai/evaluations/v3/{id},POST /ai/evaluations/v3, andPATCH /ai/evaluations/v3/{id}. Non-breaking; it documents the existing inclusive lower bound. - Added optional
genericIndicatorsarray undercaseIndicatorsin the case response payloads returned byGET /cases/cases/v1/{id},PUT /cases/cases/v1/{id}, and the list response fromPOST /cases/cases/v1. - Added optional
indicatorTypesarray to thefiltersobject in the request body forPOST /cases/cases/v1, allowing callers to filter the case list by indicator type. - Added a
MICROSOFT_TEAMSvalue to the connector type enum in the connectors payload (POST/PUT/notifications/notification-center/v1/connectors), enabling notification routing to Microsoft Teams. - Added
POST /dashboards/check/v1for validating a dashboard definition or an existing dashboard by ID without persisting changes. The response contains anissuesarray; each issue carriesseverity(enum:SEVERITY_UNSPECIFIED,SEVERITY_ERROR,SEVERITY_WARNING),message(string), andlocation(string, RFC 6901 JSON Pointer). The request body accepts either adashboardobject ordashboardId(string), and an optionalrequestId(string). Non-breaking; the endpoint is additive. - Added the AI Center v3 REST API for managing AI applications and AI evaluations:
- AI applications —
GET /ai/applications/v3(list),GET /ai/applications/v3/{id}(get),DELETE /ai/applications/v3/{id}(delete). - AI evaluations —
POST /ai/evaluations/v3(create),GET /ai/evaluations/v3(list),GET /ai/evaluations/v3/{id}(get),PATCH /ai/evaluations/v3/{id}(update),DELETE /ai/evaluations/v3/{id}(delete), andGET /ai/evaluation-counts/v3/per-type(counts per evaluation type). - Custom evaluations —
POST /ai/custom-evaluations/v3(create),GET /ai/custom-evaluations/v3(list),PATCH /ai/custom-evaluations/v3/{id}(update),DELETE /ai/custom-evaluations/v3/{id}(delete),GET /ai/custom-evaluations/v3/by-application/{application_id}(list for an application), andPOST/DELETE /ai/custom-evaluations/v3/{id}/applications/{application_id}(link / unlink a custom evaluation to an application).
- AI applications —
- Added two analytics alert types to the alert payload, which appears in the request and/or response of the alert-definition endpoints:
POST /alerts/alerts/v3(request and response),PUT /alerts/alerts/v3(request and response),PUT /alerts/alerts/v3/all/replace(request and response),GET /alerts/alerts/v3(response),GET /alerts/alerts/v3/{id}(response), andGET /alerts/alerts/v3/version-ids/{alert_version_id}(response). The alert type-definition object gains ananalyticsImmediatevariant (fires when a DataPrime query returns a result) and ananalyticsThresholdvariant (fires when a numeric result column violates a threshold). Both carry adataprimeQueryobject,useRowsAsPermutations(boolean),evaluationDelayMs(integer),noDataPolicy(object), andtimeframeMinutes(integer);analyticsThresholdadditionally carries arulesarray (1–5 items), atargetColumn(string), and anoperatorenum (ANALYTICS_THRESHOLD_OPERATOR_MORE_THAN_OR_UNSPECIFIED,ANALYTICS_THRESHOLD_OPERATOR_LESS_THAN,ANALYTICS_THRESHOLD_OPERATOR_MORE_THAN_OR_EQUALS,ANALYTICS_THRESHOLD_OPERATOR_LESS_THAN_OR_EQUALS,ANALYTICS_THRESHOLD_OPERATOR_EQUALS). Thetypeenum on the same payload gainsALERT_DEF_TYPE_ANALYTICS_IMMEDIATEandALERT_DEF_TYPE_ANALYTICS_THRESHOLD. Optional and non-breaking. - Breaking: Removed the
Extension testing serviceREST API:POST /integrations/testing/v1/extensions/initialize,DELETE /integrations/testing/v1/extensions, andPOST /integrations/testing/v1/extensions. These operations are no longer available. - Added an optional
ollyAnalysisobject to theCaseschema in case responses under/cases/cases/v1. Reports the result of an automated Olly analysis attached to a case (status, optional payload, completion timestamp). Response-only, non-breaking.
Jun 9, 2026
- A path parameter shared by multiple operations on the same path is now declared once at the path level instead of being repeated on each operation. Purely structural and non-breaking — the same parameters apply to the same operations, so the request contract is unchanged.
- Added optional
useDataTimeRangeboolean to the line-chart and time-series-lines widgets in the dashboard payload under/dashboards/dashboards/v1. Whentrue, the widget derives its time window from the returned data instead of the dashboard time range — useful for time-shifted DataPrime queries (e.g.addTime($m.timestamp, 14days)) whose output timestamps fall outside the dashboard's selected window. Optional and non-breaking; omitting it preserves existing behavior. - Breaking (spec contract): Integer fields that carry 64-bit values are now declared as
type: stringwith a digitpattern(^[0-9]+$unsigned,^-?[0-9]+$signed) andminLength: 1/maxLength: 20, instead of as numbers. This matches the actual JSON wire format — servers already emit and accept these values as quoted strings — so there is no runtime behavior change; only the declared type in the spec changes. - Array schemas now declare
minItems: 0(on every array, regardless of item type) and unsigned integer fields declareminimum: 0by default in the spec. Additive and non-breaking (least-restrictive constraints); no runtime behavior change. - Added optional
dataspacestring to the policy target in the log, span, and generic TCO policy payloads (/dataplans/log-policies/v1,/dataplans/span-policies/v1,/dataplans/policies/v1), request and response. A free-form identifier for the target's dataspace, mirroringdataset. Non-breaking. - Added optional
priority(enum:PRIORITY_TYPE_UNSPECIFIED,PRIORITY_TYPE_BLOCK,PRIORITY_TYPE_LOW,PRIORITY_TYPE_MEDIUM,PRIORITY_TYPE_HIGH),priorityOverride(object), andarchiveRetention(object with anidstring) to the policy target in the same log/span/generic policy payloads, request and response. Optional in the spec; server validation determines required semantics. Non-breaking. - 46 PUT/POST request bodies across the aaa, alerts, cases, dashboards, data-exploration, dataengine, dataplan(s), enrichment-rules, events2metrics, incidents, logs, metrics, and slo APIs are now declared
requiredin the spec. Non-breaking — clients were already required to send these bodies; the spec now reflects it. - Added a PagerDuty actor variant to case event actors, returned at
GET /cases/cases/v1/{case_id}/events. ThepagerDutyactor carriespagerDutyUserId(string),displayName(string), optionaluserEmail(string), and optionalcoralogixUserId(string, UUID). Response-only; non-breaking. - Removed the optional
sourcestring from the APM-database impacted-entity in case responses under/cases/cases/v1. The field had no consumers. - Added optional
accessPolicystring to the dashboard create/replace request bodies (POST/PUT /dashboards/dashboards/v1) and the dashboard get responses (GET /dashboards/dashboards/v1/{dashboard_id},GET /dashboards/dashboards/v1/slugs/lookup/{slug}), letting callers read and write a per-dashboard PBAC access policy (opaque JSON string). On create/replace a non-empty value sets the policy; omitting it leaves the policy unchanged. Non-breaking. - Added a PromQL variant to the dashboard variable query source in the dashboard payload under
/dashboards/dashboards/v1. Variables can now be sourced from a PromQL query in addition to metric name, label name, and label value sources. ThepromqlQueryobject carries the query string and an optionalpromqlQueryTypeenum (PROM_QL_QUERY_TYPE_UNSPECIFIED,PROM_QL_QUERY_TYPE_RANGE,PROM_QL_QUERY_TYPE_INSTANT) to opt into range queries. Non-breaking. - Added
resolvedValues(array of strings) to the SLO ownership tag in the SLO payload under/slo/slos/v1, request and response. A flat, deduplicated union of the tag's static values and the values resolved from its label keys (empties excluded), giving a single searchable list regardless of source. Non-breaking. - Added Prometheus Alert Manager support to the cases responses. The case payload returned by
GET /cases/cases/v1/{id}and the list atPOST /cases/cases/v1gains aprometheusAlertIndicatorsarray (an array of Prometheus alert indicator objects, undercaseIndicators) listing the Prometheus alerts contributing to the case, and the case events list atGET /cases/cases/v1/{case_id}/eventsgains aprometheusAlertManagerevent-actor variant. Response-only; non-breaking. - Breaking: moved two
/integrations/*endpoints to resolve OpenAPI path ambiguities. The legacy paths have been removed; clients must switch over.POST /integrations/contextual-data/v1/{integration_id}/test→POST /integrations/contextual-data/v1/test/{integration_id}.GET /integrations/extensions/v1/{id}→GET /integrations/extensions/v1/catalog/{id}.
- Added
allocationType(enum:QUOTA_ALLOCATION_TYPE_UNSPECIFIED,QUOTA_ALLOCATION_TYPE_PERCENTAGE,QUOTA_ALLOCATION_TYPE_LOCKED_UNITS) andcxManaged(boolean, response-only) to the quota allocation rule in the quota-rules payload under/dataplan/quota-rules/v1, letting quota rules distinguish percentage allocation from locked units and identify Coralogix-managed rules. Non-breaking. - Added
GET /cases/cases/v1/{case_id}/deep-linksfor retrieving deep-link URLs from a case to related product views. - Added a
PAGERDUTY_INCIDENTSvalue to the connector type enum in the connectors payload (POST/PUT /notifications/notification-center/v1/connectors), enabling notification routing to PagerDuty via the Incidents API. Non-breaking. - Breaking: removed the deprecated team-configs endpoints. The following paths have been deleted; clients must migrate to the equivalent case-settings paths under
/cases/cases/case-settings/v1/configs(see the 2026-05-19 entry).POST /cases/cases/team-configs/v1/configsGET /cases/cases/team-configs/v1/configs/{id}PATCH /cases/cases/team-configs/v1/configs/{id}DELETE /cases/cases/team-configs/v1/configs/{id}GET /cases/cases/team-configs/v1/configs:getActiveGET /cases/cases/team-configs/v1/configs:getSystemDefaults
- Cases API is now public: the following endpoints now appear in the public OpenAPI spec and customer-facing docs.
GET /cases/cases/v1/{id}POST /cases/cases/v1PUT /cases/cases/v1/{id}PUT /cases/priority-override/v1/{id}DELETE /cases/priority-override/v1/{id}POST /cases/assigned/v1/{id}DELETE /cases/assigned/v1/{id}PUT /cases/acknowledged/v1/{id}DELETE /cases/acknowledged/v1/{id}POST /cases/closed/v1/{id}PUT /cases/resolved/v1/{id}POST /cases/filter-values/v1PUT /cases/assigned/v1DELETE /cases/assigned/v1POST /cases/acknowledged/v1POST /cases/resolved/v1POST /cases/closed/v1POST /cases/priority-override/v1DELETE /cases/priority-override/v1GET /cases/grouping-keys/v1
- Added a new public case-settings API for managing team-level case settings. It supersedes the team-configs endpoints, which are now deprecated and will be removed in a future release — clients should migrate to the new paths below.
POST /cases/cases/case-settings/v1/configsGET /cases/cases/case-settings/v1/configs/{id}PATCH /cases/cases/case-settings/v1/configs/{id}DELETE /cases/cases/case-settings/v1/configs/{id}GET /cases/cases/case-settings/v1/configs:getActiveGET /cases/cases/case-settings/v1/configs:getSystemDefaults
- Breaking: moved five
/notifications/notification-center/v1/presets/*endpoints to resolve OpenAPI path ambiguities with/presets/{id}and/presets/{id}/default. The legacy paths have been removed; clients must switch over.POST /notifications/notification-center/v1/presets/custom→POST /notifications/notification-center/v1/presets:createCustom.PUT /notifications/notification-center/v1/presets/custom→PUT /notifications/notification-center/v1/presets:replaceCustom.POST /notifications/notification-center/v1/presets/{id}/default→POST /notifications/notification-center/v1/presets/{id}/default/apply. (This also resolves the/notifications/notification-center/v1/presets/custom/{id}collision, soDELETE /notifications/notification-center/v1/presets/custom/{id}keeps its existing path.)GET /notifications/notification-center/v1/presets/summaries→GET /notifications/notification-center/v1/presets:getDefaultSummary.POST /notifications/notification-center/v1/presets/tests→POST /notifications/notification-center/v1/presets:test.
- Breaking: moved two cases team-config read endpoints to resolve OpenAPI path ambiguities with
/cases/cases/team-configs/v1/configs/{id}. The legacy paths have been removed; clients must switch over.GET /cases/cases/team-configs/v1/configs/active→GET /cases/cases/team-configs/v1/configs:getActive.GET /cases/cases/team-configs/v1/configs/system-defaults→GET /cases/cases/team-configs/v1/configs:getSystemDefaults.
- Breaking: moved three
/aaa/*endpoints to resolve OpenAPI path ambiguities. The legacy paths have been removed; clients must switch over.GET /aaa/api-keys/v3/list→GET /aaa/api-keys/v3/list/all.GET /aaa/team-groups/v2/{group_id}/users→GET /aaa/team-groups/v2/{group_id}/users/list.PATCH /aaa/teams/v2/{team_id}/members/status→PATCH /aaa/teams/v2/{team_id}/members:updateStatuses.
- Added
POST /dataplans/policies/v1/all/forecast-usage, which forecasts the usage in bytes of a draft TCO policy based on the bytes matched by its filter rules over a given time window. - Breaking: moved two dashboards read endpoints to new REST paths to resolve OpenAPI path ambiguities with
/dashboards/dashboards/v1/{dashboard_id}. The legacy paths have been removed; clients must switch over.GET /dashboards/dashboards/v1/catalog→GET /dashboards/dashboards/v1/catalog/list.GET /dashboards/dashboards/v1/slugs/{slug}→GET /dashboards/dashboards/v1/slugs/lookup/{slug}.
- Added optional
targets(array, 1–10 items) to enrichments in the enrichment-rules payload under/enrichment-rules/enrichment-rules/v1, request and response. Each entry is an object with adatasetstring, scoping the enrichment to specific datasets. Non-breaking. - Added optional
roleArnandexternalIdstrings to the S3 target spec in the archive setup payload under/logs/data-setup/v2, request and response, supportingsts:AssumeRole+ external-ID cross-account S3 access. Non-breaking. - Added Cases KPI support across two cases payloads. Team-level KPI thresholds appear in the case-settings config under
caseLifecycle.kpi(an object whosethresholdsarray holds the per-KPI settings) — written onPOST /cases/cases/case-settings/v1/configsandPATCH /cases/cases/case-settings/v1/configs/{id}, and read onGET /cases/cases/case-settings/v1/configs/{id}(and the:getActive/:getSystemDefaultsreads). Case-level breach data appears in the case payload askpiBreaches(an object with abreachedKpisarray; each entry carrieskpiType,casePriority,breachedAt, andbreachStatus) in the case payload returned byGET /cases/cases/v1/{id}and the list atPOST /cases/cases/v1, response-only. Non-breaking. - Added optional
metadataobject (string-to-string map) to the success result of notification test endpoints (response), e.g.POST /notifications/notification-center/v1/connectors:test. Non-breaking. - Added optional
description(string),dpxlFilter(string), andurlFields(array) to the action payload under/actions/actions/v2, request and response. EachurlFieldsentry is an object withname(string) andrequired(boolean). Non-breaking.