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 valfritt verktyg, skript eller AI-agent. Tre verktyg, JSON in, JSON ut.
Det mest intressanta användningsområdet: 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å mobil?” så hämtar den faktisk field data för att svara.
Vi byggde CWV Superpowers ovanpå detta. Det är en AI-agent som kombinerar din CoreDash-field data med Chrome DevTools för att diagnostisera och åtgärda Core Web Vitals-problem. API:et är vad som gör det möjligt.
Men du behöver inte en AI-agent. Ett curl-kommando fungerar lika bra.
Driver du en byrå eller hanterar många projekt från ett konto? Det finns ett separat Agency API som använder en huvudnyckel för att skapa, uppdatera och ta bort projekt, samt för att hämta data för alla projekt med en enda nyckel. Resten av den här sidan täcker API:et för data per projekt.
Autentisering
Varje anrop 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 och 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.
Format för anrop
API:et använder JSON-RPC 2.0. Varje anrop är en POST till:
https://app.coredash.app/api/mcp
Anropets body 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 returneras i svaret. Det finns tre verktyg: get_metrics, get_timeseries och get_histogram.
get_metrics: aktuell prestanda
Returnerar aktuella Core Web Vitals-värden med betygen good/improve/poor. Detta är verktyget du använder för frågor av typen ”vad är min LCP just nu?”.
Parametrar
| Parameter | Typ | Standardvärde | Beskrivning |
|---|---|---|---|
metrics | string | LCP,INP,CLS,FCP,TTFB | Kommaseparerade mätetal att returnera |
percentile | string | p75 | p50, p75, p80, p90 eller p95 |
filters | object | {} | Filtrera på 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ätetal
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 ett JSON-RPC-omslag:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [{
"type": "text",
"text": "{ ... JSON string ... }"
}]
}
}
Faktisk data ä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 vilken procentandel av de faktiska sidladdningarna som hamnar i varje betyg. Detta är ofta mer användbart än enbart p75-värdet. En LCP på 2450 ms med 61 % good innebär att de flesta användare har en bra upplevelse, men svansen drar ner p75-värdet.
Exempel: jämför LCP på mobil vs desktop
Använd parametern group för att dela upp resultaten efter 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"
}
}
}'
Tolkad 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å 3200 ms, desktop på 1800 ms. Aggregatet skulle visa 2500 ms och du skulle tänka ”inte toppen, men inte uselt”. Den grupperade vyn visar den verkliga bilden: desktop är bra, mobil behöver åtgärdas.
Exempel: filtrera på 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 grupperade över tid med automatisk trenddetektering. Detta är verktyget du använder för frågor som ”har min LCP blivit sämre?” och ”löste den driftsättningen prestandaförsämringen?”.
Parametrar
| Parameter | Typ | Standardvärde | Beskrivning |
|---|---|---|---|
metrics | string | LCP,INP,CLS,FCP,TTFB | Kommaseparerade mätetal |
percentile | string | p75 | Vilken percentil |
filters | object | {} | Filtrera på dimensioner |
date | string | -31d | Tidsintervall |
granularity | string | day | Intervallstorlek: 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"
}
}
}'
Tolkad 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"
}
}
}
Objektet summary jämför den andra halvan av perioden med den första. 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 automatisk övervakning: du behöver inte tolka datapunkterna själv för att veta om saker och ting blir sämre.
get_histogram: fördelningens form
Returnerar fördelningen för ett enskilt mätetal som cirka 40 staplar 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 den fullständiga formen på din prestandadata.
Parametrar
| Parameter | Typ | Standardvärde | Beskrivning |
|---|---|---|---|
metric | string | obligatorisk | Enskilt mätetal: LCP, INP, CLS, FCP eller TTFB |
filters | object | {} | Filtrera på dimensioner |
date | string | -31d | Tidsintervall |
Observera: till skillnad från get_metrics tar detta en enskild metric (inte metrics). Ett mätetal per anrop.
Exempel: LCP-fördelning 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"
}
}
}'
Tolkad 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
}
Varje stapel har gränser för from/to, ett antal (count) uppskattade sidladdningar i det intervallet, samt ett betyg (rating) baserat på var stapeln hamnar i förhållande till gränsvärdena för Core Web Vitals. Den sista stapeln har to: null eftersom den är den öppna svansen.
Bredden på varje stapel är fast per mätetal: LCP använder 250 ms, INP använder 25 ms, CLS använder 0,025, FCP använder 200 ms, TTFB använder 125 ms.
Detta är användbart för att förstå formen på din data. En p75 på 2400 ms kan innebära att de flesta användare ligger runt 2400 ms, eller så kan det innebära att 60 % ligger under 1000 ms och att en del långsam mobiltrafik drar ner svansen. Histogrammet visar vilket.
Dimensioner
Använd dessa nycklar i filters eller som group-värde. Filtrering smalnar av 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ödjer jokertecken (*), prefixet [neq] för negation |
qs | Frågesträng | Delen med ?key=value |
lb | Sidetikett | Anpassad etikett från RUM-kodsnutten |
browser | Webbläsare | Chrome, Safari, Firefox |
os | Operativsystem | Android, iOS, Windows |
nt | Navigeringstyp | navigate, back_forward, reload |
fv | Besökartyp | 0 = återkommande, 1 = ny besökare |
li | Inloggningsstatus | 0 = utloggad, 1 = inloggad, 2 = administratör |
no | Navigeringsursprung | 1 = samma ursprung (same origin), 2 = korsande ursprung (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=Starkt begränsad |
redir | Antal omdirigeringar | antal |
Attribuering av mätetal
Dessa dimensioner visar vad som orsakade ett 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 sämst INP.
| Nyckel | Namn | För mätetal |
|---|---|---|
lcpel | LCP-element | LCP |
lcpet | LCP-elementtyp | LCP: text, image, background-image, video |
lcpprio | LCP-prioritet | LCP: 1=Förhandsladdad, 2=Hög fetchpriority, 3=Ej förhandsladdad, 4=Lazy-laddad |
lcpurl | LCP-bild-URL | LCP |
inpel | INP-element | INP |
inpit | INP-inmatningstyp | INP |
inpls | Laddningstillstånd för INP | INP |
lurl | LOAF-skript-URL | INP |
clsel | CLS-element | CLS |
Exempel på filter
{ "d": "mobile" }
{ "ff": "/checkout", "d": "desktop" }
{ "cc": "US", "browser": "Chrome" }
{ "u": "[neq]*/admin/*" }
Referens för mätetal
| Mätetal | Namn | Enhet | Bra | Behöver förbättras | Dålig |
|---|---|---|---|---|---|
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 denna som Google använder för rankning av Core Web Vitals. Om 75 % av dina sidladdningar ligger under tröskelvärdet blir du godkänd.
Använd API:et som en MCP-server
API-ändpunkten är en helt kompatibel MCP-server. Om ditt AI-verktyg stödjer MCP (Claude Code, Cursor, Windsurf med flera) kan du ansluta det direkt. Din AI får då tillgång till get_metrics, get_timeseries och get_histogram som verktyg, och kan hämta din field data 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 riktiga användare, öppnar din webbplats i Chrome och spårar den exakta orsaken till ett långsamt mätetal. API:et tillhandahåller delen ”vad som händer i produktion”, Chrome tillhandahåller delen ”varför det händer”.
Du kan också ansluta MCP-servern till din egen AI-konfiguration. 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 sämst INP på mobil?” med hjälp av faktisk field data i stället för att gissa.
Anropsbegränsningar
Gränserna gäller per projekt och dag, och återställs vid midnatt UTC.
| Plan | Dagliga anrop |
|---|---|
| Trial | 150 |
| Starter | 500 |
| Standard | 500 |
| Pro | 500+ |
| Enterprise | 500+ |
150 anrop på Trial-planen är mer än tillräckligt för manuell utforskning och AI-assisterad felsökning. Om du kör automatisk ö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 | Ogiltig eller saknad API-nyckel |
-32002 | 429 | Anropsbegränsningen har överskridits |
-32600 | 400 | Felaktigt utformat anrop |
-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.

