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.

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2026-05-29

Trusted by market leaders · Client results

vpnnestledpg mediamy work featured on web.devsnvmarktplaatscompareerasmusmcsaturnfotocasaperionharvardkpnloopearplugswhowhatwearadevintaebaynina careworkivahappyhorizonaleteiamonarch

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:

  1. Logga in på app.coredash.app
  2. Gå till ditt projekt, sedan AI Insights, därefter Connect Your AI
  3. 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

ParameterTypStandardBeskrivning
metricsstringLCP,INP,CLS,FCP,TTFBKommaseparerade mätvärden att returnera
percentilestringp75p50, p75, p80, p90 eller p95
filtersobject{}Filtrera efter dimensioner (se Dimensioner nedan)
groupstringGruppera resultat efter en dimensionsnyckel för att jämföra segment
datestring-31dTidsintervall: -6h, today, -1d, -7d, -31d
limitnumber100Max 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

ParameterTypStandardBeskrivning
metricsstringLCP,INP,CLS,FCP,TTFBKommaseparerade mätvärden
percentilestringp75Vilken percentil
filtersobject{}Filtrera efter dimensioner
datestring-31dTidsintervall
granularitystringdayIntervallstorlek (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

ParameterTypStandardBeskrivning
metricstringobligatoriskEnskilt mätvärde: LCP, INP, CLS, FCP eller TTFB
filtersobject{}Filtrera efter dimensioner
datestring-31dTidsintervall

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

NyckelNamnExempelvärden
dEnhetstypmobile, desktop
ccLandUS, NL, DE (ISO 3166-1 alpha-2)
ffSökväg/products, /checkout (null = /)
uFull URLStödjer *-jokertecken (wildcards), [neq]-prefix för negation
qsFrågesträngDelen med ?key=value
lbSidetikettAnpassad etikett från RUM-kodavsnittet
browserWebbläsareChrome, Safari, Firefox
osOperativsystemAndroid, iOS, Windows
ntNavigationstypnavigate, back_forward, reload
fvBesökstyp0 = återkommande, 1 = ny besökare
liInloggningsstatus0 = utloggad, 1 = inloggad, 2 = admin
noNavigationsursprung1 = same origin, 2 = cross origin
abA/B-testAnpassad testetikett

Enhet och nätverk

NyckelNamnEnhet
mEnhetsminneGB
dlNätverkshastighetMbps
ccsClient Capability Score1=Utmärkt, 2=Bra, 3=Måttlig, 4=Begränsad, 5=Kraftigt begränsad
redirAntal omdirigeringarantal

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.

NyckelNamnFör mätvärde
lcpelLCP-elementLCP
lcpetTyp av LCP-elementLCP: text, image, background-image, video
lcpprioLCP-prioritetLCP: 1=Preloaded, 2=Hög fetchpriority, 3=Ej preloaded, 4=Lazy loaded
lcpurlLCP-bildens URLLCP
inpelINP-elementINP
inpitINP-inmatningstyp (Input Type)INP
inplsINP-laddningstillståndINP
lurlLOAF-skriptets URLINP
clselCLS-elementCLS

Filterexempel

{ "d": "mobile" }
{ "ff": "/checkout", "d": "desktop" }
{ "cc": "US", "browser": "Chrome" }
{ "u": "[neq]*/admin/*" }

Referens för mätvärden

MätvärdeNamnEnhetBra (Good)Behöver förbättras (Needs improvement)Dålig (Poor)
LCPLargest Contentful Paintms< 25002500 till 4000> 4000
INPInteraction to Next Paintms< 200200 till 500> 500
CLSCumulative Layout Shift< 0.10.1 till 0.25> 0.25
FCPFirst Contentful Paintms< 18001800 till 3000> 3000
TTFBTime to First Bytems< 800800 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
Trial150
Starter500
Standard500
Pro500+
Enterprise500+

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." }
}
KodHTTP-statusBetydelse
-32001401Felaktig eller saknad API-nyckel
-32002429Hastighetsgräns (Rate limit) överskreds
-32600400Felaktigt utformad begäran (Malformed request)
-32601200Okänd metod
-32602200Okänt verktyg eller saknade parametrar
-32603500Internt 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.


CoreDash API: Hämta Core Web Vitals-data för verkliga användareCore Web Vitals CoreDash API: Hämta Core Web Vitals-data för verkliga användare