Get Core Web Vitals metrics
Proxy to the Tinybird cwv_metrics pipe for the authenticated location. Returns Core Web Vitals aggregations with optional breakdown, granularity, and dimensional filters. Returns the raw Tinybird JSON envelope.
curl -X GET "https://mythic-analytics.gulp.workers.dev/client/v1/performance/cwv?location_id=example_string&date_from=example_string&date_to=example_string&metric=lcp&breakdown=example_string&granularity=hour&page_path=example_string&page_url=example_string&device_type=example_string&browser=example_string&country=USA&utm_source=example_string&utm_medium=example_string&utm_campaign=example_string&funnel_name=John%20Doe&connection_type=example_string&hostname=John%20Doe&limit=42" \
-H "Content-Type: application/json" \
-H "X-Location-Id: example_string" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://mythic-analytics.gulp.workers.dev/client/v1/performance/cwv?location_id=example_string&date_from=example_string&date_to=example_string&metric=lcp&breakdown=example_string&granularity=hour&page_path=example_string&page_url=example_string&device_type=example_string&browser=example_string&country=USA&utm_source=example_string&utm_medium=example_string&utm_campaign=example_string&funnel_name=John%20Doe&connection_type=example_string&hostname=John%20Doe&limit=42"
headers = {
"Content-Type": "application/json",
"X-Location-Id": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://mythic-analytics.gulp.workers.dev/client/v1/performance/cwv?location_id=example_string&date_from=example_string&date_to=example_string&metric=lcp&breakdown=example_string&granularity=hour&page_path=example_string&page_url=example_string&device_type=example_string&browser=example_string&country=USA&utm_source=example_string&utm_medium=example_string&utm_campaign=example_string&funnel_name=John%20Doe&connection_type=example_string&hostname=John%20Doe&limit=42", {
method: "GET",
headers: {
"Content-Type": "application/json",
"X-Location-Id": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://mythic-analytics.gulp.workers.dev/client/v1/performance/cwv?location_id=example_string&date_from=example_string&date_to=example_string&metric=lcp&breakdown=example_string&granularity=hour&page_path=example_string&page_url=example_string&device_type=example_string&browser=example_string&country=USA&utm_source=example_string&utm_medium=example_string&utm_campaign=example_string&funnel_name=John%20Doe&connection_type=example_string&hostname=John%20Doe&limit=42", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Location-Id", "example_string")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://mythic-analytics.gulp.workers.dev/client/v1/performance/cwv?location_id=example_string&date_from=example_string&date_to=example_string&metric=lcp&breakdown=example_string&granularity=hour&page_path=example_string&page_url=example_string&device_type=example_string&browser=example_string&country=USA&utm_source=example_string&utm_medium=example_string&utm_campaign=example_string&funnel_name=John%20Doe&connection_type=example_string&hostname=John%20Doe&limit=42')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['X-Location-Id'] = 'example_string'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
{
"data": [
{
"metric_name": "LCP",
"metric_unit": "ms",
"time_bucket": "2026-02-25",
"breakdown_value": "/pricing",
"sample_count": 7694,
"unique_users": 4678,
"unique_sessions": 5901,
"p50": 1030,
"p75": 2200,
"p90": 4500,
"p95": 8200,
"p99": 45000,
"avg_value": 2770,
"min_value": 50,
"max_value": 120000,
"good_count": 6125,
"needs_improvement_count": 953,
"poor_count": 616,
"good_pct": 79.6,
"needs_improvement_pct": 12.4,
"poor_pct": 8
}
],
"rows": 42
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Service Unavailable",
"message": "The service is temporarily unavailable. Please try again later",
"code": 503
}
/performance/cwv
Target server for requests. Edit to use your own host.
Client API key as a bearer token. Use an agency key (ak_..., read-write) or a location secret key (sk_..., read-only). Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need links:read or links:write. See Using an mcp_ key over HTTP.
ak_..., read-write) or a location secret key (sk_..., read-only). Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need links:read or links:write. See Using an mcp_ key over HTTP.Target location (client) id. Required when authenticating with an agency key (ak_); alternative to the X-Location-Id header. Ignored for secret keys, which resolve their own location.
Start of the date range (forwarded to Tinybird).
End of the date range (forwarded to Tinybird).
Metric filter. One of lcp, fcp, cls, ttfb, fid, inp.
Breakdown dimension. One of page, page_url, device, browser, country, country_name, utm_source, utm_medium, utm_campaign, funnel, connection, hostname, os, navigation.
Time-series granularity. One of hour, day, week, month.
Filter to one page path. Case-insensitive and trailing-slash-insensitive (/About/ matches /about).
Filter to one page URL. Case-insensitive, trailing-slash-insensitive, and the query string and fragment are ignored on both sides — pass the URL with or without its utm_*/fbclid soup and it matches the same page.
Filter by utm_source. An empty string matches clicks with no value for that UTM.
Maximum rows to return (forwarded to Tinybird).
Target location (client) id. Required when authenticating with an agency key (ak_); alternative to the location_id query parameter. Ignored for secret keys.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. Client API key as a bearer token. Use an agency key (ak_..., read-write) or a location secret key (sk_..., read-only). Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need links:read or links:write. See Using an mcp_ key over HTTP.
Query Parameters
Target location (client) id. Required when authenticating with an agency key (ak_); alternative to the X-Location-Id header. Ignored for secret keys, which resolve their own location.
Start of the date range (forwarded to Tinybird).
End of the date range (forwarded to Tinybird).
Breakdown dimension. One of page, page_url, device, browser, country, country_name, utm_source, utm_medium, utm_campaign, funnel, connection, hostname, os, navigation.
Time-series granularity. One of hour, day, week, month.
hourdayweekmonthFilter to one page path. Case-insensitive and trailing-slash-insensitive (/About/ matches /about).
Filter to one page URL. Case-insensitive, trailing-slash-insensitive, and the query string and fragment are ignored on both sides — pass the URL with or without its utm_*/fbclid soup and it matches the same page.
Filter by utm_source. An empty string matches clicks with no value for that UTM.
Maximum rows to return (forwarded to Tinybird).
Headers
Target location (client) id. Required when authenticating with an agency key (ak_); alternative to the location_id query parameter. Ignored for secret keys.
Responses
Number of rows returned.