Appearance
events
43 endpoints at a glance
| Method | Path | Summary |
|---|---|---|
POST | /atlas/events/connections/refresh/ | Refresh Events Connections |
GET | /events/ | Get Events |
GET | /events/buckets/ | Get Event Buckets |
POST | /events/connections/backfill | Submit Backfill |
POST | /events/connections/backfill/recover-stale | Recover Stale Backfill |
GET | /events/connections/backfill/status | Get Backfill Status |
GET | /events/connections/by-probe/{prb_id}/ | Connectivity For Probe |
GET | /events/connections/by-probe/{prb_id}/recent/ | Recent Connections For Probe |
GET | /events/connections/daily/ | List Daily |
GET | /events/connections/daily/{date}/ | Get Daily |
POST | /events/connections/daily/{date}/recompute-stats | Recompute Daily Stats |
POST | /events/connections/daily/{date}/reprocess | Reprocess Daily |
POST | /events/connections/daily/{date}/verify | Verify Daily |
POST | /events/connections/daily/backfill-stale-stats | Backfill Stale Daily Stats |
POST | /events/connections/daily/recompute-stats-range | Recompute Daily Stats Range |
GET | /events/connections/daily/stats-coverage | Daily Stats Coverage |
POST | /events/connections/daily/verify-range | Verify Daily Range |
GET | /events/connections/imports/ | List Imports |
GET | /events/connections/imports/{import_id}/ | Get Import |
POST | /events/connections/imports/{import_id}/stop | Stop Import |
GET | /events/connections/missed-disconnects | Get Missed Disconnects |
GET | /events/connections/series/ | Get Connections Series |
GET | /events/connections/stats/ | Get Stats |
POST | /events/uptimes/backfill | Submit Backfill |
POST | /events/uptimes/backfill/recover-stale | Recover Stale Backfill |
GET | /events/uptimes/backfill/status | Get Backfill Status |
POST | /events/uptimes/backfill/stop-all | Stop All Backfills |
GET | /events/uptimes/daily/ | List Daily |
GET | /events/uptimes/daily/{date}/ | Get Daily |
POST | /events/uptimes/daily/{date}/recompute-stats | Recompute Daily Stats |
POST | /events/uptimes/daily/{date}/reprocess | Reprocess Daily |
POST | /events/uptimes/daily/{date}/verify | Verify Daily |
POST | /events/uptimes/daily/backfill-stale-stats | Backfill Stale Daily Stats |
POST | /events/uptimes/daily/recompute-stats-range | Recompute Daily Stats Range |
GET | /events/uptimes/daily/stats-coverage | Daily Stats Coverage |
POST | /events/uptimes/daily/verify-range | Verify Daily Range |
GET | /events/uptimes/imports/ | List Imports |
GET | /events/uptimes/imports/{import_id}/ | Get Import |
POST | /events/uptimes/imports/{import_id}/stop | Stop Import |
POST | /events/uptimes/purge-resyncs | Purge Bogus Resyncs |
GET | /events/uptimes/purge-resyncs/status | Purge Resyncs Status |
GET | /events/uptimes/series/ | Get Uptimes Series |
GET | /events/uptimes/stats/ | Get Stats |
events
Get Events
GET
/events/
Filtered list of connection events — Mongo-backed.
Replaces the legacy CouchDB-backed implementation; same wire
surface (filter set + envelope shape) but per-row shape is now
flat (no data wrapper) — that's how events are stored in
db.events_connections.
See :meth:EventsConnections.list_filtered for the mode-by-mode
behaviour (delta / count_only / explain).
Parameters
Query Parameters
minutes
Type
integer
Default
60start
stop
type
controller
probe_id
delta
count_only
explain
Responses
Successful Response
application/json
JSON
[
]
Get Event Buckets
GET
/events/buckets/
Per-bucket connect/disconnect counts for charting.
Server-side aggregation — bypasses the 25 000-row cap on the
raw-events surface, which truncated wide time windows to just
their most-recent tail. The aggregation runs $group over
the indexed timestamp field; result size is bounded by the
bucket count (typically ~24, low hundreds at worst), not by
the event count.
Wrapped in :func:asyncio.to_thread because the PyMongo
aggregation is a blocking call — without the thread shim the
FastAPI event loop would stall for the duration of every wide-
window query and queue all other requests behind it. The
aggregation itself has a 120 s maxTimeMS ceiling
(see :meth:EventsConnections.list_buckets).
Returns {count, time, query, bucket_seconds, results} where
each results entry is {start, connect, disconnect},
oldest-first. Empty buckets aren't emitted — the frontend pads
them client-side if a flat axis is wanted.
Parameters
Query Parameters
bucket_seconds
Type
integer
Default
300minutes
Type
integer
Default
60start
stop
type
controller
probe_id
Responses
Successful Response
application/json
JSON
[
]
Get Connections Series
GET
/events/connections/series/
Public daily-stats series for the connection-events trends view.
Daily-coverage rows (incl. the per-day stats block) in an
inclusive YYYY-MM-DD window, oldest-first. No auth gate — same
posture as /events/buckets/ and the measurements-meta /
probe-archive series: aggregate counts over public RIPE info.
Lives on the public events router (prefix /events) rather than
the admin /events/connections router; the path does not
collide with that router's /daily/{date}/ (different segment
after the shared prefix). 400 on a bad / inverted / over-cap
range.
Wrapped in :func:asyncio.to_thread because the underlying
PyMongo range scan is a blocking call.
Parameters
Query Parameters
since*
Type
Requiredstring
until*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get Missed Disconnects
GET
/events/connections/missed-disconnects
Missed-disconnect detection + breakdown for an inclusive
YYYY-MM-DD window.
A missed disconnect is a session whose closing disconnect RIPE
never delivered (two connect events in a row for one probe).
Returns totals + per-controller / country / ASN / probe-type /
controller-handoff rankings (each with a rate) + a sample of
occurrences — see
:meth:EventsConnections.missed_disconnects_report.
Staff-gated (a multi-day scan can be heavy) and wrapped in
asyncio.to_thread. 400 on a bad / inverted / over-cap range.
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
since*
Type
Requiredstring
until*
Type
Requiredstring
top_n
Type
integer
Default
25Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get Uptimes Series
GET
/events/uptimes/series/
Public daily-stats series for the probe-uptime trends view.
Daily-coverage rows (incl. the per-day stats block) of
db.events_uptimes_daily in an inclusive YYYY-MM-DD window,
oldest-first. No auth gate — same posture as the connection-events
series (aggregate counts over public RIPE info).
Lives on the public events router (prefix /events) rather than
the admin /events/uptimes router; the path doesn't collide with
that router's /daily/{date}/ (different segment after the shared
prefix). 400 on a bad / inverted / over-cap range.
Wrapped in :func:asyncio.to_thread because the underlying PyMongo
range scan is a blocking call.
Parameters
Query Parameters
since*
Type
Requiredstring
until*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Connectivity For Probe
GET
/events/connections/by-probe/{prb_id}/
Per-probe connect/disconnect rollup for the probe Stats tab —
uptime %, flap count, longest continuous uptime, MTBF, current
state, plus a capped newest-first event list for the timeline.
Logged-in (matches the probe history / archive tabs; the rest of
this router is admin-only). since / until are unix-seconds
bounds on event timestamp; since defaults to 90 days back so a
no-arg call can't unbounded-scan a chatty probe.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
prb_id*
Type
Requiredinteger
Query Parameters
since
until
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Recent Connections For Probe
GET
/events/connections/by-probe/{prb_id}/recent/
Latest limit (default 25) connect/disconnect events for one
probe plus a per-family IPv4/IPv6 connection prefix+ASN change
rollup — feeds the probe-detail "Connections" tab. Logged-in (same
gate as the by-probe Stats rollup above).
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
prb_id*
Type
Requiredinteger
Query Parameters
limit
Type
integer
Maximum
100Minimum
1Default
25Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get Stats
GET
/events/connections/stats/
Header tiles for the admin panel — total events, last 24h
count, latest event/stored timestamps, last successful import
row, plus the worker queue snapshot + liveness.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
List Imports
GET
/events/connections/imports/
Newest-first list of import-run rows. since / until are
inclusive YYYY-MM-DD bounds on started_at; trigger
narrows to a single class of run (scheduled / manual / backfill).
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
since
until
trigger
limit
Type
integer
Default
100Responses
Successful Response
application/json
JSON { "additionalProperties": "string" }
[
]
Get Import
GET
/events/connections/imports/{import_id}/
Single import-run row including counts + error if any.
import_id is the <trigger>_<started_ts> we generated at
submission time.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
import_id*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Stop Import
POST
/events/connections/imports/{import_id}/stop
Stop a running import (cooperative).
Events-connections writes no queued DB row, so only
running imports are stoppable: the flag is honoured at
import_window's next per-chunk checkpoint, finishing the row
as stopped with partial counts preserved. Already-terminal /
missing → 409 / 404.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
import_id*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
List Daily
GET
/events/connections/daily/
Newest-first list of daily-coverage rows.
Optional since / until are inclusive YYYY-MM-DD bounds
on the row's _id. limit is clamped to 1000 by the storage
layer.
lite=true projects away the heavy scan_gaps list — useful
for the whole-year calendar fetch where only status + counts
are rendered per cell. The full gap detail loads on demand when
the operator drills into a specific day via GET /daily/{date}/.
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
since
until
limit
Type
integer
Default
100lite
Type
boolean
Default
falseResponses
Successful Response
application/json
JSON { "additionalProperties": "string" }
[
]
Get Daily
GET
/events/connections/daily/{date}/
Single daily-coverage row including the full scan_gaps list.
Returns 404 when no row exists for the date — the calendar should
treat that as unverified and offer a POST /verify button.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
date*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Verify Daily
POST
/events/connections/daily/{date}/verify
Recompute coverage for one UTC day and upsert the daily row.
No RIPE call — reads only db.events_connections_imports and
db.events_connections. Returns the freshly-written row.
Wrapped in asyncio.to_thread because the verify aggregation
is synchronous Mongo; without the shim the FastAPI event loop
would stall briefly.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
date*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Reprocess Daily
POST
/events/connections/daily/{date}/reprocess
Force a full re-fetch of one UTC day from RIPE.
Distinct from /verify (which only recomputes coverage from
data already on file): this queues a backfill spanning the
entire [day_start, day_start + 86_400) window regardless of
current coverage. The intended use is "events for this day
arrived late at RIPE" — a verify alone can't fix that because
the data was never imported; only a re-fetch can.
Flow:
- Mark the daily row
queued+reprocess_pendingso the
calendar reflects the request immediately. - Enqueue the full-day window on the events backfill worker.
- When the worker's import completes, the end-of-run
re-verify hook recomputes coverage and — because
reprocess_pendingis set — seals the day with
reprocessed_atonce it hits 100%. After that the day is
done; no further reprocess is needed.
Returns the queued daily row plus the worker snapshot.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
date*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Verify Daily Range
POST
/events/connections/daily/verify-range
Re-verify every date in a window.
No RIPE call. Loops :meth:EventsConnections.verify_day across
the range; dates that error are recorded individually rather
than aborting the bulk run. Returns
{verified, errors, count, since, until}.
Synchronous on purpose — per-date verify is ~tens of ms, and the
:attr:EventsConnections.VERIFY_RANGE_MAX_DAYS cap keeps the
worst-case request inside the standard HTTP timeout. Operators
wanting a wider rebuild chunk the submission.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "since": "string", "until": "string"
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Recompute Daily Stats
POST
/events/connections/daily/{date}/recompute-stats
Re-derive the day's stats block from cached events.
DB-only (no RIPE) — recomputes the distributions for the UTC-day
event cohort and rewrites stats / stats_recomputed_at on
the daily-coverage row in place. 400 when the day has no coverage
row yet (verify it first) or on a bad date.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
date*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Recompute Daily Stats Range
POST
/events/connections/daily/recompute-stats-range
Bulk-rebuild the stats block across a date window.
Loops :meth:EventsConnections.recompute_day_stats; days with no
coverage row are reported as skipped rather than aborting.
DB-only, capped, wrapped in :func:run_and_record.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "since": "string", "until": "string"
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Daily Stats Coverage
GET
/events/connections/daily/stats-coverage
Per-class daily-stats coverage over the retained window.
Pure read — one indexed _id-range scan, no recompute. Returns
the :meth:EventsConnections.stats_coverage blob
(schema_version + counts of
missing/stale_schema/stale_data/current +
stale_dates). 400 on a bad / inverted range.
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
since
inclusive start, YYYY-MM-DD
until
inclusive end, YYYY-MM-DD
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Backfill Stale Daily Stats
POST
/events/connections/daily/backfill-stale-stats
Force an immediate newest-first recompute of stale daily-stats.
The on-demand burst counterpart to the drain cron — use right
after a deliberate STATS_SCHEMA_VERSION bump to converge now
rather than waiting for the cron to grind through. DB-only,
idempotent, bounded (max_days server-clamped). Wrapped in
:func:run_and_record so it lands in db.task_history.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "max_days": 1000
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Submit Backfill
POST
/events/connections/backfill
Queue a backfill job. Returns immediately; the worker walks
the queue serially. Range validation is done up front so a typo
gets a 400 instead of disappearing into the worker.
Composite-key dedup (_id = "<prb_id>:<timestamp>:<event[0]>")
means re-running over a range you already covered is safe — the
upserts hit existing docs and become no-op writes.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "start_ts": 0, "stop_ts": 0
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get Backfill Status
GET
/events/connections/backfill/status
Worker queue snapshot + liveness. All three fields are best-
effort; the dashboard polls this at 5s while a backfill is
running.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Recover Stale Backfill
POST
/events/connections/backfill/recover-stale
Re-enqueue any imports stuck in running state.
These rows are orphaned by a previous process: the worker that
wrote them died (typically a backend restart) before flipping
them to success / failed. Recovery marks each orphan
failed (with a "worker died mid-import; re-enqueued" note,
so the import-history table reflects the death honestly) and
re-enqueues the same (scan_start_ts, scan_stop_ts) window
for the live worker.
The same recovery runs automatically at worker startup; this
endpoint covers the rarer follow-up case where the worker task
died mid-life but the backend kept running, leaving the queue
stranded.
Safe to call any time. :meth:EventsConnections.import_window
is idempotent (composite-_id upserts), so re-running over a
range the orphan already partly imported just lands the
remainder.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get Stats
GET
/events/uptimes/stats/
Header tiles for the admin panel — total events, last 24h
count, latest event/stored timestamps, last successful import
row, plus the worker queue snapshot + liveness.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
List Imports
GET
/events/uptimes/imports/
Newest-first list of import-run rows. since / until are
inclusive YYYY-MM-DD bounds on started_at; trigger
narrows to a single class of run (scheduled / manual / backfill).
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
since
until
trigger
limit
Type
integer
Default
100Responses
Successful Response
application/json
JSON { "additionalProperties": "string" }
[
]
Get Import
GET
/events/uptimes/imports/{import_id}/
Single import-run row including counts + error if any.
import_id is the <trigger>_<started_ts> we generated at
submission time.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
import_id*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Stop Import
POST
/events/uptimes/imports/{import_id}/stop
Stop a running import (cooperative).
Events-connections writes no queued DB row, so only
running imports are stoppable: the flag is honoured at
import_window's next per-chunk checkpoint, finishing the row
as stopped with partial counts preserved. Already-terminal /
missing → 409 / 404.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
import_id*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
List Daily
GET
/events/uptimes/daily/
Newest-first list of daily-coverage rows.
Optional since / until are inclusive YYYY-MM-DD bounds
on the row's _id. limit is clamped to 1000 by the storage
layer.
lite=true projects away the heavy scan_gaps list — useful
for the whole-year calendar fetch where only status + counts
are rendered per cell. The full gap detail loads on demand when
the operator drills into a specific day via GET /daily/{date}/.
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
since
until
limit
Type
integer
Default
100lite
Type
boolean
Default
falseResponses
Successful Response
application/json
JSON { "additionalProperties": "string" }
[
]
Get Daily
GET
/events/uptimes/daily/{date}/
Single daily-coverage row including the full scan_gaps list.
Returns 404 when no row exists for the date — the calendar should
treat that as unverified and offer a POST /verify button.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
date*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Verify Daily
POST
/events/uptimes/daily/{date}/verify
Recompute coverage for one UTC day and upsert the daily row.
No RIPE call — reads only db.events_uptimes_imports and
db.events_uptimes. Returns the freshly-written row.
Wrapped in asyncio.to_thread because the verify aggregation
is synchronous Mongo; without the shim the FastAPI event loop
would stall briefly.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
date*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Reprocess Daily
POST
/events/uptimes/daily/{date}/reprocess
Force a full re-fetch of one UTC day from RIPE.
Distinct from /verify (which only recomputes coverage from
data already on file): this queues a backfill spanning the
entire [day_start, day_start + 86_400) window regardless of
current coverage. The intended use is "events for this day
arrived late at RIPE" — a verify alone can't fix that because
the data was never imported; only a re-fetch can.
Flow:
- Mark the daily row
queued+reprocess_pendingso the
calendar reflects the request immediately. - Enqueue the full-day window on the events backfill worker.
- When the worker's import completes, the end-of-run
re-verify hook recomputes coverage and — because
reprocess_pendingis set — seals the day with
reprocessed_atonce it hits 100%. After that the day is
done; no further reprocess is needed.
Returns the queued daily row plus the worker snapshot.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
date*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Verify Daily Range
POST
/events/uptimes/daily/verify-range
Re-verify every date in a window.
No RIPE call. Loops :meth:EventsUptimes.verify_day across
the range; dates that error are recorded individually rather
than aborting the bulk run. Returns
{verified, errors, count, since, until}.
Synchronous on purpose — per-date verify is ~tens of ms, and the
:attr:EventsUptimes.VERIFY_RANGE_MAX_DAYS cap keeps the
worst-case request inside the standard HTTP timeout. Operators
wanting a wider rebuild chunk the submission.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "since": "string", "until": "string"
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Recompute Daily Stats
POST
/events/uptimes/daily/{date}/recompute-stats
Re-derive the day's stats block from cached events.
DB-only (no RIPE) — recomputes the distributions for the UTC-day
event cohort and rewrites stats / stats_recomputed_at on
the daily-coverage row in place. 400 when the day has no coverage
row yet (verify it first) or on a bad date.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
date*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Recompute Daily Stats Range
POST
/events/uptimes/daily/recompute-stats-range
Bulk-rebuild the stats block across a date window.
Loops :meth:EventsUptimes.recompute_day_stats; days with no
coverage row are reported as skipped rather than aborting.
DB-only, capped, wrapped in :func:run_and_record.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "since": "string", "until": "string"
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Daily Stats Coverage
GET
/events/uptimes/daily/stats-coverage
Per-class daily-stats coverage over the retained window.
Pure read — one indexed _id-range scan, no recompute. Returns
the :meth:EventsUptimes.stats_coverage blob
(schema_version + counts of
missing/stale_schema/stale_data/current +
stale_dates). 400 on a bad / inverted range.
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
since
inclusive start, YYYY-MM-DD
until
inclusive end, YYYY-MM-DD
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Backfill Stale Daily Stats
POST
/events/uptimes/daily/backfill-stale-stats
Force an immediate newest-first recompute of stale daily-stats.
The on-demand burst counterpart to the drain cron — use right
after a deliberate STATS_SCHEMA_VERSION bump to converge now
rather than waiting for the cron to grind through. DB-only,
idempotent, bounded (max_days server-clamped). Wrapped in
:func:run_and_record so it lands in db.task_history.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "max_days": 1000
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Submit Backfill
POST
/events/uptimes/backfill
Queue a backfill job. Returns immediately; the worker walks
the queue serially. Range validation is done up front so a typo
gets a 400 instead of disappearing into the worker.
Composite-key dedup (_id = "<prb_id>:<timestamp>:<event[0]>")
means re-running over a range you already covered is safe — the
upserts hit existing docs and become no-op writes.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "start_ts": 0, "stop_ts": 0
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get Backfill Status
Stop All Backfills
POST
/events/uptimes/backfill/stop-all
Hard-stop every uptime backfill.
Two moves: discard all queued-but-not-started jobs from this
process's in-memory queue, then flip stop_requested on every
running import row (this process or any replica). Each in-flight
import_window finishes as stopped at its next per-chunk
checkpoint — partial counts preserved, no data loss (the ingest is
idempotent). Returns the drop / signal tally + the worker snapshot.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Purge Bogus Resyncs
POST
/events/uptimes/purge-resyncs
Start a background sweep of the bogus resync-only change-points
left by the old over-sensitive detector (any lts decrease →
resync).
Deletes only docs whose sole reason is resync and whose lts
drop is within the sync-jitter slack — records the corrected
detector would never have written. Legitimate change-points (and
genuine large resyncs) are untouched.
Runs detached — the collection can hold millions of rows, far
more than a single request's timeout allows — and returns the
initial status immediately. Poll GET /purge-resyncs/status for
live progress. 409 if a purge is already in flight.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "dry_run": true
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Purge Resyncs Status
Recover Stale Backfill
POST
/events/uptimes/backfill/recover-stale
Re-enqueue any imports stuck in running state.
These rows are orphaned by a previous process: the worker that
wrote them died (typically a backend restart) before flipping
them to success / failed. Recovery marks each orphan
failed (with a "worker died mid-import; re-enqueued" note,
so the import-history table reflects the death honestly) and
re-enqueues the same (scan_start_ts, scan_stop_ts) window
for the live worker.
The same recovery runs automatically at worker startup; this
endpoint covers the rarer follow-up case where the worker task
died mid-life but the backend kept running, leaving the queue
stranded.
Safe to call any time. :meth:EventsUptimes.import_window
is idempotent (composite-_id upserts), so re-running over a
range the orphan already partly imported just lands the
remainder.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Refresh Events Connections
POST
/atlas/events/connections/refresh/
Run the connection-events ingest's recent-window scan now.
Mirror of the cron's import_recent. Synchronous from the
caller's perspective — usually completes in seconds because the
overlap window is short. For arbitrary-range backfills use the
admin cookie-session endpoint at
POST /events/connections/backfill instead; this api-key
endpoint is the cron's manual companion (parallel to
POST /atlas/probes/refresh/).
Authorizations
APIKeyQuery
Type
API Key (query: api-key)
or
APIKeyHeader
Type
API Key (header: x-api-key)
Responses
Successful Response
application/json
JSON
[
]