Skip to main content

Metrics API

Track flag evaluation counts and A/B experiment impressions.

Evaluation Metrics

Get Evaluation Summary

GET /v1/metrics/evaluations

Auth: JWT (Owner, Admin)

Response 200 OK

{
"total_evaluations": 15234,
"window_start": "2026-04-01T00:00:00Z",
"counters": [
{"flag_key": "new-checkout", "env_id": "prod-uuid", "reason": "TARGETED", "count": 5432},
{"flag_key": "new-checkout", "env_id": "prod-uuid", "reason": "DISABLED", "count": 1200},
{"flag_key": "dark-mode", "env_id": "dev-uuid", "reason": "FALLTHROUGH", "count": 890}
]
}

Counters are broken down by:

  • Flag key — which flag was evaluated
  • Environment ID — which environment
  • Reason — evaluation result reason

Reset Counters

POST /v1/metrics/evaluations/reset

Auth: JWT (Owner, Admin)

Clears all evaluation counters and starts a new window.

Response 200 OK

{"status": "reset"}

Impression Tracking

For A/B experiments, track which users saw which variants.

Track Impression

POST /v1/track

Auth: API Key (X-API-Key header) — rate-limited with evaluation endpoints

Request

{
"flag_key": "checkout-experiment",
"variant_key": "treatment-a",
"user_key": "user-123"
}
FieldTypeRequiredDescription
flag_keystringYesExperiment flag key
variant_keystringNoVariant the user saw
user_keystringNoUser identifier

Response 204 No Content

Get Impression Summary

GET /v1/metrics/impressions

Auth: JWT (Owner, Admin)

Response 200 OK

Aggregated counts per flag/variant:

[
{"flag_key": "checkout-experiment", "variant_key": "control", "count": 5000},
{"flag_key": "checkout-experiment", "variant_key": "treatment-a", "count": 3000},
{"flag_key": "checkout-experiment", "variant_key": "treatment-b", "count": 2000}
]

Flush Impressions

Export and clear raw impression data.

POST /v1/metrics/impressions/flush

Auth: JWT (Owner, Admin)

Response 200 OK

Returns the raw impression array and clears the buffer:

[
{
"flag_key": "checkout-experiment",
"variant_key": "treatment-a",
"user_key": "user-123",
"timestamp": 1711929600000
}
]
info

Impressions are stored in-memory with a configurable buffer size (default: 100,000). Flush regularly to avoid data loss on server restart.