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

Din prestandadata, precis där du behöver den
CoreDash samlar in Core Web Vitals från verkliga användare som besöker din webbplats. API:et ger dig tillgång till samma data från valfritt verktyg, skript eller AI-agent. 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 data från dina verkliga 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 CoreDash-fältdata med Chrome DevTools för att diagnostisera och åtgärda Core Web Vitals-problem. Det är API:et som gör det möjligt.
Men du behöver ingen AI-agent. Ett curl-kommando fungerar lika bra.
Driver du en byrå eller hanterar många projekt från ett enda konto? Det finns ett separat Agency API som använder en huvudnyckel för att skapa, uppdatera och radera projekt, och för att hämta data över alla projekt med en enda nyckel. Resten av den här sidan täcker data-API:et per projekt.
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 enskilt projekt. Du kan skapa flera nycklar och återkalla dem från samma sida.
Förfrågningsformat
API:et använder JSON-RPC 2.0. Varje begäran är en POST till:
https://app.coredash.app/api/mcp Förfrågningskroppen ser ut så här:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_metrics",
"arguments": { }
}
} Fältet id kan vara valfritt nummer eller sträng. 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 bedömningarna good/improve/poor. Det här är verktyget du använder för frågor som "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 | Max 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-inpackning (wrapper):
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [{
"type": "text",
"text": "{ ... JSON string ... }"
}]
}
} Själva datan är en JSON-sträng inuti fältet text. Tolkad 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 hur stor andel av de verkliga sidladdningarna som hamnar i varje bedömning. Detta är ofta mer användbart än enbart p75-värdet. En LCP på 2450ms med 61 % good innebär att de flesta användare har en okej upplevelse, men att svansen drar ner p75-värdet.
Exempel: jämför LCP mellan mobil och dator
Använd parametern group för att dela upp resultaten utifrån valfri dimension. Det är så här 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"
}
}
}' Tolkat 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, dator på 1800ms. Totalen skulle visa 2500ms och du skulle tänka "inte bra, men inte hemskt". Den grupperade vyn visar den verkliga situationen: datorn fungerar fint, mobilen behöver åtgärdas.
Exempel: filtrera till en specifik sida på mobil
Kombinera filters för att smalna av 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 indelade i tidsintervall med automatisk upptäckt av trender. Det här är verktyget du använder för frågor som "har min LCP blivit sämre?" och "åtgärdade den driftsättningen (deploy) 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 | Intervallstorlek (bucket): 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"
}
}
}' Tolkat 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"
}
}
} Avsnittet summary jämför den andra halvan av perioden med den första halvan. Trendvärdena är improving (mer än 5 % bättre), stable (inom 5 %) eller regressing (mer än 5 % sämre). Detta är vad som gör timeseries-slutpunkten användbar för automatiserad övervakning: du behöver inte tolka datapunkterna själv för att veta om saker och ting blir sämre.
get_histogram: distributionens form
Returnerar distributionen av ett enskilt mätvärde som ~40 intervaller (buckets) med antalet per intervall. Det här ä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 | obligatorisk | Enskilt mätvärde: LCP, INP, CLS, FCP eller TTFB |
filters | object | {} | Filtrera efter dimensioner |
date | string | -31d | Tidsintervall |
Observera: till skillnad från get_metrics, tar detta ett enskilt metric (inte metrics). Ett mätvärde per begäran.
Exempel: LCP-distribution 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"
}
}
}' Tolkat 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 intervall (bucket) har from/to-gränser, ett count av uppskattade sidladdningar i det spannet, och en rating (bedömning) baserad på var intervallet ligger i förhållande till tröskelvärdena för Core Web Vitals. Det sista intervallet har to: null eftersom det är en öppen svans.
Intervallstorlekarna (bucket widths) ä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. Ett p75 på 2400ms kan betyda att de flesta användare ligger runt 2400ms, eller så kan det betyda att 60 % är under 1000ms och att en stor 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 group-värde. Filtrering avgränsar datan till ett specifikt segment. Gruppering delar upp resultaten så att du kan jämföra segmenten 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 | Full URL | Stödjer *-jokertecken (wildcards), [neq]-prefix för negation |
qs | Frågesträng | Delen med ?key=value |
lb | Sidetikett | Anpassad etikett från RUM-kodavsnittet |
browser | Webbläsare | Chrome, Safari, Firefox |
os | Operativsystem | Android, iOS, Windows |
nt | Navigationstyp | navigate, back_forward, reload |
fv | Besökstyp | 0 = återkommande, 1 = ny besökare |
li | Inloggningsstatus | 0 = utloggad, 1 = inloggad, 2 = admin |
no | Navigationsursprung | 1 = same origin, 2 = cross origin |
ab | A/B-test | Anpassad testetikett |
Enhet och nätverk
| Nyckel | Namn | Enhet |
|---|---|---|
m | Enhetsminne | GB |
dl | Nätverkshastighet | Mbps |
ccs | Client Capability Score | 1=Utmärkt, 2=Bra, 3=Måttlig, 4=Begränsad, 5=Kraftigt begränsad |
redir | Antal omdirigeringar | antal |
Mätvärdesattribuering (Metric attribution)
Dessa dimensioner talar om för dig vad som orsakade ett visst mätvärde. Gruppera efter lcpel för att se vilka element som blir LCP på dina sidor. Gruppera efter inpel för att hitta de interaktioner som ger den sämsta INP.
| Nyckel | Namn | För mätvärde |
|---|---|---|
lcpel | LCP-element | LCP |
lcpet | Typ av LCP-element | LCP: text, image, background-image, video |
lcpprio | LCP-prioritet | LCP: 1=Preloaded, 2=Hög fetchpriority, 3=Ej preloaded, 4=Lazy loaded |
lcpurl | LCP-bildens URL | LCP |
inpel | INP-element | INP |
inpit | INP-inmatningstyp (Input Type) | INP |
inpls | INP-laddningstillstånd | INP |
lurl | LOAF-skriptets URL | INP |
clsel | CLS-element | CLS |
Filterexempel
{ "d": "mobile" }
{ "ff": "/checkout", "d": "desktop" }
{ "cc": "US", "browser": "Chrome" }
{ "u": "[neq]*/admin/*" } Referens för mätvärden
| Mätvärde | Namn | Enhet | Bra (Good) | Behöver förbättras (Needs improvement) | Dålig (Poor) |
|---|---|---|---|---|---|
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 sin rangordning av Core Web Vitals. Om 75 % av dina sidladdningar ligger under tröskelvärdet, blir du godkänd.
Använda API:et som en MCP-server
API-slutpunkten är en fullt kompatibel MCP-server. Om ditt AI-verktyg stödjer MCP (Claude Code, Cursor, Windsurf och andra) kan du ansluta det direkt. Din AI får då tillgång till get_metrics, get_timeseries och get_histogram som verktyg och kan ställa frågor till din fältdata som en del av valfri konversation.
Det är så här CWV Superpowers fungerar: det ansluter till CoreDash via MCP, hämtar din data från verkliga 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 som händer i produktion" och Chrome står för "varför det händer".
Du kan också ansluta MCP-servern till din egen AI-uppsättning. Peka din MCP-klient mot https://app.coredash.app/api/mcp med din API-nyckel, så kan din AI svara på frågor som "vilka sidor har den sämsta INP på mobilen?" med hjälp av faktisk fältdata istället för att gissa.
Hastighetsgränser (Rate limits)
Gränserna gäller per projekt och dag, och återställs vid midnatt UTC.
| Abonnemang (Plan) | Dagliga förfrågningar |
|---|---|
| Trial | 150 |
| Starter | 500 |
| Standard | 500 |
| Pro | 500+ |
| Enterprise | 500+ |
150 förfrågningar i Trial-abonnemanget räcker gott för manuell utforskning och AI-assisterad felsökning. Om du kör automatiserad övervakning i CI, ger de betalda abonnemangen 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 | Hastighetsgräns (Rate limit) överskreds |
-32600 | 400 | Felaktigt utformad begäran (Malformed request) |
-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 ditt abonnemang.

