List individual beacons
Row-level drill-down: return individual beacons matching the filter.
Paired with /analytics/query (which aggregates). A dashboard click on an
aggregate row sends the same filters here to get the specific beacons behind
it. No metric aggregation: raw column values only, projected through the
fields whitelist.
Beyond the shared filters, two scopes are specific to this endpoint because
they read columns the aggregate rollups do not carry: error_fingerprint
(Nested) and server_timing (Map), e.g. {"pop": ["DE-1331"]} for one CDN
PoP or {"elasticsearch": []} for every pageview that reported that key.
Response is uncached (rows change every ingest). Total-count is fetched in the same round-trip via asyncio.gather so the UI knows whether pagination is worth showing.
bearerAuthAuthentifizierungBearer <token>API token generated from the fastmon dashboard (Account → API Token) or at organization level (fmo_…, one that outlives its creator). Send as Authorization: Bearer fm_... or paste the full token (including its prefix) into the Authorize dialog.
org_id*Org Iduuidapplication/json- body
Row-level drill-down request: individual beacons matching filters.
Response shape is row-per-beacon (no metric aggregation). Pair with /analytics/query when the user needs to go from an aggregate row to the specific beacons behind it.
time_range*Time range for the query
filters?Optional filters
error_fingerprint?|Scope the list to pageviews carrying this signature (errors.fingerprint). Handled here, NOT via the shared Filters, because it's a Nested-array column that only exists on beacons - putting it in Filters would break the rollup-routed aggregate endpoints. Powers the /error page's 'open in Explorer' drill-down.
error_fingerprint_kind?ErrorFingerprintKindWhich population error_fingerprint belongs to. Both halves of the errors column carry fingerprints, so a resource signature scoped as an error would silently return nothing.
"error""error""failed_resource"server_timing?Scope the list by custom Server-Timing keys: {key: [desc, ...]}. An empty value list matches on key PRESENCE ({"elasticsearch": []} = every pageview whose origin reported that key, timed or categorical); a non-empty list matches the categorical desc value ({"pop": ["DE-1331"]}). Multiple keys are ANDed, multiple values for one key are ORed. Handled here, NOT via the shared Filters, for the same reason as error_fingerprint: server_timing_dur/server_timing_desc are Map columns that the aggregate rollups do not store, so putting this in Filters would let it be silently ignored on the rollup-routed endpoints.
limit?LimitMax rows per page
1 <= value <= 1000100offset?OffsetPagination offset (0-based)
0 <= value0order_by?Sort order, a {field, direction} object over any scalar row field; NULL values always sort last. Default shows most recent first (§11).
fields?array<string>|Optional field projection. Null/omitted returns the full whitelist. started_at, session_id, url are always included regardless.
live?LiveLive view: skip the 30s-cached total count so brand-new beacons surface immediately. has_more is derived by over-fetching one row; total_matched is returned as null (unknown). Use for an auto-refreshing 'latest requests' table; leave off for normal paginated browsing where the exact total matters. Each call still reads the site's whole day, so poll no faster than every 10 s: the live branch allows 60 requests per minute per organization, then answers 429. Off, a window of 6 hours or less still reads the raw beacons like the charts do, and a longer one reads finalized pageviews, which miss the newest minutes and hold preliminary values for the running hour.
falseSuccessful Response
application/json- response
Response for /analytics/beacons.
The one ClickHouse list that pages by offset, so meta carries the full
paging set (§9). meta.total is absent in live mode, where the cached
count is skipped for freshness and only meta.has_more is known.
meta*Facts about the result
request*The request as the server resolved it
data*array<>Matching beacons, at most meta.limit
curl -X POST 'https://api.fastmon.eu/organizations/497f6eca-6276-4993-bfeb-53cbbbba6f08/analytics/beacons' \ -H 'Content-Type: application/json' \ -d '{ "time_range": { "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z" }}'{ "meta": { "execution_time_ms": 0, "total": 0, "limit": 0, "offset": 0, "has_more": true, "next_cursor": "string", "sampling": { "sampling_rate": 0, "is_sampled": true, "estimated_metrics": [ "string" ] }, "is_identity_mixed": true }, "request": { "time_range": { "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z" }, "comparison_time_range": { "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z" }, "granularity": "minute", "identity": "stitch", "window_seconds": 0, "filters": {} }, "data": [ { "started_at": "2019-08-24T14:15:22Z", "ended_at": "2019-08-24T14:15:22Z", "session_id": "string", "stitch": "string", "pvid": "string", "url": "string", "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811", "beacon_version": 0, "tracker_version": "string", "lifecycle": "string", "delivery_method": "string", "domain": "string", "referrer_source": "string", "referrer_medium": "string", "utm_source": "string", "utm_medium": "string", "utm_campaign": "string", "utm_term": "string", "utm_content": "string", "click_id_param": "string", "browser": "string", "browser_version": "string", "device_type": "string", "os": "string", "country": "string", "asn": 0, "isp": "string", "connection_type": "string", "viewport_class": "string", "lcp": 0, "fcp": 0, "cls": 0, "inp": 0, "tbt": 0, "ttfb": 0, "ttfb_final": 0, "page_load_time": 0, "dom_interactive": 0, "start_render": 0, "content_transfer_duration": 0, "dns_lookup": 0, "tcp_connection": 0, "total_byte_weight": 0, "cache_hit_rate": 0, "cached_resources": 0, "page_cached": 0, "service_worker_active": 0, "error_count": 0, "errors": [ { "fingerprint": "string", "error_type": "string", "ownership": "first_party", "count": 0, "sample_message": "string", "frames": [ { "host": "string", "path": "", "line": 0, "column": 0 } ], "error_class": "" } ], "failed_resources": 0, "failed_resource_loads": [ { "host": "string", "path": "", "count": 0, "ownership": "first_party", "fingerprint": "string" } ], "slowest_resource_duration": 0, "resource_count": 0, "bfcache_hit": 0, "nav_type": "string", "status_code": 0, "protocol": "string", "lcp_element": "string", "lcp_url": "string", "cls_element": "string", "third_party_duration": 0, "third_party_count": 0, "connection_rtt": 0, "connection_downlink": 0, "visibility_dirty": 0, "prerendered": 0, "activation_delta": 0, "lcp_is_image": 0, "lcp_discovered_via": "string", "lcp_fetch_priority": "string", "lcp_loading": "string", "lcp_delivery": "string", "dominant_third_party_category": "string", "loaf_count": 0, "loaf_total_duration": 0, "error_origin": "string", "cdn_cache_status": "string", "origin_cache_status": "string", "edge_dur": 0, "origin_dur": 0, "backend_dur": 0, "db_dur": 0, "http_dur": 0, "render_dur": 0, "search_dur": 0, "kv_dur": 0, "code_dur": 0, "page_type": "string", "origin_host": "string", "logged_in": "string", "cdn_age": 0, "origin_age": 0, "cdn_ttl": 0, "origin_ttl": 0, "checkout_stage": "string", "cart_interactions": 0, "cart_interaction_errors": 0, "datacenter": "string", "bot_name": "string", "bot_type": "string", "ua_anomaly": "string", "is_datacenter": true, "is_bot": true, "bot_class": "bot", "fetch_xhr_total_calls": 0, "fetch_xhr_total_errors": 0, "fetch_xhr_worst_ms": 0, "fetch_xhrs": [ { "method": "string", "host": "string", "path": "string", "calls": 0, "sum_ms": 0, "max_ms": 0, "error_count": 0, "errors_by_status_code": { "property1": 0, "property2": 0 }, "duration_buckets": { "property1": 0, "property2": 0 }, "sync_calls": 0, "aborts": 0, "blocked": 0, "sum_bytes": 0, "max_bytes": 0, "sum_offset_ms": 0 } ], "fetch_xhr_outliers": [ { "method": "string", "host": "string", "path": "string", "duration_ms": 0, "status_code": 0, "ttfb_ms": 0, "server_timing_phases": { "property1": 0, "property2": 0 } } ], "server_timing": [ { "key": "string", "dur": 0, "desc": "" } ], "loaf": [ { "script_host": "string", "script_path": "string", "invoker_type": "", "total_ms": 0, "frame_count": 0 } ], "third_party_by_category": { "property1": 0, "property2": 0 }, "third_parties": { "property1": 0, "property2": 0 }, "resource_counts": { "property1": 0, "property2": 0 }, "resource_sizes": { "property1": 0, "property2": 0 }, "resource_durations": { "property1": 0, "property2": 0 }, "cart_interaction_kinds": { "property1": 0, "property2": 0 } } ]}