GET /bgp/history/as-detail
The per-AS dossier over (from, to]: carried-entry share over time, churn, top prefixes (each a ↺ replay handoff), the exit-router split, sessions, and the full-mode shadow-share dependency insight.
Auth: all authenticated roles
Query params: as_id and asn (required); from/to (required, RFC 3339); optional routing_domain_id, device_id, af, buckets (share resolution, default 48, max 200).
Response: 200 OK
{
"asn": 3356, "role": "neighbor",
"count_at_start": 532, "count_at_end": 309,
"share": [ { "t": "2026-07-03T06:00:00Z", "count": 532 } ],
"churn": { "gained": 0, "lost": 9, "rerouted": 214 },
"top_prefixes": [ { "prefix": "203.0.113.0/24", "device_id": "uuid" } ],
"exits": [ { "device_id": "uuid", "count": 194 } ],
"sessions": [ { "device_id": "uuid", "peer_ip": "198.51.100.1", "address_family": "ipv4", "state_at_end": "up", "flaps": 1 } ],
"shadow": { "backup_for": 402, "sole_path_for": 87, "available": true },
"half_life": { "closed_count": 18, "open_count": 4, "median_seconds": 252, "p90_seconds": 3660, "available": true },
"transit_space": 786432,
"transit_prefixes": 3072
}
shadow is the dependency insight from the full-mode candidate lanes at to: sole_path_for counts prefixes whose every candidate traverses this AS (a hard dependency), backup_for counts prefixes where it is on some but not all candidates (an alternate it provides). available is false when the AS lacks full RIB history at to (the counts are then 0). half_life summarises candidate-path interval lifetimes originated by the dossier AS for the cohort born in the window: percentiles over the closed intervals, open_count the still-open remainder (when it dominates, the percentiles are a lower bound). Its available mirrors the shadow gate — false means coverage refusal, not stability. transit_space/transit_prefixes measure the unique IPv4 address space over the DISTINCT prefixes whose AS_PATH traverses this AS on a best-path interval open at to — a true server-side interval union (the graph's tree-sum reach_space is 1.3–3.6× apart from it and cannot replace it); default routes excluded, and transit_prefixes: 0 means "no IPv4 prefixes traverse this AS at to", never "unknown". Errors: 400 on a missing as_id/asn or invalid window.