CoreDash API: Hent Core Web Vitals-data fra ekte brukere
Hent ut Core Web Vitals-data fra ekte brukere programmatisk. Bruk det fra skript, CI-pipelines, eller la AI-agenten din diagnostisere ytelsesproblemer automatisk.

Ytelsesdataene dine, akkurat der du trenger dem
CoreDash samler inn Core Web Vitals fra ekte brukere som besøker nettstedet ditt. API-et gir deg tilgang til de samme dataene fra ethvert verktøy, skript eller AI-agent. Tre verktøy, JSON inn, JSON ut.
Det mest interessante bruksområdet: tilkobling av din AI. CoreDash API-et bruker samme protokoll som Model Context Protocol (MCP), noe som betyr at AI-verktøy som Claude, Cursor og Windsurf kan hente reelle brukerdata direkte. Spør din AI "hvorfor er min LCP treg på mobil?" og den henter faktiske feltdata for å svare.
Vi bygget CWV Superpowers på toppen av dette. Det er en AI-agent som kombinerer dine CoreDash feltdata med Chrome DevTools for å diagnostisere og fikse Core Web Vitals-problemer. API-et er det som gjør det mulig.
Men du trenger ikke en AI-agent. En curl-kommando fungerer like bra.
Autentisering
Hver forespørsel trenger en API-nøkkel i Authorization-headeren:
Authorization: Bearer cdk_YOUR_API_KEY
For å få en nøkkel:
- Logg inn på app.coredash.app
- Gå til prosjektet ditt, deretter AI Insights, og så Connect Your AI
- Klikk Create API Key og kopier den. Den vises bare én gang.
Nøkler starter med cdk_ og er knyttet til et enkelt prosjekt. Du kan opprette flere nøkler og tilbakekalle dem fra samme side.
Forespørselsformat
API-et bruker JSON-RPC 2.0. Hver forespørsel er en POST til:
https://app.coredash.app/api/mcp Forespørselskroppen (request body) ser slik ut:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_metrics",
"arguments": { }
}
} Feltet id kan være et hvilket som helst tall eller streng. Det ekkoes tilbake i responsen. Det er tre verktøy: get_metrics, get_timeseries og get_histogram.
get_metrics: nåværende ytelse
Returnerer gjeldende Core Web Vitals-verdier med vurderingene good/improve/poor. Dette er verktøyet du bruker for spørsmål som "hva er min LCP akkurat nå?".
Parametere
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
metrics | string | LCP,INP,CLS,FCP,TTFB | Kommaseparerte metrics som skal returneres |
percentile | string | p75 | p50, p75, p80, p90 eller p95 |
filters | object | {} | Filtrer på dimensjoner (se Dimensjoner nedenfor) |
group | string | Grupper resultater på en dimensjonsnøkkel for å sammenligne segmenter | |
date | string | -31d | Tidsintervall: -6h, today, -1d, -7d, -31d |
limit | number | 100 | Maks antall segmenter ved gruppering (maks 500) |
Eksempel: hent alle metrics
curl -X POST https://app.coredash.app/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer cdk_YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_metrics",
"arguments": {}
}
}' Den rå responsen er en JSON-RPC-wrapper:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [{
"type": "text",
"text": "{ ... JSON string ... }"
}]
}
} De faktiske dataene er en JSON-streng inni text-feltet. Ferdig parset ser det slik ut:
{
"period": "last 31 days",
"percentile": "p75",
"metrics": {
"LCP": {
"value": 2450,
"unit": "ms",
"rating": "improve",
"distribution": { "good": 61.2, "improve": 22.4, "poor": 16.4 }
},
"INP": {
"value": 180,
"unit": "ms",
"rating": "good",
"distribution": { "good": 82.1, "improve": 12.3, "poor": 5.6 }
},
"CLS": {
"value": 0.08,
"unit": "",
"rating": "good",
"distribution": { "good": 74.5, "improve": 18.2, "poor": 7.3 }
}
}
} Objektet distribution forteller deg hvor stor prosentandel av faktiske sidevisninger som faller inn under hver vurdering. Dette er ofte mer nyttig enn p75-verdien alene. En LCP på 2450ms med 61 % good betyr at de fleste brukere har en grei opplevelse, men halen trekker p75-verdien ned.
Eksempel: sammenlign mobil vs desktop LCP
Bruk parameteren group for å dele opp resultater etter en hvilken som helst dimensjon. Slik finner du ut om LCP-problemet ditt er et mobilproblem:
curl -X POST https://app.coredash.app/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer cdk_YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_metrics",
"arguments": {
"metrics": "LCP",
"group": "d",
"date": "-7d"
}
}
}' Parset respons:
{
"period": "last 7 days",
"percentile": "p75",
"groupedBy": "d",
"groupName": "Device Type",
"segments": [
{
"segment": "mobile",
"value": "mobile",
"metrics": {
"LCP": {
"value": 3200, "unit": "ms", "rating": "improve",
"distribution": { "good": 52.3, "improve": 28.1, "poor": 19.6 }
}
}
},
{
"segment": "desktop",
"value": "desktop",
"metrics": {
"LCP": {
"value": 1800, "unit": "ms", "rating": "good",
"distribution": { "good": 78.5, "improve": 15.2, "poor": 6.3 }
}
}
}
]
} Mobil på 3200ms, desktop på 1800ms. Aggregatet ville vist 2500ms og du ville tenkt "ikke bra, men ikke forferdelig". Den grupperte visningen viser den virkelige historien: desktop er bra, mobil krever arbeid.
Eksempel: filtrer til en spesifikk side på mobil
Kombiner filters for å snevre inn til akkurat den trafikken du bryr deg om:
curl -X POST https://app.coredash.app/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer cdk_YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_metrics",
"arguments": {
"metrics": "LCP,CLS",
"filters": { "ff": "/checkout", "d": "mobile" },
"date": "-7d"
}
}
}' get_timeseries: ytelse over tid
Returnerer verdier for metrics gruppert over tid med automatisk trenddeteksjon. Dette er verktøyet du bruker for spørsmål som "har min LCP blitt verre?" og "fikset den utrullingen regresjonen?".
Parametere
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
metrics | string | LCP,INP,CLS,FCP,TTFB | Kommaseparerte metrics |
percentile | string | p75 | Hvilken persentil |
filters | object | {} | Filtrer på dimensjoner |
date | string | -31d | Tidsintervall |
granularity | string | day | Intervallstørrelse (bucket): hour, 6hours, day, week |
Eksempel: LCP-trend de siste 7 dagene
curl -X POST https://app.coredash.app/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer cdk_YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "get_timeseries",
"arguments": {
"metrics": "LCP",
"date": "-7d",
"granularity": "day"
}
}
}' Parset respons:
{
"period": "last 7 days",
"percentile": "p75",
"granularity": "day",
"dataPoints": 7,
"timeseries": [
{ "date": "2026-03-10T00:00:00.000Z", "LCP": { "value": 2600, "unit": "ms", "rating": "improve" } },
{ "date": "2026-03-11T00:00:00.000Z", "LCP": { "value": 2450, "unit": "ms", "rating": "improve" } },
{ "date": "2026-03-12T00:00:00.000Z", "LCP": { "value": 2300, "unit": "ms", "rating": "good" } }
],
"summary": {
"LCP": {
"recent": 2350,
"previous": 2680,
"change": -12.3,
"trend": "improving",
"unit": "ms"
}
}
} Feltet summary sammenligner siste halvdel av perioden med første halvdel. Trendverdier er improving (mer enn 5 % bedre), stable (innenfor 5 %), eller regressing (mer enn 5 % verre). Det er dette som gjør timeseries-endepunktet nyttig for automatisert overvåking: du trenger ikke å parse datapunktene selv for å vite om ting blir verre.
get_histogram: fordelingsform
Returnerer fordelingen for en enkelt metric som ~40 buckets (intervaller) med antall per område. Dette er verktøyet du bruker når p75 ser bra ut, men du mistenker en lang hale, eller når du ønsker å se den fulle formen på ytelsesdataene dine.
Parametere
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
metric | string | required | Enkelt metric: LCP, INP, CLS, FCP eller TTFB |
filters | object | {} | Filtrer på dimensjoner |
date | string | -31d | Tidsintervall |
Merk: i motsetning til get_metrics, tar denne en enkelt metric (ikke metrics). Én metric per forespørsel.
Eksempel: LCP-fordeling på mobil
curl -X POST https://app.coredash.app/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer cdk_YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "get_histogram",
"arguments": {
"metric": "LCP",
"filters": { "d": "mobile" },
"date": "-7d"
}
}
}' Parset respons:
{
"period": "last 7 days",
"metric": "LCP",
"unit": "ms",
"filters": { "d": "mobile" },
"buckets": [
{ "from": 0, "to": 250, "count": 1250, "rating": "good" },
{ "from": 250, "to": 500, "count": 3400, "rating": "good" },
{ "from": 500, "to": 750, "count": 2800, "rating": "good" },
{ "from": 2500, "to": 2750, "count": 890, "rating": "improve" },
{ "from": 4000, "to": 4250, "count": 120, "rating": "poor" },
{ "from": 9750, "to": null, "count": 15, "rating": "poor" }
],
"total": 45000
} Hver bucket har from/to-grenser, en count av estimerte sidevisninger i det området, og en rating basert på hvor bucket-en befinner seg i forhold til tersklene for Core Web Vitals. Den siste bucket-en har to: null fordi den er den åpne halen.
Bredden på buckets er faste per metric: LCP bruker 250ms, INP bruker 25ms, CLS bruker 0.025, FCP bruker 200ms, TTFB bruker 125ms.
Dette er nyttig for å forstå formen på dataene dine. En p75 på 2400ms kan bety at de fleste brukere ligger rundt 2400ms, eller det kan bety at 60 % er under 1000ms og en porsjon treg mobiltrafikk trekker ut halen. Histogrammet forteller deg hva som er tilfellet.
Dimensjoner
Bruk disse nøklene i filters eller som group-verdi. Filtrering snevrer inn dataene til et spesifikt segment. Gruppering deler opp resultatene slik at du kan sammenligne segmenter side om side.
Generelt
| Nøkkel | Navn | Eksempelverdier |
|---|---|---|
d | Enhetstype (Device Type) | mobile, desktop |
cc | Land | US, NL, DE (ISO 3166-1 alpha-2) |
ff | Filbane (Pathname) | /products, /checkout (null = /) |
u | Full URL | Støtter *-jokertegn, [neq]-prefiks for negering |
qs | Spørrestreng (Query String) | Delen med ?key=value |
lb | Sideetikett (Page Label) | Egendefinert etikett fra RUM-kodesnutten |
browser | Nettleser | Chrome, Safari, Firefox |
os | Operativsystem | Android, iOS, Windows |
nt | Navigasjonstype | navigate, back_forward, reload |
fv | Besøkende-type | 0 = tilbakevendende, 1 = ny besøkende |
li | Innlogget-status | 0 = logget ut, 1 = logget inn, 2 = admin |
no | Navigasjonsopprinnelse | 1 = same origin, 2 = cross origin |
ab | A/B-test | Egendefinert testetikett |
Enhet og nettverk
| Nøkkel | Navn | Enhet |
|---|---|---|
m | Enhetsminne | GB |
dl | Nettverkshastighet | Mbps |
ccs | Client Capability Score | 1=Utmerket, 2=God, 3=Moderat, 4=Begrenset, 5=Innskrenket |
redir | Antall viderekoblinger | antall |
Metric attribution
Disse dimensjonene forteller deg hva som forårsaket en metric-verdi. Grupper på lcpel for å se hvilke elementer som blir LCP på tvers av sidene dine. Grupper på inpel for å finne interaksjonene som gir dårligst INP.
| Nøkkel | Navn | For metric |
|---|---|---|
lcpel | LCP-element | LCP |
lcpet | LCP-elementtype | LCP: text, image, background-image, video |
lcpprio | LCP-prioritet | LCP: 1=Preloaded, 2=High fetchpriority, 3=Not preloaded, 4=Lazy loaded |
lcpurl | LCP bilde-URL | LCP |
inpel | INP-element | INP |
inpit | INP inndatatype | INP |
inpls | INP lastetilstand | INP |
lurl | LOAF skript-URL | INP |
clsel | CLS-element | CLS |
Eksempler på filtre
{ "d": "mobile" }
{ "ff": "/checkout", "d": "desktop" }
{ "cc": "US", "browser": "Chrome" }
{ "u": "[neq]*/admin/*" } Referanse for metrics
| Metric | Navn | Enhet | Good | Needs improvement | Poor |
|---|---|---|---|---|---|
LCP | Largest Contentful Paint | ms | < 2500 | 2500 til 4000 | > 4000 |
INP | Interaction to Next Paint | ms | < 200 | 200 til 500 | > 500 |
CLS | Cumulative Layout Shift | < 0.1 | 0.1 til 0.25 | > 0.25 | |
FCP | First Contentful Paint | ms | < 1800 | 1800 til 3000 | > 3000 |
TTFB | Time to First Byte | ms | < 800 | 800 til 1800 | > 1800 |
Standard persentil er p75. Det er dette Google bruker for rangering av Core Web Vitals. Hvis 75 % av sidevisningene dine er under terskelen, består du.
Bruk av API-et som en MCP-server
API-endepunktet er en fullt kompatibel MCP-server. Hvis AI-verktøyet ditt støtter MCP (Claude Code, Cursor, Windsurf og andre), kan du koble det til direkte. AI-en har da tilgang til get_metrics, get_timeseries og get_histogram som verktøy, og kan spørre etter feltdataene dine som en del av enhver samtale.
Dette er hvordan CWV Superpowers fungerer: den kobler til CoreDash via MCP, henter reelle brukerdata, åpner nettstedet ditt i Chrome, og sporer den eksakte årsaken til en treg metric. API-et gir deg "hva som skjer i produksjon"-delen, Chrome gir deg "hvorfor det skjer"-delen.
Du kan også koble MCP-serveren til ditt eget AI-oppsett. Pek MCP-klienten din mot https://app.coredash.app/api/mcp med API-nøkkelen din, og AI-en kan svare på spørsmål som "hvilke sider har dårligst INP på mobil?" ved å bruke faktiske feltdata i stedet for å gjette.
Rate limits
Grensene gjelder per prosjekt per dag og tilbakestilles ved midnatt UTC.
| Abonnement | Daglige forespørsler |
|---|---|
| Trial | 150 |
| Starter | 500 |
| Standard | 500 |
| Pro | 500+ |
| Enterprise | 500+ |
150 forespørsler på Trial-abonnementet er rikelig for manuell utforskning og AI-assistert feilsøking. Hvis du kjører automatisert overvåking i CI, gir de betalte abonnementene deg 500 per dag.
Feilhåndtering
Feil returneres som JSON-RPC-feilobjekter:
{
"jsonrpc": "2.0",
"id": 1,
"error": { "code": -32001, "message": "Invalid or revoked API key." }
} | Kode | HTTP-status | Betydning |
|---|---|---|
-32001 | 401 | Ugyldig eller manglende API-nøkkel |
-32002 | 429 | Rate limit overskredet |
-32600 | 400 | Ugyldig utformet forespørsel |
-32601 | 200 | Ukjent metode |
-32602 | 200 | Ukjent verktøy eller manglende parametere |
-32603 | 500 | Intern serverfeil |
Hvis du får -32001, sjekk at nøkkelen din starter med cdk_ og at du ikke har tilbakekalt den. Hvis du får -32002, har du nådd den daglige grensen. Vent til tilbakestillingen ved midnatt UTC eller oppgrader abonnementet ditt.

