Get Core Web Vitals (CrUX field data)
const url = 'https://api.overwatch.weareheavy.dev/v1/sites/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/crux';const options = {method: 'GET', headers: {'x-api-key': '<x-api-key>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.overwatch.weareheavy.dev/v1/sites/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/crux \ --header 'x-api-key: <x-api-key>'Real-user Core Web Vitals for the site’s origin, from the Chrome UX Report (CrUX): the latest p75 values for LCP, INP, CLS, and TTFB, a pass/fail Core Web Vitals verdict, movement versus ~7 and ~28 days ago, and the stored weekly series for trend charts.
The verdict follows the standard assessment: pass iff all three
core metrics’ p75 are good — LCP ≤ 2.5 s, INP ≤ 200 ms, CLS ≤ 0.1 —
and null when any core metric is missing for the period.
Responds 404 until the daily CrUX sync has found data for the origin
(low-traffic origins may never be in the CrUX dataset), or when the
Performance app is not enabled for the site.
Authorizations
Section titled “ Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”The site’s UUID.
Responses
Section titled “ Responses ”The latest metrics, verdict, deltas, and weekly series.
object
The CrUX form factor the data covers (ALL — all devices).
Epoch ms of the last CrUX sync for this site.
One CrUX window’s p75 metrics; a metric is null when CrUX has no data for it.
object
The last day of the collection window (YYYY-MM-DD).
Largest Contentful Paint p75, in milliseconds.
Interaction to Next Paint p75, in milliseconds.
Cumulative Layout Shift p75 (unitless).
Time to First Byte p75, in milliseconds.
The Core Web Vitals assessment for the latest window.
Per-metric movement vs the point closest to 7 / 28 days back.
object
Per-metric movement vs a baseline; null when either side is missing.
object
Per-metric movement vs a baseline; null when either side is missing.
object
Weekly p75 points, oldest → newest (each a rolling 28-day window).
One CrUX window’s p75 metrics; a metric is null when CrUX has no data for it.
object
The last day of the collection window (YYYY-MM-DD).
Largest Contentful Paint p75, in milliseconds.
Interaction to Next Paint p75, in milliseconds.
Cumulative Layout Shift p75 (unitless).
Time to First Byte p75, in milliseconds.
Example
{ "formFactor": "ALL", "checkedAt": 1753300000000, "latest": { "periodEnd": "2026-07-20", "lcp": 2100, "inp": 140, "cls": 0.05, "ttfb": 600 }, "verdict": "pass", "deltas": { "d7": { "lcp": -80, "inp": 5, "cls": 0, "ttfb": -20 }, "d28": { "lcp": -240, "inp": -15, "cls": -0.01, "ttfb": -60 } }, "series": [ { "periodEnd": "2026-07-20", "lcp": 2100, "inp": 140, "cls": 0.05, "ttfb": 600 } ]}Missing or invalid credentials.
object
A human-readable error message.
Example
{ "error": "invalid api key"}The site was not found, the Performance app is not enabled, or the origin has no CrUX data yet.
object
A human-readable error message.
Example
{ "error": "no CrUX data for this origin"}