fastmon Docs
Analytics

List individual beacons

Fehler melden

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.

Authentifizierung

bearerAuth
headerAuthentifizierungBearer <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.

Pfad-Parameter

org_id*Org Id
Formatuuid

Request-Body

application/json
  1. 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?ErrorFingerprintKind

Which 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.

Default"error"
Value in"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?Limit

Max rows per page

Range1 <= value <= 1000
Default100
offset?Offset

Pagination offset (0-based)

Range0 <= value
Default0
order_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?Live

Live 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.

Defaultfalse

Response-Body

Successful Response

application/json
  1. 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

POST
/organizations/{org_id}/analytics/beacons
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      }    }  ]}