Spend dashboards
Track cost by model, provider, project, or credential type. Build per-customer billing breakdowns.
Performance monitoring
Monitor p50, p95, and p99 latency over time across models and providers.
Evaluator quality
Quantify pass rate, average score, and result distribution per Evaluator and version.
Guardrail enforcement
Measure block rate, triggers, and outcomes by Policy and stage.
Endpoint
POSThttps://my.orq.ai/v2/reporting
- All requests require a
Bearertoken. See API Keys for how to generate one. - The workspace and project scope are derived from the API key itself.
Trace events flow into reporting in near real time, with a small ingestion delay measured in seconds. Queries against very recent windows may not yet include the latest events.
See the API Reference
Interactive playground and full schema for
POST /v2/reporting.Request
The wire format is snake_case end-to-end. SDKs expose the same fields in each language’s native style (
groupBy in TypeScript, group_by in Python).grain sets the time bucket: auto, minute, hour, or day. auto, or an omitted field, lets the server choose the bucket. The response reports the applied bucket in meta.effective_grain.
See the API reference for the full field schema, types, defaults, and validation rules.
mode: the default timeseries mode returns one row per time bucket. Set "mode": "scalar" to aggregate the whole window instead: with group_by the response carries one row per dimension combination ordered by value (a top list, capped by limit; flip the order with "sort": "asc"), and without group_by exactly one row (a single aggregate). Scalar rows omit the timestamp field.
Response
Every successful response follows the same envelope. Thedata array contains time-ordered buckets. Each bucket carries:
- a
dimensionsmap: thegroup_byvalues for that row (see Dimensions) - a
metricsmap: shape depends on the metric requested
genai.usage) return a full set of related fields in one call.
totals is present only when include_totals: true is set in the request; otherwise the field is omitted. Metric values are rounded to 10 decimal places server-side.
Metric catalog
- Usage
- Evaluator
- Guardrail
Quantile metrics (
genai.latency.p*, genai.ttft.p*) carry a +/-1-2% error
band typical of t-digest estimation at high cardinality. genai.ttft.*
metrics cover streaming requests only and do not support entity dimensions
such as agent or tool.Evaluator and guardrail metrics read from the same source: every Evaluator
run is recorded as a guardrail check regardless of the Evaluator
implementation type. Pick the metric that matches the question being asked.
Dimensions
Entity dimensions (agent, tool, and so on) are available for usage metrics and break a metric down by a product entity.
billing_billable is available as a filter field for usage metrics, but not
as a group_by dimension. To break down Orq.ai-managed versus customer-owned credentials, use credential_type instead. The values orq_managed and customer_byok are derived at query time from the workspace billing setup, not stored on each event.- Usage dimensions
- Entity dimensions
- Evaluator and guardrail dimensions
Pair these with
genai.requests, genai.tokens, genai.cost, genai.errors, genai.latency.*, or genai.usage.The
status_code values map to the OQL and Telemetry API spellings in Trace status values.Errors
Errors come back as JSON envelopes with a numericcode, a human-readable message, and an empty details array.
Limits
Token and Cost Tracking
How token usage is captured and cost is calculated per LLM request.