# Observability # Telemetry ## List keys `client.workers.observability.telemetry.keys(TelemetryKeysParamsparams, RequestOptionsoptions?): SinglePage` **post** `/accounts/{account_id}/workers/observability/telemetry/keys` List all the keys in your telemetry events. ### Parameters - `params: TelemetryKeysParams` - `account_id: string` Path param: Your Cloudflare account ID. - `datasets?: Array` Body param: Leave this empty to use the default datasets - `filters?: Array` Body param: Apply filters to narrow key discovery. Supports nested groups via kind: 'group'. Maximum nesting depth is 4. - `UnionMember0` - `filterCombination: "and" | "or" | "AND" | "OR"` - `"and"` - `"or"` - `"AND"` - `"OR"` - `filters: Array` - `UnionMember0` - `filterCombination: "and" | "or" | "AND" | "OR"` - `"and"` - `"or"` - `"AND"` - `"OR"` - `filters: Array` - `kind: "group"` - `"group"` - `WorkersObservabilityFilterLeaf` A filter condition applied to query results. Use the keys and values endpoints to discover available fields and their values before constructing filters. - `key: string` Filter field name. Use verified keys from previous query results or the keys endpoint. Common keys include $metadata.service, $metadata.origin, $metadata.trigger, $metadata.message, and $metadata.error. - `operation: "includes" | "not_includes" | "starts_with" | 25 more` Comparison operator. String operators: includes, not_includes, starts_with, regex. Existence: exists, is_null. Set membership: in, not_in (comma-separated values). Numeric: eq, neq, gt, gte, lt, lte. - `"includes"` - `"not_includes"` - `"starts_with"` - `"regex"` - `"exists"` - `"is_null"` - `"in"` - `"not_in"` - `"eq"` - `"neq"` - `"gt"` - `"gte"` - `"lt"` - `"lte"` - `"="` - `"!="` - `">"` - `">="` - `"<"` - `"<="` - `"INCLUDES"` - `"DOES_NOT_INCLUDE"` - `"MATCH_REGEX"` - `"EXISTS"` - `"DOES_NOT_EXIST"` - `"IN"` - `"NOT_IN"` - `"STARTS_WITH"` - `type: "string" | "number" | "boolean"` Data type of the filter field. Must match the actual type of the key being filtered. - `"string"` - `"number"` - `"boolean"` - `kind?: "filter"` Discriminator for leaf filter nodes. Always 'filter' when present; may be omitted. - `"filter"` - `value?: string | number | boolean` Comparison value. Must match actual values in your data — verify with the values endpoint. Ensure the value type (string/number/boolean) matches the field type. String comparisons are case-sensitive. Regex uses RE2 syntax (no lookaheads/lookbehinds). - `string` - `number` - `boolean` - `kind: "group"` - `"group"` - `WorkersObservabilityFilterLeaf` A filter condition applied to query results. Use the keys and values endpoints to discover available fields and their values before constructing filters. - `key: string` Filter field name. Use verified keys from previous query results or the keys endpoint. Common keys include $metadata.service, $metadata.origin, $metadata.trigger, $metadata.message, and $metadata.error. - `operation: "includes" | "not_includes" | "starts_with" | 25 more` Comparison operator. String operators: includes, not_includes, starts_with, regex. Existence: exists, is_null. Set membership: in, not_in (comma-separated values). Numeric: eq, neq, gt, gte, lt, lte. - `"includes"` - `"not_includes"` - `"starts_with"` - `"regex"` - `"exists"` - `"is_null"` - `"in"` - `"not_in"` - `"eq"` - `"neq"` - `"gt"` - `"gte"` - `"lt"` - `"lte"` - `"="` - `"!="` - `">"` - `">="` - `"<"` - `"<="` - `"INCLUDES"` - `"DOES_NOT_INCLUDE"` - `"MATCH_REGEX"` - `"EXISTS"` - `"DOES_NOT_EXIST"` - `"IN"` - `"NOT_IN"` - `"STARTS_WITH"` - `type: "string" | "number" | "boolean"` Data type of the filter field. Must match the actual type of the key being filtered. - `"string"` - `"number"` - `"boolean"` - `kind?: "filter"` Discriminator for leaf filter nodes. Always 'filter' when present; may be omitted. - `"filter"` - `value?: string | number | boolean` Comparison value. Must match actual values in your data — verify with the values endpoint. Ensure the value type (string/number/boolean) matches the field type. String comparisons are case-sensitive. Regex uses RE2 syntax (no lookaheads/lookbehinds). - `string` - `number` - `boolean` - `from?: number` Body param - `keyNeedle?: KeyNeedle` Body param: If the user suggests a key, use this to narrow down the list of keys returned. Make sure matchCase is false to avoid case sensitivity issues. - `value: string | number | boolean` The text or pattern to search for. - `string` - `number` - `boolean` - `isRegex?: boolean` When true, treats the value as a regular expression (RE2 syntax). - `matchCase?: boolean` When true, performs a case-sensitive search. Defaults to case-insensitive. - `limit?: number` Body param: Advanced usage: set limit=1000+ to retrieve comprehensive key options without needing additional filtering. - `needle?: Needle` Body param: Search for a specific substring in any of the events - `value: string | number | boolean` The text or pattern to search for. - `string` - `number` - `boolean` - `isRegex?: boolean` When true, treats the value as a regular expression (RE2 syntax). - `matchCase?: boolean` When true, performs a case-sensitive search. Defaults to case-insensitive. - `to?: number` Body param ### Returns - `TelemetryKeysResponse` - `key: string` - `lastSeenAt: number` - `type: "string" | "boolean" | "number"` - `"string"` - `"boolean"` - `"number"` ### Example ```node import Cloudflare from 'cloudflare'; const client = new Cloudflare({ apiEmail: process.env['CLOUDFLARE_EMAIL'], // This is the default and can be omitted apiKey: process.env['CLOUDFLARE_API_KEY'], // This is the default and can be omitted }); // Automatically fetches more pages as needed. for await (const telemetryKeysResponse of client.workers.observability.telemetry.keys({ account_id: 'account_id', })) { console.log(telemetryKeysResponse.key); } ``` #### Response ```json { "errors": [ { "message": "message" } ], "messages": [ { "message": "Successful request" } ], "result": [ { "key": "key", "lastSeenAt": 0, "type": "string" } ], "success": true } ``` ## Run a query `client.workers.observability.telemetry.query(TelemetryQueryParamsparams, RequestOptionsoptions?): TelemetryQueryResponse` **post** `/accounts/{account_id}/workers/observability/telemetry/query` Run a temporary or saved query. ### Parameters - `params: TelemetryQueryParams` - `account_id: string` Path param: Your Cloudflare account ID. - `queryId: string` Body param: Identifier for the query. When parameters are omitted, this ID is used to load a previously saved query's parameters. When providing parameters inline, pass any identifier (e.g. an ad-hoc ID). - `timeframe: Timeframe` Body param: Timeframe for the query using Unix timestamps in milliseconds. Narrower timeframes produce faster responses and more specific results. - `from: number` Start timestamp for the query timeframe (Unix timestamp in milliseconds) - `to: number` End timestamp for the query timeframe (Unix timestamp in milliseconds) - `chart?: boolean` Body param: When true, includes time-series data in the response. - `compare?: boolean` Body param: When true, includes a comparison dataset from the previous time period of equal length. - `dry?: boolean` Body param: When true, executes the query without persisting the results. Useful for validation or previewing. - `granularity?: number` Body param: Number of time-series buckets. Only used when view is 'calculations'. Omit to let the system auto-detect an appropriate granularity. - `ignoreSeries?: boolean` Body param: When true, omits time-series data from the response and returns only aggregated values. Reduces response size when series are not needed. - `limit?: number` Body param: Maximum number of events to return when view is 'events'. Also controls the number of group-by rows when view is 'calculations'. - `offset?: string` Body param: Cursor for pagination in event, trace, and invocation views. Pass the $metadata.id of the last returned item to fetch the next page. - `offsetBy?: number` Body param: Numeric offset for paginating grouped/pattern results (top-N lists). Use together with limit. Not used by cursor-based pagination. - `offsetDirection?: string` Body param: Pagination direction: 'next' for forward, 'prev' for backward. - `parameters?: Parameters` Body param: Query parameters defining what data to retrieve — filters, calculations, group-bys, and ordering. In practice this should always be provided for ad-hoc queries. Only omit when executing a previously saved query by queryId. Use the keys and values endpoints to discover available fields before building filters. - `calculations?: Array` Aggregation calculations to compute (e.g. count, avg, p99). Each calculation produces aggregate values and optional time-series data. - `operator: "uniq" | "count" | "max" | 35 more` Aggregation operator to apply. Examples: count, avg, sum, min, max, p50, p90, p95, p99, uniq, stddev, variance. - `"uniq"` - `"count"` - `"max"` - `"min"` - `"sum"` - `"avg"` - `"median"` - `"p001"` - `"p01"` - `"p05"` - `"p10"` - `"p25"` - `"p75"` - `"p90"` - `"p95"` - `"p99"` - `"p999"` - `"stddev"` - `"variance"` - `"COUNT_DISTINCT"` - `"COUNT"` - `"MAX"` - `"MIN"` - `"SUM"` - `"AVG"` - `"MEDIAN"` - `"P001"` - `"P01"` - `"P05"` - `"P10"` - `"P25"` - `"P75"` - `"P90"` - `"P95"` - `"P99"` - `"P999"` - `"STDDEV"` - `"VARIANCE"` - `alias?: string` Custom label for this calculation in the results. Useful for distinguishing multiple calculations. - `key?: string` Field name to calculate over. Must exist in the data — verify with the keys endpoint. Omit for operators that don't require a key (e.g. count). - `keyType?: "string" | "number" | "boolean"` Data type of the key. Required when key is provided to ensure correct aggregation. - `"string"` - `"number"` - `"boolean"` - `datasets?: Array` Datasets to query. Leave empty to query all available datasets. - `filterCombination?: "and" | "or" | "AND" | "OR"` Logical operator for combining top-level filters: 'and' (all must match) or 'or' (any must match). Defaults to 'and'. - `"and"` - `"or"` - `"AND"` - `"OR"` - `filters?: Array` Filters to narrow query results. Use the keys and values endpoints to discover available fields before building filters. Supports nested groups via kind: 'group'. Maximum nesting depth is 4. - `UnionMember0` - `filterCombination: "and" | "or" | "AND" | "OR"` - `"and"` - `"or"` - `"AND"` - `"OR"` - `filters: Array` - `UnionMember0` - `filterCombination: "and" | "or" | "AND" | "OR"` - `"and"` - `"or"` - `"AND"` - `"OR"` - `filters: Array` - `kind: "group"` - `"group"` - `WorkersObservabilityFilterLeaf` A filter condition applied to query results. Use the keys and values endpoints to discover available fields and their values before constructing filters. - `key: string` Filter field name. Use verified keys from previous query results or the keys endpoint. Common keys include $metadata.service, $metadata.origin, $metadata.trigger, $metadata.message, and $metadata.error. - `operation: "includes" | "not_includes" | "starts_with" | 25 more` Comparison operator. String operators: includes, not_includes, starts_with, regex. Existence: exists, is_null. Set membership: in, not_in (comma-separated values). Numeric: eq, neq, gt, gte, lt, lte. - `"includes"` - `"not_includes"` - `"starts_with"` - `"regex"` - `"exists"` - `"is_null"` - `"in"` - `"not_in"` - `"eq"` - `"neq"` - `"gt"` - `"gte"` - `"lt"` - `"lte"` - `"="` - `"!="` - `">"` - `">="` - `"<"` - `"<="` - `"INCLUDES"` - `"DOES_NOT_INCLUDE"` - `"MATCH_REGEX"` - `"EXISTS"` - `"DOES_NOT_EXIST"` - `"IN"` - `"NOT_IN"` - `"STARTS_WITH"` - `type: "string" | "number" | "boolean"` Data type of the filter field. Must match the actual type of the key being filtered. - `"string"` - `"number"` - `"boolean"` - `kind?: "filter"` Discriminator for leaf filter nodes. Always 'filter' when present; may be omitted. - `"filter"` - `value?: string | number | boolean` Comparison value. Must match actual values in your data — verify with the values endpoint. Ensure the value type (string/number/boolean) matches the field type. String comparisons are case-sensitive. Regex uses RE2 syntax (no lookaheads/lookbehinds). - `string` - `number` - `boolean` - `kind: "group"` - `"group"` - `WorkersObservabilityFilterLeaf` A filter condition applied to query results. Use the keys and values endpoints to discover available fields and their values before constructing filters. - `key: string` Filter field name. Use verified keys from previous query results or the keys endpoint. Common keys include $metadata.service, $metadata.origin, $metadata.trigger, $metadata.message, and $metadata.error. - `operation: "includes" | "not_includes" | "starts_with" | 25 more` Comparison operator. String operators: includes, not_includes, starts_with, regex. Existence: exists, is_null. Set membership: in, not_in (comma-separated values). Numeric: eq, neq, gt, gte, lt, lte. - `"includes"` - `"not_includes"` - `"starts_with"` - `"regex"` - `"exists"` - `"is_null"` - `"in"` - `"not_in"` - `"eq"` - `"neq"` - `"gt"` - `"gte"` - `"lt"` - `"lte"` - `"="` - `"!="` - `">"` - `">="` - `"<"` - `"<="` - `"INCLUDES"` - `"DOES_NOT_INCLUDE"` - `"MATCH_REGEX"` - `"EXISTS"` - `"DOES_NOT_EXIST"` - `"IN"` - `"NOT_IN"` - `"STARTS_WITH"` - `type: "string" | "number" | "boolean"` Data type of the filter field. Must match the actual type of the key being filtered. - `"string"` - `"number"` - `"boolean"` - `kind?: "filter"` Discriminator for leaf filter nodes. Always 'filter' when present; may be omitted. - `"filter"` - `value?: string | number | boolean` Comparison value. Must match actual values in your data — verify with the values endpoint. Ensure the value type (string/number/boolean) matches the field type. String comparisons are case-sensitive. Regex uses RE2 syntax (no lookaheads/lookbehinds). - `string` - `number` - `boolean` - `groupBys?: Array` Fields to group calculation results by. Only applicable when the query view is 'calculations'. Produces per-group aggregate values. - `type: "string" | "number" | "boolean"` Data type of the group-by field. - `"string"` - `"number"` - `"boolean"` - `value: string` Field name to group results by (e.g. $metadata.service, $metadata.statusCode). - `havings?: Array` Post-aggregation filters applied to calculation results. Use to filter groups after aggregation (e.g. only groups where count > 100). - `key: string` Calculation alias or operator to filter on after aggregation. - `operation: "eq" | "neq" | "gt" | 3 more` Numeric comparison operator: eq, neq, gt, gte, lt, lte. - `"eq"` - `"neq"` - `"gt"` - `"gte"` - `"lt"` - `"lte"` - `value: number` Threshold value to compare the calculation result against. - `limit?: number` Maximum number of group-by rows to return in calculation results. A value of 10 is a sensible default for most use cases. - `needle?: Needle` Full-text search expression applied across all event fields. Matches events containing the specified text. - `value: string | number | boolean` The text or pattern to search for. - `string` - `number` - `boolean` - `isRegex?: boolean` When true, treats the value as a regular expression (RE2 syntax). - `matchCase?: boolean` When true, performs a case-sensitive search. Defaults to case-insensitive. - `orderBy?: OrderBy` Ordering for grouped calculation results. Only effective when a group-by is present. - `value: string` Alias of the calculation to order results by. Must match the alias (or operator) of a calculation in the query. - `order?: "asc" | "desc"` Sort direction: 'asc' for ascending, 'desc' for descending. - `"asc"` - `"desc"` - `view?: "traces" | "events" | "calculations" | 3 more` Body param: Controls the shape of the response. 'events': individual log lines matching the query. 'calculations': aggregated metrics (count, avg, p99, etc.) with optional group-by breakdowns and time-series. 'invocations': events grouped by request ID. 'traces': distributed trace summaries. 'agents': Durable Object agent summaries. - `"traces"` - `"events"` - `"calculations"` - `"invocations"` - `"requests"` - `"agents"` ### Returns - `TelemetryQueryResponse` Complete results of a query run. The populated fields depend on the requested view type (events, calculations, invocations, traces, or agents). - `run: Run` The query run metadata including the query definition, execution status, and timeframe. - `id: string` Unique identifier for this query run. - `accountId: string` Cloudflare account ID that owns this query run. - `dry: boolean` Whether this was a dry run (results not persisted). - `granularity: number` Number of time-series buckets used for the query. Higher values produce more detailed series data. - `query: Query` A saved query definition with its parameters, metadata, and ownership information. - `id: string` - `adhoc: boolean` If the query wasn't explcitly saved - `created: string` - `createdBy: string` - `description: string | null` - `name: string` Query name - `parameters: Parameters` - `calculations?: Array` Create Calculations to compute as part of the query. - `operator: "uniq" | "count" | "max" | 35 more` - `"uniq"` - `"count"` - `"max"` - `"min"` - `"sum"` - `"avg"` - `"median"` - `"p001"` - `"p01"` - `"p05"` - `"p10"` - `"p25"` - `"p75"` - `"p90"` - `"p95"` - `"p99"` - `"p999"` - `"stddev"` - `"variance"` - `"COUNT_DISTINCT"` - `"COUNT"` - `"MAX"` - `"MIN"` - `"SUM"` - `"AVG"` - `"MEDIAN"` - `"P001"` - `"P01"` - `"P05"` - `"P10"` - `"P25"` - `"P75"` - `"P90"` - `"P95"` - `"P99"` - `"P999"` - `"STDDEV"` - `"VARIANCE"` - `alias?: string` - `key?: string` - `keyType?: "string" | "number" | "boolean"` - `"string"` - `"number"` - `"boolean"` - `datasets?: Array` Set the Datasets to query. Leave it empty to query all the datasets. - `filterCombination?: "and" | "or" | "AND" | "OR"` Set a Flag to describe how to combine the filters on the query. - `"and"` - `"or"` - `"AND"` - `"OR"` - `filters?: Array` Configure the Filters to apply to the query. Supports nested groups via kind: 'group'. - `UnionMember0` - `filterCombination: "and" | "or" | "AND" | "OR"` - `"and"` - `"or"` - `"AND"` - `"OR"` - `filters: Array` - `kind: "group"` - `"group"` - `WorkersObservabilityFilterLeaf` A filter condition applied to query results. Use the keys and values endpoints to discover available fields and their values before constructing filters. - `key: string` Filter field name. Use verified keys from previous query results or the keys endpoint. Common keys include $metadata.service, $metadata.origin, $metadata.trigger, $metadata.message, and $metadata.error. - `operation: "includes" | "not_includes" | "starts_with" | 25 more` Comparison operator. String operators: includes, not_includes, starts_with, regex. Existence: exists, is_null. Set membership: in, not_in (comma-separated values). Numeric: eq, neq, gt, gte, lt, lte. - `"includes"` - `"not_includes"` - `"starts_with"` - `"regex"` - `"exists"` - `"is_null"` - `"in"` - `"not_in"` - `"eq"` - `"neq"` - `"gt"` - `"gte"` - `"lt"` - `"lte"` - `"="` - `"!="` - `">"` - `">="` - `"<"` - `"<="` - `"INCLUDES"` - `"DOES_NOT_INCLUDE"` - `"MATCH_REGEX"` - `"EXISTS"` - `"DOES_NOT_EXIST"` - `"IN"` - `"NOT_IN"` - `"STARTS_WITH"` - `type: "string" | "number" | "boolean"` Data type of the filter field. Must match the actual type of the key being filtered. - `"string"` - `"number"` - `"boolean"` - `kind?: "filter"` Discriminator for leaf filter nodes. Always 'filter' when present; may be omitted. - `"filter"` - `value?: string | number | boolean` Comparison value. Must match actual values in your data — verify with the values endpoint. Ensure the value type (string/number/boolean) matches the field type. String comparisons are case-sensitive. Regex uses RE2 syntax (no lookaheads/lookbehinds). - `string` - `number` - `boolean` - `groupBys?: Array` Define how to group the results of the query. - `type: "string" | "number" | "boolean"` - `"string"` - `"number"` - `"boolean"` - `value: string` - `havings?: Array` Configure the Having clauses that filter on calculations in the query result. - `key: string` - `operation: "eq" | "neq" | "gt" | 3 more` - `"eq"` - `"neq"` - `"gt"` - `"gte"` - `"lt"` - `"lte"` - `value: number` - `limit?: number` Set a limit on the number of results / records returned by the query - `needle?: Needle` Define an expression to search using full-text search. - `value: Value` - `isRegex?: boolean` - `matchCase?: boolean` - `orderBy?: OrderBy` Configure the order of the results returned by the query. - `value: string` Configure which Calculation to order the results by. - `order?: "asc" | "desc"` Set the order of the results - `"asc"` - `"desc"` - `updated: string` - `updatedBy: string` - `status: "STARTED" | "COMPLETED"` Current execution status of the query run. - `"STARTED"` - `"COMPLETED"` - `timeframe: Timeframe` Time range for the query execution - `from: number` Start timestamp for the query timeframe (Unix timestamp in milliseconds) - `to: number` End timestamp for the query timeframe (Unix timestamp in milliseconds) - `userId: string` ID of the user who initiated the query run. - `created?: string` ISO-8601 timestamp when the query run was created. - `statistics?: Statistics` Query performance statistics from the database (does not include network latency). - `bytes_read: number` Number of uncompressed bytes read from the table. - `elapsed: number` Time in seconds for the query to run. - `rows_read: number` Number of rows scanned from the table. - `abr_level?: number` The level of Adaptive Bit Rate (ABR) sampling used for the query. If empty the ABR level is 1 - `updated?: string` ISO-8601 timestamp when the query run was last updated. - `statistics: Statistics` Query performance statistics from the database. Includes execution time, rows scanned, and bytes read. Does not include network latency. - `bytes_read: number` Number of uncompressed bytes read from the table. - `elapsed: number` Time in seconds for the query to run. - `rows_read: number` Number of rows scanned from the table. - `abr_level?: number` The level of Adaptive Bit Rate (ABR) sampling used for the query. If empty the ABR level is 1 - `agents?: Array` Durable Object agent summaries. Present when the query view is 'agents'. Each entry represents an agent with its event counts and status. - `agentClass: string` Class name of the Durable Object agent. - `eventTypeCounts: Record` Breakdown of event counts by event type. - `firstEventMs: number` Timestamp of the earliest event from this agent in the queried window (Unix epoch ms). - `hasErrors: boolean` Whether the agent emitted any error events in the queried window. - `lastEventMs: number` Timestamp of the most recent event from this agent (Unix epoch ms). - `namespace: string` Durable Object namespace the agent belongs to. - `service: string` Worker service name that hosts this agent. - `totalEvents: number` Total number of events emitted by this agent in the queried window. - `calculations?: Array` Aggregated calculation results. Present when the query view is 'calculations'. Contains computed metrics (count, avg, p99, etc.) with optional group-by breakdowns and time-series data. - `aggregates: Array` - `count: number` - `interval: number` - `sampleInterval: number` - `value: number` - `groups?: Array` - `key: string` - `value: string | number | boolean` - `string` - `number` - `boolean` - `calculation: string` - `series: Array` - `data: Array` - `count: number` - `interval: number` - `sampleInterval: number` - `value: number` - `firstSeen?: string` - `groups?: Array` - `key: string` - `value: string | number | boolean` - `string` - `number` - `boolean` - `lastSeen?: string` - `time: string` - `alias?: string` - `compare?: Array` Comparison calculation results from the previous time period. Present when the compare option is enabled. Same structure as calculations. - `aggregates: Array` - `count: number` - `interval: number` - `sampleInterval: number` - `value: number` - `groups?: Array` - `key: string` - `value: string | number | boolean` - `string` - `number` - `boolean` - `calculation: string` - `series: Array` - `data: Array` - `count: number` - `interval: number` - `sampleInterval: number` - `value: number` - `firstSeen?: string` - `groups?: Array` - `key: string` - `value: string | number | boolean` - `string` - `number` - `boolean` - `lastSeen?: string` - `time: string` - `alias?: string` - `events?: Events` Individual event results. Present when the query view is 'events'. Contains the matching log lines and their metadata. - `count?: number` Total number of events matching the query (may exceed the number returned due to limits). - `events?: Array` List of individual telemetry events matching the query. - `"$metadata": Metadata` Structured metadata extracted from the event. These fields are indexed and available for filtering and aggregation. - `id: string` Unique event ID. Use as the cursor value for offset-based pagination. - `account?: string` Cloudflare account identifier. - `cloudService?: string` Cloudflare product that generated this event (e.g. workers, pages). - `coldStart?: number` Whether this was a cold start (1) or warm invocation (0). - `cost?: number` Estimated cost units for this invocation. - `duration?: number` Span duration in milliseconds. - `endTime?: number` Span end time as a Unix epoch in milliseconds. - `error?: string` Error message, present when the log represents an error. - `errorTemplate?: string` Templatized version of the error message used for grouping similar errors. - `fingerprint?: string` Content-based fingerprint used to group similar events. - `level?: string` Log level (e.g. log, debug, info, warn, error). - `message?: string` Log message text. - `messageTemplate?: string` Templatized version of the log message used for grouping similar messages. - `metricName?: string` Metric name when the event represents a metric data point. - `origin?: string` Origin of the event (e.g. fetch, scheduled, queue). - `parentSpanId?: string` Span ID of the parent span in the trace hierarchy. - `provider?: string` Infrastructure provider identifier. - `region?: string` Cloudflare data center / region that handled the request. - `requestId?: string` Cloudflare request ID that ties all logs from a single invocation together. - `service?: string` Worker script name that produced this event. - `spanId?: string` Span ID for this individual unit of work within a trace. - `spanName?: string` Human-readable name for this span. - `stackId?: string` Stack / deployment identifier. - `startTime?: number` Span start time as a Unix epoch in milliseconds. - `statusCode?: number` HTTP response status code returned by the Worker. - `traceDuration?: number` Total duration of the entire trace in milliseconds. - `traceId?: string` Distributed trace ID linking spans across services. - `transactionName?: string` Logical transaction name for this request. - `trigger?: string` What triggered the invocation (e.g. GET /users, POST /orders, queue message). - `type?: string` Event type classifier (e.g. cf-worker-event, cf-worker-log). - `url?: string` Request URL that triggered the Worker invocation. - `dataset: string` The dataset this event belongs to (e.g. cloudflare-workers). - `source: string | unknown` Raw log payload. May be a string or a structured object depending on how the log was emitted. - `string` - `unknown` - `timestamp: number` Event timestamp as a Unix epoch in milliseconds. - `"$containers"?: unknown` Cloudflare Containers event information that enriches your logs for identifying and debugging issues. - `"$workers"?: UnionMember0 | UnionMember1` Cloudflare Workers event information that enriches your logs for identifying and debugging issues. - `UnionMember0` - `eventType: "fetch" | "scheduled" | "alarm" | 8 more` - `"fetch"` - `"scheduled"` - `"alarm"` - `"cron"` - `"queue"` - `"email"` - `"tail"` - `"rpc"` - `"websocket"` - `"workflow"` - `"unknown"` - `requestId: string` - `scriptName: string` - `durableObjectId?: string` - `entrypoint?: string` - `event?: Record` - `executionModel?: "durableObject" | "stateless"` - `"durableObject"` - `"stateless"` - `outcome?: string` - `scriptVersion?: ScriptVersion` - `id?: string` - `message?: string` - `tag?: string` - `spanId?: string` - `traceId?: string` - `truncated?: boolean` - `UnionMember1` - `cpuTimeMs: number` - `eventType: "fetch" | "scheduled" | "alarm" | 8 more` - `"fetch"` - `"scheduled"` - `"alarm"` - `"cron"` - `"queue"` - `"email"` - `"tail"` - `"rpc"` - `"websocket"` - `"workflow"` - `"unknown"` - `outcome: string` - `requestId: string` - `scriptName: string` - `wallTimeMs: number` - `diagnosticsChannelEvents?: Array` - `channel: string` - `message: string` - `timestamp: number` - `dispatchNamespace?: string` - `durableObjectId?: string` - `entrypoint?: string` - `event?: Record` - `executionModel?: "durableObject" | "stateless"` - `"durableObject"` - `"stateless"` - `scriptVersion?: ScriptVersion` - `id?: string` - `message?: string` - `tag?: string` - `spanId?: string` - `traceId?: string` - `truncated?: boolean` - `fields?: Array` List of fields discovered in the matched events. Useful for building dynamic UIs. - `key: string` Field name present in the matched events. - `type: string` Data type of the field (string, number, or boolean). - `series?: Array` Time-series data for the matched events, bucketed by the query granularity. - `data: Array` - `aggregates: Aggregates` - `_count: number` - `_interval: number` - `_firstSeen?: string` - `_lastSeen?: string` - `bin?: unknown` - `count: number` - `interval: number` - `sampleInterval: number` - `errors?: number` - `groups?: Record` Groups in the query results. - `string` - `number` - `boolean` - `time: string` - `invocations?: Record>` Events grouped by invocation (request ID). Present when the query view is 'invocations'. Each key is a request ID mapping to all events from that invocation. - `"$metadata": Metadata` Structured metadata extracted from the event. These fields are indexed and available for filtering and aggregation. - `id: string` Unique event ID. Use as the cursor value for offset-based pagination. - `account?: string` Cloudflare account identifier. - `cloudService?: string` Cloudflare product that generated this event (e.g. workers, pages). - `coldStart?: number` Whether this was a cold start (1) or warm invocation (0). - `cost?: number` Estimated cost units for this invocation. - `duration?: number` Span duration in milliseconds. - `endTime?: number` Span end time as a Unix epoch in milliseconds. - `error?: string` Error message, present when the log represents an error. - `errorTemplate?: string` Templatized version of the error message used for grouping similar errors. - `fingerprint?: string` Content-based fingerprint used to group similar events. - `level?: string` Log level (e.g. log, debug, info, warn, error). - `message?: string` Log message text. - `messageTemplate?: string` Templatized version of the log message used for grouping similar messages. - `metricName?: string` Metric name when the event represents a metric data point. - `origin?: string` Origin of the event (e.g. fetch, scheduled, queue). - `parentSpanId?: string` Span ID of the parent span in the trace hierarchy. - `provider?: string` Infrastructure provider identifier. - `region?: string` Cloudflare data center / region that handled the request. - `requestId?: string` Cloudflare request ID that ties all logs from a single invocation together. - `service?: string` Worker script name that produced this event. - `spanId?: string` Span ID for this individual unit of work within a trace. - `spanName?: string` Human-readable name for this span. - `stackId?: string` Stack / deployment identifier. - `startTime?: number` Span start time as a Unix epoch in milliseconds. - `statusCode?: number` HTTP response status code returned by the Worker. - `traceDuration?: number` Total duration of the entire trace in milliseconds. - `traceId?: string` Distributed trace ID linking spans across services. - `transactionName?: string` Logical transaction name for this request. - `trigger?: string` What triggered the invocation (e.g. GET /users, POST /orders, queue message). - `type?: string` Event type classifier (e.g. cf-worker-event, cf-worker-log). - `url?: string` Request URL that triggered the Worker invocation. - `dataset: string` The dataset this event belongs to (e.g. cloudflare-workers). - `source: string | unknown` Raw log payload. May be a string or a structured object depending on how the log was emitted. - `string` - `unknown` - `timestamp: number` Event timestamp as a Unix epoch in milliseconds. - `"$containers"?: unknown` Cloudflare Containers event information that enriches your logs for identifying and debugging issues. - `"$workers"?: UnionMember0 | UnionMember1` Cloudflare Workers event information that enriches your logs for identifying and debugging issues. - `UnionMember0` - `eventType: "fetch" | "scheduled" | "alarm" | 8 more` - `"fetch"` - `"scheduled"` - `"alarm"` - `"cron"` - `"queue"` - `"email"` - `"tail"` - `"rpc"` - `"websocket"` - `"workflow"` - `"unknown"` - `requestId: string` - `scriptName: string` - `durableObjectId?: string` - `entrypoint?: string` - `event?: Record` - `executionModel?: "durableObject" | "stateless"` - `"durableObject"` - `"stateless"` - `outcome?: string` - `scriptVersion?: ScriptVersion` - `id?: string` - `message?: string` - `tag?: string` - `spanId?: string` - `traceId?: string` - `truncated?: boolean` - `UnionMember1` - `cpuTimeMs: number` - `eventType: "fetch" | "scheduled" | "alarm" | 8 more` - `"fetch"` - `"scheduled"` - `"alarm"` - `"cron"` - `"queue"` - `"email"` - `"tail"` - `"rpc"` - `"websocket"` - `"workflow"` - `"unknown"` - `outcome: string` - `requestId: string` - `scriptName: string` - `wallTimeMs: number` - `diagnosticsChannelEvents?: Array` - `channel: string` - `message: string` - `timestamp: number` - `dispatchNamespace?: string` - `durableObjectId?: string` - `entrypoint?: string` - `event?: Record` - `executionModel?: "durableObject" | "stateless"` - `"durableObject"` - `"stateless"` - `scriptVersion?: ScriptVersion` - `id?: string` - `message?: string` - `tag?: string` - `spanId?: string` - `traceId?: string` - `truncated?: boolean` - `traces?: Array` Trace summaries matching the query. Present when the query view is 'traces'. Each entry represents a distributed trace with its spans, duration, and services involved. - `rootSpanName: string` Name of the root span that initiated the trace. - `rootTransactionName: string` Logical transaction name for the root span. - `service: Array` List of Worker services involved in the trace. - `spans: number` Total number of spans in the trace. - `traceDurationMs: number` Total duration of the trace in milliseconds. - `traceEndMs: number` Trace end time as a Unix epoch in milliseconds. - `traceId: string` Unique identifier for the distributed trace. - `traceStartMs: number` Trace start time as a Unix epoch in milliseconds. - `errors?: Array` Error messages encountered during the trace, if any. ### Example ```node import Cloudflare from 'cloudflare'; const client = new Cloudflare({ apiEmail: process.env['CLOUDFLARE_EMAIL'], // This is the default and can be omitted apiKey: process.env['CLOUDFLARE_API_KEY'], // This is the default and can be omitted }); const response = await client.workers.observability.telemetry.query({ account_id: 'account_id', queryId: 'queryId', timeframe: { from: 0, to: 0 }, }); console.log(response.run); ``` #### Response ```json { "errors": [ { "message": "message" } ], "messages": [ { "message": "Successful request" } ], "result": { "run": { "id": "id", "accountId": "accountId", "dry": true, "granularity": 0, "query": { "id": "id", "adhoc": true, "created": "created", "createdBy": "createdBy", "description": "Query description", "name": "x", "parameters": { "calculations": [ { "operator": "uniq", "alias": "alias", "key": "key", "keyType": "string" } ], "datasets": [ "string" ], "filterCombination": "and", "filters": [ { "filterCombination": "and", "filters": [ {} ], "kind": "group" } ], "groupBys": [ { "type": "string", "value": "value" } ], "havings": [ { "key": "key", "operation": "eq", "value": 0 } ], "limit": 0, "needle": { "value": { "0": "s", "1": "t", "2": "r", "3": "i", "4": "n", "5": "g" }, "isRegex": true, "matchCase": true }, "orderBy": { "value": "value", "order": "asc" } }, "updated": "updated", "updatedBy": "updatedBy" }, "status": "STARTED", "timeframe": { "from": 0, "to": 0 }, "userId": "userId", "created": "created", "statistics": { "bytes_read": 0, "elapsed": 0, "rows_read": 0, "abr_level": 0 }, "updated": "updated" }, "statistics": { "bytes_read": 0, "elapsed": 0, "rows_read": 0, "abr_level": 0 }, "agents": [ { "agentClass": "agentClass", "eventTypeCounts": { "foo": 0 }, "firstEventMs": 0, "hasErrors": true, "lastEventMs": 0, "namespace": "namespace", "service": "service", "totalEvents": 0 } ], "calculations": [ { "aggregates": [ { "count": 0, "interval": 0, "sampleInterval": 0, "value": 0, "groups": [ { "key": "key", "value": "string" } ] } ], "calculation": "calculation", "series": [ { "data": [ { "count": 0, "interval": 0, "sampleInterval": 0, "value": 0, "firstSeen": "firstSeen", "groups": [ { "key": "key", "value": "string" } ], "lastSeen": "lastSeen" } ], "time": "time" } ], "alias": "alias" } ], "compare": [ { "aggregates": [ { "count": 0, "interval": 0, "sampleInterval": 0, "value": 0, "groups": [ { "key": "key", "value": "string" } ] } ], "calculation": "calculation", "series": [ { "data": [ { "count": 0, "interval": 0, "sampleInterval": 0, "value": 0, "firstSeen": "firstSeen", "groups": [ { "key": "key", "value": "string" } ], "lastSeen": "lastSeen" } ], "time": "time" } ], "alias": "alias" } ], "events": { "count": 0, "events": [ { "$metadata": { "id": "id", "account": "account", "cloudService": "cloudService", "coldStart": 1, "cost": 1, "duration": 1, "endTime": 0, "error": "error", "errorTemplate": "errorTemplate", "fingerprint": "fingerprint", "level": "level", "message": "message", "messageTemplate": "messageTemplate", "metricName": "metricName", "origin": "origin", "parentSpanId": "parentSpanId", "provider": "provider", "region": "region", "requestId": "requestId", "service": "service", "spanId": "spanId", "spanName": "spanName", "stackId": "stackId", "startTime": 0, "statusCode": 1, "traceDuration": 1, "traceId": "traceId", "transactionName": "transactionName", "trigger": "trigger", "type": "type", "url": "url" }, "dataset": "dataset", "source": "string", "timestamp": 0, "$containers": {}, "$workers": { "eventType": "fetch", "requestId": "requestId", "scriptName": "scriptName", "durableObjectId": "durableObjectId", "entrypoint": "entrypoint", "event": { "foo": "bar" }, "executionModel": "durableObject", "outcome": "outcome", "scriptVersion": { "id": "id", "message": "message", "tag": "tag" }, "spanId": "spanId", "traceId": "traceId", "truncated": true } } ], "fields": [ { "key": "key", "type": "type" } ], "series": [ { "data": [ { "aggregates": { "_count": 1, "_interval": 1, "_firstSeen": "_firstSeen", "_lastSeen": "_lastSeen", "bin": {} }, "count": 0, "interval": 0, "sampleInterval": 0, "errors": 0, "groups": { "foo": "string" } } ], "time": "time" } ] }, "invocations": { "foo": [ { "$metadata": { "id": "id", "account": "account", "cloudService": "cloudService", "coldStart": 1, "cost": 1, "duration": 1, "endTime": 0, "error": "error", "errorTemplate": "errorTemplate", "fingerprint": "fingerprint", "level": "level", "message": "message", "messageTemplate": "messageTemplate", "metricName": "metricName", "origin": "origin", "parentSpanId": "parentSpanId", "provider": "provider", "region": "region", "requestId": "requestId", "service": "service", "spanId": "spanId", "spanName": "spanName", "stackId": "stackId", "startTime": 0, "statusCode": 1, "traceDuration": 1, "traceId": "traceId", "transactionName": "transactionName", "trigger": "trigger", "type": "type", "url": "url" }, "dataset": "dataset", "source": "string", "timestamp": 0, "$containers": {}, "$workers": { "eventType": "fetch", "requestId": "requestId", "scriptName": "scriptName", "durableObjectId": "durableObjectId", "entrypoint": "entrypoint", "event": { "foo": "bar" }, "executionModel": "durableObject", "outcome": "outcome", "scriptVersion": { "id": "id", "message": "message", "tag": "tag" }, "spanId": "spanId", "traceId": "traceId", "truncated": true } } ] }, "traces": [ { "rootSpanName": "rootSpanName", "rootTransactionName": "rootTransactionName", "service": [ "string" ], "spans": 0, "traceDurationMs": 0, "traceEndMs": 0, "traceId": "traceId", "traceStartMs": 0, "errors": [ "string" ] } ] }, "success": true } ``` ## List values `client.workers.observability.telemetry.values(TelemetryValuesParamsparams, RequestOptionsoptions?): SinglePage` **post** `/accounts/{account_id}/workers/observability/telemetry/values` List unique values found in your events. ### Parameters - `params: TelemetryValuesParams` - `account_id: string` Path param: Your Cloudflare account ID. - `datasets: Array` Body param: Leave this empty to use the default datasets - `key: string` Body param - `timeframe: Timeframe` Body param - `from: number` - `to: number` - `type: "string" | "boolean" | "number"` Body param - `"string"` - `"boolean"` - `"number"` - `filters?: Array` Body param: Apply filters before listing values. Supports nested groups via kind: 'group'. Maximum nesting depth is 4. - `UnionMember0` - `filterCombination: "and" | "or" | "AND" | "OR"` - `"and"` - `"or"` - `"AND"` - `"OR"` - `filters: Array` - `UnionMember0` - `filterCombination: "and" | "or" | "AND" | "OR"` - `"and"` - `"or"` - `"AND"` - `"OR"` - `filters: Array` - `kind: "group"` - `"group"` - `WorkersObservabilityFilterLeaf` A filter condition applied to query results. Use the keys and values endpoints to discover available fields and their values before constructing filters. - `key: string` Filter field name. Use verified keys from previous query results or the keys endpoint. Common keys include $metadata.service, $metadata.origin, $metadata.trigger, $metadata.message, and $metadata.error. - `operation: "includes" | "not_includes" | "starts_with" | 25 more` Comparison operator. String operators: includes, not_includes, starts_with, regex. Existence: exists, is_null. Set membership: in, not_in (comma-separated values). Numeric: eq, neq, gt, gte, lt, lte. - `"includes"` - `"not_includes"` - `"starts_with"` - `"regex"` - `"exists"` - `"is_null"` - `"in"` - `"not_in"` - `"eq"` - `"neq"` - `"gt"` - `"gte"` - `"lt"` - `"lte"` - `"="` - `"!="` - `">"` - `">="` - `"<"` - `"<="` - `"INCLUDES"` - `"DOES_NOT_INCLUDE"` - `"MATCH_REGEX"` - `"EXISTS"` - `"DOES_NOT_EXIST"` - `"IN"` - `"NOT_IN"` - `"STARTS_WITH"` - `type: "string" | "number" | "boolean"` Data type of the filter field. Must match the actual type of the key being filtered. - `"string"` - `"number"` - `"boolean"` - `kind?: "filter"` Discriminator for leaf filter nodes. Always 'filter' when present; may be omitted. - `"filter"` - `value?: string | number | boolean` Comparison value. Must match actual values in your data — verify with the values endpoint. Ensure the value type (string/number/boolean) matches the field type. String comparisons are case-sensitive. Regex uses RE2 syntax (no lookaheads/lookbehinds). - `string` - `number` - `boolean` - `kind: "group"` - `"group"` - `WorkersObservabilityFilterLeaf` A filter condition applied to query results. Use the keys and values endpoints to discover available fields and their values before constructing filters. - `key: string` Filter field name. Use verified keys from previous query results or the keys endpoint. Common keys include $metadata.service, $metadata.origin, $metadata.trigger, $metadata.message, and $metadata.error. - `operation: "includes" | "not_includes" | "starts_with" | 25 more` Comparison operator. String operators: includes, not_includes, starts_with, regex. Existence: exists, is_null. Set membership: in, not_in (comma-separated values). Numeric: eq, neq, gt, gte, lt, lte. - `"includes"` - `"not_includes"` - `"starts_with"` - `"regex"` - `"exists"` - `"is_null"` - `"in"` - `"not_in"` - `"eq"` - `"neq"` - `"gt"` - `"gte"` - `"lt"` - `"lte"` - `"="` - `"!="` - `">"` - `">="` - `"<"` - `"<="` - `"INCLUDES"` - `"DOES_NOT_INCLUDE"` - `"MATCH_REGEX"` - `"EXISTS"` - `"DOES_NOT_EXIST"` - `"IN"` - `"NOT_IN"` - `"STARTS_WITH"` - `type: "string" | "number" | "boolean"` Data type of the filter field. Must match the actual type of the key being filtered. - `"string"` - `"number"` - `"boolean"` - `kind?: "filter"` Discriminator for leaf filter nodes. Always 'filter' when present; may be omitted. - `"filter"` - `value?: string | number | boolean` Comparison value. Must match actual values in your data — verify with the values endpoint. Ensure the value type (string/number/boolean) matches the field type. String comparisons are case-sensitive. Regex uses RE2 syntax (no lookaheads/lookbehinds). - `string` - `number` - `boolean` - `limit?: number` Body param - `needle?: Needle` Body param: Full-text search expression to match events containing the specified text or pattern. - `value: string | number | boolean` The text or pattern to search for. - `string` - `number` - `boolean` - `isRegex?: boolean` When true, treats the value as a regular expression (RE2 syntax). - `matchCase?: boolean` When true, performs a case-sensitive search. Defaults to case-insensitive. ### Returns - `TelemetryValuesResponse` - `dataset: string` - `key: string` - `type: "string" | "boolean" | "number"` - `"string"` - `"boolean"` - `"number"` - `value: string | number | boolean` - `string` - `number` - `boolean` ### Example ```node import Cloudflare from 'cloudflare'; const client = new Cloudflare({ apiEmail: process.env['CLOUDFLARE_EMAIL'], // This is the default and can be omitted apiKey: process.env['CLOUDFLARE_API_KEY'], // This is the default and can be omitted }); // Automatically fetches more pages as needed. for await (const telemetryValuesResponse of client.workers.observability.telemetry.values({ account_id: 'account_id', datasets: ['string'], key: 'key', timeframe: { from: 0, to: 0 }, type: 'string', })) { console.log(telemetryValuesResponse.dataset); } ``` #### Response ```json { "errors": [ { "message": "message" } ], "messages": [ { "message": "Successful request" } ], "result": [ { "dataset": "dataset", "key": "key", "type": "string", "value": "string" } ], "success": true } ``` ## Domain Types ### Telemetry Keys Response - `TelemetryKeysResponse` - `key: string` - `lastSeenAt: number` - `type: "string" | "boolean" | "number"` - `"string"` - `"boolean"` - `"number"` ### Telemetry Query Response - `TelemetryQueryResponse` Complete results of a query run. The populated fields depend on the requested view type (events, calculations, invocations, traces, or agents). - `run: Run` The query run metadata including the query definition, execution status, and timeframe. - `id: string` Unique identifier for this query run. - `accountId: string` Cloudflare account ID that owns this query run. - `dry: boolean` Whether this was a dry run (results not persisted). - `granularity: number` Number of time-series buckets used for the query. Higher values produce more detailed series data. - `query: Query` A saved query definition with its parameters, metadata, and ownership information. - `id: string` - `adhoc: boolean` If the query wasn't explcitly saved - `created: string` - `createdBy: string` - `description: string | null` - `name: string` Query name - `parameters: Parameters` - `calculations?: Array` Create Calculations to compute as part of the query. - `operator: "uniq" | "count" | "max" | 35 more` - `"uniq"` - `"count"` - `"max"` - `"min"` - `"sum"` - `"avg"` - `"median"` - `"p001"` - `"p01"` - `"p05"` - `"p10"` - `"p25"` - `"p75"` - `"p90"` - `"p95"` - `"p99"` - `"p999"` - `"stddev"` - `"variance"` - `"COUNT_DISTINCT"` - `"COUNT"` - `"MAX"` - `"MIN"` - `"SUM"` - `"AVG"` - `"MEDIAN"` - `"P001"` - `"P01"` - `"P05"` - `"P10"` - `"P25"` - `"P75"` - `"P90"` - `"P95"` - `"P99"` - `"P999"` - `"STDDEV"` - `"VARIANCE"` - `alias?: string` - `key?: string` - `keyType?: "string" | "number" | "boolean"` - `"string"` - `"number"` - `"boolean"` - `datasets?: Array` Set the Datasets to query. Leave it empty to query all the datasets. - `filterCombination?: "and" | "or" | "AND" | "OR"` Set a Flag to describe how to combine the filters on the query. - `"and"` - `"or"` - `"AND"` - `"OR"` - `filters?: Array` Configure the Filters to apply to the query. Supports nested groups via kind: 'group'. - `UnionMember0` - `filterCombination: "and" | "or" | "AND" | "OR"` - `"and"` - `"or"` - `"AND"` - `"OR"` - `filters: Array` - `kind: "group"` - `"group"` - `WorkersObservabilityFilterLeaf` A filter condition applied to query results. Use the keys and values endpoints to discover available fields and their values before constructing filters. - `key: string` Filter field name. Use verified keys from previous query results or the keys endpoint. Common keys include $metadata.service, $metadata.origin, $metadata.trigger, $metadata.message, and $metadata.error. - `operation: "includes" | "not_includes" | "starts_with" | 25 more` Comparison operator. String operators: includes, not_includes, starts_with, regex. Existence: exists, is_null. Set membership: in, not_in (comma-separated values). Numeric: eq, neq, gt, gte, lt, lte. - `"includes"` - `"not_includes"` - `"starts_with"` - `"regex"` - `"exists"` - `"is_null"` - `"in"` - `"not_in"` - `"eq"` - `"neq"` - `"gt"` - `"gte"` - `"lt"` - `"lte"` - `"="` - `"!="` - `">"` - `">="` - `"<"` - `"<="` - `"INCLUDES"` - `"DOES_NOT_INCLUDE"` - `"MATCH_REGEX"` - `"EXISTS"` - `"DOES_NOT_EXIST"` - `"IN"` - `"NOT_IN"` - `"STARTS_WITH"` - `type: "string" | "number" | "boolean"` Data type of the filter field. Must match the actual type of the key being filtered. - `"string"` - `"number"` - `"boolean"` - `kind?: "filter"` Discriminator for leaf filter nodes. Always 'filter' when present; may be omitted. - `"filter"` - `value?: string | number | boolean` Comparison value. Must match actual values in your data — verify with the values endpoint. Ensure the value type (string/number/boolean) matches the field type. String comparisons are case-sensitive. Regex uses RE2 syntax (no lookaheads/lookbehinds). - `string` - `number` - `boolean` - `groupBys?: Array` Define how to group the results of the query. - `type: "string" | "number" | "boolean"` - `"string"` - `"number"` - `"boolean"` - `value: string` - `havings?: Array` Configure the Having clauses that filter on calculations in the query result. - `key: string` - `operation: "eq" | "neq" | "gt" | 3 more` - `"eq"` - `"neq"` - `"gt"` - `"gte"` - `"lt"` - `"lte"` - `value: number` - `limit?: number` Set a limit on the number of results / records returned by the query - `needle?: Needle` Define an expression to search using full-text search. - `value: Value` - `isRegex?: boolean` - `matchCase?: boolean` - `orderBy?: OrderBy` Configure the order of the results returned by the query. - `value: string` Configure which Calculation to order the results by. - `order?: "asc" | "desc"` Set the order of the results - `"asc"` - `"desc"` - `updated: string` - `updatedBy: string` - `status: "STARTED" | "COMPLETED"` Current execution status of the query run. - `"STARTED"` - `"COMPLETED"` - `timeframe: Timeframe` Time range for the query execution - `from: number` Start timestamp for the query timeframe (Unix timestamp in milliseconds) - `to: number` End timestamp for the query timeframe (Unix timestamp in milliseconds) - `userId: string` ID of the user who initiated the query run. - `created?: string` ISO-8601 timestamp when the query run was created. - `statistics?: Statistics` Query performance statistics from the database (does not include network latency). - `bytes_read: number` Number of uncompressed bytes read from the table. - `elapsed: number` Time in seconds for the query to run. - `rows_read: number` Number of rows scanned from the table. - `abr_level?: number` The level of Adaptive Bit Rate (ABR) sampling used for the query. If empty the ABR level is 1 - `updated?: string` ISO-8601 timestamp when the query run was last updated. - `statistics: Statistics` Query performance statistics from the database. Includes execution time, rows scanned, and bytes read. Does not include network latency. - `bytes_read: number` Number of uncompressed bytes read from the table. - `elapsed: number` Time in seconds for the query to run. - `rows_read: number` Number of rows scanned from the table. - `abr_level?: number` The level of Adaptive Bit Rate (ABR) sampling used for the query. If empty the ABR level is 1 - `agents?: Array` Durable Object agent summaries. Present when the query view is 'agents'. Each entry represents an agent with its event counts and status. - `agentClass: string` Class name of the Durable Object agent. - `eventTypeCounts: Record` Breakdown of event counts by event type. - `firstEventMs: number` Timestamp of the earliest event from this agent in the queried window (Unix epoch ms). - `hasErrors: boolean` Whether the agent emitted any error events in the queried window. - `lastEventMs: number` Timestamp of the most recent event from this agent (Unix epoch ms). - `namespace: string` Durable Object namespace the agent belongs to. - `service: string` Worker service name that hosts this agent. - `totalEvents: number` Total number of events emitted by this agent in the queried window. - `calculations?: Array` Aggregated calculation results. Present when the query view is 'calculations'. Contains computed metrics (count, avg, p99, etc.) with optional group-by breakdowns and time-series data. - `aggregates: Array` - `count: number` - `interval: number` - `sampleInterval: number` - `value: number` - `groups?: Array` - `key: string` - `value: string | number | boolean` - `string` - `number` - `boolean` - `calculation: string` - `series: Array` - `data: Array` - `count: number` - `interval: number` - `sampleInterval: number` - `value: number` - `firstSeen?: string` - `groups?: Array` - `key: string` - `value: string | number | boolean` - `string` - `number` - `boolean` - `lastSeen?: string` - `time: string` - `alias?: string` - `compare?: Array` Comparison calculation results from the previous time period. Present when the compare option is enabled. Same structure as calculations. - `aggregates: Array` - `count: number` - `interval: number` - `sampleInterval: number` - `value: number` - `groups?: Array` - `key: string` - `value: string | number | boolean` - `string` - `number` - `boolean` - `calculation: string` - `series: Array` - `data: Array` - `count: number` - `interval: number` - `sampleInterval: number` - `value: number` - `firstSeen?: string` - `groups?: Array` - `key: string` - `value: string | number | boolean` - `string` - `number` - `boolean` - `lastSeen?: string` - `time: string` - `alias?: string` - `events?: Events` Individual event results. Present when the query view is 'events'. Contains the matching log lines and their metadata. - `count?: number` Total number of events matching the query (may exceed the number returned due to limits). - `events?: Array` List of individual telemetry events matching the query. - `"$metadata": Metadata` Structured metadata extracted from the event. These fields are indexed and available for filtering and aggregation. - `id: string` Unique event ID. Use as the cursor value for offset-based pagination. - `account?: string` Cloudflare account identifier. - `cloudService?: string` Cloudflare product that generated this event (e.g. workers, pages). - `coldStart?: number` Whether this was a cold start (1) or warm invocation (0). - `cost?: number` Estimated cost units for this invocation. - `duration?: number` Span duration in milliseconds. - `endTime?: number` Span end time as a Unix epoch in milliseconds. - `error?: string` Error message, present when the log represents an error. - `errorTemplate?: string` Templatized version of the error message used for grouping similar errors. - `fingerprint?: string` Content-based fingerprint used to group similar events. - `level?: string` Log level (e.g. log, debug, info, warn, error). - `message?: string` Log message text. - `messageTemplate?: string` Templatized version of the log message used for grouping similar messages. - `metricName?: string` Metric name when the event represents a metric data point. - `origin?: string` Origin of the event (e.g. fetch, scheduled, queue). - `parentSpanId?: string` Span ID of the parent span in the trace hierarchy. - `provider?: string` Infrastructure provider identifier. - `region?: string` Cloudflare data center / region that handled the request. - `requestId?: string` Cloudflare request ID that ties all logs from a single invocation together. - `service?: string` Worker script name that produced this event. - `spanId?: string` Span ID for this individual unit of work within a trace. - `spanName?: string` Human-readable name for this span. - `stackId?: string` Stack / deployment identifier. - `startTime?: number` Span start time as a Unix epoch in milliseconds. - `statusCode?: number` HTTP response status code returned by the Worker. - `traceDuration?: number` Total duration of the entire trace in milliseconds. - `traceId?: string` Distributed trace ID linking spans across services. - `transactionName?: string` Logical transaction name for this request. - `trigger?: string` What triggered the invocation (e.g. GET /users, POST /orders, queue message). - `type?: string` Event type classifier (e.g. cf-worker-event, cf-worker-log). - `url?: string` Request URL that triggered the Worker invocation. - `dataset: string` The dataset this event belongs to (e.g. cloudflare-workers). - `source: string | unknown` Raw log payload. May be a string or a structured object depending on how the log was emitted. - `string` - `unknown` - `timestamp: number` Event timestamp as a Unix epoch in milliseconds. - `"$containers"?: unknown` Cloudflare Containers event information that enriches your logs for identifying and debugging issues. - `"$workers"?: UnionMember0 | UnionMember1` Cloudflare Workers event information that enriches your logs for identifying and debugging issues. - `UnionMember0` - `eventType: "fetch" | "scheduled" | "alarm" | 8 more` - `"fetch"` - `"scheduled"` - `"alarm"` - `"cron"` - `"queue"` - `"email"` - `"tail"` - `"rpc"` - `"websocket"` - `"workflow"` - `"unknown"` - `requestId: string` - `scriptName: string` - `durableObjectId?: string` - `entrypoint?: string` - `event?: Record` - `executionModel?: "durableObject" | "stateless"` - `"durableObject"` - `"stateless"` - `outcome?: string` - `scriptVersion?: ScriptVersion` - `id?: string` - `message?: string` - `tag?: string` - `spanId?: string` - `traceId?: string` - `truncated?: boolean` - `UnionMember1` - `cpuTimeMs: number` - `eventType: "fetch" | "scheduled" | "alarm" | 8 more` - `"fetch"` - `"scheduled"` - `"alarm"` - `"cron"` - `"queue"` - `"email"` - `"tail"` - `"rpc"` - `"websocket"` - `"workflow"` - `"unknown"` - `outcome: string` - `requestId: string` - `scriptName: string` - `wallTimeMs: number` - `diagnosticsChannelEvents?: Array` - `channel: string` - `message: string` - `timestamp: number` - `dispatchNamespace?: string` - `durableObjectId?: string` - `entrypoint?: string` - `event?: Record` - `executionModel?: "durableObject" | "stateless"` - `"durableObject"` - `"stateless"` - `scriptVersion?: ScriptVersion` - `id?: string` - `message?: string` - `tag?: string` - `spanId?: string` - `traceId?: string` - `truncated?: boolean` - `fields?: Array` List of fields discovered in the matched events. Useful for building dynamic UIs. - `key: string` Field name present in the matched events. - `type: string` Data type of the field (string, number, or boolean). - `series?: Array` Time-series data for the matched events, bucketed by the query granularity. - `data: Array` - `aggregates: Aggregates` - `_count: number` - `_interval: number` - `_firstSeen?: string` - `_lastSeen?: string` - `bin?: unknown` - `count: number` - `interval: number` - `sampleInterval: number` - `errors?: number` - `groups?: Record` Groups in the query results. - `string` - `number` - `boolean` - `time: string` - `invocations?: Record>` Events grouped by invocation (request ID). Present when the query view is 'invocations'. Each key is a request ID mapping to all events from that invocation. - `"$metadata": Metadata` Structured metadata extracted from the event. These fields are indexed and available for filtering and aggregation. - `id: string` Unique event ID. Use as the cursor value for offset-based pagination. - `account?: string` Cloudflare account identifier. - `cloudService?: string` Cloudflare product that generated this event (e.g. workers, pages). - `coldStart?: number` Whether this was a cold start (1) or warm invocation (0). - `cost?: number` Estimated cost units for this invocation. - `duration?: number` Span duration in milliseconds. - `endTime?: number` Span end time as a Unix epoch in milliseconds. - `error?: string` Error message, present when the log represents an error. - `errorTemplate?: string` Templatized version of the error message used for grouping similar errors. - `fingerprint?: string` Content-based fingerprint used to group similar events. - `level?: string` Log level (e.g. log, debug, info, warn, error). - `message?: string` Log message text. - `messageTemplate?: string` Templatized version of the log message used for grouping similar messages. - `metricName?: string` Metric name when the event represents a metric data point. - `origin?: string` Origin of the event (e.g. fetch, scheduled, queue). - `parentSpanId?: string` Span ID of the parent span in the trace hierarchy. - `provider?: string` Infrastructure provider identifier. - `region?: string` Cloudflare data center / region that handled the request. - `requestId?: string` Cloudflare request ID that ties all logs from a single invocation together. - `service?: string` Worker script name that produced this event. - `spanId?: string` Span ID for this individual unit of work within a trace. - `spanName?: string` Human-readable name for this span. - `stackId?: string` Stack / deployment identifier. - `startTime?: number` Span start time as a Unix epoch in milliseconds. - `statusCode?: number` HTTP response status code returned by the Worker. - `traceDuration?: number` Total duration of the entire trace in milliseconds. - `traceId?: string` Distributed trace ID linking spans across services. - `transactionName?: string` Logical transaction name for this request. - `trigger?: string` What triggered the invocation (e.g. GET /users, POST /orders, queue message). - `type?: string` Event type classifier (e.g. cf-worker-event, cf-worker-log). - `url?: string` Request URL that triggered the Worker invocation. - `dataset: string` The dataset this event belongs to (e.g. cloudflare-workers). - `source: string | unknown` Raw log payload. May be a string or a structured object depending on how the log was emitted. - `string` - `unknown` - `timestamp: number` Event timestamp as a Unix epoch in milliseconds. - `"$containers"?: unknown` Cloudflare Containers event information that enriches your logs for identifying and debugging issues. - `"$workers"?: UnionMember0 | UnionMember1` Cloudflare Workers event information that enriches your logs for identifying and debugging issues. - `UnionMember0` - `eventType: "fetch" | "scheduled" | "alarm" | 8 more` - `"fetch"` - `"scheduled"` - `"alarm"` - `"cron"` - `"queue"` - `"email"` - `"tail"` - `"rpc"` - `"websocket"` - `"workflow"` - `"unknown"` - `requestId: string` - `scriptName: string` - `durableObjectId?: string` - `entrypoint?: string` - `event?: Record` - `executionModel?: "durableObject" | "stateless"` - `"durableObject"` - `"stateless"` - `outcome?: string` - `scriptVersion?: ScriptVersion` - `id?: string` - `message?: string` - `tag?: string` - `spanId?: string` - `traceId?: string` - `truncated?: boolean` - `UnionMember1` - `cpuTimeMs: number` - `eventType: "fetch" | "scheduled" | "alarm" | 8 more` - `"fetch"` - `"scheduled"` - `"alarm"` - `"cron"` - `"queue"` - `"email"` - `"tail"` - `"rpc"` - `"websocket"` - `"workflow"` - `"unknown"` - `outcome: string` - `requestId: string` - `scriptName: string` - `wallTimeMs: number` - `diagnosticsChannelEvents?: Array` - `channel: string` - `message: string` - `timestamp: number` - `dispatchNamespace?: string` - `durableObjectId?: string` - `entrypoint?: string` - `event?: Record` - `executionModel?: "durableObject" | "stateless"` - `"durableObject"` - `"stateless"` - `scriptVersion?: ScriptVersion` - `id?: string` - `message?: string` - `tag?: string` - `spanId?: string` - `traceId?: string` - `truncated?: boolean` - `traces?: Array` Trace summaries matching the query. Present when the query view is 'traces'. Each entry represents a distributed trace with its spans, duration, and services involved. - `rootSpanName: string` Name of the root span that initiated the trace. - `rootTransactionName: string` Logical transaction name for the root span. - `service: Array` List of Worker services involved in the trace. - `spans: number` Total number of spans in the trace. - `traceDurationMs: number` Total duration of the trace in milliseconds. - `traceEndMs: number` Trace end time as a Unix epoch in milliseconds. - `traceId: string` Unique identifier for the distributed trace. - `traceStartMs: number` Trace start time as a Unix epoch in milliseconds. - `errors?: Array` Error messages encountered during the trace, if any. ### Telemetry Values Response - `TelemetryValuesResponse` - `dataset: string` - `key: string` - `type: "string" | "boolean" | "number"` - `"string"` - `"boolean"` - `"number"` - `value: string | number | boolean` - `string` - `number` - `boolean` # Destinations ## Get Destinations `client.workers.observability.destinations.list(DestinationListParamsparams, RequestOptionsoptions?): SinglePage` **get** `/accounts/{account_id}/workers/observability/destinations` List your Workers Observability Telemetry Destinations. ### Parameters - `params: DestinationListParams` - `account_id: string` Path param: Your Cloudflare account ID. - `order?: "asc" | "desc"` Query param - `"asc"` - `"desc"` - `orderBy?: "created" | "updated"` Query param - `"created"` - `"updated"` - `page?: number` Query param - `perPage?: number` Query param ### Returns - `DestinationListResponse` - `configuration: Configuration` - `destination_conf: string` - `headers: Record` - `jobStatus: JobStatus` - `error_message: string` - `last_complete: string` - `last_error: string` - `logpushDataset: "opentelemetry-traces" | "opentelemetry-logs"` - `"opentelemetry-traces"` - `"opentelemetry-logs"` - `type: "logpush"` - `"logpush"` - `url: string` - `enabled: boolean` - `name: string` - `scripts: Array` - `slug: string` ### Example ```node import Cloudflare from 'cloudflare'; const client = new Cloudflare({ apiEmail: process.env['CLOUDFLARE_EMAIL'], // This is the default and can be omitted apiKey: process.env['CLOUDFLARE_API_KEY'], // This is the default and can be omitted }); // Automatically fetches more pages as needed. for await (const destinationListResponse of client.workers.observability.destinations.list({ account_id: 'account_id', })) { console.log(destinationListResponse.configuration); } ``` #### Response ```json { "errors": [ { "message": "message" } ], "messages": [ { "message": "Successful request" } ], "result": [ { "configuration": { "destination_conf": "destination_conf", "headers": { "foo": "string" }, "jobStatus": { "error_message": "error_message", "last_complete": "last_complete", "last_error": "last_error" }, "logpushDataset": "opentelemetry-traces", "type": "logpush", "url": "url" }, "enabled": true, "name": "name", "scripts": [ "string" ], "slug": "slug" } ], "success": true } ``` ## Create Destination `client.workers.observability.destinations.create(DestinationCreateParamsparams, RequestOptionsoptions?): DestinationCreateResponse` **post** `/accounts/{account_id}/workers/observability/destinations` Create a new Workers Observability Telemetry Destination. ### Parameters - `params: DestinationCreateParams` - `account_id: string` Path param: Your Cloudflare account ID. - `configuration: Configuration` Body param - `headers: Record` - `logpushDataset: "opentelemetry-traces" | "opentelemetry-logs"` - `"opentelemetry-traces"` - `"opentelemetry-logs"` - `type: "logpush"` - `"logpush"` - `url: string` - `enabled: boolean` Body param - `name: string` Body param - `skipPreflightCheck?: boolean` Body param ### Returns - `DestinationCreateResponse` - `configuration: Configuration` - `destination_conf: string` - `logpushDataset: "opentelemetry-traces" | "opentelemetry-logs"` - `"opentelemetry-traces"` - `"opentelemetry-logs"` - `logpushJob: number` - `type: "logpush"` - `"logpush"` - `url: string` - `enabled: boolean` - `name: string` - `scripts: Array` - `slug: string` ### Example ```node import Cloudflare from 'cloudflare'; const client = new Cloudflare({ apiEmail: process.env['CLOUDFLARE_EMAIL'], // This is the default and can be omitted apiKey: process.env['CLOUDFLARE_API_KEY'], // This is the default and can be omitted }); const destination = await client.workers.observability.destinations.create({ account_id: 'account_id', configuration: { headers: { foo: 'string' }, logpushDataset: 'opentelemetry-traces', type: 'logpush', url: 'url', }, enabled: true, name: 'name', }); console.log(destination.configuration); ``` #### Response ```json { "errors": [ { "message": "message" } ], "messages": [ { "message": "Resource created" } ], "result": { "configuration": { "destination_conf": "destination_conf", "logpushDataset": "opentelemetry-traces", "logpushJob": 0, "type": "logpush", "url": "url" }, "enabled": true, "name": "name", "scripts": [ "string" ], "slug": "slug" }, "success": true } ``` ## Update Destination `client.workers.observability.destinations.update(stringslug, DestinationUpdateParamsparams, RequestOptionsoptions?): DestinationUpdateResponse` **patch** `/accounts/{account_id}/workers/observability/destinations/{slug}` Update an existing Workers Observability Telemetry Destination. ### Parameters - `slug: string` - `params: DestinationUpdateParams` - `account_id: string` Path param: Your Cloudflare account ID. - `configuration: Configuration` Body param - `headers: Record` - `type: "logpush"` - `"logpush"` - `url: string` - `enabled: boolean` Body param ### Returns - `DestinationUpdateResponse` - `configuration: Configuration` - `destination_conf: string` - `logpushDataset: "opentelemetry-traces" | "opentelemetry-logs"` - `"opentelemetry-traces"` - `"opentelemetry-logs"` - `logpushJob: number` - `type: "logpush"` - `"logpush"` - `url: string` - `enabled: boolean` - `name: string` - `scripts: Array` - `slug: string` ### Example ```node import Cloudflare from 'cloudflare'; const client = new Cloudflare({ apiEmail: process.env['CLOUDFLARE_EMAIL'], // This is the default and can be omitted apiKey: process.env['CLOUDFLARE_API_KEY'], // This is the default and can be omitted }); const destination = await client.workers.observability.destinations.update('slug', { account_id: 'account_id', configuration: { headers: { foo: 'string' }, type: 'logpush', url: 'url', }, enabled: true, }); console.log(destination.configuration); ``` #### Response ```json { "errors": [ { "message": "message" } ], "messages": [ { "message": "Successful request" } ], "result": { "configuration": { "destination_conf": "destination_conf", "logpushDataset": "opentelemetry-traces", "logpushJob": 0, "type": "logpush", "url": "url" }, "enabled": true, "name": "name", "scripts": [ "string" ], "slug": "slug" }, "success": true } ``` ## Delete Destination `client.workers.observability.destinations.delete(stringslug, DestinationDeleteParamsparams, RequestOptionsoptions?): DestinationDeleteResponse` **delete** `/accounts/{account_id}/workers/observability/destinations/{slug}` Delete a Workers Observability Telemetry Destination. ### Parameters - `slug: string` - `params: DestinationDeleteParams` - `account_id: string` Your Cloudflare account ID. ### Returns - `DestinationDeleteResponse` - `configuration: Configuration` - `destination_conf: string` - `logpushDataset: "opentelemetry-traces" | "opentelemetry-logs"` - `"opentelemetry-traces"` - `"opentelemetry-logs"` - `logpushJob: number` - `type: "logpush"` - `"logpush"` - `url: string` - `enabled: boolean` - `name: string` - `scripts: Array` - `slug: string` ### Example ```node import Cloudflare from 'cloudflare'; const client = new Cloudflare({ apiEmail: process.env['CLOUDFLARE_EMAIL'], // This is the default and can be omitted apiKey: process.env['CLOUDFLARE_API_KEY'], // This is the default and can be omitted }); const destination = await client.workers.observability.destinations.delete('slug', { account_id: 'account_id', }); console.log(destination.configuration); ``` #### Response ```json { "errors": [ { "message": "message" } ], "messages": [ { "message": "Successful request" } ], "success": true, "result": { "configuration": { "destination_conf": "destination_conf", "logpushDataset": "opentelemetry-traces", "logpushJob": 0, "type": "logpush", "url": "url" }, "enabled": true, "name": "name", "scripts": [ "string" ], "slug": "slug" } } ``` ## Domain Types ### Destination List Response - `DestinationListResponse` - `configuration: Configuration` - `destination_conf: string` - `headers: Record` - `jobStatus: JobStatus` - `error_message: string` - `last_complete: string` - `last_error: string` - `logpushDataset: "opentelemetry-traces" | "opentelemetry-logs"` - `"opentelemetry-traces"` - `"opentelemetry-logs"` - `type: "logpush"` - `"logpush"` - `url: string` - `enabled: boolean` - `name: string` - `scripts: Array` - `slug: string` ### Destination Create Response - `DestinationCreateResponse` - `configuration: Configuration` - `destination_conf: string` - `logpushDataset: "opentelemetry-traces" | "opentelemetry-logs"` - `"opentelemetry-traces"` - `"opentelemetry-logs"` - `logpushJob: number` - `type: "logpush"` - `"logpush"` - `url: string` - `enabled: boolean` - `name: string` - `scripts: Array` - `slug: string` ### Destination Update Response - `DestinationUpdateResponse` - `configuration: Configuration` - `destination_conf: string` - `logpushDataset: "opentelemetry-traces" | "opentelemetry-logs"` - `"opentelemetry-traces"` - `"opentelemetry-logs"` - `logpushJob: number` - `type: "logpush"` - `"logpush"` - `url: string` - `enabled: boolean` - `name: string` - `scripts: Array` - `slug: string` ### Destination Delete Response - `DestinationDeleteResponse` - `configuration: Configuration` - `destination_conf: string` - `logpushDataset: "opentelemetry-traces" | "opentelemetry-logs"` - `"opentelemetry-traces"` - `"opentelemetry-logs"` - `logpushJob: number` - `type: "logpush"` - `"logpush"` - `url: string` - `enabled: boolean` - `name: string` - `scripts: Array` - `slug: string`