Telemetry Endpoints

Real User Monitoring (RUM) beacon ingestion and aggregated Web Vitals data.

SDK handles this automatically

When using @netloc8/react or @netloc8/nextjs, RUM beacons are submitted automatically by the Provider. You don't need to call these endpoints directly.

POST/v1/telemetry/rum

Submit RUM beacon

Ingest Real User Monitoring beacons from the SDK. Accepts Web Vitals metrics and/or client-side error reports. Uses Origin header validation against registered site domains. Max body size: 4 KB.

Request Body

ParameterTypeRequiredDescription
pathstringOptionalPage URL path (no query string, max 500 chars)
deviceTypestringOptional"desktop", "mobile", or "tablet"
connectionTypestringOptionalNetwork connection type (e.g. "4g")
metricsobjectOptionalCore Web Vitals: lcp, fid, inp, cls, ttfb, dns, tls, request, response (all ms except CLS)
errorsarrayOptionalClient-side errors (max 10 per beacon)

Example Request

Bash
curl -X POST https://api.netloc8.com/v1/telemetry/rum \
  -H "Content-Type: application/json" \
  -H "Origin: https://example.com" \
  -d '{
    "path": "/dashboard",
    "deviceType": "desktop",
    "metrics": { "lcp": 1200, "cls": 0.05, "inp": 150 }
  }'

Response

204Beacon accepted
GET/v1/telemetry/rum/summaryAuthenticated

Get RUM summary

Returns hourly aggregated Web Vitals percentiles (p50, p75, p95) for a registered domain. Supports filtering by country, device type, and date range. Default range: last 7 days.

Parameters

ParameterTypeRequiredDescription
domainstringRequiredDomain to query (must belong to authenticated user)
countrystringOptionalFilter by ISO 3166-1 alpha-2 country code
devicestringOptional"desktop", "mobile", or "tablet"
fromstringOptionalStart hour (ISO format, e.g. 2026-03-08T00)
tostringOptionalEnd hour (ISO format). Default: now

Example Request

Bash
curl -H "X-API-Key: YOUR_KEY" \
  "https://api.netloc8.com/v1/telemetry/rum/summary?domain=example.com"

Response

200Aggregated RUM data
JSON
{
    "domain": "example.com",
    "period": {
        "from": "2026-03-10T00",
        "to": "2026-03-17T23"
    },
    "metrics": [
        {
            "hour": "2026-03-17T22",
            "sampleCount": 150,
            "lcp": {
                "p50": 1200,
                "p75": 1800,
                "p95": 3500
            },
            "inp": {
                "p50": 100,
                "p75": 150,
                "p95": 300
            },
            "cls": {
                "p50": 0.02,
                "p75": 0.05,
                "p95": 0.15
            },
            "ttfb": {
                "p50": 200,
                "p75": 350,
                "p95": 800
            }
        }
    ]
}