{"openapi":"3.1.0","info":{"title":"Prometheus API","description":"Metrics collection and PromQL queries","version":"2.0","contact":{"name":"Prometheus Project","url":"https://prometheus.io"},"license":{"name":"Apache 2.0","url":"https://www.apache.org/licenses/LICENSE-2.0.html"}},"servers":[{"url":"https://prometheus.haiven.site","description":"Prometheus over HTTPS (Traefik)"},{"url":"http://prometheus:9090","description":"Prometheus internal Docker"}],"tags":[{"name":"Query","description":"PromQL query endpoints"},{"name":"Metadata","description":"Metadata about metrics and targets"},{"name":"Health","description":"Health and readiness checks"}],"paths":{"/api/v1/query":{"get":{"tags":["Query"],"summary":"Instant query","description":"Evaluate a PromQL expression at a single point in time","operationId":"instantQuery","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string"},"description":"PromQL query expression","example":"up{job='prometheus'}"},{"name":"time","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"Evaluation timestamp (RFC3339 or Unix timestamp). Defaults to current time.","example":"2023-12-03T10:30:00Z"}],"responses":{"200":{"description":"Query result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResult"}}}},"400":{"description":"Bad request (invalid query)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable entity (query timeout or execution error)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable"}}}},"/api/v1/query_range":{"get":{"tags":["Query"],"summary":"Range query","description":"Evaluate a PromQL expression over a range of time","operationId":"rangeQuery","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string"},"description":"PromQL query expression","example":"http_requests_total[5m]"},{"name":"start","in":"query","required":true,"schema":{"type":"string","format":"date-time"},"description":"Start timestamp (RFC3339 or Unix timestamp)","example":"2023-12-03T10:00:00Z"},{"name":"end","in":"query","required":true,"schema":{"type":"string","format":"date-time"},"description":"End timestamp (RFC3339 or Unix timestamp)","example":"2023-12-03T11:00:00Z"},{"name":"step","in":"query","required":true,"schema":{"type":"string"},"description":"Query resolution step duration (e.g., 30s, 1m)","example":"30s"}],"responses":{"200":{"description":"Range query result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResult"}}}},"400":{"description":"Bad request (invalid parameters)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable entity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Service unavailable"}}}},"/api/v1/labels":{"get":{"tags":["Metadata"],"summary":"List label names","description":"Return all label names that have been observed within the configured scrape interval","operationId":"listLabels","parameters":[{"name":"start","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"Start timestamp (optional)"},{"name":"end","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"End timestamp (optional)"},{"name":"match[]","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}},"description":"Optional series selector"}],"responses":{"200":{"description":"List of label names","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"data":{"type":"array","items":{"type":"string"},"example":["job","instance","method","status_code"]}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/label/{label_name}/values":{"get":{"tags":["Metadata"],"summary":"List label values","description":"Return all values for a given label within the configured scrape interval","operationId":"listLabelValues","parameters":[{"name":"label_name","in":"path","required":true,"schema":{"type":"string"},"description":"Label name","example":"job"},{"name":"start","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"Start timestamp (optional)"},{"name":"end","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"End timestamp (optional)"},{"name":"match[]","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"}},"description":"Optional series selector"}],"responses":{"200":{"description":"List of label values","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"data":{"type":"array","items":{"type":"string"},"example":["prometheus","node-exporter","alertmanager"]}}}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/series":{"get":{"tags":["Metadata"],"summary":"Query metadata for series","description":"Return metadata for time series matching selectors","operationId":"querySeries","parameters":[{"name":"match[]","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"}},"description":"Series selector (at least one required)","example":["up{job='prometheus'}"]},{"name":"start","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"Start timestamp (optional)"},{"name":"end","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"End timestamp (optional)"}],"responses":{"200":{"description":"Series metadata","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"data":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}}}}}}}},"400":{"description":"Bad request"}}}},"/api/v1/targets":{"get":{"tags":["Metadata"],"summary":"Active scrape targets","description":"Return list of active scrape targets for Prometheus","operationId":"activeTargets","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","enum":["active","dropped"]},"description":"Filter by state (active or dropped)"}],"responses":{"200":{"description":"Scrape targets","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"data":{"type":"object","properties":{"activeTargets":{"type":"array","items":{"$ref":"#/components/schemas/Target"}},"droppedTargets":{"type":"array","items":{"$ref":"#/components/schemas/Target"}}}}}}}}},"503":{"description":"Service unavailable"}}}},"/api/v1/alerts":{"get":{"tags":["Metadata"],"summary":"Active alerts","description":"Return list of active alerts","operationId":"activeAlerts","responses":{"200":{"description":"Active alerts","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["success"]},"data":{"type":"object","properties":{"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}}}}}}}}}}}},"/-/healthy":{"get":{"tags":["Health"],"summary":"Health check","description":"Return whether Prometheus is healthy. Returns 200 if healthy, 503 otherwise.","operationId":"health","responses":{"200":{"description":"Prometheus is healthy"},"503":{"description":"Prometheus is not ready"}}}},"/-/ready":{"get":{"tags":["Health"],"summary":"Readiness probe","description":"Return whether Prometheus is ready to handle requests","operationId":"ready","responses":{"200":{"description":"Prometheus is ready"},"503":{"description":"Prometheus is not ready"}}}}},"components":{"schemas":{"QueryResult":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["success","error"],"description":"Query status"},"data":{"oneOf":[{"$ref":"#/components/schemas/Matrix"},{"$ref":"#/components/schemas/Vector"},{"$ref":"#/components/schemas/Scalar"},{"$ref":"#/components/schemas/String"}],"description":"Result data (type depends on query)"},"errorType":{"type":"string","description":"Error type if status is error"},"error":{"type":"string","description":"Error message if status is error"}}},"Vector":{"type":"array","items":{"type":"object","required":["metric","value"],"properties":{"metric":{"type":"object","additionalProperties":{"type":"string"},"example":{"__name__":"up","job":"prometheus","instance":"localhost:9090"}},"value":{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"}]},"minItems":2,"maxItems":2,"example":[1701600600,"1"]}}}},"Matrix":{"type":"array","items":{"type":"object","required":["metric","values"],"properties":{"metric":{"type":"object","additionalProperties":{"type":"string"}},"values":{"type":"array","items":{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"}]},"minItems":2,"maxItems":2}}}}},"Scalar":{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"}]},"minItems":2,"maxItems":2,"example":[1701600600,"42"]},"String":{"type":"array","items":{"oneOf":[{"type":"number"},{"type":"string"}]},"minItems":2,"maxItems":2,"example":[1701600600,"some_string_value"]},"Error":{"type":"object","required":["status","error"],"properties":{"status":{"type":"string","enum":["error"]},"errorType":{"type":"string","description":"Type of error"},"error":{"type":"string","description":"Error message"}}},"Target":{"type":"object","required":["discoveredLabels","labels","scrapeUrl","lastError","lastScrape","lastScrapeDuration","health"],"properties":{"discoveredLabels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels discovered during service discovery"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Labels applied to target"},"scrapeUrl":{"type":"string","format":"uri","description":"URL being scraped","example":"http://localhost:9090/metrics"},"lastError":{"type":"string","description":"Last error message (empty if no error)"},"lastScrape":{"type":"string","format":"date-time","description":"Last scrape time"},"lastScrapeDuration":{"type":"number","format":"double","description":"Duration of last scrape in seconds"},"health":{"type":"string","enum":["up","down"],"description":"Target health status"}}},"Alert":{"type":"object","required":["state","labels","annotations","activeAt","value"],"properties":{"state":{"type":"string","enum":["firing","pending","inactive"],"description":"Alert state"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Alert labels"},"annotations":{"type":"object","additionalProperties":{"type":"string"},"description":"Alert annotations"},"activeAt":{"type":"string","format":"date-time","description":"When alert became active"},"value":{"type":"string","description":"Current alert value"}}}}}}