All routes are GET /v1/orgs/{org}/zones/{zone}/rum/… on https://dash.openwaf.dev. Any role of the organization can read them, including read-only and zone-scoped tokens.
{step, points: [{ts, visits, lcp, inp, cls, fcp, ttfb}]} with the p75 of each metric per interval. step is a multiple of 60 seconds; by default the smallest of 5 minutes to 1 day that gives at most 60 points.
…/rum/breakdown?by=…&limit=10
Rows {key, visits, metrics} by visits (at most 100). by ∈ path, country, node, device, connection, nav_type, host, viewport.
…/rum/lcp-parts[?by=device|path]
{lcp_p75, count, parts, all}: the LCP phases of the slow views (parts) and of all views (all); with by, also rows (10).
Everything the dashboard needs in one call: summary, timeseries, breakdowns (path 25 rows; country, node, device, connection 10), lcp_parts by device, offenders (lcp_element, inp_target, inp_script, cls_target) and the zone's RUM settings. breakdowns.device ignores the device filter.
Metric values are in milliseconds, except CLS (unitless), with at most 4 decimals. Without data, null.
count is the number of measured page views that have the metric; visits is the estimate of real views (each measured view counts 1/sample_rate).
prev_* values cover the period of the same length just before since.
Time series intervals are aligned to UTC and include empty intervals (visits0, metrics null).
injection sums the edge's injection counters for the period: injected, csp_nonce (injected reusing your CSP nonce), csp_blocked (not injected because of your CSP), no_head (no </head> to inject before) and sampled_out.
GET /v1/orgs/{org}/zones/{zone}/edge always returns "rum": {"enabled": false, "sample_rate": 1, "exclude_paths": []} or the current values. Change them with PATCH on the same route (JSON merge patch: fields given replace the current ones, exclude_paths as a whole; a field set to null returns to its default and "rum": null to the default object). See Real User Monitoring.