# obs-api ## Pages - [Observability API](https://docs.ezghcloud.com/obs-api/index.md) — A dataset holds a project's telemetry for one environment. Logs arrive over OTLP at obs-ingest.ezghcloud.com with a project ingest key, and are read with synchronous search or asynchronous queries. Every management path is under an organization; lists are paged with limit, cursor and nextCursor. - [Aggregate a dataset's logs](https://docs.ezghcloud.com/obs-api/AggregateLogs/index.md) — Aggregations of the dataset's log records whose timestamp is in [from, to) and that match every filter, grouped by up to two fields, per time bucket and in total. Functions: count, rate (count per second), countDistinct (approximate, uniqCombined), sum, avg, min, max, p50, p90, p95 and p99 (t-digest estimates). Numeric fields are record or resource attributes, parsed as numbers; records whose value doesn't parse are skipped. Groups are ranked by the first aggregation's total; those past groupLimit add up into other, computed from their rows. Group values longer than 256 bytes are cut and the group is marked keyTruncated. A value is null where a group has no rows in a bucket, or no value parses. With no groupBy there is exactly one group. series false answers totals only (bucketSeconds null, starts empty). 422 query_too_expensive: narrow the time range or filters. 429 too_many_requests: too many console reads are running in the organization; retry after Retry-After. 503 source_unavailable: some of the data can't be read right now; there is never a partial answer. Not recorded in Trails; not idempotent and nothing is kept. - [Aggregate a dataset's spans](https://docs.ezghcloud.com/obs-api/AggregateSpans/index.md) — Aggregations of the dataset's spans whose start time is in [from, to) and that match every filter, grouped by up to two fields, per time bucket and in total. Functions: count, rate (count per second), countDistinct (approximate, uniqCombined), sum, avg, min, max, p50, p90, p95 and p99 (t-digest estimates), plus errors and errorRate (status error). Numeric fields are duration (nanoseconds) or span or resource attributes, parsed as numbers; spans whose value doesn't parse are skipped. Groups are ranked by the first aggregation's total; those past groupLimit add up into other, computed from their rows. Group values longer than 256 bytes are cut and the group is marked keyTruncated. A value is null where a group has no rows in a bucket, or no value parses. With no groupBy there is exactly one group. series false answers totals only (bucketSeconds null, starts empty). 422 query_too_expensive: narrow the time range or filters. 429 too_many_requests: too many console reads are running in the organization; retry after Retry-After. 503 source_unavailable: some of the data can't be read right now; there is never a partial answer. Not recorded in Trails; not idempotent and nothing is kept. - [Cancel a query](https://docs.ezghcloud.com/obs-api/CancelQuery/index.md) — 409 query_finished when it has already finished. - [Create a dashboard](https://docs.ezghcloud.com/obs-api/CreateDashboard/index.md) — Saves version 1. 400 invalid_request at spec.: the spec doesn't match contracts/schemas/obs-dashboard-spec.v1.json, is over 256 KiB, has more than 50 panels, 4 queries in a panel or 10 variables, or repeats a panel id, variable name or query ref. 409 quota_exceeded: obs.dashboards.perProject. 409 organization_deletion_pending. - [Create a dataset for an environment](https://docs.ezghcloud.com/obs-api/CreateDataset/index.md) — Datasets are also created automatically when logs first arrive for an environment. 409 environment_taken: the environment already has a dataset. 409 quota_exceeded: obs.datasets.perProject. 409 project_dataset_limit: the platform's ceiling of datasets per project. 409 organization_deletion_pending. 409 signal_retention_unavailable: retention (a class per signal) isn't offered yet. 422 cold_path_unavailable: cold ingest and the cold-only class aren't offered yet. 400 invalid_request at retention.: an unknown class, a signal this deployment doesn't serve, or a retention.logs that conflicts with retentionClass. - [Delete a dashboard](https://docs.ezghcloud.com/obs-api/DeleteDashboard/index.md) — Synchronous: the dashboard and its saved versions are gone from the API at once (its versions are kept, unserved, until its project or organization is deleted). A retry with the same Idempotency-Key answers the stored 204. 412 precondition_failed. - [Delete a dataset and its data](https://docs.ezghcloud.com/obs-api/DeleteDataset/index.md) — Asynchronous: answers 202 with the dataset, status deleting. Its data is purged in the background; GET answers it as deleting until then, and 404 after. Logs for its environment are refused while it's deleting; after that, new logs create the environment's dataset again. 409 dataset_deleting. 412 precondition_failed. - [Get a dashboard](https://docs.ezghcloud.com/obs-api/GetDashboard/index.md) - [Get a saved version of a dashboard, with its spec](https://docs.ezghcloud.com/obs-api/GetDashboardVersion/index.md) — 404 for a version that was never saved or is older than the last 50. - [Get a dataset](https://docs.ezghcloud.com/obs-api/GetDataset/index.md) - [Get a dataset's traces sampling policy](https://docs.ezghcloud.com/obs-api/GetDatasetSampling/index.md) — The dataset's edge tail sampling policy for traces. A dataset that never had one answers enabled false, no rules, version 0 and the dataset's createdAt. 404 while sampling isn't offered yet. - [Get a dataset's sampling stats](https://docs.ezghcloud.com/obs-api/GetDatasetSamplingStats/index.md) — Traces and spans the sampler received and kept in the last hour or day, and traces each rule matched and kept: the policy's rules in order, then default, then (memory) (decided under buffer pressure) when it has counts, then any other counted rule (renamed or deleted) by name. complete is false when counts were lost to an outage somewhere in the window. 503 when the counters can't be read now. 404 while sampling isn't offered yet. - [Get the organization's ingest and search limits](https://docs.ezghcloud.com/obs-api/GetLimits/index.md) — Effective values for the organization, and for each dataset that has its own. Ask support to change them. - [Get metric metadata](https://docs.ezghcloud.com/obs-api/GetMetricMetadata/index.md) — Each metric family's type, help and unit, between start and end (default: the last 6 hours). Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. - [Get build information](https://docs.ezghcloud.com/obs-api/GetMetricsBuildInfo/index.md) — The Prometheus version this API is compatible with, which Grafana reads to pick its features. Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. - [Get a query (poll it until it finishes)](https://docs.ezghcloud.com/obs-api/GetQuery/index.md) — While it's queued or running, Retry-After suggests when to poll again. Not recorded in Trails. - [Read a finished query's results](https://docs.ezghcloud.com/obs-api/GetQueryResults/index.md) — Authorized on every dataset of the query, on every page. 409 query_not_finished while it's queued or running (with Retry-After), 409 query_not_succeeded when it failed or was cancelled, 410 results_expired after resultsExpireAt. - [Get a service](https://docs.ezghcloud.com/obs-api/GetService/index.md) - [Get a trace](https://docs.ezghcloud.com/obs-api/GetTrace/index.md) — Every span of the trace whose start time is in [from, to), oldest first. from and to default to the last 7 days and may span at most 31 days. An unknown trace answers 200 with no spans: check visibleThrough. - [Get a dataset's span statistics](https://docs.ezghcloud.com/obs-api/GetTraceStats/index.md) — Request and error rates and latency percentiles over time, the top operations by total duration, a latency heatmap and facets, over the spans whose start time is in [from, to) and that match every filter. Percentiles are estimated from the heatmap's bins. A facet whose own filter is set is counted with every other filter. 422 query_too_expensive: narrow the window or filters. 429 too_many_requests: too many console reads are running in the organization (they have their own pool, apart from searches); retry after Retry-After. 503 source_unavailable: some of the data can't be read right now; there is never a partial answer. Not idempotent and nothing is kept. - [List a dashboard's saved versions, newest first](https://docs.ezghcloud.com/obs-api/ListDashboardVersions/index.md) — The last 50, without their specs. - [List a project's dashboards, newest first](https://docs.ezghcloud.com/obs-api/ListDashboards/index.md) — Without their specs. 404 while dashboards aren't offered yet (the console hides Dashboards then). - [List a project's datasets, newest first](https://docs.ezghcloud.com/obs-api/ListDatasets/index.md) - [List one log attribute's values](https://docs.ezghcloud.com/obs-api/ListLogFieldValues/index.md) — The values of one attribute key among the newest matching records that have it (a sample), the most common first. sampled false means the counts are exact. 422 query_too_expensive: narrow the window or filters. 429 too_many_requests: too many console reads are running in the organization (they have their own pool, apart from searches); retry after Retry-After. 503 source_unavailable: some of the data can't be read right now; there is never a partial answer. Not idempotent and nothing is kept. - [List a dataset's log attribute keys](https://docs.ezghcloud.com/obs-api/ListLogFields/index.md) — The attribute keys of the newest matching records (a sample) and how many of them have each, the most common first. sampled false means every matching record in the window was examined, so the counts are exact. 422 query_too_expensive: narrow the window or filters. 429 too_many_requests: too many console reads are running in the organization (they have their own pool, apart from searches); retry after Retry-After. 503 source_unavailable: some of the data can't be read right now; there is never a partial answer. Not idempotent and nothing is kept. - [List a label's values](https://docs.ezghcloud.com/obs-api/ListMetricLabelValues/index.md) — The values of one label among the series the selectors match (every series without match[]) between start and end (default: the last 6 hours). A UTF-8 name may be sent escaped as Prometheus 3 does (U__…). Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. - [List label names](https://docs.ezghcloud.com/obs-api/ListMetricLabels/index.md) — The label names of the series the selectors match (every series without match[]) between start and end (default: the last 6 hours). Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. - [List label names (form POST)](https://docs.ezghcloud.com/obs-api/ListMetricLabelsPost/index.md) — The label names of the series the selectors match (every series without match[]) between start and end (default: the last 6 hours). Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. Not idempotent and nothing is kept: the form body carries the same parameters as the GET's query string. - [List series](https://docs.ezghcloud.com/obs-api/ListMetricSeries/index.md) — The label sets of the series the selectors match between start and end (default: the last 6 hours). Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. - [List series (form POST)](https://docs.ezghcloud.com/obs-api/ListMetricSeriesPost/index.md) — The label sets of the series the selectors match between start and end (default: the last 6 hours). Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. Not idempotent and nothing is kept: the form body carries the same parameters as the GET's query string. - [List the project's queries, newest first](https://docs.ezghcloud.com/obs-api/ListQueries/index.md) - [List retention classes](https://docs.ezghcloud.com/obs-api/ListRetentionClasses/index.md) — How long data stays hot (fast search) and how long it's kept in total, both by event time. Every signal can use every class; defaults gives each signal's class when a create names none. The catalog is small and never paged: nextCursor is always null. - [List the versions a service reported in an environment, newest first](https://docs.ezghcloud.com/obs-api/ListServiceVersions/index.md) — service.version values, ordered by when they were last seen; the 100 most recent are kept per environment. - [List a project's services, by key](https://docs.ezghcloud.com/obs-api/ListServices/index.md) — The services obs discovered from the telemetry the project sends: one per service key (service.namespace/service.name, or service.name), with the environments, signals, applications and languages each was seen with, but not its versions. Read-only: a service is created when ingest first sees its key and disappears once all its data has aged out. capReached says the project is at obs.services.perProject, so new keys aren't cataloged. 404 while the service catalog isn't offered yet (the console hides Services then). - [Query exemplars](https://docs.ezghcloud.com/obs-api/QueryMetricExemplars/index.md) — The exemplars of the series a PromQL expression's selectors match, between start and end (default: the last 6 hours). Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. - [Query exemplars (form POST)](https://docs.ezghcloud.com/obs-api/QueryMetricExemplarsPost/index.md) — The exemplars of the series a PromQL expression's selectors match, between start and end (default: the last 6 hours). Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. Not idempotent and nothing is kept: the form body carries the same parameters as the GET's query string. - [Evaluate an instant query](https://docs.ezghcloud.com/obs-api/QueryMetrics/index.md) — Evaluates a PromQL expression at one time. Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. - [Evaluate an instant query (form POST)](https://docs.ezghcloud.com/obs-api/QueryMetricsPost/index.md) — Evaluates a PromQL expression at one time. Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. Not idempotent and nothing is kept: the form body carries the same parameters as the GET's query string. - [Evaluate a range query](https://docs.ezghcloud.com/obs-api/QueryMetricsRange/index.md) — Evaluates a PromQL expression from start to end at every step. Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. - [Evaluate a range query (form POST)](https://docs.ezghcloud.com/obs-api/QueryMetricsRangePost/index.md) — Evaluates a PromQL expression from start to end at every step. Prometheus HTTP API compatible: a Grafana Prometheus datasource's URL is the API host plus /v1/organizations/{orgId}/projects/{projectId}/obs/prometheus. Errors use Prometheus's error body (PrometheusError), with the platform's code. 422 is a query over one of its budgets (query_too_expensive, naming the budget) or one that can't be evaluated (query_failed); 429 is the organization's concurrent metric queries, or this service's capacity, with Retry-After. Reads every active dataset of the project the caller may query (obs.metrics.query); a selector's environment matcher narrows them. Not idempotent and nothing is kept: the form body carries the same parameters as the GET's query string. - [Search a dataset's logs](https://docs.ezghcloud.com/obs-api/SearchLogs/index.md) — Synchronous and bounded. 422 query_too_expensive: narrow the search or start a query. 400 cursor_expired: start again. 503 source_unavailable: some of the data can't be read right now; there is never a partial answer. Not idempotent and nothing is kept: a retry is a new search. - [Search a dataset's spans](https://docs.ezghcloud.com/obs-api/SearchTraces/index.md) — Spans whose start time is in [from, to) and that match every filter, newest first. Synchronous and bounded: a search over the budget answers 422 query_too_expensive. Page with nextCursor (send only cursor and limit). - [Start an asynchronous log query](https://docs.ezghcloud.com/obs-api/StartQuery/index.md) — Runs over one to ten datasets of the project, with larger budgets than search, and is authorized on each dataset. Poll it until it finishes, then read its results. 409 async_queries_unavailable: asynchronous queries aren't available yet; nothing is queued, and search still works. - [Summarize a dataset's logs](https://docs.ezghcloud.com/obs-api/SummarizeLogs/index.md) — Counts of matching log records over time by level, and the top values of a few fields (facets). A facet whose own filter is set lists the values that filter would hide, counted with every other filter, so it can widen the filter. Computed from the records on every request. 422 query_too_expensive: narrow the window or filters. 429 too_many_requests: too many console reads are running in the organization (they have their own pool, apart from searches); retry after Retry-After. 503 source_unavailable: some of the data can't be read right now; there is never a partial answer. Not idempotent and nothing is kept. - [Tail a dataset's logs](https://docs.ezghcloud.com/obs-api/TailLogs/index.md) — Live tail, served on the live host obs-live.ezghcloud.com with the API host's credentials: newly accepted records as server-sent events, before they're searchable. Read it with fetch and a streamed body (not EventSource). Events: records (id: the newest accepted_at in the batch, in Unix milliseconds; data {"records":[LogRecord…],"keptRatio":r}); sampled (data {"keptRatio","matchedPerSecond","sentPerSecond"}) whenever the kept ratio changes; gap (data {"since","until","reason":"replayLimit"}) when a resume can't be replayed in full; end (data {"reason"}: maxDuration, revoked, datasetDeleting, slowConsumer, draining or unavailable); and a heartbeat comment every 15 seconds. A stream lasts at most 15 minutes. Resume with lastEventId, the last records event's id: records accepted since then (up to 5 minutes back) are replayed beside the live ones, may repeat or arrive out of order, and are de-duplicated by recordId. Above maxRate records per second the stream samples, the same records on every server. 429 too_many_requests: all of the organization's live tails are open. 503 unavailable: retry after Retry-After. Not idempotent: each request is a new stream. - [Change a dashboard](https://docs.ezghcloud.com/obs-api/UpdateDashboard/index.md) — Every field is optional; only the ones given change, and spec is replaced whole. A change of name, description or spec saves a new version (the last 50 are kept); tags alone don't. A body that changes nothing changes nothing, ETag included. Restoring a version is a PATCH with its spec. 400 invalid_request at spec., as for a create. 412 precondition_failed. - [Rename, retag or configure a dataset](https://docs.ezghcloud.com/obs-api/UpdateDataset/index.md) — Every field is optional; only the ones given change. environment can't change. 409 retention_change_unavailable: changing a class isn't offered yet. 409 signal_retention_unavailable: retention (a class per signal) isn't offered yet. 409 dataset_deleting. 412 precondition_failed: If-Match doesn't name the current ETag. 422 cold_path_unavailable. 400 invalid_request at retention.: an unknown class, a signal this deployment doesn't serve, or a retention.logs that conflicts with retentionClass. A class change applies to new data from the moment it's saved; stored data keeps its class. - [Replace a dataset's traces sampling policy](https://docs.ezghcloud.com/obs-api/UpdateDatasetSampling/index.md) — Replaces the whole policy; the version goes up by one. If-Match is optional. 400 invalid_request lists every problem at its dotted path (rules.2.keep.percent). 409 dataset_deleting. 412 precondition_failed: If-Match doesn't name the current ETag. 404 while sampling isn't offered yet. The Trails event records the enabled flag, the rule names and the version, not the conditions. - [Actor](https://docs.ezghcloud.com/obs-api/schemas/Actor/index.md) - [AggregateAttributeField](https://docs.ezghcloud.com/obs-api/schemas/AggregateAttributeField/index.md) - [AggregateResponse](https://docs.ezghcloud.com/obs-api/schemas/AggregateResponse/index.md) - [AggregateValues](https://docs.ezghcloud.com/obs-api/schemas/AggregateValues/index.md) — One value per aggregation, in request order; null where there are no rows or no value parses. - [AttributeFilter](https://docs.ezghcloud.com/obs-api/schemas/AttributeFilter/index.md) - [BodyFilter](https://docs.ezghcloud.com/obs-api/schemas/BodyFilter/index.md) - [Dashboard](https://docs.ezghcloud.com/obs-api/schemas/Dashboard/index.md) - [DashboardCreate](https://docs.ezghcloud.com/obs-api/schemas/DashboardCreate/index.md) - [DashboardList](https://docs.ezghcloud.com/obs-api/schemas/DashboardList/index.md) - [DashboardSpec](https://docs.ezghcloud.com/obs-api/schemas/DashboardSpec/index.md) — The dashboard's variables, default time range, refresh interval and panels, as the JSON Schema contracts/schemas/obs-dashboard-spec.v1.json (service-template) defines them: at most 256 KiB, 50 panels, 4 queries per panel and 10 variables; unknown fields are refused. Queries aren't checked: a bad one fails when its panel runs. - [DashboardSummary](https://docs.ezghcloud.com/obs-api/schemas/DashboardSummary/index.md) - [DashboardUpdate](https://docs.ezghcloud.com/obs-api/schemas/DashboardUpdate/index.md) - [DashboardVersion](https://docs.ezghcloud.com/obs-api/schemas/DashboardVersion/index.md) - [DashboardVersionList](https://docs.ezghcloud.com/obs-api/schemas/DashboardVersionList/index.md) - [Dataset](https://docs.ezghcloud.com/obs-api/schemas/Dataset/index.md) - [DatasetCreate](https://docs.ezghcloud.com/obs-api/schemas/DatasetCreate/index.md) - [DatasetList](https://docs.ezghcloud.com/obs-api/schemas/DatasetList/index.md) - [DatasetSampling](https://docs.ezghcloud.com/obs-api/schemas/DatasetSampling/index.md) - [DatasetUpdate](https://docs.ezghcloud.com/obs-api/schemas/DatasetUpdate/index.md) - [Environment](https://docs.ezghcloud.com/obs-api/schemas/Environment/index.md) — The value of the resource attribute ezgh.metadata.environment, trimmed and lowercased; unknown collects records without a valid one. - [Error](https://docs.ezghcloud.com/obs-api/schemas/Error/index.md) — Every non-2xx answer. Clients branch on code, never on message. - [FacetValue](https://docs.ezghcloud.com/obs-api/schemas/FacetValue/index.md) - [FieldValuesRequest](https://docs.ezghcloud.com/obs-api/schemas/FieldValuesRequest/index.md) - [FieldValuesResponse](https://docs.ezghcloud.com/obs-api/schemas/FieldValuesResponse/index.md) - [FieldsRequest](https://docs.ezghcloud.com/obs-api/schemas/FieldsRequest/index.md) - [FieldsResponse](https://docs.ezghcloud.com/obs-api/schemas/FieldsResponse/index.md) - [Instant](https://docs.ezghcloud.com/obs-api/schemas/Instant/index.md) — UTC, millisecond precision: 2026-10-02T10:20:00.000Z. - [LimitValues](https://docs.ezghcloud.com/obs-api/schemas/LimitValues/index.md) - [Limits](https://docs.ezghcloud.com/obs-api/schemas/Limits/index.md) - [LogAggregateRequest](https://docs.ezghcloud.com/obs-api/schemas/LogAggregateRequest/index.md) - [LogFilters](https://docs.ezghcloud.com/obs-api/schemas/LogFilters/index.md) - [LogRecord](https://docs.ezghcloud.com/obs-api/schemas/LogRecord/index.md) - [PromHistogramPoint](https://docs.ezghcloud.com/obs-api/schemas/PromHistogramPoint/index.md) — [Unix seconds, native histogram]. - [PromNativeHistogram](https://docs.ezghcloud.com/obs-api/schemas/PromNativeHistogram/index.md) — A native histogram: its count and sum as strings, and buckets [boundaryRule, lower, upper, count]. - [PromPoint](https://docs.ezghcloud.com/obs-api/schemas/PromPoint/index.md) — [Unix seconds, value as a string ("NaN", "+Inf" and "-Inf" included)]. - [PromQueryData](https://docs.ezghcloud.com/obs-api/schemas/PromQueryData/index.md) - [PromSample](https://docs.ezghcloud.com/obs-api/schemas/PromSample/index.md) - [PromSeries](https://docs.ezghcloud.com/obs-api/schemas/PromSeries/index.md) - [PrometheusBuildInfoResponse](https://docs.ezghcloud.com/obs-api/schemas/PrometheusBuildInfoResponse/index.md) — Build information. - [PrometheusError](https://docs.ezghcloud.com/obs-api/schemas/PrometheusError/index.md) — Every non-2xx answer of a Prometheus HTTP API endpoint: Prometheus's error body, with the platform's code. Prometheus clients read errorType and error; branch on code, never on error. - [PrometheusExemplarsResponse](https://docs.ezghcloud.com/obs-api/schemas/PrometheusExemplarsResponse/index.md) — Exemplars by series. - [PrometheusLabelsResponse](https://docs.ezghcloud.com/obs-api/schemas/PrometheusLabelsResponse/index.md) — Label names or values. - [PrometheusMetadataResponse](https://docs.ezghcloud.com/obs-api/schemas/PrometheusMetadataResponse/index.md) — Metadata by family. - [PrometheusQueryResponse](https://docs.ezghcloud.com/obs-api/schemas/PrometheusQueryResponse/index.md) — A query's result. - [PrometheusSeriesResponse](https://docs.ezghcloud.com/obs-api/schemas/PrometheusSeriesResponse/index.md) — Series label sets. - [Query](https://docs.ezghcloud.com/obs-api/schemas/Query/index.md) - [QueryCreate](https://docs.ezghcloud.com/obs-api/schemas/QueryCreate/index.md) - [QueryList](https://docs.ezghcloud.com/obs-api/schemas/QueryList/index.md) - [QueryResults](https://docs.ezghcloud.com/obs-api/schemas/QueryResults/index.md) - [QueryStats](https://docs.ezghcloud.com/obs-api/schemas/QueryStats/index.md) - [QuotaExceeded](https://docs.ezghcloud.com/obs-api/schemas/QuotaExceeded/index.md) — quota_exceeded: the quota that refused the request. Never with Retry-After. - [ReadSource](https://docs.ezghcloud.com/obs-api/schemas/ReadSource/index.md) — How the answer was built: rollup false is from the records themselves. - [RetentionClass](https://docs.ezghcloud.com/obs-api/schemas/RetentionClass/index.md) - [RetentionClassId](https://docs.ezghcloud.com/obs-api/schemas/RetentionClassId/index.md) — A retention class from GET …/obs/retention-classes, such as 7d-30d. - [RetentionClassList](https://docs.ezghcloud.com/obs-api/schemas/RetentionClassList/index.md) - [SamplingAttribute](https://docs.ezghcloud.com/obs-api/schemas/SamplingAttribute/index.md) — Holds when one span has the attribute: exactly one of equals and exists (true). - [SamplingKeep](https://docs.ezghcloud.com/obs-api/schemas/SamplingKeep/index.md) — What a rule (or the default) decides: all keeps, none drops, percent keeps the traces whose trace ID randomness is below the threshold (the same answer on every replay), perSecond keeps up to n traces a second for the rule in the dataset (when spent, the rule doesn't match and evaluation goes on). The default takes all, none or percent. - [SamplingPolicy](https://docs.ezghcloud.com/obs-api/schemas/SamplingPolicy/index.md) — Rules are tried in order; the first that matches decides the whole trace, and default decides when none does. At most 64 KiB. - [SamplingRule](https://docs.ezghcloud.com/obs-api/schemas/SamplingRule/index.md) - [SamplingStats](https://docs.ezghcloud.com/obs-api/schemas/SamplingStats/index.md) - [SamplingWhen](https://docs.ezghcloud.com/obs-api/schemas/SamplingWhen/index.md) — Every condition given must hold over the trace's buffered spans; {} matches every trace. - [SearchRequest](https://docs.ezghcloud.com/obs-api/schemas/SearchRequest/index.md) — A first page names the window (from and to) and optionally filters and order. A next page sends only cursor, and optionally limit: the window, filters and order come from the cursor. - [SearchResponse](https://docs.ezghcloud.com/obs-api/schemas/SearchResponse/index.md) - [Service](https://docs.ezghcloud.com/obs-api/schemas/Service/index.md) - [ServicePage](https://docs.ezghcloud.com/obs-api/schemas/ServicePage/index.md) - [ServiceVersionPage](https://docs.ezghcloud.com/obs-api/schemas/ServiceVersionPage/index.md) - [SignalRetention](https://docs.ezghcloud.com/obs-api/schemas/SignalRetention/index.md) — The retention class of each signal this deployment serves. - [SignalRetentionInput](https://docs.ezghcloud.com/obs-api/schemas/SignalRetentionInput/index.md) — Classes for individual signals; a signal left out keeps its class (update) or default (create). Needs SIGNAL_RETENTION_ENABLED (409 signal_retention_unavailable otherwise). - [SignalSeen](https://docs.ezghcloud.com/obs-api/schemas/SignalSeen/index.md) - [Span](https://docs.ezghcloud.com/obs-api/schemas/Span/index.md) - [SpanAggregateRequest](https://docs.ezghcloud.com/obs-api/schemas/SpanAggregateRequest/index.md) - [SpanDetail](https://docs.ezghcloud.com/obs-api/schemas/SpanDetail/index.md) - [SummaryRequest](https://docs.ezghcloud.com/obs-api/schemas/SummaryRequest/index.md) - [SummaryResponse](https://docs.ezghcloud.com/obs-api/schemas/SummaryResponse/index.md) - [Tags](https://docs.ezghcloud.com/obs-api/schemas/Tags/index.md) — At most 50; keys 1-128 characters, values at most 256, keys starting with ezgh: are reserved. - [TailRequest](https://docs.ezghcloud.com/obs-api/schemas/TailRequest/index.md) - [Trace](https://docs.ezghcloud.com/obs-api/schemas/Trace/index.md) - [TraceFilters](https://docs.ezghcloud.com/obs-api/schemas/TraceFilters/index.md) - [TraceSearchRequest](https://docs.ezghcloud.com/obs-api/schemas/TraceSearchRequest/index.md) - [TraceSearchResponse](https://docs.ezghcloud.com/obs-api/schemas/TraceSearchResponse/index.md) - [TraceStatsRequest](https://docs.ezghcloud.com/obs-api/schemas/TraceStatsRequest/index.md) - [TraceStatsResponse](https://docs.ezghcloud.com/obs-api/schemas/TraceStatsResponse/index.md) - [VisibleThrough](https://docs.ezghcloud.com/obs-api/schemas/VisibleThrough/index.md)