{
 "openapi": "3.1.0",
 "info": {
  "title": "Coralogix Telemetry Lake Benchmarks API",
  "version": "1",
  "summary": "Live query latency from Coralogix's production telemetry lake, and how customers use Coralogix headlessly.",
  "description": "Read-only, public, no authentication. Every figure is measured on Coralogix's own production accounts and refreshed every 5 minutes; responses carry ETag and Cache-Control until the next refresh, and any origin may read them (CORS). Use it to cite current DataPrime and PromQL query latency percentiles, the volume the platform handles, or the share of Coralogix use that runs through the CLI and MCP. The pages these figures come from: https://benchmarks.coralogix.com/benchmarks and https://benchmarks.coralogix.com/headless-usage. For agents: https://benchmarks.coralogix.com/llms.txt.",
  "contact": {
   "name": "Coralogix",
   "url": "https://coralogix.com/"
  }
 },
 "servers": [
  {
   "url": "https://benchmarks.coralogix.com"
  }
 ],
 "externalDocs": {
  "description": "The site, and every page as Markdown",
  "url": "https://benchmarks.coralogix.com/llms.txt"
 },
 "tags": [
  {
   "name": "benchmarks",
   "description": "Query latency and volume on Coralogix's production telemetry lake."
  },
  {
   "name": "headless",
   "description": "How customers use Coralogix through the CLI and MCP."
  },
  {
   "name": "service",
   "description": "Health and badges."
  }
 ],
 "paths": {
  "/api/v1/benchmarks": {
   "get": {
    "operationId": "getBenchmarks",
    "tags": [
     "benchmarks"
    ],
    "summary": "Current query latency and volume benchmarks",
    "description": "The current snapshot: DataPrime (logs, spans and other events) and PromQL (metrics) query latency percentiles for a large and a medium production account, broken down by dataset, query type and data volume, hourly over the last 7 days, and the estate's 7-day totals. Latencies are in milliseconds. Refreshed every 5 minutes.",
    "parameters": [
     {
      "name": "If-None-Match",
      "in": "header",
      "required": false,
      "description": "An ETag from an earlier response; 304 if the snapshot has not changed.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "The current snapshot.",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       },
       "Cache-Control": {
        "description": "public, until the next refresh",
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Benchmarks"
        }
       }
      }
     },
     "304": {
      "description": "Unchanged since the ETag given."
     },
     "503": {
      "description": "The service has just started and has no snapshot yet; try again in a minute.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Message"
        }
       }
      }
     },
     "400": {
      "description": "A query string: the API takes none.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Message"
        }
       }
      }
     },
     "405": {
      "description": "Any method but GET or HEAD: the API is read-only.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Message"
        }
       }
      }
     }
    }
   }
  },
  "/api/v1/headless": {
   "get": {
    "operationId": "getHeadlessUsage",
    "tags": [
     "headless"
    ],
    "summary": "How much of Coralogix is used headlessly",
    "description": "The share of Coralogix sessions and people that use the Coralogix CLI or MCP server instead of only the web app, over a rolling month of complete UTC days: headline figures comparing the month's first week with its last, 7-day rolling series, the coding agents' share of API calls, and what they ask for. Shares are from 0 to 1. A session is one person on one day. Refreshed every 5 minutes.",
    "responses": {
     "200": {
      "description": "The current figures.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Headless"
        }
       }
      }
     },
     "503": {
      "description": "The figures are being gathered (after a restart); try again in a few minutes.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Message"
        }
       }
      }
     },
     "400": {
      "description": "A query string: the API takes none.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Message"
        }
       }
      }
     },
     "405": {
      "description": "Any method but GET or HEAD: the API is read-only.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Message"
        }
       }
      }
     }
    }
   }
  },
  "/healthz": {
   "get": {
    "operationId": "getHealth",
    "tags": [
     "service"
    ],
    "summary": "Health and version",
    "description": "Whether the service is up, which release it runs, and how old its benchmarks snapshot is. Never cached.",
    "responses": {
     "200": {
      "description": "Up.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Health"
        }
       }
      }
     },
     "400": {
      "description": "A query string: the API takes none.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Message"
        }
       }
      }
     },
     "405": {
      "description": "Any method but GET or HEAD: the API is read-only.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Message"
        }
       }
      }
     }
    }
   }
  },
  "/badges/{name}.json": {
   "get": {
    "operationId": "getBadge",
    "tags": [
     "service"
    ],
    "summary": "A README badge",
    "description": "One headline figure in shields.io's endpoint format, for a badge such as https://img.shields.io/endpoint?url=https://benchmarks.coralogix.com/badges/dataprime-p95.json.",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "description": "Which badge.",
      "schema": {
       "type": "string",
       "enum": [
        "dataprime-p50",
        "dataprime-p95",
        "metrics-p95",
        "ingested-7d",
        "queries-7d",
        "lighthouse-performance",
        "lighthouse-accessibility",
        "lighthouse-best-practices",
        "lighthouse-seo"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "The badge.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Badge"
        }
       }
      }
     },
     "404": {
      "description": "No badge by that name.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Message"
        }
       }
      }
     },
     "400": {
      "description": "A query string: the API takes none.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Message"
        }
       }
      }
     },
     "405": {
      "description": "Any method but GET or HEAD: the API is read-only.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Message"
        }
       }
      }
     }
    }
   }
  }
 },
 "components": {
  "schemas": {
   "Benchmarks": {
    "type": "object",
    "required": [
     "accounts",
     "estate",
     "generated_at",
     "next_refresh_at",
     "window"
    ],
    "properties": {
     "accounts": {
      "type": "object",
      "description": "The two benchmark accounts.",
      "required": [
       "large"
      ],
      "properties": {
       "large": {
        "description": "A scaled production account: about 40 TB ingested a day, 1.2 PB queryable.",
        "allOf": [
         {
          "$ref": "#/components/schemas/Account"
         }
        ]
       },
       "small": {
        "description": "A mid-size account: about 300 GB a day, 9 TB queryable. Absent if unavailable.",
        "allOf": [
         {
          "$ref": "#/components/schemas/Account"
         }
        ]
       }
      }
     },
     "estate": {
      "type": "object",
      "description": "Totals across every Coralogix environment over the last 7 days.",
      "properties": {
       "event_bytes_7d": {
        "type": "integer",
        "description": "Bytes of logs, spans, RUM and profiles received at the ingest gateways (compressed, on the wire)."
       },
       "metric_bytes_7d": {
        "type": "integer",
        "description": "Bytes of metrics, as the platform meters them."
       },
       "queries_7d": {
        "type": "integer",
        "description": "DataPrime queries run."
       },
       "metric_queries_7d": {
        "type": "integer",
        "description": "PromQL queries analysed, alert evaluation excluded."
       },
       "clusters": {
        "type": "integer",
        "description": "How many Coralogix environments the totals cover."
       }
      }
     },
     "window": {
      "type": "object",
      "description": "The 7 days the percentiles cover.",
      "properties": {
       "start": {
        "type": "string",
        "format": "date-time"
       },
       "end": {
        "type": "string",
        "format": "date-time"
       }
      }
     },
     "generated_at": {
      "type": "string",
      "format": "date-time",
      "description": "When this snapshot was taken."
     },
     "next_refresh_at": {
      "type": "string",
      "format": "date-time",
      "description": "When the next one will be."
     },
     "version": {
      "type": "string",
      "description": "The release that served it."
     }
    }
   },
   "Account": {
    "type": "object",
    "required": [
     "q1"
    ],
    "properties": {
     "q1": {
      "type": "array",
      "description": "DataPrime query latency over the window: one row for all queries together (overall true) and one per data volume bucket, query type and dataset.",
      "items": {
       "$ref": "#/components/schemas/LatencyRow"
      }
     },
     "q2": {
      "type": "array",
      "description": "DataPrime query latency by hour.",
      "items": {
       "$ref": "#/components/schemas/HourlyLatency"
      }
     },
     "metrics": {
      "type": "object",
      "description": "PromQL query latency on the metrics engine.",
      "properties": {
       "n": {
        "type": "integer",
        "description": "How many PromQL queries the percentiles cover."
       },
       "p50": {
        "type": "number",
        "description": "Median latency, milliseconds."
       },
       "p90": {
        "type": "number",
        "description": "90th percentile latency, milliseconds."
       },
       "p95": {
        "type": "number",
        "description": "95th percentile latency, milliseconds."
       },
       "series_daily": {
        "type": "integer",
        "description": "Unique metric time series a day."
       },
       "types": {
        "type": "array",
        "description": "By kind of query (instant, range).",
        "items": {
         "type": "object",
         "properties": {
          "type": {
           "type": "string"
          },
          "n": {
           "type": "integer",
           "description": "How many queries of this kind the percentiles cover."
          },
          "p50": {
           "type": "number",
           "description": "Median latency, milliseconds."
          },
          "p90": {
           "type": "number",
           "description": "90th percentile latency, milliseconds."
          },
          "p95": {
           "type": "number",
           "description": "95th percentile latency, milliseconds."
          }
         }
        }
       },
       "q2": {
        "type": "array",
        "description": "PromQL query latency by hour.",
        "items": {
         "$ref": "#/components/schemas/HourlyLatency"
        }
       }
      }
     },
     "volume": {
      "type": "integer",
      "description": "DataPrime queries over the window, from every client."
     },
     "unique_keys": {
      "type": "integer",
      "description": "Distinct field names in the account's data."
     }
    }
   },
   "LatencyRow": {
    "type": "object",
    "required": [
     "n",
     "p50",
     "p90",
     "p95"
    ],
    "properties": {
     "overall": {
      "type": [
       "boolean",
       "null"
      ],
      "description": "True on the row for all queries together."
     },
     "bucket": {
      "type": [
       "string",
       "null"
      ],
      "description": "Data read by the query, e.g. \"<1 MB\", \"10-100 MB\"."
     },
     "qtype": {
      "type": [
       "string",
       "null"
      ],
      "description": "Kind of query, e.g. \"aggregation\", \"unfiltered retrieval\"."
     },
     "dataset": {
      "type": [
       "string",
       "null"
      ],
      "description": "Dataset queried, e.g. logs, spans."
     },
     "n": {
      "type": "integer",
      "description": "How many queries the percentiles cover."
     },
     "p50": {
      "type": "number",
      "description": "Median latency, milliseconds."
     },
     "p90": {
      "type": "number",
      "description": "90th percentile latency, milliseconds."
     },
     "p95": {
      "type": "number",
      "description": "95th percentile latency, milliseconds."
     }
    }
   },
   "HourlyLatency": {
    "type": "object",
    "required": [
     "t",
     "n",
     "p50",
     "p90",
     "p95"
    ],
    "properties": {
     "t": {
      "type": "integer",
      "description": "Start of the hour, nanoseconds since the Unix epoch."
     },
     "n": {
      "type": "integer",
      "description": "How many queries in the hour the percentiles cover."
     },
     "p50": {
      "type": "number",
      "description": "Median latency, milliseconds."
     },
     "p90": {
      "type": "number",
      "description": "90th percentile latency, milliseconds."
     },
     "p95": {
      "type": "number",
      "description": "95th percentile latency, milliseconds."
     }
    }
   },
   "Headless": {
    "type": "object",
    "required": [
     "card",
     "headline",
     "sessions",
     "people",
     "calls",
     "agents",
     "mix",
     "generated_at",
     "next_refresh_at"
    ],
    "properties": {
     "card": {
      "type": "object",
      "description": "The last 7 complete days.",
      "properties": {
       "sessions": {
        "type": "number",
        "minimum": 0,
        "maximum": 1,
        "description": "Sessions with any CLI or MCP use. A share from 0 to 1."
       },
       "only": {
        "type": "number",
        "minimum": 0,
        "maximum": 1,
        "description": "Sessions with CLI or MCP use and no web app. A share from 0 to 1."
       },
       "mixed": {
        "type": "number",
        "minimum": 0,
        "maximum": 1,
        "description": "Sessions with CLI or MCP use and the web app. A share from 0 to 1."
       },
       "people": {
        "type": "number",
        "minimum": 0,
        "maximum": 1,
        "description": "Active people who used the CLI or MCP. A share from 0 to 1."
       },
       "change": {
        "type": "object",
        "description": "How only and mixed moved since the 7 days before, as a difference of shares.",
        "properties": {
         "only": {
          "type": [
           "number",
           "null"
          ]
         },
         "mixed": {
          "type": [
           "number",
           "null"
          ]
         }
        }
       }
      }
     },
     "headline": {
      "type": [
       "object",
       "null"
      ],
      "description": "The month's first 7 days against its last 7; each figure is [first, last].",
      "properties": {
       "first": {
        "type": "array",
        "items": {
         "type": "string",
         "format": "date"
        },
        "description": "First and last day of the first week."
       },
       "last": {
        "type": "array",
        "items": {
         "type": "string",
         "format": "date"
        },
        "description": "First and last day of the last week."
       },
       "sessions": {
        "type": "array",
        "items": {
         "type": "number"
        },
        "description": "Share of sessions with any CLI or MCP use."
       },
       "only": {
        "type": "array",
        "items": {
         "type": "number"
        },
        "description": "Share of sessions with no web app at all."
       },
       "people_share": {
        "type": "array",
        "items": {
         "type": "number"
        },
        "description": "Share of active people who used the CLI or MCP."
       },
       "people": {
        "type": "array",
        "items": {
         "type": "number"
        },
        "description": "How many people used the CLI or MCP."
       }
      }
     },
     "sessions": {
      "type": "array",
      "description": "Shares of sessions, 7-day rolling.",
      "items": {
       "type": "object",
       "properties": {
        "d": {
         "type": "string",
         "format": "date",
         "description": "The last day of the 7-day window (UTC)."
        },
        "only": {
         "type": "number",
         "minimum": 0,
         "maximum": 1,
         "description": "No web app. A share from 0 to 1."
        },
        "mixed": {
         "type": "number",
         "minimum": 0,
         "maximum": 1,
         "description": "With the web app. A share from 0 to 1."
        }
       }
      }
     },
     "people": {
      "type": "array",
      "description": "People over each 7-day window.",
      "items": {
       "type": "object",
       "properties": {
        "d": {
         "type": "string",
         "format": "date",
         "description": "The last day of the 7-day window (UTC)."
        },
        "share": {
         "type": "number",
         "minimum": 0,
         "maximum": 1,
         "description": "Of active people, those who used the CLI or MCP. A share from 0 to 1."
        },
        "count": {
         "type": "number",
         "description": "How many people used the CLI or MCP."
        }
       }
      }
     },
     "calls": {
      "type": "array",
      "description": "Share of all API calls from the CLI and MCP, 7-day rolling.",
      "items": {
       "type": "object",
       "properties": {
        "d": {
         "type": "string",
         "format": "date",
         "description": "The last day of the 7-day window (UTC)."
        },
        "v": {
         "type": "number",
         "minimum": 0,
         "maximum": 1,
         "description": "CLI and MCP together. A share from 0 to 1."
        },
        "from_cli": {
         "type": "number",
         "minimum": 0,
         "maximum": 1,
         "description": "From the CLI. A share from 0 to 1."
        },
        "from_mcp": {
         "type": "number",
         "minimum": 0,
         "maximum": 1,
         "description": "From MCP. A share from 0 to 1."
        }
       }
      }
     },
     "agents": {
      "type": "object",
      "description": "Each coding agent's share of all API calls, 12-hour rolling over the last 7 days.",
      "properties": {
       "series": {
        "type": "array",
        "items": {
         "type": "string"
        },
        "description": "The agents drawn, e.g. claudecode, cursor_agent, copilot_agent."
       },
       "points": {
        "type": "array",
        "items": {
         "type": "object",
         "properties": {
          "t": {
           "type": "integer",
           "description": "Milliseconds since the Unix epoch."
          }
         },
         "additionalProperties": {
          "type": "number",
          "description": "That agent's share."
         }
        }
       }
      }
     },
     "mix": {
      "type": "array",
      "description": "What each coding agent asks for over the last 7 days.",
      "items": {
       "type": "object",
       "properties": {
        "k": {
         "type": "string",
         "description": "The agent."
        },
        "query": {
         "type": "number",
         "minimum": 0,
         "maximum": 1,
         "description": "Log and span queries. A share from 0 to 1."
        },
        "metrics": {
         "type": "number",
         "minimum": 0,
         "maximum": 1,
         "description": "Metrics queries. A share from 0 to 1."
        },
        "management": {
         "type": "number",
         "minimum": 0,
         "maximum": 1,
         "description": "Configuration. A share from 0 to 1."
        }
       }
      }
     },
     "refresh_seconds": {
      "type": "integer",
      "description": "Seconds between refreshes."
     },
     "generated_at": {
      "type": "string",
      "format": "date-time"
     },
     "next_refresh_at": {
      "type": "string",
      "format": "date-time"
     }
    }
   },
   "Health": {
    "type": "object",
    "required": [
     "status",
     "warm",
     "version"
    ],
    "properties": {
     "status": {
      "type": "string",
      "enum": [
       "ok"
      ]
     },
     "warm": {
      "type": "boolean",
      "description": "Whether it has a benchmarks snapshot yet."
     },
     "version": {
      "type": "string",
      "description": "The release, e.g. v0.16.8."
     },
     "data_age_seconds": {
      "type": "integer",
      "description": "Age of the snapshot, seconds."
     }
    }
   },
   "Badge": {
    "type": "object",
    "required": [
     "schemaVersion",
     "label",
     "message",
     "color"
    ],
    "properties": {
     "schemaVersion": {
      "type": "integer",
      "enum": [
       1
      ]
     },
     "label": {
      "type": "string"
     },
     "message": {
      "type": "string"
     },
     "color": {
      "type": "string"
     },
     "namedLogo": {
      "type": "string"
     }
    }
   },
   "Message": {
    "type": "object",
    "properties": {
     "msg": {
      "type": "string"
     }
    }
   }
  }
 },
 "security": []
}