CoreDash API: Hämta Core Web Vitals-data från riktiga användare
Hämta din Core Web Vitals-data från riktiga användare programmatiskt. Använd det från skript, CI-pipelines, eller låt din AI-agent diagnostisera prestandaproblem automatiskt.

Din prestandadata, var du än behöver den
CoreDash samlar in Core Web Vitals från riktiga användare som besöker din webbplats. API:et ger dig tillgång till samma data från alla verktyg, skript eller AI-agenter. Tre verktyg, JSON in, JSON ut.
Det mest intressanta användningsfallet: att ansluta din AI. CoreDash API använder samma protokoll som Model Context Protocol (MCP), vilket innebär att AI-verktyg som Claude, Cursor och Windsurf kan hämta din data från riktiga användare direkt. Fråga din AI "varför är min LCP långsam på mobilen?" och den hämtar den faktiska fältdatan för att svara.
Vi byggde CWV Superpowers ovanpå detta. Det är en AI-agent som kombinerar din fältdata från CoreDash med Chrome DevTools för att diagnostisera och åtgärda problem med Core Web Vitals. API:et är det som gör det möjligt.
Men du behöver ingen AI-agent. Ett curl-kommando fungerar lika bra.
Autentisering
Varje begäran behöver en API-nyckel i Authorization-headern:
Authorization: Bearer cdk_YOUR_API_KEY
För att få en nyckel:
- Logga in på app.coredash.app
- Gå till ditt projekt, sedan AI Insights, därefter Connect Your AI
- Klicka på Create API Key och kopiera den. Den visas bara en gång.
Nycklar börjar med cdk_ och är begränsade till ett enda projekt. Du kan skapa flera nycklar och återkalla dem från samma sida.
Format för begäran
API:et använder JSON-RPC 2.0. Varje begäran är en POST till:
https://app.coredash.app/api/mcp Kroppen för begäran ser ut så här:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_metrics",
"arguments": { }
}
} Fältet id kan vara vilket nummer eller sträng som helst. Det ekar tillbaka i svaret. Det finns tre verktyg: get_metrics, get_timeseries och get_histogram.
get_metrics: aktuell prestanda
Returnerar de aktuella Core Web Vitals-värdena med bra/förbättra/dålig-betyg. Detta är verktyget du använder för frågor i stil med "vad är min LCP just nu?".
Parametrar
| Parameter | Typ | Standard | Beskrivning |
|---|---|---|---|
metrics | string | LCP,INP,CLS,FCP,TTFB | Kommaseparerade mätvärden att returnera |
percentile | string | p75 | p50, p75, p80, p90 eller p95 |
filters | object | {} | Filtrera efter dimensioner (se Dimensioner nedan) |
group | string | Gruppera resultat efter en dimensionsnyckel för att jämföra segment | |
date | string | -31d | Tidsintervall: -6h, today, -1d, -7d, -31d |
limit | number | 100 | Maximalt antal segment vid gruppering (max 500) |
Exempel: hämta alla mätvärden
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": {}
}
}' Det råa svaret är en JSON-RPC-omslag:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [{
"type": "text",
"text": "{ ... JSON string ... }"
}]
}
} Den faktiska datan är en JSON-sträng inuti fältet text. Analyserad ser den ut så här:
{
"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 talar om för dig vilken procentandel av de riktiga sidvisningarna som hamnar i varje betyg. Detta är ofta mer användbart än enbart p75-värdet. En LCP på 2450ms med 61% bra betyder att de flesta användare har en okej upplevelse, men svansen drar ner p75-värdet.
Exempel: jämför LCP för mobil vs desktop
Använd parametern group för att dela upp resultaten efter valfri dimension. Det är så du tar reda på om ditt LCP-problem är ett 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"
}
}
}' Analyserat svar:
{
"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 skulle visa 2500ms och du skulle tänka "inte jättebra, men inte katastrof". Den grupperade vyn visar den verkliga bilden: desktop är okej, mobilen behöver arbete.
Exempel: filtrera till en specifik sida på mobilen
Kombinera filters för att avgränsa till exakt den trafik du bryr dig 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: prestanda över tid
Returnerar mätvärden grupperade över tid med automatisk trenddetektering. Detta är verktyget du använder för frågor som "har min LCP blivit sämre?" och "fixade den där driftsättningen regressionen?".
Parametrar
| Parameter | Typ | Standard | Beskrivning |
|---|---|---|---|
metrics | string | LCP,INP,CLS,FCP,TTFB | Kommaseparerade mätvärden |
percentile | string | p75 | Vilken percentil |
filters | object | {} | Filtrera efter dimensioner |
date | string | -31d | Tidsintervall |
granularity | string | day | Hinkstorlek: hour, 6hours, day, week |
Exempel: LCP-trend under de senaste 7 dagarna
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"
}
}
}' Analyserat svar:
{
"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"
}
}
} summary jämför den andra halvan av perioden med den första halvan. Trendvärden är improving (mer än 5 % bättre), stable (inom 5 %) eller regressing (mer än 5 % sämre). Det är detta som gör timeseries-ändpunkten användbar för automatiserad övervakning: du behöver inte analysera datapunkterna själv för att veta om saker och ting blir sämre.
get_histogram: distributionens form
Returnerar distributionen av ett enda mätvärde som ~40 hinkar med antal per intervall. Detta är verktyget du använder när p75 ser bra ut men du misstänker en lång svans, eller när du vill se hela formen på din prestandadata.
Parametrar
| Parameter | Typ | Standard | Beskrivning |
|---|---|---|---|
metric | string | required | Enskilt mätvärde: LCP, INP, CLS, FCP eller TTFB |
filters | object | {} | Filtrera efter dimensioner |
date | string | -31d | Tidsintervall |
Obs: till skillnad från get_metrics tar denna ett enda metric (inte metrics). Ett mätvärde per begäran.
Exempel: LCP-distribution på mobilen
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"
}
}
}' Analyserat svar:
{
"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
} Varje hink har from/to-gränser, ett count av uppskattade sidvisningar i det intervallet, och en rating baserat på var hinken ligger i förhållande till Core Web Vitals-tröskelvärdena. Den sista hinken har to: null eftersom det är en öppen svans.
Hinkbredder är fasta per mätvärde: LCP använder 250ms, INP använder 25ms, CLS använder 0.025, FCP använder 200ms, TTFB använder 125ms.
Detta är användbart för att förstå formen på din data. En p75 på 2400ms kan betyda att de flesta användare ligger runt 2400ms, eller så kan det betyda att 60 % är under 1000ms och en andel långsam mobiltrafik drar i svansen. Histogrammet berättar för dig vilket som stämmer.
Dimensioner
Använd dessa nycklar i filters eller som värde för group. Filtrering avgränsar datan till ett specifikt segment. Gruppering delar upp resultaten så att du kan jämföra segment sida vid sida.
Allmänt
| Nyckel | Namn | Exempelvärden |
|---|---|---|
d | Enhetstyp | mobile, desktop |
cc | Land | US, NL, DE (ISO 3166-1 alpha-2) |
ff | Sökväg | /products, /checkout (null = /) |
u | Fullständig URL | Stöder *-wildcards, [neq]-prefix för negation |
qs | Frågesträng | ?key=value-delen |
lb | Sidetikett | Anpassad etikett från RUM-kodavsnittet |
browser | Webbläsare | Chrome, Safari, Firefox |
os | Operativsystem | Android, iOS, Windows |
nt | Navigeringstyp | navigate, back_forward, reload |
fv | Besökstyp | 0 = återkommande, 1 = ny besökare |
li | Inloggningsstatus | 0 = utloggad, 1 = inloggad, 2 = admin |
no | Navigeringsursprung | 1 = samma ursprung, 2 = annat ursprung (cross origin) |
ab | A/B-test | Anpassad testetikett |
Enhet och nätverk
| Nyckel | Namn | Enhet |
|---|---|---|
m | Enhetsminne | GB |
dl | Nätverkshastighet | Mbps |
ccs | Kapacitetspoäng för klient | 1=Utmärkt, 2=Bra, 3=Måttlig, 4=Begränsad, 5=Kraftigt begränsad |
redir | Antal omdirigeringar | antal |
Tillskrivning av mätvärden
Dessa dimensioner berättar för dig vad som orsakade ett mätvärde. Gruppera efter lcpel för att se vilka element som blir LCP över dina sidor. Gruppera efter inpel för att hitta de interaktioner som ger sämst INP.
| Nyckel | Namn | För mätvärde |
|---|---|---|
lcpel | LCP-element | LCP |
lcpet | LCP-elementtyp | LCP: text, image, background-image, video |
lcpprio | LCP-prioritet | LCP: 1=Förinladdad (Preloaded), 2=Hög hämtningsprioritet (fetchpriority), 3=Inte förinladdad, 4=Latladdad (Lazy loaded) |
lcpurl | LCP-bildens URL | LCP |
inpel | INP-element | INP |
inpit | INP-inmatningstyp | INP |
inpls | INP-laddningsstatus | INP |
lurl | LOAF Script-URL | INP |
clsel | CLS-element | CLS |
Filterexempel
{ "d": "mobile" }
{ "ff": "/checkout", "d": "desktop" }
{ "cc": "US", "browser": "Chrome" }
{ "u": "[neq]*/admin/*" } Mätvärdesreferens
| Mätvärde | Namn | Enhet | Bra | Kräver förbättring | Dåligt |
|---|---|---|---|---|---|
LCP | Largest Contentful Paint | ms | < 2500 | 2500 till 4000 | > 4000 |
INP | Interaction to Next Paint | ms | < 200 | 200 till 500 | > 500 |
CLS | Cumulative Layout Shift | < 0.1 | 0.1 till 0.25 | > 0.25 | |
FCP | First Contentful Paint | ms | < 1800 | 1800 till 3000 | > 3000 |
TTFB | Time to First Byte | ms | < 800 | 800 till 1800 | > 1800 |
Standardpercentilen är p75. Det är vad Google använder för rankning med Core Web Vitals. Om 75 % av dina sidvisningar ligger under tröskelvärdet, så blir du godkänd.
Använda API:et som en MCP-server
API-ändpunkten är en fullt kompatibel MCP-server. Om ditt AI-verktyg stöder MCP (Claude Code, Cursor, Windsurf med flera) kan du ansluta det direkt. AI:n har då tillgång till get_metrics, get_timeseries och get_histogram som verktyg och kan hämta din fältdata som en del av valfri konversation.
Det är så CWV Superpowers fungerar: den ansluter till CoreDash via MCP, hämtar din data från riktiga användare, öppnar din webbplats i Chrome och spårar den exakta orsaken till ett långsamt mätvärde. API:et tillhandahåller "vad händer i produktion"-delen, Chrome tillhandahåller "varför händer det"-delen.
Du kan också ansluta MCP-servern till din egen AI-installation. Peka din MCP-klient mot https://app.coredash.app/api/mcp med din API-nyckel, och din AI kan svara på frågor som "vilka sidor har sämst INP på mobilen?" med hjälp av faktisk fältdata istället för att gissa.
Anropsgränser
Gränserna gäller per projekt och dag, och återställs vid midnatt UTC.
| Plan | Dagliga förfrågningar |
|---|---|
| Trial | 150 |
| Starter | 500 |
| Standard | 500 |
| Pro | 500+ |
| Enterprise | 500+ |
150 förfrågningar på Trial-planen är gott om för manuell utforskning och AI-assisterad felsökning. Om du kör automatiserad övervakning i CI ger de betalda planerna dig 500 per dag.
Felhantering
Fel returneras som JSON-RPC-felobjekt:
{
"jsonrpc": "2.0",
"id": 1,
"error": { "code": -32001, "message": "Invalid or revoked API key." }
} | Kod | HTTP-status | Betydelse |
|---|---|---|
-32001 | 401 | Felaktig eller saknad API-nyckel |
-32002 | 429 | Anropsgränsen har överskridits |
-32600 | 400 | Felformaterad begäran |
-32601 | 200 | Okänd metod |
-32602 | 200 | Okänt verktyg eller saknade parametrar |
-32603 | 500 | Internt serverfel |
Om du får -32001, kontrollera att din nyckel börjar med cdk_ och att du inte har återkallat den. Om du får -32002 har du nått den dagliga gränsen. Vänta på återställningen vid midnatt UTC eller uppgradera din plan.

