Plans that include the Prometheus metrics endpoint can scrape their workspace's own figures into Prometheus, Grafana or any tool that reads the Prometheus text format.
Setting it up
- Open Settings → Developer in your workspace and press Create metrics endpoint.
- Copy the bearer token straight away — it is shown once. The page also shows the endpoint URL (a random address on your own workspace) and a ready-made scrape config.
- Add the job to Prometheus. Scraping more often than every 15 seconds gains nothing (figures are refreshed every 15 seconds), and scrapes are limited to 60 a minute.
Rotate URL & token replaces both at once, so an old config or a leaked token stops working immediately. A wrong URL or token always gets a plain 404.
What is — and is not — included
Only your own workspace's figures. Never stream keys, ingest keys, provider API keys (not even their last characters), OAuth tokens, webhook URLs or internal addresses. Ids in labels are opaque. Figures come from what the platform has already recorded, so viewers and bitrates can lag real time by up to a minute or so.
Per-object metrics (channels, destinations, integrations, webhook endpoints, AI streams and their channels) stop at 200 objects each; series_truncated tells you when that happened.
Available metrics
Every name starts with streamrepeater_workspace_. Money is in the currency's minor units (pence or cents) with a currency label.
Endpoint
| Metric |
Type |
Labels |
Meaning |
up |
gauge |
— |
Always 1 while the endpoint answers. |
scrape_timestamp_seconds |
gauge |
— |
When the figures were computed (cached for up to 15 seconds). |
series_truncated |
gauge |
family |
1 when a per-object family hit the 200-object cap (channels, destinations, integrations, webhook_endpoints, ai_streams, ai_stream_targets). |
Plan and billing
| Metric |
Type |
Labels |
Meaning |
plan_info |
gauge |
plan |
Always 1; the plan in effect is the label. |
billing_state |
gauge |
state |
One series per state (free, trial, paid, overdue, lapsed, exempt); exactly one is 1. |
invoice_amount_due_minor_units |
gauge |
currency |
Unpaid invoice total in minor units (pence/cents). |
recording_storage_quota_bytes |
gauge |
— |
Cloud recording / Video Library allowance (absent when unlimited). |
bandwidth_used_bytes_total |
counter |
— |
Egress counted against the plan this period; resets with the period. |
bandwidth_ingress_bytes_total |
counter |
— |
Ingest received this period; resets with the period. |
bandwidth_quota_bytes |
gauge |
— |
Egress allowance this period (absent when unlimited). |
bandwidth_reset_timestamp_seconds |
gauge |
— |
When the bandwidth counters next reset. |
Channels and relays
| Metric |
Type |
Labels |
Meaning |
channels |
gauge |
status |
Channels by status (offline, reconnecting, live). |
channel_live |
gauge |
channel_id, channel, title |
1 while the channel is receiving its ingest. |
channel_viewers |
gauge |
channel_id, channel, title |
Current viewers (0 when no sample in the last 5 minutes). |
channel_inbound_bps |
gauge |
channel_id, channel, title |
Current ingest bitrate, bits per second. |
channel_outbound_bps |
gauge |
channel_id, channel, title |
Current egress bitrate, bits per second. |
destinations |
gauge |
state |
Destinations by state (enabled, disabled, auto_paused). |
relays |
gauge |
status |
Relay processes by status. |
destination_up |
gauge |
destination_id, destination, protocol, channel |
1 while the relay to the destination is running. |
destination_restarts |
gauge |
destination_id, destination, protocol, channel |
Relay restarts since it last started cleanly. |
destination_failure_streak |
gauge |
destination_id, destination, protocol, channel |
Consecutive failures blamed on the destination. |
relay_alert_events_24h |
gauge |
type |
Relay alert events in the last 24 hours (process_missing, start_failed, backing_off). |
Integrations and webhooks
| Metric |
Type |
Labels |
Meaning |
integration_info |
gauge |
provider, account |
Always 1 per connected integration; account is the name the Integrations page shows (Twitch, Kick), otherwise empty. |
integration_connected |
gauge |
provider |
1 while the integration is enabled. |
integration_needs_reconnect |
gauge |
provider |
1 when it must be reconnected. |
integration_token_invalid |
gauge |
provider |
1 when the token can no longer be refreshed. |
integration_token_expiry_timestamp_seconds |
gauge |
provider |
When the current access token expires, if known. |
integration_token_refreshed_timestamp_seconds |
gauge |
provider |
Last successful token refresh, if any. |
webhook_endpoints |
gauge |
state |
Developer webhook endpoints (enabled, disabled). |
webhook_endpoint_last_status_code |
gauge |
endpoint_id |
HTTP status of the last delivery (0 = no response or never delivered). Never the URL. |
webhook_endpoint_consecutive_failures |
gauge |
endpoint_id |
Failed deliveries since the last successful one. |
webhook_endpoint_last_delivery_timestamp_seconds |
gauge |
endpoint_id |
When the last delivery was attempted. |
Alerts
| Metric |
Type |
Labels |
Meaning |
alerts_active |
gauge |
area, severity |
Alerts raised for the workspace in the last 7 days, counted once however many members received them. Areas: billing, streams, integrations, ai, account, other. Severities: info, good, warn, critical. |
alerts_unread |
gauge |
area, severity |
Active alerts that no member has read yet. |
AI Streams
| Metric |
Type |
Labels |
Meaning |
ai_stream_running |
gauge |
stream_id, stream |
1 while the stream's publisher is running. Only when the plan includes AI Streams. |
ai_stream_active |
gauge |
stream_id, stream |
1 while the stream is switched on. Only when the plan includes AI Streams. |
ai_stream_diagnosis |
gauge |
stream_id, stream, reason |
The stream page's diagnosis; one series per reason (generating, stopped, not-entitled, no-provider, no-prompt, no-key, spend-limit, other), exactly one is 1. Only when the plan includes AI Streams. |
ai_stream_buffered_clips |
gauge |
stream_id, stream |
Generated clips waiting to play. Only when the plan includes AI Streams. |
ai_stream_clips_generated_total |
counter |
stream_id, stream |
Clips generated. Only when the plan includes AI Streams. |
ai_stream_clips_played_total |
counter |
stream_id, stream |
Clips played on air. Only when the plan includes AI Streams. |
ai_stream_clips_failed_total |
counter |
stream_id, stream |
Clips that could not be generated. Only when the plan includes AI Streams. |
ai_stream_clips_refused_total |
counter |
stream_id, stream |
Requests refused by moderation or the spend limit. Only when the plan includes AI Streams. |
ai_stream_last_clip_generated_timestamp_seconds |
gauge |
stream_id, stream |
When the latest clip was generated. Only when the plan includes AI Streams. |
ai_stream_spend_estimate_minor_units |
gauge |
stream_id, stream, currency |
Estimated provider spend since the stream's budget was last reset, in minor units. Only when the plan includes AI Streams. |
ai_stream_spend_limit_minor_units |
gauge |
stream_id, stream, currency |
The stream's spend limit, in minor units (absent when none). Only when the plan includes AI Streams. |
ai_stream_target_state |
gauge |
stream_id, stream, channel, state |
Each target channel's state (receiving, connecting, dropped, waiting, busy, not_included, other); exactly one per target is 1. Only when the plan includes AI Streams. |
ai_provider_key_state |
gauge |
provider, state |
The workspace's key for each AI video provider (working, no_credits, refused, unchecked); exactly one per provider is 1. Never the key. Only when the plan includes AI Streams. |
ai_provider_key_checked_timestamp_seconds |
gauge |
provider |
When the key was last checked. Only when the plan includes AI Streams. |
ai_video_library_bytes |
gauge |
— |
Storage used by AI stream days saved to the Video Library. Only when the plan includes AI Streams. |