Source: https://benchmarks.coralogix.com/docs

# Benchmarks API.

This API serves the live figures behind these pages as JSON: query latency on Coralogix's production telemetry lake, and how customers use Coralogix through the CLI and MCP. It is public and read-only, and takes no key.

## At a glance

- **Base URL**: `https://benchmarks.coralogix.com`
- **Authentication**: None. Every endpoint is public.
- **Methods**: GET and HEAD. Anything else answers 405.
- **Format**: JSON, gzipped when the request accepts gzip.
- **Freshness**: Refreshed every 5 minutes. Responses carry an `ETag` and a `Cache-Control` that lasts until the next refresh. Send `If-None-Match` to get a 304 when nothing changed.
- **Browsers**: Any origin may read the API (CORS).
- **Rate limit**: 1,500 requests per 5 minutes per IP address.
- **Description**: [/openapi.json](https://benchmarks.coralogix.com/openapi.json), OpenAPI 3.1, with every response schema.

## Endpoints

| Endpoint | What it returns |
|---|---|
| `GET [/api/v1/benchmarks](https://benchmarks.coralogix.com/api/v1/benchmarks)` | DataPrime and PromQL query latency percentiles (p50, p90, p95, in milliseconds) for a large and a medium production account, by dataset, query type and data volume, hourly over the last 7 days, and the estate's 7-day totals. |
| `GET [/api/v1/headless](https://benchmarks.coralogix.com/api/v1/headless)` | The share of Coralogix sessions and people that use the CLI or MCP over a rolling month: headline figures, 7-day rolling series, and the coding agents' share of API calls. Shares run from 0 to 1. |
| `GET [/healthz](https://benchmarks.coralogix.com/healthz)` | Whether the service is up, its release, and the age of its data. |
| `GET /badges/{name}.json` | One headline figure in shields.io's endpoint format: `dataprime-p50`, `dataprime-p95`, `metrics-p95`, `ingested-7d`, `queries-7d`. |

## Examples

### The large account's DataPrime latency, all queries together

```
curl -s https://benchmarks.coralogix.com/api/v1/benchmarks \
  | jq '.accounts.large.q1[] | select(.overall) | {n, p50, p90, p95}'
```

### PromQL latency on the same account

```
curl -s https://benchmarks.coralogix.com/api/v1/benchmarks | jq '.accounts.large.metrics | {n, p50, p90, p95}'
```

### The headless headline: the month's first week against its last

```
curl -s https://benchmarks.coralogix.com/api/v1/headless | jq .headline
```

### Only when it has changed

```
curl -s -i https://benchmarks.coralogix.com/api/v1/benchmarks -H 'If-None-Match: "<etag from the last response>"'
```

## Pages for agents

Every page also answers in Markdown at its own address when the request prefers it (`Accept: text/markdown`), and has a Markdown copy at the same path with `.md` on the end. [/llms.txt](https://benchmarks.coralogix.com/llms.txt) describes the site with its current figures, and [/llms-full.txt](https://benchmarks.coralogix.com/llms-full.txt) holds every page in one file.

```
curl -s -H 'Accept: text/markdown' https://benchmarks.coralogix.com/benchmarks
```

## Errors

| Status | When |
|---|---|
| `400` | The request has a query string. The API takes none. |
| `404` | No such endpoint, or no badge by that name. |
| `405` | Any method but GET or HEAD. |
| `503` | The service has just restarted and is gathering its figures. Try again in a few minutes. |

Errors answer in JSON with a `msg` field.
