Skip to content
Browse documentation

Send your first metric

Publish raw values or pre-aggregated statistic sets to the Metrics API.

Markdown

Metrics are sent with POST /v1/metrics/{metricName}. Each request contains one or more entries for the same metric name.

Use a single numeric value when you have one observation at one timestamp. Use a statisticSet when your application has already aggregated multiple observations into min, max, avg, and sampleCount.

Before you send data

You need a workspace-scoped API token with Write access to the metric resource. Send it as a bearer token:

Authorization: Bearer $METRICS_TOKEN
Content-Type: application/json

Timestamps are Unix epoch milliseconds. If resolution is omitted, the API stores the point at one-second resolution.

See Metric rollups and resolution before choosing a resolution for production metrics.

Option 1: Single value

Send a value when one entry represents one sample.

curl -X POST "$METRICS_API_URL/v1/metrics/cpu_usage" \
  -H "Authorization: Bearer $METRICS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "entries": [
      {
        "timestamp": 1779433200000,
        "value": 42.7,
        "resolution": 60,
        "dimensions": [
          { "name": "host", "value": "api-1" },
          { "name": "region", "value": "us-west" }
        ]
      }
    ]
  }'

The API stores this as a sample count of 1. Querying the metric with aggregation=count returns 1 for that bucket.

Option 2: Min, max, avg, count

Send a statisticSet when one entry represents several samples that were already summarized by your code.

curl -X POST "$METRICS_API_URL/v1/metrics/request_latency" \
  -H "Authorization: Bearer $METRICS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "entries": [
      {
        "timestamp": 1779433200000,
        "resolution": 60,
        "statisticSet": {
          "min": 12.4,
          "max": 88.9,
          "avg": 31.6,
          "sampleCount": 25
        },
        "dimensions": [
          { "name": "route", "value": "GET /v1/metrics" },
          { "name": "status", "value": "200" }
        ]
      }
    ]
  }'

sampleCount is the count for the statistic set. Querying with aggregation=count returns the sum of sampleCount values in each returned bucket.

Choosing between them

Use value for direct measurements such as a gauge, a queue depth, or a single request duration.

Use statisticSet when you flush buffered measurements from a client, agent, or job. It reduces payload size without losing the data needed for min, max, avg, sum, and count queries.

Distribution aggregations are the exception. A statistic set carries only min, max, avg, and sampleCount, so the distribution within the set is not preserved. percentile(95) and trimmed_mean(10;10) queries are accurate for individual value entries, but approximate toward the average for statistic sets. Send individual value entries when you need accurate percentiles or trimmed means.