Download OpenAPI specification:Download
API for managing HyperDX alerts and dashboards
Retrieves a list of all dashboards for the authenticated team
{- "data": [
- {
- "id": "65f5e4a3b9e77c001a567890",
- "name": "Infrastructure Monitoring",
- "tiles": [
- {
- "id": "65f5e4a3b9e77c001a901234",
- "name": "Server CPU",
- "x": 0,
- "y": 0,
- "w": 6,
- "h": 3,
- "config": {
- "displayType": "line",
- "sourceId": "65f5e4a3b9e77c001a111111",
- "select": [
- {
- "aggFn": "avg",
- "valueExpression": "cpu.usage",
- "where": "host:server-01"
}
]
}
}
], - "tags": [
- "infrastructure",
- "monitoring"
], - "filters": [
- {
- "id": "65f5e4a3b9e77c001a301001",
- "type": "QUERY_EXPRESSION",
- "name": "Environment",
- "expression": "environment",
- "sourceId": "65f5e4a3b9e77c001a111111"
}
]
}, - {
- "id": "65f5e4a3b9e77c001a567891",
- "name": "API Monitoring",
- "tiles": [
- {
- "id": "65f5e4a3b9e77c001a901235",
- "name": "API Errors",
- "x": 0,
- "y": 0,
- "w": 6,
- "h": 3,
- "config": {
- "displayType": "table",
- "sourceId": "65f5e4a3b9e77c001a111112",
- "select": [
- {
- "aggFn": "count",
- "where": "level:error"
}
], - "groupBy": "service",
- "orderBy": "count DESC"
}
}
], - "tags": [
- "api",
- "monitoring"
], - "filters": [
- {
- "id": "65f5e4a3b9e77c001a301002",
- "type": "QUERY_EXPRESSION",
- "name": "Service",
- "expression": "service_name",
- "sourceId": "65f5e4a3b9e77c001a111112"
}
]
}
]
}Creates a new dashboard
| name required | string <= 1024 characters Dashboard name. |
required | Array of objects (TileInput) <= 500 items List of tiles/charts to include in the dashboard. |
| tags | Array of strings <= 50 items [ items <= 32 characters ] Tags for organizing and filtering dashboards. |
Array of objects (FilterInput) Dashboard filter keys to add to the dashboard and apply across all tiles | |
| savedQuery | string or null Optional default dashboard query to persist on the dashboard. |
| savedQueryLanguage | string (QueryLanguage) Enum: "sql" "lucene" Query language for the where clause. |
Array of objects (SavedFilterValue) Optional default dashboard filter values to persist on the dashboard. | |
Array of objects (DashboardContainer) <= 50 items Optional grouping containers. Each tile may join a container via tile.containerId, and a tab inside it via tile.tabId. |
{- "name": "API Monitoring Dashboard",
- "tiles": [
- {
- "name": "API Request Volume",
- "x": 0,
- "y": 0,
- "w": 6,
- "h": 3,
- "config": {
- "displayType": "line",
- "sourceId": "65f5e4a3b9e77c001a111111",
- "select": [
- {
- "aggFn": "count",
- "where": "service:api"
}
]
}
}
], - "tags": [
- "api",
- "monitoring"
], - "filters": [
- {
- "type": "QUERY_EXPRESSION",
- "name": "Environment",
- "expression": "environment",
- "sourceId": "65f5e4a3b9e77c001a111111"
}
]
}{- "data": {
- "id": "65f5e4a3b9e77c001a567890",
- "name": "API Monitoring Dashboard",
- "tiles": [
- {
- "id": "65f5e4a3b9e77c001a901234",
- "name": "API Request Volume",
- "x": 0,
- "y": 0,
- "w": 6,
- "h": 3,
- "config": {
- "displayType": "line",
- "sourceId": "65f5e4a3b9e77c001a111111",
- "select": [
- {
- "aggFn": "count",
- "where": "service:api"
}
]
}
}
], - "tags": [
- "api",
- "monitoring"
], - "filters": [
- {
- "id": "65f5e4a3b9e77c001a301004",
- "type": "QUERY_EXPRESSION",
- "name": "Environment",
- "expression": "environment",
- "sourceId": "65f5e4a3b9e77c001a111111"
}
]
}
}Retrieves a specific dashboard by ID
| id required | string Example: 65f5e4a3b9e77c001a567890 Dashboard ID |
{- "data": {
- "id": "65f5e4a3b9e77c001a567890",
- "name": "Infrastructure Monitoring",
- "tiles": [
- {
- "id": "65f5e4a3b9e77c001a901234",
- "name": "Server CPU",
- "x": 0,
- "y": 0,
- "w": 6,
- "h": 3,
- "config": {
- "displayType": "line",
- "sourceId": "65f5e4a3b9e77c001a111111",
- "select": [
- {
- "aggFn": "avg",
- "valueExpression": "cpu.usage",
- "where": "host:server-01"
}
]
}
}, - {
- "id": "65f5e4a3b9e77c001a901235",
- "name": "Memory Usage",
- "x": 6,
- "y": 0,
- "w": 6,
- "h": 3,
- "config": {
- "displayType": "line",
- "sourceId": "65f5e4a3b9e77c001a111111",
- "select": [
- {
- "aggFn": "avg",
- "valueExpression": "memory.usage",
- "where": "host:server-01"
}
]
}
}
], - "tags": [
- "infrastructure",
- "monitoring"
], - "filters": [
- {
- "id": "65f5e4a3b9e77c001a301003",
- "type": "QUERY_EXPRESSION",
- "name": "Environment",
- "expression": "environment",
- "sourceId": "65f5e4a3b9e77c001a111111"
}
]
}
}Updates an existing dashboard.
Concurrency: This endpoint does not support optimistic concurrency control. Concurrent PUT requests for the same dashboard may silently overwrite each other, which can leave orphan tile-to-container references on layout-shape edits. Clients should serialize edits to a given dashboard.
| id required | string Example: 65f5e4a3b9e77c001a567890 Dashboard ID |
| name required | string <= 1024 characters Dashboard name. |
required | Array of objects (TileInput) <= 500 items Full list of tiles for the dashboard. Existing tiles are matched by ID; tiles with an ID that does not match an existing tile will be assigned a new generated ID. |
| tags | Array of strings <= 50 items [ items <= 32 characters ] Tags for organizing and filtering dashboards. |
Array of objects (Filter) Dashboard filter keys on the dashboard, applied across all tiles | |
| savedQuery | string or null Optional default dashboard query to persist on the dashboard. |
| savedQueryLanguage | string (QueryLanguage) Enum: "sql" "lucene" Query language for the where clause. |
Array of objects (SavedFilterValue) Optional default dashboard filter values to persist on the dashboard. | |
Array of objects (DashboardContainer) <= 50 items Optional grouping containers. Each tile may join a container via tile.containerId, and a tab inside it via tile.tabId. |
{- "name": "Updated Dashboard Name",
- "tiles": [
- {
- "id": "65f5e4a3b9e77c001a901234",
- "name": "Updated Line Chart",
- "x": 0,
- "y": 0,
- "w": 6,
- "h": 3,
- "config": {
- "displayType": "line",
- "sourceId": "65f5e4a3b9e77c001a111111",
- "select": [
- {
- "aggFn": "count",
- "where": "level:error"
}
]
}
}, - {
- "id": "new-tile-123",
- "name": "New Number Chart",
- "x": 6,
- "y": 0,
- "w": 6,
- "h": 3,
- "config": {
- "displayType": "number",
- "sourceId": "65f5e4a3b9e77c001a111111",
- "select": [
- {
- "aggFn": "count",
- "where": "level:info"
}
]
}
}
], - "tags": [
- "production",
- "updated"
], - "filters": [
- {
- "id": "65f5e4a3b9e77c001a301005",
- "type": "QUERY_EXPRESSION",
- "name": "Environment",
- "expression": "environment",
- "sourceId": "65f5e4a3b9e77c001a111111"
}
]
}{- "data": {
- "id": "65f5e4a3b9e77c001a567890",
- "name": "Updated Dashboard Name",
- "tiles": [
- {
- "id": "65f5e4a3b9e77c001a901234",
- "name": "Updated Line Chart",
- "x": 0,
- "y": 0,
- "w": 6,
- "h": 3,
- "config": {
- "displayType": "line",
- "sourceId": "65f5e4a3b9e77c001a111111",
- "select": [
- {
- "aggFn": "count",
- "where": "level:error"
}
]
}
}, - {
- "id": "new-tile-123",
- "name": "New Number Chart",
- "x": 6,
- "y": 0,
- "w": 6,
- "h": 3,
- "config": {
- "displayType": "number",
- "sourceId": "65f5e4a3b9e77c001a111111",
- "select": [
- {
- "aggFn": "count",
- "where": "level:info"
}
]
}
}
], - "tags": [
- "production",
- "updated"
], - "filters": [
- {
- "id": "65f5e4a3b9e77c001a301005",
- "type": "QUERY_EXPRESSION",
- "name": "Environment",
- "expression": "environment",
- "sourceId": "65f5e4a3b9e77c001a111111"
}
]
}
}Validates a dashboard body against the same schema and tile rules used by POST /api/v2/dashboards. The dashboard is never persisted. Use this endpoint at plan time (e.g. from a Terraform provider) to check that a dashboard configuration is valid before applying it.
| name required | string <= 1024 characters Dashboard name. |
required | Array of objects (TileInput) <= 500 items List of tiles/charts to include in the dashboard. |
| tags | Array of strings <= 50 items [ items <= 32 characters ] Tags for organizing and filtering dashboards. |
Array of objects (FilterInput) Dashboard filter keys to add to the dashboard and apply across all tiles | |
| savedQuery | string or null Optional default dashboard query to persist on the dashboard. |
| savedQueryLanguage | string (QueryLanguage) Enum: "sql" "lucene" Query language for the where clause. |
Array of objects (SavedFilterValue) Optional default dashboard filter values to persist on the dashboard. | |
Array of objects (DashboardContainer) <= 50 items Optional grouping containers. Each tile may join a container via tile.containerId, and a tab inside it via tile.tabId. |
{- "name": "New Dashboard",
- "tiles": [
- {
- "name": "Error Rate",
- "x": 0,
- "y": 0,
- "w": 6,
- "h": 3,
- "config": {
- "displayType": "line",
- "sourceId": "65f5e4a3b9e77c001a111111",
- "select": [
- {
- "aggFn": "avg",
- "valueExpression": "Duration",
- "alias": "Request Duration",
- "level": 0.5,
- "where": "service:api",
- "whereLanguage": "sql",
- "metricName": "http.server.duration",
- "metricType": "sum",
- "periodAggFn": "delta",
- "numberFormat": {
- "output": "currency",
- "mantissa": 2,
- "thousandSeparated": true,
- "average": false,
- "decimalBytes": false,
- "factor": 1,
- "currencySymbol": "$",
- "numericUnit": "bytes_iec",
- "unit": "ms"
}
}
], - "groupBy": "host",
- "asRatio": false,
- "alignDateRangeToGranularity": true,
- "fillNulls": true,
- "fitYAxisToData": false,
- "numberFormat": {
- "output": "currency",
- "mantissa": 2,
- "thousandSeparated": true,
- "average": false,
- "decimalBytes": false,
- "factor": 1,
- "currencySymbol": "$",
- "numericUnit": "bytes_iec",
- "unit": "ms"
}, - "compareToPreviousPeriod": false
}, - "containerId": "service-health",
- "tabId": "errors",
- "id": "65f5e4a3b9e77c001a901234",
- "asRatio": false,
- "series": [
- {
- "type": "time",
- "sourceId": "65f5e4a3b9e77c001a567890",
- "aggFn": "avg",
- "level": 0.95,
- "field": "duration",
- "alias": "Request Duration",
- "where": "service:api",
- "whereLanguage": "sql",
- "groupBy": [
- "host"
], - "numberFormat": {
- "output": "currency",
- "mantissa": 2,
- "thousandSeparated": true,
- "average": false,
- "decimalBytes": false,
- "factor": 1,
- "currencySymbol": "$",
- "numericUnit": "bytes_iec",
- "unit": "ms"
}, - "metricDataType": "sum",
- "metricName": "http.server.duration",
- "displayType": "stacked_bar"
}
]
}
], - "tags": [
- "development"
], - "filters": [
- {
- "type": "QUERY_EXPRESSION",
- "name": "Environment",
- "expression": "environment",
- "sourceId": "65f5e4a3b9e77c001a111111",
- "sourceMetricType": "gauge",
- "where": "ServiceName:api",
- "whereLanguage": "lucene",
- "appliesToSourceIds": [
- "65f5e4a3b9e77c001a111111"
]
}
], - "savedQuery": "service.name = 'api'",
- "savedQueryLanguage": "sql",
- "savedFilterValues": [
- {
- "type": "sql",
- "condition": "ServiceName IN ('hdx-oss-dev-api')"
}
], - "containers": [
- {
- "id": "service-health",
- "title": "Service Health",
- "collapsed": false,
- "collapsible": true,
- "bordered": true,
- "tabs": [
- {
- "id": "errors",
- "title": "Errors"
}
]
}
]
}{- "valid": true,
- "errors": [ ],
- "normalized": {
- "name": "My Dashboard",
- "tiles": [ ]
}
}Retrieves a specific alert by ID
| id required | string Example: 65f5e4a3b9e77c001a123456 Alert ID |
{- "data": {
- "id": "65f5e4a3b9e77c001a123456",
- "threshold": 80,
- "interval": "5m",
- "thresholdType": "above",
- "source": "tile",
- "state": "ALERT",
- "channel": {
- "type": "webhook",
- "webhookId": "65f5e4a3b9e77c001a789012"
}, - "teamId": "65f5e4a3b9e77c001a345678",
- "tileId": "65f5e4a3b9e77c001a901234",
- "dashboardId": "65f5e4a3b9e77c001a567890",
- "numConsecutiveWindows": 3,
- "createdAt": "2023-03-15T10:20:30.000Z",
- "updatedAt": "2023-03-15T14:25:10.000Z"
}
}Updates an existing alert
| id required | string Example: 65f5e4a3b9e77c001a123456 Alert ID |
| dashboardId | string or null Dashboard ID for tile-based alerts. |
| tileId | string or null Tile ID for tile-based alerts. Must be a line, stacked bar, or number type tile. |
| savedSearchId | string or null Saved search ID for saved_search alerts. |
| groupBy | string or null Group-by key for saved search alerts. |
| threshold required | number Threshold value for triggering the alert. For between and not_between threshold types, this is the lower bound. |
| thresholdMax | number or null Upper bound for between and not_between threshold types. Required when thresholdType is between or not_between, must be >= threshold. |
| interval required | string (AlertInterval) Enum: "1m" "5m" "15m" "30m" "1h" "6h" "12h" "1d" Evaluation interval. |
| scheduleOffsetMinutes | integer or null >= 0 Offset from the interval boundary in minutes. For example, 2 with a 5m interval evaluates windows at :02, :07, :12, etc. (UTC). |
| scheduleStartAt | string or null <date-time> Absolute UTC start time anchor. Alert windows start from this timestamp and repeat every interval. |
| source | string (AlertSource) Enum: "saved_search" "tile" Alert source type. |
| thresholdType required | string (AlertThresholdType) Enum: "above" "below" "above_exclusive" "below_or_equal" "equal" "not_equal" "between" "not_between" Threshold comparison direction. |
required | any (AlertChannel) |
| name | string or null Human-friendly alert name. |
| message | string or null Alert message template. |
| note | string or null [ 1 .. 4096 ] characters Freeform note for the alert. Supports markdown formatting. |
| numConsecutiveWindows | integer or null >= 1 Fire the alert only after its condition has been met for this many consecutive evaluation windows. While the condition is met but fewer than this many consecutive windows have violated, the alert is in the PENDING state. |
{- "threshold": 500,
- "interval": "1h",
- "thresholdType": "above",
- "source": "tile",
- "dashboardId": "65f5e4a3b9e77c001a567890",
- "tileId": "65f5e4a3b9e77c001a901234",
- "channel": {
- "type": "webhook",
- "webhookId": "65f5e4a3b9e77c001a789012"
}, - "name": "Updated Alert Name",
- "message": "Updated threshold and interval"
}{- "data": {
- "dashboardId": "65f5e4a3b9e77c001a567890",
- "tileId": "65f5e4a3b9e77c001a901234",
- "savedSearchId": "65f5e4a3b9e77c001a345678",
- "groupBy": "ServiceName",
- "threshold": 100,
- "thresholdMax": 500,
- "interval": "1m",
- "scheduleOffsetMinutes": 2,
- "scheduleStartAt": "2026-02-08T10:00:00.000Z",
- "source": "saved_search",
- "thresholdType": "above",
- "channel": {
- "type": "webhook",
- "webhookId": "65f5e4a3b9e77c001a789012"
}, - "name": "Test Alert",
- "message": "Test Alert Message",
- "note": "Threshold raised from 50 to 100 on 2026-01-15. See [runbook](https://wiki.example.com/runbook).",
- "numConsecutiveWindows": 3,
- "id": "65f5e4a3b9e77c001a123456",
- "state": "ALERT",
- "teamId": "65f5e4a3b9e77c001a345678",
- "silenced": {
- "by": "65f5e4a3b9e77c001a234567",
- "at": "2026-03-19T08:00:00.000Z",
- "until": "2026-03-20T08:00:00.000Z"
}, - "executionErrors": [
- {
- "timestamp": "2026-04-17T12:00:00.000Z",
- "type": "QUERY_ERROR",
- "message": "Query timed out after 30s"
}
], - "createdAt": "2023-01-01T00:00:00.000Z",
- "updatedAt": "2023-01-01T00:00:00.000Z"
}
}Retrieves alerts for the authenticated team (paginated). Results are capped at limit (default and maximum 1000). When more records exist than are returned, meta.total exceeds data.length; clients with large collections must page with limit/offset to retrieve them all.
| limit | integer [ 1 .. 1000 ] Default: 1000 Maximum number of alerts to return. |
| offset | integer >= 0 Default: 0 Number of alerts to skip before returning results. |
{- "data": [
- {
- "id": "65f5e4a3b9e77c001a123456",
- "threshold": 100,
- "interval": "15m",
- "thresholdType": "above",
- "source": "tile",
- "state": "OK",
- "channel": {
- "type": "webhook",
- "webhookId": "65f5e4a3b9e77c001a789012"
}, - "teamId": "65f5e4a3b9e77c001a345678",
- "tileId": "65f5e4a3b9e77c001a901234",
- "dashboardId": "65f5e4a3b9e77c001a567890",
- "createdAt": "2023-01-01T00:00:00.000Z",
- "updatedAt": "2023-01-01T00:00:00.000Z"
}
], - "meta": {
- "total": 1,
- "limit": 1000,
- "offset": 0
}
}Creates a new alert
| dashboardId | string or null Dashboard ID for tile-based alerts. |
| tileId | string or null Tile ID for tile-based alerts. Must be a line, stacked bar, or number type tile. |
| savedSearchId | string or null Saved search ID for saved_search alerts. |
| groupBy | string or null Group-by key for saved search alerts. |
| threshold required | number Threshold value for triggering the alert. For between and not_between threshold types, this is the lower bound. |
| thresholdMax | number or null Upper bound for between and not_between threshold types. Required when thresholdType is between or not_between, must be >= threshold. |
| interval required | string (AlertInterval) Enum: "1m" "5m" "15m" "30m" "1h" "6h" "12h" "1d" Evaluation interval. |
| scheduleOffsetMinutes | integer or null >= 0 Offset from the interval boundary in minutes. For example, 2 with a 5m interval evaluates windows at :02, :07, :12, etc. (UTC). |
| scheduleStartAt | string or null <date-time> Absolute UTC start time anchor. Alert windows start from this timestamp and repeat every interval. |
| source | string (AlertSource) Enum: "saved_search" "tile" Alert source type. |
| thresholdType required | string (AlertThresholdType) Enum: "above" "below" "above_exclusive" "below_or_equal" "equal" "not_equal" "between" "not_between" Threshold comparison direction. |
required | any (AlertChannel) |
| name | string or null Human-friendly alert name. |
| message | string or null Alert message template. |
| note | string or null [ 1 .. 4096 ] characters Freeform note for the alert. Supports markdown formatting. |
| numConsecutiveWindows | integer or null >= 1 Fire the alert only after its condition has been met for this many consecutive evaluation windows. While the condition is met but fewer than this many consecutive windows have violated, the alert is in the PENDING state. |
{- "dashboardId": "65f5e4a3b9e77c001a567890",
- "tileId": "65f5e4a3b9e77c001a901234",
- "threshold": 100,
- "interval": "1h",
- "source": "tile",
- "thresholdType": "above",
- "channel": {
- "type": "webhook",
- "webhookId": "65f5e4a3b9e77c001a789012"
}, - "name": "Error Spike Alert",
- "message": "Error rate has exceeded 100 in the last hour",
- "numConsecutiveWindows": 3
}{- "data": {
- "dashboardId": "65f5e4a3b9e77c001a567890",
- "tileId": "65f5e4a3b9e77c001a901234",
- "savedSearchId": "65f5e4a3b9e77c001a345678",
- "groupBy": "ServiceName",
- "threshold": 100,
- "thresholdMax": 500,
- "interval": "1m",
- "scheduleOffsetMinutes": 2,
- "scheduleStartAt": "2026-02-08T10:00:00.000Z",
- "source": "saved_search",
- "thresholdType": "above",
- "channel": {
- "type": "webhook",
- "webhookId": "65f5e4a3b9e77c001a789012"
}, - "name": "Test Alert",
- "message": "Test Alert Message",
- "note": "Threshold raised from 50 to 100 on 2026-01-15. See [runbook](https://wiki.example.com/runbook).",
- "numConsecutiveWindows": 3,
- "id": "65f5e4a3b9e77c001a123456",
- "state": "ALERT",
- "teamId": "65f5e4a3b9e77c001a345678",
- "silenced": {
- "by": "65f5e4a3b9e77c001a234567",
- "at": "2026-03-19T08:00:00.000Z",
- "until": "2026-03-20T08:00:00.000Z"
}, - "executionErrors": [
- {
- "timestamp": "2026-04-17T12:00:00.000Z",
- "type": "QUERY_ERROR",
- "message": "Query timed out after 30s"
}
], - "createdAt": "2023-01-01T00:00:00.000Z",
- "updatedAt": "2023-01-01T00:00:00.000Z"
}
}Retrieves time series data based on configured series parameters
required | Array of objects (ChartSeries) [ 1 .. 5 ] items Array of series configurations |
| startTime required | number Start timestamp in milliseconds |
| endTime required | number End timestamp in milliseconds |
| granularity | string Enum: "30s" "1m" "5m" "10m" "15m" "30m" "1h" "2h" "6h" "12h" "1d" "2d" "7d" "30d" "auto" Time bucket size for aggregations |
| seriesReturnType | string Enum: "ratio" "column" Format of the returned data |
{- "startTime": 1647014400000,
- "endTime": 1647100800000,
- "granularity": "1h",
- "series": [
- {
- "sourceId": "65f5e4a3b9e77c001a123456",
- "aggFn": "count",
- "where": "SeverityText:error",
- "groupBy": [ ]
}
]
}{- "data": [
- {
- "ts_bucket": 1647014400000,
- "series_0.data": 42
}, - {
- "ts_bucket": 1647018000000,
- "series_0.data": 37
}, - {
- "ts_bucket": 1647021600000,
- "series_0.data": 53
}
]
}Retrieves a list of all ClickHouse connections for the authenticated team. Passwords are never returned.
{- "data": [
- {
- "id": "507f1f77bcf86cd799439012",
- "name": "Production ClickHouse",
- "username": "default",
- "hyperdxSettingPrefix": "hyperdx_",
- "isPrometheusEndpoint": false,
- "createdAt": "2025-01-01T00:00:00.000Z",
- "updatedAt": "2025-06-15T10:30:00.000Z"
}
], - "meta": {
- "skipped": 1,
- "skippedIds": [
- "507f1f77bcf86cd799439012"
]
}
}Creates a new ClickHouse connection
| name required | string Display name for the connection. |
| host required | string ClickHouse HTTP endpoint URL. |
| username required | string ClickHouse username. |
| password | string ClickHouse password. Never returned by the API. |
| hyperdxSettingPrefix | string or null Optional prefix for HyperDX-specific ClickHouse settings. Must only contain alphanumeric characters and underscores. |
| isPrometheusEndpoint | boolean Optional. When true, |
{- "name": "Production ClickHouse",
- "username": "default",
- "password": "my-secret-password",
- "hyperdxSettingPrefix": "hyperdx_",
- "isPrometheusEndpoint": false
}{- "data": {
- "id": "507f1f77bcf86cd799439012",
- "name": "Production ClickHouse",
- "username": "default",
- "hyperdxSettingPrefix": "hyperdx_",
- "isPrometheusEndpoint": false,
- "createdAt": "2025-01-01T00:00:00.000Z",
- "updatedAt": "2025-06-15T10:30:00.000Z"
}
}Retrieves a specific ClickHouse connection by ID. Passwords are never returned.
| id required | string Example: 507f1f77bcf86cd799439012 Connection ID |
{- "data": {
- "id": "507f1f77bcf86cd799439012",
- "name": "Production ClickHouse",
- "username": "default",
- "hyperdxSettingPrefix": "hyperdx_",
- "isPrometheusEndpoint": false,
- "createdAt": "2025-01-01T00:00:00.000Z",
- "updatedAt": "2025-06-15T10:30:00.000Z"
}
}Updates an existing ClickHouse connection.
Field semantics: if password is omitted or empty the existing
password is kept. hyperdxSettingPrefix is cleared when set to null
or an empty string, and prometheusEndpoint is cleared when set to
null; both are kept unchanged when omitted.
| id required | string Example: 507f1f77bcf86cd799439012 Connection ID |
| name required | string Display name for the connection. |
| host required | string ClickHouse HTTP endpoint URL. |
| username required | string ClickHouse username. |
| password | string ClickHouse password. If omitted or empty, the existing password is kept. |
| hyperdxSettingPrefix | string or null Optional prefix for HyperDX-specific ClickHouse settings. Set to null or an empty string to clear the existing value. If omitted, the existing value is kept. |
| isPrometheusEndpoint | boolean Optional. When true, |
{- "name": "Production ClickHouse",
- "username": "default",
- "password": "my-new-secret-password",
- "hyperdxSettingPrefix": "hyperdx_",
- "isPrometheusEndpoint": false
}{- "data": {
- "id": "507f1f77bcf86cd799439012",
- "name": "Production ClickHouse",
- "username": "default",
- "hyperdxSettingPrefix": "hyperdx_",
- "isPrometheusEndpoint": false,
- "createdAt": "2025-01-01T00:00:00.000Z",
- "updatedAt": "2025-06-15T10:30:00.000Z"
}
}Retrieves a list of all sources for the authenticated team
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "name": "Logs",
- "section": "Billing",
- "disabled": false,
- "kind": "log",
- "connection": "507f1f77bcf86cd799439012",
- "from": {
- "databaseName": "otel",
- "tableName": "otel_logs"
}, - "querySettings": [
- {
- "setting": "max_threads",
- "value": "4"
}
], - "defaultTableSelectExpression": "Timestamp, ServiceName, SeverityText, Body",
- "timestampValueExpression": "Timestamp",
- "serviceNameExpression": "ServiceName",
- "severityTextExpression": "SeverityText",
- "bodyExpression": "Body",
- "eventAttributesExpression": "LogAttributes",
- "resourceAttributesExpression": "ResourceAttributes",
- "displayedTimestampValueExpression": "TimestampTime",
- "metricSourceId": "507f1f77bcf86cd799439013",
- "traceSourceId": "507f1f77bcf86cd799439014",
- "traceIdExpression": "TraceId",
- "spanIdExpression": "SpanId",
- "implicitColumnExpression": "Body",
- "knownColumnsListExpression": "Timestamp, Body, ServiceName",
- "useTextIndexForImplicitColumn": "auto",
- "highlightedTraceAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "highlightedRowAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "materializedViews": [
- {
- "databaseName": "otel",
- "tableName": "otel_logs_mv_5m",
- "dimensionColumns": "ServiceName, SeverityText",
- "minGranularity": "5m",
- "minDate": "2025-01-01T00:00:00Z",
- "timestampColumn": "Timestamp",
- "aggregatedColumns": [
- {
- "sourceColumn": "Duration",
- "aggFn": "sum",
- "mvColumn": "sum__Duration"
}
]
}
], - "metadataMaterializedViews": {
- "keyRollupTable": "otel_logs_key_rollup_15m",
- "kvRollupTable": "otel_logs_kv_rollup_15m",
- "granularity": "15m"
}
}
]
}Creates a new source.
The request body is a source object without the id field. If an
id is sent anyway it is silently ignored (stripped before
validation — the request is never rejected because of it).
Granularity fields
(materializedViews[].minGranularity and
metadataMaterializedViews.granularity) accept the same short format
the API returns (e.g. 5m, 15s, 1h, 1d).
| name required | string Display name for the source. |
| section | string <= 256 characters Optional grouping label used to organize sources in the source selector. Sources that share a section value are displayed together. |
| disabled | boolean or null When true, the source is hidden from source selectors in the UI. Defaults to false. |
| kind required | string Source kind discriminator. Must be "log" for log sources. |
| connection required | string ID of the ClickHouse connection used by this source. |
required | object (SourceFrom) |
Array of objects or null (QuerySetting) Optional ClickHouse query settings applied when querying this source. | |
| defaultTableSelectExpression required | string Default columns selected in search results (this can be customized per search later) |
| timestampValueExpression required | string DateTime column or expression that is part of your table's primary key. |
| serviceNameExpression | string or null Expression to extract the service name from log rows. |
| severityTextExpression | string or null Expression to extract the severity/log level text. |
| bodyExpression | string or null Expression to extract the log message body. |
| eventAttributesExpression | string or null Expression to extract event-level attributes. |
| resourceAttributesExpression | string or null Expression to extract resource-level attributes. |
| displayedTimestampValueExpression | string or null This DateTime column is used to display and order search results. |
| metricSourceId | string or null HyperDX Source for metrics associated with logs. Optional |
| traceSourceId | string or null HyperDX Source for traces associated with logs. Optional |
| traceIdExpression | string or null Expression to extract the trace ID for correlating logs with traces. |
| spanIdExpression | string or null Expression to extract the span ID for correlating logs with traces. |
| implicitColumnExpression | string or null Column used for full text search if no property is specified in a Lucene-based search. Typically the message body of a log. |
| knownColumnsListExpression | string or null For Distributed table sources whose target tables have non-matching column sets. A list of columns supported across all target tables, used instead of SELECT * when fetching full row data. Leave blank to select all columns. |
| useTextIndexForImplicitColumn | string or null Enum: "auto" "enabled" "disabled" Controls whether lucene rendering uses ClickHouse text indices via hasAllTokens() against the implicit column. "auto" detects a covering index at query time, "enabled" forces text index usage, "disabled" forces a LIKE/hasToken fallback. |
Array of objects or null (HighlightedAttributeExpression) Expressions defining trace-level attributes which are displayed in the trace view for the selected trace. | |
Array of objects or null (HighlightedAttributeExpression) Expressions defining row-level attributes which are displayed in the row side panel for the selected row. | |
Array of objects or null (MaterializedView) Configure materialized views for query optimization. These pre-aggregated views can significantly improve query performance on aggregation queries. | |
object or null Configure materialized views for fast field discovery and value autocomplete. |
{- "name": "Logs",
- "section": "Billing",
- "disabled": false,
- "kind": "log",
- "connection": "507f1f77bcf86cd799439012",
- "from": {
- "databaseName": "otel",
- "tableName": "otel_logs"
}, - "querySettings": [
- {
- "setting": "max_threads",
- "value": "4"
}
], - "defaultTableSelectExpression": "Timestamp, ServiceName, SeverityText, Body",
- "timestampValueExpression": "Timestamp",
- "serviceNameExpression": "ServiceName",
- "severityTextExpression": "SeverityText",
- "bodyExpression": "Body",
- "eventAttributesExpression": "LogAttributes",
- "resourceAttributesExpression": "ResourceAttributes",
- "displayedTimestampValueExpression": "TimestampTime",
- "metricSourceId": "507f1f77bcf86cd799439013",
- "traceSourceId": "507f1f77bcf86cd799439014",
- "traceIdExpression": "TraceId",
- "spanIdExpression": "SpanId",
- "implicitColumnExpression": "Body",
- "knownColumnsListExpression": "Timestamp, Body, ServiceName",
- "useTextIndexForImplicitColumn": "auto",
- "highlightedTraceAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "highlightedRowAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "materializedViews": [
- {
- "databaseName": "otel",
- "tableName": "otel_logs_mv_5m",
- "dimensionColumns": "ServiceName, SeverityText",
- "minGranularity": "5m",
- "minDate": "2025-01-01T00:00:00Z",
- "timestampColumn": "Timestamp",
- "aggregatedColumns": [
- {
- "sourceColumn": "Duration",
- "aggFn": "sum",
- "mvColumn": "sum__Duration"
}
]
}
], - "metadataMaterializedViews": {
- "keyRollupTable": "otel_logs_key_rollup_15m",
- "kvRollupTable": "otel_logs_kv_rollup_15m",
- "granularity": "15m"
}
}{- "data": {
- "id": "507f1f77bcf86cd799439011",
- "name": "Logs",
- "section": "Billing",
- "disabled": false,
- "kind": "log",
- "connection": "507f1f77bcf86cd799439012",
- "from": {
- "databaseName": "otel",
- "tableName": "otel_logs"
}, - "querySettings": [
- {
- "setting": "max_threads",
- "value": "4"
}
], - "defaultTableSelectExpression": "Timestamp, ServiceName, SeverityText, Body",
- "timestampValueExpression": "Timestamp",
- "serviceNameExpression": "ServiceName",
- "severityTextExpression": "SeverityText",
- "bodyExpression": "Body",
- "eventAttributesExpression": "LogAttributes",
- "resourceAttributesExpression": "ResourceAttributes",
- "displayedTimestampValueExpression": "TimestampTime",
- "metricSourceId": "507f1f77bcf86cd799439013",
- "traceSourceId": "507f1f77bcf86cd799439014",
- "traceIdExpression": "TraceId",
- "spanIdExpression": "SpanId",
- "implicitColumnExpression": "Body",
- "knownColumnsListExpression": "Timestamp, Body, ServiceName",
- "useTextIndexForImplicitColumn": "auto",
- "highlightedTraceAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "highlightedRowAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "materializedViews": [
- {
- "databaseName": "otel",
- "tableName": "otel_logs_mv_5m",
- "dimensionColumns": "ServiceName, SeverityText",
- "minGranularity": "5m",
- "minDate": "2025-01-01T00:00:00Z",
- "timestampColumn": "Timestamp",
- "aggregatedColumns": [
- {
- "sourceColumn": "Duration",
- "aggFn": "sum",
- "mvColumn": "sum__Duration"
}
]
}
], - "metadataMaterializedViews": {
- "keyRollupTable": "otel_logs_key_rollup_15m",
- "kvRollupTable": "otel_logs_kv_rollup_15m",
- "granularity": "15m"
}
}
}Retrieves a specific source by ID
| id required | string Example: 507f1f77bcf86cd799439011 Source ID |
{- "data": {
- "id": "507f1f77bcf86cd799439011",
- "name": "Logs",
- "section": "Billing",
- "disabled": false,
- "kind": "log",
- "connection": "507f1f77bcf86cd799439012",
- "from": {
- "databaseName": "otel",
- "tableName": "otel_logs"
}, - "querySettings": [
- {
- "setting": "max_threads",
- "value": "4"
}
], - "defaultTableSelectExpression": "Timestamp, ServiceName, SeverityText, Body",
- "timestampValueExpression": "Timestamp",
- "serviceNameExpression": "ServiceName",
- "severityTextExpression": "SeverityText",
- "bodyExpression": "Body",
- "eventAttributesExpression": "LogAttributes",
- "resourceAttributesExpression": "ResourceAttributes",
- "displayedTimestampValueExpression": "TimestampTime",
- "metricSourceId": "507f1f77bcf86cd799439013",
- "traceSourceId": "507f1f77bcf86cd799439014",
- "traceIdExpression": "TraceId",
- "spanIdExpression": "SpanId",
- "implicitColumnExpression": "Body",
- "knownColumnsListExpression": "Timestamp, Body, ServiceName",
- "useTextIndexForImplicitColumn": "auto",
- "highlightedTraceAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "highlightedRowAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "materializedViews": [
- {
- "databaseName": "otel",
- "tableName": "otel_logs_mv_5m",
- "dimensionColumns": "ServiceName, SeverityText",
- "minGranularity": "5m",
- "minDate": "2025-01-01T00:00:00Z",
- "timestampColumn": "Timestamp",
- "aggregatedColumns": [
- {
- "sourceColumn": "Duration",
- "aggFn": "sum",
- "mvColumn": "sum__Duration"
}
]
}
], - "metadataMaterializedViews": {
- "keyRollupTable": "otel_logs_key_rollup_15m",
- "kvRollupTable": "otel_logs_kv_rollup_15m",
- "granularity": "15m"
}
}
}Updates an existing source. The full source object must be provided; this is a replace, not a patch.
The request body is a source object without the id field. If an
id is sent anyway it is silently ignored (stripped before
validation — never a 400); the path parameter alone identifies the
source. Granularity fields (materializedViews[].minGranularity and
metadataMaterializedViews.granularity) accept the same short format
the API returns (e.g. 5m, 15s, 1h, 1d).
| id required | string Example: 507f1f77bcf86cd799439011 Source ID |
| name required | string Display name for the source. |
| section | string <= 256 characters Optional grouping label used to organize sources in the source selector. Sources that share a section value are displayed together. |
| disabled | boolean or null When true, the source is hidden from source selectors in the UI. Defaults to false. |
| kind required | string Source kind discriminator. Must be "log" for log sources. |
| connection required | string ID of the ClickHouse connection used by this source. |
required | object (SourceFrom) |
Array of objects or null (QuerySetting) Optional ClickHouse query settings applied when querying this source. | |
| defaultTableSelectExpression required | string Default columns selected in search results (this can be customized per search later) |
| timestampValueExpression required | string DateTime column or expression that is part of your table's primary key. |
| serviceNameExpression | string or null Expression to extract the service name from log rows. |
| severityTextExpression | string or null Expression to extract the severity/log level text. |
| bodyExpression | string or null Expression to extract the log message body. |
| eventAttributesExpression | string or null Expression to extract event-level attributes. |
| resourceAttributesExpression | string or null Expression to extract resource-level attributes. |
| displayedTimestampValueExpression | string or null This DateTime column is used to display and order search results. |
| metricSourceId | string or null HyperDX Source for metrics associated with logs. Optional |
| traceSourceId | string or null HyperDX Source for traces associated with logs. Optional |
| traceIdExpression | string or null Expression to extract the trace ID for correlating logs with traces. |
| spanIdExpression | string or null Expression to extract the span ID for correlating logs with traces. |
| implicitColumnExpression | string or null Column used for full text search if no property is specified in a Lucene-based search. Typically the message body of a log. |
| knownColumnsListExpression | string or null For Distributed table sources whose target tables have non-matching column sets. A list of columns supported across all target tables, used instead of SELECT * when fetching full row data. Leave blank to select all columns. |
| useTextIndexForImplicitColumn | string or null Enum: "auto" "enabled" "disabled" Controls whether lucene rendering uses ClickHouse text indices via hasAllTokens() against the implicit column. "auto" detects a covering index at query time, "enabled" forces text index usage, "disabled" forces a LIKE/hasToken fallback. |
Array of objects or null (HighlightedAttributeExpression) Expressions defining trace-level attributes which are displayed in the trace view for the selected trace. | |
Array of objects or null (HighlightedAttributeExpression) Expressions defining row-level attributes which are displayed in the row side panel for the selected row. | |
Array of objects or null (MaterializedView) Configure materialized views for query optimization. These pre-aggregated views can significantly improve query performance on aggregation queries. | |
object or null Configure materialized views for fast field discovery and value autocomplete. |
{- "name": "Logs",
- "section": "Billing",
- "disabled": false,
- "kind": "log",
- "connection": "507f1f77bcf86cd799439012",
- "from": {
- "databaseName": "otel",
- "tableName": "otel_logs"
}, - "querySettings": [
- {
- "setting": "max_threads",
- "value": "4"
}
], - "defaultTableSelectExpression": "Timestamp, ServiceName, SeverityText, Body",
- "timestampValueExpression": "Timestamp",
- "serviceNameExpression": "ServiceName",
- "severityTextExpression": "SeverityText",
- "bodyExpression": "Body",
- "eventAttributesExpression": "LogAttributes",
- "resourceAttributesExpression": "ResourceAttributes",
- "displayedTimestampValueExpression": "TimestampTime",
- "metricSourceId": "507f1f77bcf86cd799439013",
- "traceSourceId": "507f1f77bcf86cd799439014",
- "traceIdExpression": "TraceId",
- "spanIdExpression": "SpanId",
- "implicitColumnExpression": "Body",
- "knownColumnsListExpression": "Timestamp, Body, ServiceName",
- "useTextIndexForImplicitColumn": "auto",
- "highlightedTraceAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "highlightedRowAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "materializedViews": [
- {
- "databaseName": "otel",
- "tableName": "otel_logs_mv_5m",
- "dimensionColumns": "ServiceName, SeverityText",
- "minGranularity": "5m",
- "minDate": "2025-01-01T00:00:00Z",
- "timestampColumn": "Timestamp",
- "aggregatedColumns": [
- {
- "sourceColumn": "Duration",
- "aggFn": "sum",
- "mvColumn": "sum__Duration"
}
]
}
], - "metadataMaterializedViews": {
- "keyRollupTable": "otel_logs_key_rollup_15m",
- "kvRollupTable": "otel_logs_kv_rollup_15m",
- "granularity": "15m"
}
}{- "data": {
- "id": "507f1f77bcf86cd799439011",
- "name": "Logs",
- "section": "Billing",
- "disabled": false,
- "kind": "log",
- "connection": "507f1f77bcf86cd799439012",
- "from": {
- "databaseName": "otel",
- "tableName": "otel_logs"
}, - "querySettings": [
- {
- "setting": "max_threads",
- "value": "4"
}
], - "defaultTableSelectExpression": "Timestamp, ServiceName, SeverityText, Body",
- "timestampValueExpression": "Timestamp",
- "serviceNameExpression": "ServiceName",
- "severityTextExpression": "SeverityText",
- "bodyExpression": "Body",
- "eventAttributesExpression": "LogAttributes",
- "resourceAttributesExpression": "ResourceAttributes",
- "displayedTimestampValueExpression": "TimestampTime",
- "metricSourceId": "507f1f77bcf86cd799439013",
- "traceSourceId": "507f1f77bcf86cd799439014",
- "traceIdExpression": "TraceId",
- "spanIdExpression": "SpanId",
- "implicitColumnExpression": "Body",
- "knownColumnsListExpression": "Timestamp, Body, ServiceName",
- "useTextIndexForImplicitColumn": "auto",
- "highlightedTraceAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "highlightedRowAttributeExpressions": [
- {
- "sqlExpression": "SpanAttributes['http.status_code']",
- "luceneExpression": "http.status_code",
- "alias": "HTTP Status Code"
}
], - "materializedViews": [
- {
- "databaseName": "otel",
- "tableName": "otel_logs_mv_5m",
- "dimensionColumns": "ServiceName, SeverityText",
- "minGranularity": "5m",
- "minDate": "2025-01-01T00:00:00Z",
- "timestampColumn": "Timestamp",
- "aggregatedColumns": [
- {
- "sourceColumn": "Duration",
- "aggFn": "sum",
- "mvColumn": "sum__Duration"
}
]
}
], - "metadataMaterializedViews": {
- "keyRollupTable": "otel_logs_key_rollup_15m",
- "kvRollupTable": "otel_logs_kv_rollup_15m",
- "granularity": "15m"
}
}
}Retrieves webhooks for the authenticated team (paginated). Results are capped at limit (default and maximum 1000). When more records exist than are returned, meta.total exceeds data.length; clients with large collections must page with limit/offset to retrieve them all.
| limit | integer [ 1 .. 1000 ] Default: 1000 Maximum number of webhooks to return. |
| offset | integer >= 0 Default: 0 Number of webhooks to skip before returning results. |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "name": "Production Alerts",
- "service": "slack",
- "description": "Sends critical alerts to the #incidents channel",
- "updatedAt": "2025-06-15T10:30:00.000Z",
- "createdAt": "2025-01-01T00:00:00.000Z"
}
], - "meta": {
- "total": 142,
- "limit": 50,
- "offset": 100
}
}Creates a new webhook for the authenticated team.
| name required | string <= 1024 characters Webhook name. Must be unique per service within the team. |
| service required | string Enum: "slack" "incidentio" "generic" Webhook service type. |
| url required | string <uri> <= 2048 characters Webhook destination URL. |
| description | string <= 2048 characters Webhook description, shown in the UI. |
| body | string <= 16384 characters Optional request body template. Only for generic/incidentio; rejected for slack. |
object <= 100 properties Write-only. Custom HTTP headers sent with the webhook request. Never returned on read. Only for generic/incidentio; rejected for slack. Each value is capped at 4096 characters. | |
object <= 100 properties Write-only. Query parameters appended to the webhook URL. Never returned on read. Only for generic/incidentio; rejected for slack. Each value is capped at 4096 characters. |
{- "name": "Production Alerts",
- "service": "slack",
- "description": "Sends critical alerts to the #incidents channel",
- "body": "{\"alert\": \"{{title}}\", \"severity\": \"{{level}}\"}",
- "headers": {
- "Authorization": "Bearer secret-token"
}, - "queryParams": {
- "property1": "string",
- "property2": "string"
}
}{- "data": {
- "id": "507f1f77bcf86cd799439011",
- "name": "Production Alerts",
- "service": "slack",
- "description": "Sends critical alerts to the #incidents channel",
- "updatedAt": "2025-06-15T10:30:00.000Z",
- "createdAt": "2025-01-01T00:00:00.000Z"
}
}Replaces an existing webhook. Readable optional fields
(description, body) are a full replace: omitting them clears
them. The write-only fields headers and queryParams are never
returned on read, so omitting them preserves the stored values;
send an explicit empty object ({}) to clear them. Exception: if the
destination (url or service) changes, omitted headers/
queryParams are cleared rather than preserved so stored secrets are
never forwarded to a new destination.
| id required | string Example: 507f1f77bcf86cd799439011 Webhook ID |
| name required | string <= 1024 characters Webhook name. Must be unique per service within the team. |
| service required | string Enum: "slack" "incidentio" "generic" Webhook service type. |
| url required | string <uri> <= 2048 characters Webhook destination URL. |
| description | string <= 2048 characters Webhook description, shown in the UI. |
| body | string <= 16384 characters Optional request body template. Only for generic/incidentio; rejected for slack. |
object <= 100 properties Write-only. Custom HTTP headers sent with the webhook request. Never returned on read. Only for generic/incidentio; rejected for slack. Each value is capped at 4096 characters. | |
object <= 100 properties Write-only. Query parameters appended to the webhook URL. Never returned on read. Only for generic/incidentio; rejected for slack. Each value is capped at 4096 characters. |
{- "name": "Production Alerts",
- "service": "slack",
- "description": "Sends critical alerts to the #incidents channel",
- "body": "{\"alert\": \"{{title}}\", \"severity\": \"{{level}}\"}",
- "headers": {
- "Authorization": "Bearer secret-token"
}, - "queryParams": {
- "property1": "string",
- "property2": "string"
}
}{- "data": {
- "id": "507f1f77bcf86cd799439011",
- "name": "Production Alerts",
- "service": "slack",
- "description": "Sends critical alerts to the #incidents channel",
- "updatedAt": "2025-06-15T10:30:00.000Z",
- "createdAt": "2025-01-01T00:00:00.000Z"
}
}Deletes a webhook. Blocked with a 409 while any alert still references it — reassign or remove those alerts first — so deletion never leaves an alert pointing at a missing webhook (which would silently drop notifications). Mirrors the internal webhook delete guard.
| id required | string Example: 507f1f77bcf86cd799439011 Webhook ID |
{ }Fetch individual log or trace rows from a HyperDX source.
This endpoint mirrors the "search" panel mode in the HyperDX UI. HyperDX applies the same query optimizations used in the UI:
Authentication: Bearer token (personal API key from Team Settings).
| sourceId required | string Source ID to query. Call GET /api/v2/sources to list available sources. The source determines the underlying ClickHouse table (e.g. otel.otel_logs, otel.otel_traces) and its column schema. |
| startTime | string <date-time> Start of the query window (ISO 8601). Defaults to 15 minutes before endTime. Must be before endTime. |
| endTime | string <date-time> End of the query window (ISO 8601). Defaults to now. |
| where | string <= 8192 characters Default: "" Row filter expression. The language is controlled by whereLanguage. Lucene examples (default): SeverityText:ERROR pipedream.pipeline_name:my-pipeline AND SeverityText:ERROR Body:timeout SQL examples (whereLanguage: "sql"):
SeverityText = 'ERROR'
|
| whereLanguage | string Default: "lucene" Enum: "lucene" "sql" Language used for the where filter. Default is lucene. |
| select | string <= 4096 characters Default: "" Comma-separated list of ClickHouse column expressions to include in each result row. When omitted the source's default select expression is used. Each entry is a ClickHouse SQL expression executed under the team's database user. Semicolons and subqueries (SELECT keyword) are rejected; use column references, map lookups, or function calls only. HyperDX rewrites known attribute column names to their materialized equivalents automatically; you can still pass the logical name. |
| orderBy | string <= 1024 characters ClickHouse ORDER BY expression. When omitted the source's default ordering (typically timestamp DESC) is used. |
| maxResults | integer [ 1 .. 2000 ] Default: 100 Maximum number of rows to return. Default is 100, max is 2000. |
| offset | integer [ 0 .. 10000 ] Default: 0 Number of rows to skip (best-effort offset pagination). Default is 0, max is 10000. Offset pagination is non-deterministic when multiple rows share the same timestamp; for reliable deep paging filter by the last Timestamp value returned in the previous page instead of using a large offset. |
{- "sourceId": "69b46cb0d964ce2d0b9506a8",
- "startTime": "2026-05-10T00:00:00Z",
- "endTime": "2026-05-10T01:00:00Z",
- "where": "SeverityText:ERROR",
- "select": "Timestamp,SeverityText,Body,ServiceName",
- "maxResults": 50
}{- "data": [
- {
- "Timestamp": "2026-05-10T00:01:23.456789000Z",
- "SeverityText": "ERROR",
- "Body": "connection refused: redis:6379",
- "ServiceName": "api-service"
}
], - "rows": 1
}Retrieves saved searches for the authenticated team (paginated). Results are capped at limit (default and maximum 1000). When more records exist than are returned, meta.total exceeds data.length; clients with large collections must page with limit/offset to retrieve them all.
| limit | integer [ 1 .. 1000 ] Default: 1000 Maximum number of saved searches to return. |
| offset | integer >= 0 Default: 0 Number of saved searches to skip before returning results. |
{- "data": [
- {
- "id": "507f1f77bcf86cd799439011",
- "name": "Production Errors",
- "sourceId": "507f1f77bcf86cd799439012",
- "select": "Timestamp, ServiceName, Body",
- "where": "SeverityText:ERROR",
- "whereLanguage": "lucene",
- "orderBy": "Timestamp DESC",
- "tags": [
- "production",
- "errors"
], - "filters": [
- {
- "type": "sql",
- "condition": "ServiceName IN ('checkout', 'payments')"
}
], - "teamId": "507f1f77bcf86cd799439013",
- "createdAt": "2025-01-01T00:00:00.000Z",
- "updatedAt": "2025-06-15T10:30:00.000Z"
}
], - "meta": {
- "total": 142,
- "limit": 50,
- "offset": 100
}
}Creates a new saved search.
| name required | string <= 1024 characters Display name for the saved search. |
| sourceId required | string ID of the source to query. Must belong to the team. |
| select | string <= 4096 characters Comma-separated list of column expressions to display. Empty uses the source default. |
| where | string <= 8192 characters Row filter expression. The language is controlled by whereLanguage. |
| whereLanguage | string Default: "lucene" Enum: "lucene" "sql" Language used for the where filter. |
| orderBy | string <= 1024 characters ORDER BY expression. Empty uses the source default. |
| tags | Array of strings <= 50 items [ items <= 32 characters ] Tags used to organize saved searches. |
Array of objects (SavedSearchFilter) <= 100 items Structured pinned filters applied to the search. |
{- "name": "Production Errors",
- "sourceId": "507f1f77bcf86cd799439012",
- "select": "Timestamp, ServiceName, Body",
- "where": "SeverityText:ERROR",
- "whereLanguage": "lucene",
- "orderBy": "Timestamp DESC",
- "tags": [
- "production",
- "errors"
], - "filters": [
- {
- "type": "sql",
- "condition": "ServiceName IN ('checkout', 'payments')"
}
]
}{- "data": {
- "id": "507f1f77bcf86cd799439011",
- "name": "Production Errors",
- "sourceId": "507f1f77bcf86cd799439012",
- "select": "Timestamp, ServiceName, Body",
- "where": "SeverityText:ERROR",
- "whereLanguage": "lucene",
- "orderBy": "Timestamp DESC",
- "tags": [
- "production",
- "errors"
], - "filters": [
- {
- "type": "sql",
- "condition": "ServiceName IN ('checkout', 'payments')"
}
], - "teamId": "507f1f77bcf86cd799439013",
- "createdAt": "2025-01-01T00:00:00.000Z",
- "updatedAt": "2025-06-15T10:30:00.000Z"
}
}Retrieves a specific saved search by ID.
| id required | string Example: 507f1f77bcf86cd799439011 Saved search ID |
{- "data": {
- "id": "507f1f77bcf86cd799439011",
- "name": "Production Errors",
- "sourceId": "507f1f77bcf86cd799439012",
- "select": "Timestamp, ServiceName, Body",
- "where": "SeverityText:ERROR",
- "whereLanguage": "lucene",
- "orderBy": "Timestamp DESC",
- "tags": [
- "production",
- "errors"
], - "filters": [
- {
- "type": "sql",
- "condition": "ServiceName IN ('checkout', 'payments')"
}
], - "teamId": "507f1f77bcf86cd799439013",
- "createdAt": "2025-01-01T00:00:00.000Z",
- "updatedAt": "2025-06-15T10:30:00.000Z"
}
}Updates an existing saved search. This is a full replace: send the
full object. Every optional field (select, where, whereLanguage,
orderBy, tags, filters) is always written and falls back to its
default when omitted, so omitting a field resets it rather than
preserving the stored value.
| id required | string Example: 507f1f77bcf86cd799439011 Saved search ID |
| name required | string <= 1024 characters Display name for the saved search. |
| sourceId required | string ID of the source to query. Must belong to the team. |
| select | string <= 4096 characters Comma-separated list of column expressions to display. Empty uses the source default. |
| where | string <= 8192 characters Row filter expression. The language is controlled by whereLanguage. |
| whereLanguage | string Default: "lucene" Enum: "lucene" "sql" Language used for the where filter. |
| orderBy | string <= 1024 characters ORDER BY expression. Empty uses the source default. |
| tags | Array of strings <= 50 items [ items <= 32 characters ] Tags used to organize saved searches. |
Array of objects (SavedSearchFilter) <= 100 items Structured pinned filters applied to the search. |
{- "name": "Production Errors",
- "sourceId": "507f1f77bcf86cd799439012",
- "select": "Timestamp, ServiceName, Body",
- "where": "SeverityText:ERROR",
- "whereLanguage": "lucene",
- "orderBy": "Timestamp DESC",
- "tags": [
- "production",
- "errors"
], - "filters": [
- {
- "type": "sql",
- "condition": "ServiceName IN ('checkout', 'payments')"
}
]
}{- "data": {
- "id": "507f1f77bcf86cd799439011",
- "name": "Production Errors",
- "sourceId": "507f1f77bcf86cd799439012",
- "select": "Timestamp, ServiceName, Body",
- "where": "SeverityText:ERROR",
- "whereLanguage": "lucene",
- "orderBy": "Timestamp DESC",
- "tags": [
- "production",
- "errors"
], - "filters": [
- {
- "type": "sql",
- "condition": "ServiceName IN ('checkout', 'payments')"
}
], - "teamId": "507f1f77bcf86cd799439013",
- "createdAt": "2025-01-01T00:00:00.000Z",
- "updatedAt": "2025-06-15T10:30:00.000Z"
}
}