{"type":"api","title":"Update data stream","meta":{"id":"/apps/pubhub/media/000-v7-apis/a9d7d077fd3cd26af5968939669b4553e8957e87/4bef5bf8-85e1-3e97-9841-756deb0d4d50","info":{"title":"ThousandEyes for OpenTelemetry API","version":"7.0.107","description":"**Note:** The following ThousandEyes for OpenTelemetry API capabilities are not available for ThousandEyes for Government instance:\n\n* Traces\n* Connected Devices\n* OTel-based integrations that rely on connectors and operations, including:\n * Splunk Cloud Platform HEC\n * Splunk Enterprise HEC\n * Splunk Observability APM\n * Dynatrace Observability APM\n\nThousandEyes for OpenTelemetry provides machine-to-machine integration between ThousandEyes and its customers. It allows you to export ThousandEyes telemetry data in OTel format, which is widely used in the industry. With ThousandEyes for OTel, you can leverage frameworks widely used in the observability domain - such as Splunk, Grafana, and Honeycomb - to capture and analyze ThousandEyes data. Any client that supports OTel can use ThousandEyes for OpenTelemetry.\n\nThousandEyes for OTel is made up of the following components:\n\n* Data streaming APIs that you can use to configure and enable your ThousandEyes tests with OTel-compatible streams,\nin particular to configure how ThousandEyes telemetry data is exported to client integrations.\n* A set of streaming pipelines called _collectors_ that actively fetch ThousandEyes network test data, enrich the data with some additional\ndetail, filter, and push the data to the customer-configured endpoints, depending on what you configure via the public APIs.\n* Third-party OTel collectors that receive, transform, filter, and export different metrics to client applications such as AppD, or any other OTel-capable client\nconfiguration.\n\nFor more information about ThousandEyes for OpenTelemetry, see the [product documentation](https://docs.thousandeyes.com/product-documentation/integration-guides/opentelemetry).\n"},"security":[{"BearerAuth":[]}],"tags":[{"name":"Streaming","description":"Configure data streaming"}],"openapi":"3.0.1","servers":[{"description":"ThousandEyes API production URL","url":"https://api.thousandeyes.com/v7"}],"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Bearer authentication token"}}},"spec":{"operationId":"updateStream","tags":["Streaming"],"summary":"Update data stream","description":"Updates a configured data stream using its ID. The fields are overwritten, not appended.\n**Important:** When changing `streamEndpointUrl`, include replacement values for any configured `customHeaders`, Splunk HEC, or OAuth2 credentials. Omitted or redacted credential values are rejected. To remove custom headers, send `{}`. When the destination is unchanged, omitted credentials are preserved.","parameters":[{"name":"id","in":"path","description":"ID of stream to query","required":true,"schema":{"type":"string"}},{"name":"aid","in":"query","description":"A unique identifier associated with your account group. You can retrieve your `AccountGroupId` from the `/account-groups` endpoint. Note that you must be assigned to the target account group. Specifying this parameter without being assigned to the target account group will result in an error response.","required":false,"schema":{"type":"string","example":"1234"},"$$ref":"#/components/parameters/AccountGroupId"}],"responses":{"200":{"description":"Stream updated","content":{"application/hal+json":{"schema":{"type":"object","properties":{"id":{"type":"string","example":"342ieu09","description":"The data stream ID","readOnly":true},"enabled":{"type":"boolean","example":true,"description":"Flag to enable or disable the stream integration.","readOnly":true},"_links":{"type":"object","readOnly":true,"properties":{"self":{"type":"object","properties":{"href":{"type":"string","format":"url","example":"https://api.thousandeyes.com/v7/streams/575766da-9664-4e85-94fe-facbe1154799"}},"$$ref":"#/components/schemas/StreamSelfLink"}},"$$ref":"#/components/schemas/StreamLinks"},"type":{"description":"The type of data stream to configure.\nWhen using `splunk-hec`:\n - `endpointType` must be `http`.\n - `exporterConfig.splunkHec.token` must contain the *Splunk HEC Token*.","type":"string","enum":["opentelemetry","splunk-hec"],"example":"opentelemetry","$$ref":"#/components/schemas/StreamType"},"signal":{"type":"string","description":"The OpenTelemetry signal of the stream integration.\nWhen using `trace` or `log`:\n - `dataModelVersion` must be `v2`.","default":"metric","example":"metric","enum":["metric","trace","log"],"$$ref":"#/components/schemas/Signal"},"endpointType":{"type":"string","description":"The type of connection used to send data to the endpoint.\n**Note**: When using the `splunk-hec` 'type', the `EndpointType` must be `http`.","default":"grpc","example":"grpc","enum":["grpc","http"],"$$ref":"#/components/schemas/EndpointType"},"streamEndpointUrl":{"type":"string","description":"The URL ThousandEyes sends data stream to.\nFor a URL to be valid, it needs to: - Be syntactically correct. - Be reachable. - Use the HTTPS protocol. - When using the `grpc` endpointType, streamEndpointUrl cannot contain paths:\n - Valid . `grpc` - `https://example.com`\n - Invalid . `grpc` - `https://example.com/collector`.\n - Valid . `http` - `https://example.com/collector`.\n\n- When using the `http` endpointType, the operation must match the exact final full URL (including the path if there is one) to which the data will be sent. Examples below:\n - `https://api.honeycomb.io:443/v1/metrics`\n - `https://ingest.eu0.signalfx.com/v2/datapoint/otlp`","example":"https://api.thousandeyes.otel-collector","$$ref":"#/components/schemas/StreamEndpointUrl"},"dataModelVersion":{"description":"The version of the data model used in the data stream.\nWhen using `v1`:\n - The `signal` cannot be `trace`.","default":"v2","type":"string","enum":["v1","v2"],"example":"v2","$$ref":"#/components/schemas/DataModelVersion"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Name of the data stream. When omitted, a name is generated on creation and the existing name is preserved on update.","example":"Production metrics stream","$$ref":"#/components/schemas/StreamName"},"customHeaders":{"description":"Custom headers. Send `{}` to clear existing headers.","type":"object","additionalProperties":{"type":"string"},"example":{"Authorization":"*****","Content-Type":"*****"}},"tagMatch":{"description":"A collection of tags that determine what tests are included in the data stream. These tag values are also included as attributes in the data stream metrics. Tags are invalid if the tag key includes characters that are not allowed by the [OpenTelemetry naming recommendations for attributes](https://opentelemetry.io/docs/specs/semconv/general/naming/#recommendations-for-application-developers).","type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The name of the tag key to match. The key is invalid if it includes characters that are not allowed by the [OpenTelemetry naming recommendations for attributes](https://opentelemetry.io/docs/specs/semconv/general/naming/#recommendations-for-application-developers).","example":"keyA"},"value":{"type":"string","description":"The value of the tag to match","example":"valueA"}},"$$ref":"#/components/schemas/TagMatch"},"example":[{"key":"keyA","value":"valueA"},{"key":"keyB","value":"valueB"}]},"testMatch":{"description":"A collection of tests to be included in the data stream.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the test to match.","example":"1234"},"domain":{"type":"string","description":"The domain of the test to match.\n `cea` - Cloud and Enterprise Agent\n `endpoint` - Endpoint Agent","example":"cea","enum":["cea","endpoint"],"$$ref":"#/components/schemas/TestMatchDomain"}},"$$ref":"#/components/schemas/TestMatch"},"example":[{"id":"1234","domain":"cea"},{"id":"5678","domain":"endpoint"}]},"filters":{"type":"object","description":"Controls which test data the integration exports.\n\n`testTypes` is an inclusion filter: when specified, only data from the\nselected test types is included. `metricsFilter` and `attributesFilter`\nexclude metrics or attributes from the included data.\n\nFilter support depends on the stream's signal and data model version:\n\n- For `metric` streams using data model `v1` or `v2`, both\n `metricsFilter` and `attributesFilter` are supported.\n- For `log` and `trace` streams using data model `v2`, only\n `attributesFilter` is supported. `metricsFilter` is not supported.\n\nOn create, an omitted `testTypes` filter includes all test types, while\nomitted exclusion filters exclude nothing. On update, each omitted filter\nremains unchanged. Empty exclusion lists clear existing exclusions;\n`testTypes.values` must not be empty.\n","properties":{"testTypes":{"type":"object","description":"Test types that can be used for filtering data points.","properties":{"values":{"type":"array","minItems":1,"description":"A list of test types to filter data points.","items":{"type":"string","enum":["api","agent-to-agent","agent-to-server","bgp","http-server","page-load","web-transactions","ftp-server","dns-trace","dns-server","dnssec","sip-server","voice"],"description":"This is a read only value, as test type is implicit in the test creation url.","readOnly":true,"example":"agent-to-server","$$ref":"#/components/schemas/TestType"},"example":["agent-to-server","bgp","http-server"],"$$ref":"#/components/schemas/FiltersTestTypesValues"}},"$$ref":"#/components/schemas/FiltersTestTypes"},"metricsFilter":{"type":"object","description":"Excludes case-sensitive metric names for the stream's data model version. An empty list clears existing metric exclusions.","required":["excludedMetrics"],"properties":{"excludedMetrics":{"description":"Metric names to exclude. Values must match the stream's `dataModelVersion`.","anyOf":[{"type":"array","description":"Metrics to be excluded when `signal` is `metric` and `dataModelVersion` is `v1`.","items":{"type":"string","enum":["api.metrics.completion","api.metrics.time","api.step.metrics.completion","api.step.metrics.time","bgp.metrics.path.changes","bgp.metrics.reachability","bgp.metrics.updates","dnssec.metrics.validity","dnsserver.metrics.availability","dnsserver.metrics.resolution.time","dnstrace.metrics.availability","dnstrace.metrics.query.time","ftp.metrics.availability","ftp.metrics.response.time","ftp.metrics.throughput","http.metrics.availability","http.metrics.response.time","http.metrics.throughput","net.metrics.jitter","net.metrics.latency","net.metrics.loss","pageload.metrics.completion","pageload.metrics.time","rtp.metrics.discards","rtp.metrics.latency","rtp.metrics.loss","rtp.metrics.mos","sip.metrics.availability","sip.metrics.response.time","sip.metrics.total.time","webtransaction.metrics.completion","webtransaction.metrics.errors","webtransaction.metrics.transaction.time"],"$$ref":"#/components/schemas/V1MetricFilterName"},"example":["http.metrics.availability"],"$$ref":"#/components/schemas/V1ExcludedMetrics"},{"type":"array","description":"Metrics to be excluded when `signal` is `metric` and `dataModelVersion` is `v2`.","items":{"type":"string","enum":["api.completion","api.duration","api.step.completion","api.step.duration","bgp.path_changes.count","bgp.reachability","bgp.updates.count","dns.lookup.availability","dns.lookup.duration","dns.lookup.validity","ftp.client.request.duration","ftp.server.request.availability","ftp.server.throughput","http.client.request.duration","http.server.request.availability","http.server.request.duration","http.server.request.throughput","http.server.throughput","network.availability","network.connection.link_speed","network.connection.score","network.connection.throughput","network.device.disconnection.duration","network.device.disconnection.packets_lost","network.device.partial_disconnection.transitions","network.jitter","network.latency","network.loss","network.score","network.signal.quality","network.signal.rscp","network.signal.rsrp","network.signal.rsrq","network.signal.rssi","network.signal.sinr","network.throughput","network.wifi.channel.changes.count","network.wifi.retransmission.rate","network.wifi.roaming.events.count","rtp.client.request.discards","rtp.client.request.duration","rtp.client.request.loss","rtp.client.request.mos","rtp.client.request.pdv","sip.client.request.duration","sip.client.request.total_time","sip.server.request.availability","system.battery.charge","system.battery.health","system.cpu.utilization","system.disk.free.utilization","system.memory.utilization","thousandeyes.endpoint.agent.score","web.page_load.completion","web.page_load.duration","web.page_load.jitter","web.page_load.throughput","web.transaction.completion","web.transaction.duration","web.transaction.errors.count"],"$$ref":"#/components/schemas/V2MetricFilterName"},"example":["http.server.request.duration"],"$$ref":"#/components/schemas/V2ExcludedMetrics"}],"$$ref":"#/components/schemas/FiltersMetricsExcludedMetrics"}},"$$ref":"#/components/schemas/FiltersMetrics"},"attributesFilter":{"type":"object","description":"Excludes case-sensitive attribute names for the stream's signal and data model version.\nAn empty list clears existing attribute exclusions.\n\nReserved attributes are always emitted and cannot be excluded:\n\n- `v1`: `account.id`, `thousandeyes.data.version`, and `thousandeyes.stream.id`\n- `v2`: `thousandeyes.account.id`, `thousandeyes.data.version`, and `thousandeyes.stream.id`\n","required":["excludedAttributes"],"properties":{"excludedAttributes":{"description":"Attribute names to exclude. Values must match the stream's `signal` and `dataModelVersion`.","anyOf":[{"type":"array","description":"Attributes to be excluded when `signal` is `metric` and `dataModelVersion` is `v1`.","items":{"type":"string","enum":["agent.geo.country.iso_code","agent.geo.region.iso_code","agent.geoname.id","agent.id","agent.location","agent.name","datapoint.created","datapoint.id","datapoint.received","direction","error.details","error.num","error.type","finalserver","http.request.method","integration.id","monitor.id","monitor.location","monitor.name","network.as.path","object.num","object.size","permalink","prefix","query.count","query.failed_count","response.code","response.time.dom","response.time.first","round.id","server.id","server.ip","server.name","source.agent.geo.country.iso_code","source.agent.geo.region.iso_code","source.agent.geoname.id","source.agent.id","source.agent.location","source.agent.name","step","target.agent.geo.country.iso_code","target.agent.geo.region.iso_code","target.agent.geoname.id","target.agent.id","target.agent.location","target.agent.name","test.domain","test.id","test.name","test.type","thousandeyes.stream.name","url","url.full"],"$$ref":"#/components/schemas/V1MetricAttributeFilterName"},"example":["agent.name"],"$$ref":"#/components/schemas/V1MetricExcludedAttributes"},{"type":"array","description":"Attributes to be excluded when `signal` is `metric` and `dataModelVersion` is `v2`.","items":{"type":"string","enum":["client.address","detection.type","dns.question.name","error.type","ftp.request.command","ftp.response.status_code","http.request.method","http.response.status_code","http.route","network.as.path","network.carrier.name","network.cellular.generation","network.connection.subtype","network.connection.type","network.interface.driver.model","network.interface.driver.version","network.interface.name","network.io.direction","network.prefix","network.transport","network.wifi.access_point.vendor","network.wifi.bssid","network.wifi.channel","network.wifi.phy_mode","network.wifi.ssid","server.address","server.port","sip.response.status_code","target.type","thousandeyes.monitor.id","thousandeyes.monitor.location","thousandeyes.monitor.name","thousandeyes.permalink","thousandeyes.source.agent.connection.isp","thousandeyes.source.agent.connection.package","thousandeyes.source.agent.connection.type","thousandeyes.source.agent.geo.country.iso_code","thousandeyes.source.agent.geo.region.iso_code","thousandeyes.source.agent.geoname.id","thousandeyes.source.agent.hw.type","thousandeyes.source.agent.id","thousandeyes.source.agent.local.network.address","thousandeyes.source.agent.location","thousandeyes.source.agent.mac.address","thousandeyes.source.agent.name","thousandeyes.source.agent.network.address","thousandeyes.source.agent.network.address_ipv4","thousandeyes.source.agent.network.address_ipv6","thousandeyes.source.agent.network.as.name","thousandeyes.source.agent.network.as.number","thousandeyes.source.agent.network.org","thousandeyes.source.agent.os.type","thousandeyes.source.agent.serial_number","thousandeyes.source.unit.id","thousandeyes.stream.name","thousandeyes.target.agent.geo.country.iso_code","thousandeyes.target.agent.geo.region.iso_code","thousandeyes.target.agent.geoname.id","thousandeyes.target.agent.id","thousandeyes.target.agent.location","thousandeyes.target.agent.name","thousandeyes.test.domain","thousandeyes.test.id","thousandeyes.test.name","thousandeyes.test.step","thousandeyes.test.type","thousandeyes.triggering.agent.id","transition.type","url.scheme","vpn.vendor"],"$$ref":"#/components/schemas/V2MetricAttributeFilterName"},"example":["server.address"],"$$ref":"#/components/schemas/V2MetricExcludedAttributes"},{"type":"array","description":"Attributes to be excluded when `signal` is `log` and `dataModelVersion` is `v2`.","items":{"type":"string","enum":["thousandeyes.account.name","thousandeyes.activitylog.resources","thousandeyes.stream.name","thousandeyes.user.address","thousandeyes.user.email","thousandeyes.user.id","thousandeyes.user.name"],"$$ref":"#/components/schemas/V2LogAttributeFilterName"},"example":["thousandeyes.user.email"],"$$ref":"#/components/schemas/V2LogExcludedAttributes"},{"type":"array","description":"Attributes to be excluded when `signal` is `trace` and `dataModelVersion` is `v2`.","items":{"type":"string","enum":["cloud.availability_zone","cloud.platform","cloud.provider","cloud.region","cloud.service","error.type","geo.geoname.id","http.request.method","http.response.code","meta.signal_type","network.local.address","network.local.hostname","network.local.prefix","network.path.hop","network.peer.address","network.peer.address_prefix","network.peer.as.number","network.peer.hostname","otel.scope.name","server.address","server.port","service.name","step","thousandeyes.network.path.hop.rtt_ms","thousandeyes.permalink","thousandeyes.source.agent.geo.country.iso_code","thousandeyes.source.agent.geo.region.iso_code","thousandeyes.source.agent.geoname.id","thousandeyes.source.agent.id","thousandeyes.source.agent.location","thousandeyes.source.agent.name","thousandeyes.source.agent.network.address","thousandeyes.stream.name","thousandeyes.test.domain","thousandeyes.test.id","thousandeyes.test.name","thousandeyes.test.type","url.full"],"$$ref":"#/components/schemas/V2TraceAttributeFilterName"},"example":["cloud.provider"],"$$ref":"#/components/schemas/V2TraceExcludedAttributes"}],"$$ref":"#/components/schemas/FiltersAttributesExcludedAttributes"}},"$$ref":"#/components/schemas/FiltersAttributes"}},"$$ref":"#/components/schemas/Filters"},"inputConfig":{"type":"object","description":"Configuration that specifies which input data is included for each signal.","properties":{"metric":{"type":"object","description":"Configuration for metric input data in the stream integration.","properties":{"connectedDevices":{"type":"object","description":"Configuration for Connected Devices metric data in the stream integration.","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Flag to enable or disable Connected Devices data.","example":true,"default":false}},"$$ref":"#/components/schemas/ConnectedDevices"}},"$$ref":"#/components/schemas/InputConfigMetric"}},"$$ref":"#/components/schemas/InputConfig"},"exporterConfig":{"type":"object","description":"Capability to set exporter configuration.","properties":{"splunkHec":{"type":"object","description":"Splunk HEC configuration. This can only be configured when the `type` is `splunk-hec`.","properties":{"token":{"type":"string","description":"The Splunk HEC `token`. This is a required field.","example":"d0a91307-be2f-4218-a9f8-71c02d98846b"},"source":{"type":"string","description":"The Splunk HEC `source`. This field is optional.","example":"ThousandEyesOTel","default":"ThousandEyesOTel"},"sourceType":{"type":"string","description":"The Splunk HEC `sourceType`. This field is optional.","example":"ThousandEyesOTel","default":"ThousandEyesOTel"},"index":{"type":"string","description":"The name of the Splunk HEC index where the event data will be stored. This field is optional.","example":"thousandeyes_otel_events_index"}},"$$ref":"#/components/schemas/ExporterConfigSplunkHec"},"authorization":{"type":"object","description":"Authentication configuration type.","properties":{"oAuth2":{"type":"object","description":"OAuth2 authentication configuration.","properties":{"clientId":{"type":"string","description":"The OAuth2 client ID.","example":"1234567890"},"clientSecret":{"type":"string","description":"The OAuth2 client secret.","example":"1234567890"},"tokenUrl":{"type":"string","description":"The OAuth2 token URL.","example":"https://example.com/token"},"scopes":{"type":"array","description":"The OAuth2 scopes.","items":{"type":"string"},"example":["read","write"]}},"$$ref":"#/components/schemas/ExporterConfigOAuth2"}},"$$ref":"#/components/schemas/ExporterConfigAuthorization"}},"$$ref":"#/components/schemas/ExporterConfig"},"endpointAgentLabel":{"description":"A collection of Endpoint Agent label IDs that determines what local network data is included in the data stream. `endpointAgentLabel` and `endpointAgentTag` represent the same data. Configure only one; both are synchronized.","type":"array","items":{"type":"object","description":"Endpoint Agent label configuration.","required":["id"],"properties":{"id":{"type":"string","description":"The label ID of Endpoint Agent labels.","example":"1234"}},"$$ref":"#/components/schemas/EndpointAgentLabel"}},"endpointAgentTag":{"description":"A collection of Endpoint Agent Tag IDs that determines what local network data is included in the data stream. `endpointAgentLabel` and `endpointAgentTag` represent the same data. Configure only one; both are synchronized.","type":"array","items":{"type":"object","description":"Endpoint Agent tag configuration.","required":["id"],"properties":{"id":{"type":"string","description":"The tag ID of Endpoint Agent tags.","example":"91863f70-e5a6-4a1c-a266-caf02db3607d"}},"$$ref":"#/components/schemas/EndpointAgentTag"}},"auditOperation":{"type":"object","properties":{"createdBy":{"type":"integer","format":"int64","description":"ID of the user who created the integration","example":3962},"createdDate":{"type":"integer","format":"int64","description":"Creation date of the integration","example":1679677853573},"updatedBy":{"type":"integer","format":"int64","description":"ID of the user who last updated the integration","example":3962,"nullable":true},"updatedDate":{"type":"integer","format":"int64","description":"Date of the last update to the integration","example":1679677853573,"nullable":true}},"$$ref":"#/components/schemas/AuditOperationWithUpdate"},"streamStatus":{"type":"object","properties":{"lastSuccess":{"type":"integer","format":"int64","description":"Last timestamp when data was successfully sent to the stream endpoint.","example":1679677853573,"nullable":true},"lastFailure":{"type":"integer","format":"int64","description":"Last timestamp when data failed to send the stream endpoint.","example":1679677853573,"nullable":true},"status":{"type":"string","description":"The status of the stream integration. pending: No data is currently being sent to the stream endpoint. failing: Data is being sent but not successfully reaching the stream endpoint. connected: Data is being sent successfully to the stream endpoint.","example":"connected","enum":["connected","pending","failing"],"$$ref":"#/components/schemas/StreamStatusType"}},"$$ref":"#/components/schemas/StreamStatus"}},"$$ref":"#/components/schemas/GetStreamResponse"}}}},"204":{"description":"No content","$$ref":"#/components/responses/204"},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"type":"object","properties":{"timestamp":{"type":"integer","format":"int64","example":1679677853573},"httpStatus":{"type":"string","example":"BAD_REQUEST"},"errors":{"type":"array","items":{"type":"string","example":"JSON parse error: invalid type"}},"path":{"type":"string","format":"url","example":"https://api.thousandeyes.com/v7/streams"}},"$$ref":"#/components/schemas/BadRequestError"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"invalid_token"},"error_description":{"type":"string","example":"Invalid access token"}},"$$ref":"#/components/schemas/UnauthorizedError"}}},"$$ref":"#/components/responses/401"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"409":{"description":"A data stream with the same name already exists"},"429":{"description":"Too Many Requests"},"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"timestamp":{"type":"integer","format":"int64","example":1679677853573},"status":{"type":"integer","example":500},"errors":{"type":"string","example":"Internal Server Error"},"path":{"type":"string","format":"url","example":"https://api.thousandeyes.com/v7/request/path"}},"$$ref":"#/components/schemas/ApiError"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255,"description":"Name of the data stream. When omitted, a name is generated on creation and the existing name is preserved on update.","example":"Production metrics stream","$$ref":"#/components/schemas/StreamName"},"customHeaders":{"description":"Custom headers. Send `{}` to clear existing headers.","type":"object","additionalProperties":{"type":"string"},"example":{"Authorization":"*****","Content-Type":"*****"}},"streamEndpointUrl":{"type":"string","description":"The URL ThousandEyes sends data stream to.\nFor a URL to be valid, it needs to: - Be syntactically correct. - Be reachable. - Use the HTTPS protocol. - When using the `grpc` endpointType, streamEndpointUrl cannot contain paths:\n - Valid . `grpc` - `https://example.com`\n - Invalid . `grpc` - `https://example.com/collector`.\n - Valid . `http` - `https://example.com/collector`.\n\n- When using the `http` endpointType, the operation must match the exact final full URL (including the path if there is one) to which the data will be sent. Examples below:\n - `https://api.honeycomb.io:443/v1/metrics`\n - `https://ingest.eu0.signalfx.com/v2/datapoint/otlp`","example":"https://api.thousandeyes.otel-collector","$$ref":"#/components/schemas/StreamEndpointUrl"},"tagMatch":{"description":"A collection of tags that determine what tests are included in the data stream. These tag values are also included as attributes in the data stream metrics. Tags are invalid if the tag key includes characters that are not allowed by the [OpenTelemetry naming recommendations for attributes](https://opentelemetry.io/docs/specs/semconv/general/naming/#recommendations-for-application-developers).","type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The name of the tag key to match. The key is invalid if it includes characters that are not allowed by the [OpenTelemetry naming recommendations for attributes](https://opentelemetry.io/docs/specs/semconv/general/naming/#recommendations-for-application-developers).","example":"keyA"},"value":{"type":"string","description":"The value of the tag to match","example":"valueA"}},"$$ref":"#/components/schemas/TagMatch"},"example":[{"key":"keyA","value":"valueA"},{"key":"keyB","value":"valueB"}]},"testMatch":{"description":"A collection of tests to be included in the data stream.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the test to match.","example":"1234"},"domain":{"type":"string","description":"The domain of the test to match.\n `cea` - Cloud and Enterprise Agent\n `endpoint` - Endpoint Agent","example":"cea","enum":["cea","endpoint"],"$$ref":"#/components/schemas/TestMatchDomain"}},"$$ref":"#/components/schemas/TestMatch"},"example":[{"id":"1234","domain":"cea"},{"id":"5678","domain":"endpoint"}]},"enabled":{"description":"Flag to enable or disable the stream integration.","type":"boolean","example":true},"filters":{"type":"object","description":"Controls which test data the integration exports.\n\n`testTypes` is an inclusion filter: when specified, only data from the\nselected test types is included. `metricsFilter` and `attributesFilter`\nexclude metrics or attributes from the included data.\n\nFilter support depends on the stream's signal and data model version:\n\n- For `metric` streams using data model `v1` or `v2`, both\n `metricsFilter` and `attributesFilter` are supported.\n- For `log` and `trace` streams using data model `v2`, only\n `attributesFilter` is supported. `metricsFilter` is not supported.\n\nOn create, an omitted `testTypes` filter includes all test types, while\nomitted exclusion filters exclude nothing. On update, each omitted filter\nremains unchanged. Empty exclusion lists clear existing exclusions;\n`testTypes.values` must not be empty.\n","properties":{"testTypes":{"type":"object","description":"Test types that can be used for filtering data points.","properties":{"values":{"type":"array","minItems":1,"description":"A list of test types to filter data points.","items":{"type":"string","enum":["api","agent-to-agent","agent-to-server","bgp","http-server","page-load","web-transactions","ftp-server","dns-trace","dns-server","dnssec","sip-server","voice"],"description":"This is a read only value, as test type is implicit in the test creation url.","readOnly":true,"example":"agent-to-server","$$ref":"#/components/schemas/TestType"},"example":["agent-to-server","bgp","http-server"],"$$ref":"#/components/schemas/FiltersTestTypesValues"}},"$$ref":"#/components/schemas/FiltersTestTypes"},"metricsFilter":{"type":"object","description":"Excludes case-sensitive metric names for the stream's data model version. An empty list clears existing metric exclusions.","required":["excludedMetrics"],"properties":{"excludedMetrics":{"description":"Metric names to exclude. Values must match the stream's `dataModelVersion`.","anyOf":[{"type":"array","description":"Metrics to be excluded when `signal` is `metric` and `dataModelVersion` is `v1`.","items":{"type":"string","enum":["api.metrics.completion","api.metrics.time","api.step.metrics.completion","api.step.metrics.time","bgp.metrics.path.changes","bgp.metrics.reachability","bgp.metrics.updates","dnssec.metrics.validity","dnsserver.metrics.availability","dnsserver.metrics.resolution.time","dnstrace.metrics.availability","dnstrace.metrics.query.time","ftp.metrics.availability","ftp.metrics.response.time","ftp.metrics.throughput","http.metrics.availability","http.metrics.response.time","http.metrics.throughput","net.metrics.jitter","net.metrics.latency","net.metrics.loss","pageload.metrics.completion","pageload.metrics.time","rtp.metrics.discards","rtp.metrics.latency","rtp.metrics.loss","rtp.metrics.mos","sip.metrics.availability","sip.metrics.response.time","sip.metrics.total.time","webtransaction.metrics.completion","webtransaction.metrics.errors","webtransaction.metrics.transaction.time"],"$$ref":"#/components/schemas/V1MetricFilterName"},"example":["http.metrics.availability"],"$$ref":"#/components/schemas/V1ExcludedMetrics"},{"type":"array","description":"Metrics to be excluded when `signal` is `metric` and `dataModelVersion` is `v2`.","items":{"type":"string","enum":["api.completion","api.duration","api.step.completion","api.step.duration","bgp.path_changes.count","bgp.reachability","bgp.updates.count","dns.lookup.availability","dns.lookup.duration","dns.lookup.validity","ftp.client.request.duration","ftp.server.request.availability","ftp.server.throughput","http.client.request.duration","http.server.request.availability","http.server.request.duration","http.server.request.throughput","http.server.throughput","network.availability","network.connection.link_speed","network.connection.score","network.connection.throughput","network.device.disconnection.duration","network.device.disconnection.packets_lost","network.device.partial_disconnection.transitions","network.jitter","network.latency","network.loss","network.score","network.signal.quality","network.signal.rscp","network.signal.rsrp","network.signal.rsrq","network.signal.rssi","network.signal.sinr","network.throughput","network.wifi.channel.changes.count","network.wifi.retransmission.rate","network.wifi.roaming.events.count","rtp.client.request.discards","rtp.client.request.duration","rtp.client.request.loss","rtp.client.request.mos","rtp.client.request.pdv","sip.client.request.duration","sip.client.request.total_time","sip.server.request.availability","system.battery.charge","system.battery.health","system.cpu.utilization","system.disk.free.utilization","system.memory.utilization","thousandeyes.endpoint.agent.score","web.page_load.completion","web.page_load.duration","web.page_load.jitter","web.page_load.throughput","web.transaction.completion","web.transaction.duration","web.transaction.errors.count"],"$$ref":"#/components/schemas/V2MetricFilterName"},"example":["http.server.request.duration"],"$$ref":"#/components/schemas/V2ExcludedMetrics"}],"$$ref":"#/components/schemas/FiltersMetricsExcludedMetrics"}},"$$ref":"#/components/schemas/FiltersMetrics"},"attributesFilter":{"type":"object","description":"Excludes case-sensitive attribute names for the stream's signal and data model version.\nAn empty list clears existing attribute exclusions.\n\nReserved attributes are always emitted and cannot be excluded:\n\n- `v1`: `account.id`, `thousandeyes.data.version`, and `thousandeyes.stream.id`\n- `v2`: `thousandeyes.account.id`, `thousandeyes.data.version`, and `thousandeyes.stream.id`\n","required":["excludedAttributes"],"properties":{"excludedAttributes":{"description":"Attribute names to exclude. Values must match the stream's `signal` and `dataModelVersion`.","anyOf":[{"type":"array","description":"Attributes to be excluded when `signal` is `metric` and `dataModelVersion` is `v1`.","items":{"type":"string","enum":["agent.geo.country.iso_code","agent.geo.region.iso_code","agent.geoname.id","agent.id","agent.location","agent.name","datapoint.created","datapoint.id","datapoint.received","direction","error.details","error.num","error.type","finalserver","http.request.method","integration.id","monitor.id","monitor.location","monitor.name","network.as.path","object.num","object.size","permalink","prefix","query.count","query.failed_count","response.code","response.time.dom","response.time.first","round.id","server.id","server.ip","server.name","source.agent.geo.country.iso_code","source.agent.geo.region.iso_code","source.agent.geoname.id","source.agent.id","source.agent.location","source.agent.name","step","target.agent.geo.country.iso_code","target.agent.geo.region.iso_code","target.agent.geoname.id","target.agent.id","target.agent.location","target.agent.name","test.domain","test.id","test.name","test.type","thousandeyes.stream.name","url","url.full"],"$$ref":"#/components/schemas/V1MetricAttributeFilterName"},"example":["agent.name"],"$$ref":"#/components/schemas/V1MetricExcludedAttributes"},{"type":"array","description":"Attributes to be excluded when `signal` is `metric` and `dataModelVersion` is `v2`.","items":{"type":"string","enum":["client.address","detection.type","dns.question.name","error.type","ftp.request.command","ftp.response.status_code","http.request.method","http.response.status_code","http.route","network.as.path","network.carrier.name","network.cellular.generation","network.connection.subtype","network.connection.type","network.interface.driver.model","network.interface.driver.version","network.interface.name","network.io.direction","network.prefix","network.transport","network.wifi.access_point.vendor","network.wifi.bssid","network.wifi.channel","network.wifi.phy_mode","network.wifi.ssid","server.address","server.port","sip.response.status_code","target.type","thousandeyes.monitor.id","thousandeyes.monitor.location","thousandeyes.monitor.name","thousandeyes.permalink","thousandeyes.source.agent.connection.isp","thousandeyes.source.agent.connection.package","thousandeyes.source.agent.connection.type","thousandeyes.source.agent.geo.country.iso_code","thousandeyes.source.agent.geo.region.iso_code","thousandeyes.source.agent.geoname.id","thousandeyes.source.agent.hw.type","thousandeyes.source.agent.id","thousandeyes.source.agent.local.network.address","thousandeyes.source.agent.location","thousandeyes.source.agent.mac.address","thousandeyes.source.agent.name","thousandeyes.source.agent.network.address","thousandeyes.source.agent.network.address_ipv4","thousandeyes.source.agent.network.address_ipv6","thousandeyes.source.agent.network.as.name","thousandeyes.source.agent.network.as.number","thousandeyes.source.agent.network.org","thousandeyes.source.agent.os.type","thousandeyes.source.agent.serial_number","thousandeyes.source.unit.id","thousandeyes.stream.name","thousandeyes.target.agent.geo.country.iso_code","thousandeyes.target.agent.geo.region.iso_code","thousandeyes.target.agent.geoname.id","thousandeyes.target.agent.id","thousandeyes.target.agent.location","thousandeyes.target.agent.name","thousandeyes.test.domain","thousandeyes.test.id","thousandeyes.test.name","thousandeyes.test.step","thousandeyes.test.type","thousandeyes.triggering.agent.id","transition.type","url.scheme","vpn.vendor"],"$$ref":"#/components/schemas/V2MetricAttributeFilterName"},"example":["server.address"],"$$ref":"#/components/schemas/V2MetricExcludedAttributes"},{"type":"array","description":"Attributes to be excluded when `signal` is `log` and `dataModelVersion` is `v2`.","items":{"type":"string","enum":["thousandeyes.account.name","thousandeyes.activitylog.resources","thousandeyes.stream.name","thousandeyes.user.address","thousandeyes.user.email","thousandeyes.user.id","thousandeyes.user.name"],"$$ref":"#/components/schemas/V2LogAttributeFilterName"},"example":["thousandeyes.user.email"],"$$ref":"#/components/schemas/V2LogExcludedAttributes"},{"type":"array","description":"Attributes to be excluded when `signal` is `trace` and `dataModelVersion` is `v2`.","items":{"type":"string","enum":["cloud.availability_zone","cloud.platform","cloud.provider","cloud.region","cloud.service","error.type","geo.geoname.id","http.request.method","http.response.code","meta.signal_type","network.local.address","network.local.hostname","network.local.prefix","network.path.hop","network.peer.address","network.peer.address_prefix","network.peer.as.number","network.peer.hostname","otel.scope.name","server.address","server.port","service.name","step","thousandeyes.network.path.hop.rtt_ms","thousandeyes.permalink","thousandeyes.source.agent.geo.country.iso_code","thousandeyes.source.agent.geo.region.iso_code","thousandeyes.source.agent.geoname.id","thousandeyes.source.agent.id","thousandeyes.source.agent.location","thousandeyes.source.agent.name","thousandeyes.source.agent.network.address","thousandeyes.stream.name","thousandeyes.test.domain","thousandeyes.test.id","thousandeyes.test.name","thousandeyes.test.type","url.full"],"$$ref":"#/components/schemas/V2TraceAttributeFilterName"},"example":["cloud.provider"],"$$ref":"#/components/schemas/V2TraceExcludedAttributes"}],"$$ref":"#/components/schemas/FiltersAttributesExcludedAttributes"}},"$$ref":"#/components/schemas/FiltersAttributes"}},"$$ref":"#/components/schemas/Filters"},"inputConfig":{"type":"object","description":"Configuration that specifies which input data is included for each signal.","properties":{"metric":{"type":"object","description":"Configuration for metric input data in the stream integration.","properties":{"connectedDevices":{"type":"object","description":"Configuration for Connected Devices metric data in the stream integration.","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Flag to enable or disable Connected Devices data.","example":true,"default":false}},"$$ref":"#/components/schemas/ConnectedDevices"}},"$$ref":"#/components/schemas/InputConfigMetric"}},"$$ref":"#/components/schemas/InputConfig"},"exporterConfig":{"type":"object","description":"Capability to set exporter configuration.","properties":{"splunkHec":{"type":"object","description":"Splunk HEC configuration. This can only be configured when the `type` is `splunk-hec`.","properties":{"token":{"type":"string","description":"The Splunk HEC `token`. This is a required field.","example":"d0a91307-be2f-4218-a9f8-71c02d98846b"},"source":{"type":"string","description":"The Splunk HEC `source`. This field is optional.","example":"ThousandEyesOTel","default":"ThousandEyesOTel"},"sourceType":{"type":"string","description":"The Splunk HEC `sourceType`. This field is optional.","example":"ThousandEyesOTel","default":"ThousandEyesOTel"},"index":{"type":"string","description":"The name of the Splunk HEC index where the event data will be stored. This field is optional.","example":"thousandeyes_otel_events_index"}},"$$ref":"#/components/schemas/ExporterConfigSplunkHec"},"authorization":{"type":"object","description":"Authentication configuration type.","properties":{"oAuth2":{"type":"object","description":"OAuth2 authentication configuration.","properties":{"clientId":{"type":"string","description":"The OAuth2 client ID.","example":"1234567890"},"clientSecret":{"type":"string","description":"The OAuth2 client secret.","example":"1234567890"},"tokenUrl":{"type":"string","description":"The OAuth2 token URL.","example":"https://example.com/token"},"scopes":{"type":"array","description":"The OAuth2 scopes.","items":{"type":"string"},"example":["read","write"]}},"$$ref":"#/components/schemas/ExporterConfigOAuth2"}},"$$ref":"#/components/schemas/ExporterConfigAuthorization"}},"$$ref":"#/components/schemas/ExporterConfig"},"endpointAgentLabel":{"description":"A collection of Endpoint Agent label IDs that determines what local network data is included in the data stream. `endpointAgentLabel` and `endpointAgentTag` represent the same data. Configure only one; both are synchronized.","type":"array","items":{"type":"object","description":"Endpoint Agent label configuration.","required":["id"],"properties":{"id":{"type":"string","description":"The label ID of Endpoint Agent labels.","example":"1234"}},"$$ref":"#/components/schemas/EndpointAgentLabel"}},"endpointAgentTag":{"description":"A collection of Endpoint Agent Tag IDs that determines what local network data is included in the data stream. `endpointAgentLabel` and `endpointAgentTag` represent the same data. Configure only one; both are synchronized.","type":"array","items":{"type":"object","description":"Endpoint Agent tag configuration.","required":["id"],"properties":{"id":{"type":"string","description":"The tag ID of Endpoint Agent tags.","example":"91863f70-e5a6-4a1c-a266-caf02db3607d"}},"$$ref":"#/components/schemas/EndpointAgentTag"}}},"$$ref":"#/components/schemas/PutStream"}}}},"__originalOperationId":"updateStream","security":[{"BearerAuth":[]}],"method":"put","path":"/streams/{id}"}}