Appearance
admin
43 endpoints at a glance
| Method | Path | Summary |
|---|---|---|
GET | /admin/anchors-mesh-topology/ | Admin Topology Summary |
POST | /admin/anchors-mesh-topology/range | Admin Topology Range |
POST | /admin/anchors-mesh-topology/run | Admin Topology Run |
GET | /admin/database/collections/{name} | Get Collection Detail |
GET | /admin/database/history | Get History |
GET | /admin/database/overview | Get Overview |
GET | /admin/enrichment/ | Enrichment Summary |
POST | /admin/enrichment/discover | Run Discovery |
POST | /admin/enrichment/discover-deep | Run Deep Discovery |
POST | /admin/enrichment/recover | Recover |
POST | /admin/enrichment/refresh | Force Refresh |
GET | /admin/enrichment/targets | List Targets |
GET | /admin/geofeeds/ | Admin Status |
POST | /admin/geofeeds/accuracy/run | Accuracy Run |
POST | /admin/geofeeds/check-enable | Trigger Check Enable |
GET | /admin/geofeeds/check-enable/status | Get Check Enable Status |
POST | /admin/geofeeds/discover | Trigger Discovery |
GET | /admin/geofeeds/discover/status | Get Discovery Status |
GET | /admin/geofeeds/imports/ | List Imports |
GET | /admin/geofeeds/imports/{import_id} | Get Import |
POST | /admin/geofeeds/merge | Merge Source |
POST | /admin/geofeeds/refresh | Trigger Refresh |
GET | /admin/geofeeds/refresh/status | Get Refresh Status |
POST | /admin/geofeeds/resolve-geonames | Trigger Resolve Geonames |
GET | /admin/geofeeds/resolve-geonames/status | Get Resolve Geonames Status |
DELETE | /admin/geofeeds/sources | Delete Source |
PATCH | /admin/geofeeds/sources | Patch Source |
GET | /admin/geofeeds/sources/ | List Sources |
POST | /admin/geofeeds/sources/ | Add Source |
POST | /admin/geofeeds/unmerge | Unmerge Source |
GET | /admin/gotosocial/check | Check Connection |
POST | /admin/gotosocial/post | Post Status |
GET | /admin/gotosocial/preview/{kind} | Preview Post |
POST | /admin/gotosocial/run/{kind} | Run Post |
GET | /admin/measurements-latest/ | Latest Summary |
POST | /admin/measurements-latest/discover | Run Discover |
POST | /admin/measurements-latest/recover | Recover Stale |
POST | /admin/measurements-latest/refresh | Force Refresh |
GET | /admin/measurements-latest/rows | List Rows |
GET | /admin/weather/imports/ | List Imports |
GET | /admin/workers/ | List Workers |
POST | /admin/workers/{key}/recover | Recover Worker |
POST | /admin/workers/{key}/stop-all | Stop All Active |
admin
Get Overview
GET
/admin/database/overview
Server info + db-level stats + per-collection list. One
round-trip per Mongo command — page-load cost is bounded by the
number of collections, not their size.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get Collection Detail
GET
/admin/database/collections/{name}
Drill-down for a single collection: index list with sizes,
plus the most recent docs (truncated per-doc — see
:data:api.atlas.database_stats._PREVIEW_DOC_MAX_BYTES).
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
name*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get History
GET
/admin/database/history
Last days daily snapshots from db.database_stats_history.
Powers the per-collection growth sparklines on the dashboard.
days is clamped to 400 server-side (the retention horizon).
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
days
Type
integer
Default
30Responses
Successful Response
application/json
JSON { "additionalProperties": "string" }
[
]
List Workers
GET
/admin/workers/
Live snapshot of all in-process workers.
Sync route — FastAPI offloads it to the threadpool, so the
blocking Mongo finds are fine here. Each descriptor carries the
consumer-task liveness, in-memory queue depth, the in-flight
item, and the DB-backed queued / running rows (the
actionable "should be moving" set) plus a deep-link to the
full per-subsystem admin panel.
Each descriptor is computed defensively: if one fails (e.g. a Mongo
read times out under a pathological backlog) it degrades to a stub
rather than failing the whole snapshot.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Stop All Active
POST
/admin/workers/{key}/stop-all
Stop every queued/running row in this worker's queue.
Iterates the DB-backed active rows and invokes the subsystem's
request_stop(...) for each — the same cooperative-stop
method the per-row Stop button calls. Queued rows are cancelled
before they start; running rows finish with partial progress kept.
One audit row per click, with counts in the result. Idempotent —
re-running after the rows have already stopped finds nothing and
returns a no-op summary.
400 for enrichment / measurements_latest_backfill (no
per-row stop — both workers are globally rate-paced, no per-entity
job to cancel); 404 for an unknown key.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
key*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Recover Worker
POST
/admin/workers/{key}/recover
Re-enqueue orphaned queued / running jobs for one
worker. Dispatches to that worker's own recovery (the same one
its start() runs). Idempotent — safe to click any time, a
double-enqueue no-ops at the claim.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
key*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Enrichment Summary
List Targets
GET
/admin/enrichment/targets
Paginated ledger rows, newest-seen first. Optional type
(ip/asn/host) and status filters.
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
type
status
limit
Type
integer
Default
100skip
Type
integer
Default
0Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Force Refresh
POST
/admin/enrichment/refresh
Make matching ledger rows due now (manual staleness bust).
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "entity_id": "string", "type": "string", "hard": false
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Run Discovery
Run Deep Discovery
POST
/admin/enrichment/discover-deep
Run the phase-2 deep scan now (traceroute hop IPs + DNS A/AAAA
answers out of measurements_latest).
Bounded + incremental like the scheduled job — one tick processes
up to EnrichmentSettings.DEEP_SCAN_DOC_CAP new rows and
advances the watermark, so repeated clicks walk the backlog.
Off the event loop (heavier blocking Mongo work). The only
on-demand trigger when the scheduler is disabled (it otherwise
only runs via ENRICHMENT_DEEP_SCAN_CRON).
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Recover
Latest Summary
List Rows
GET
/admin/measurements-latest/rows
Paginated ledger rows. Optional status filter (pending /
running / done / failed / dead).
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
status
limit
Type
integer
Default
100skip
Type
integer
Default
0Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Force Refresh
POST
/admin/measurements-latest/refresh
Make matching ledger rows due now (manual retry / unstick).
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "msm_id": 0, "status": "string"
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Run Discover
POST
/admin/measurements-latest/discover
Trigger the discovery scan now (out-of-cycle). Idempotent —
only finds terminal+uncached measurements not already in the
ledger. Wrapped in asyncio.to_thread because the underlying
scan is blocking (Mongo aggregate + per-id $setOnInsert).
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Recover Stale
POST
/admin/measurements-latest/recover
Flip rows stuck in running past the stale deadline back to
pending + due-now and re-enqueue them on the worker. Same
cooperative contract as the workers-panel "Recover stale" action
but scoped only to this ledger.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Admin Status
List Sources
GET
/admin/geofeeds/sources/
List geofeed sources with per-source row counts. enabled /
discovery filters mirror the admin-panel toggle chips.
duplicate filters on the merge marker (False powers the
panel's "hide duplicates" default; True shows only merged-away
duplicates).
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
enabled
discovery
duplicate
limit
Type
integer
Default
500skip
Type
integer
Default
0Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Add Source
POST
/admin/geofeeds/sources/
Manual add. URL must start with http:// or https://.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "url": "string", "label": "string", "enabled": true, "verify_tls": true
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Delete Source
DELETE
/admin/geofeeds/sources
Remove the source row + sweep its prefixes. Returns the
deletion tally for the admin toast.
The source URL is passed as a query parameter (not a path segment)
so its scheme's // isn't collapsed to / in transit.
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
url*
The geofeed source URL (its _id).
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Patch Source
PATCH
/admin/geofeeds/sources
Update label, enabled flag, or verify_tls without re-importing.
The source URL is passed as a query parameter (not a path segment)
so its scheme's // isn't collapsed to / in transit.
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
url*
The geofeed source URL (its _id).
Type
Requiredstring
Request Body
application/json
JSON "label": "string", "enabled": true, "verify_tls": true
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Merge Source
POST
/admin/geofeeds/merge
Mark source as a duplicate of into: it's disabled, never
fetched again, and its prefixes are swept (the survivor is
authoritative). The survivor absorbs the duplicate's provenance.
Returns {duplicate, into, removed_prefixes}.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "source": "string", "into": "string"
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Unmerge Source
POST
/admin/geofeeds/unmerge
Undo a merge — clear the duplicate_of marker on url and
drop it from its survivor's aliases. The row stays disabled until the
operator re-enables it.
The URL is a query parameter (not a path segment) so its scheme's
// isn't collapsed to / in transit.
Parameters
Header Parameters
authorization
x-api-key
Query Parameters
url*
The merged-away duplicate URL (its _id).
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Trigger Refresh
POST
/admin/geofeeds/refresh
Queue a refresh. Returns immediately with the queue depth +
the live progress state. UI polls /refresh/status for live
updates.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "url": "string", "all": false
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get Refresh Status
Trigger Discovery
POST
/admin/geofeeds/discover
Queue the whois discovery scan. Walks
db.ips.whois.data.records[] for geofeed: attributes (RFC
8805) + remarks: Geofeed … (RFC 9092); newly-found URLs are
upserted with enabled=False so admin reviews before they're
fetched.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get Discovery Status
Trigger Resolve Geonames
POST
/admin/geofeeds/resolve-geonames
Queue a GeoNames-resolve pass over db.geofeed_prefixes.
Stamps geonames_id on every prefix row whose country +
city resolves; coords for the cross-check map follow from the
GeoNames link.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get Resolve Geonames Status
Trigger Check Enable
POST
/admin/geofeeds/check-enable
Queue a TLS check-and-enable pass: each disabled, non-duplicate
source is fetched over TLS (certificate verification on) and, if it
succeeds and returns ≥1 prefix, enabled. Background — poll
/check-enable/status.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Get Check Enable Status
List Imports
Get Import
Accuracy Run
POST
/admin/geofeeds/accuracy/run
Recompute the accuracy snapshot now. Fire-and-forget — the scan
over the geofeed-stamped db.ips subset can run past the gateway
timeout, so it's handed to a background task and recorded in
db.task_history (derive_geofeed_accuracy, trigger=manual).
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
List Imports
Check Connection
GET
/admin/gotosocial/check
Round-trip the GoToSocial token + read instance metadata.
Returns {"ok": True, "account": {...}, "instance": {...}} on
success, or {"ok": False, "status": <int>, ...} when either
call fails — the operator UI can render the failure detail
directly. Never raises: status_code == 0 from the wrapper
means the request didn't reach the server (DNS / connect timeout
/ TLS error), which we surface as ok: False like any other
error.
Parameters
Header Parameters
authorization
x-api-key
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Post Status
POST
/admin/gotosocial/post
Manual ad-hoc post to GoToSocial.
Wraps :meth:GotoSocial.post_status with no extra processing —
the operator types a message, picks a visibility, hits Send.
Same token, same instance, no preview / scheduling.
Returns the raw upstream payload (id + url + content + …) on
success so the UI can render a "view post" link straight to the
new status. On a non-200 from upstream we map to a 502 with the
error detail attached, so axios on the frontend surfaces the
failure naturally rather than rendering a "successful" empty
response.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "status": "string", "visibility": "public"
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Preview Post
Run Post
POST
/admin/gotosocial/run/{kind}
Fire one scheduled post now. Bypasses the enable flag (admin
intent) but still dedups on the day/week key.
Parameters
Header Parameters
authorization
x-api-key
Path Parameters
kind*
Type
Requiredstring
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Admin Topology Summary
Admin Topology Run
POST
/admin/anchors-mesh-topology/run
Manual one-shot trigger. Single-country mode when cc is
given (and af optionally), full eligible-set mode otherwise.
Wrapped in :func:run_and_record so the run shows up in
db.task_history alongside the scheduled ones.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "date": "string", "cc": "string", "af": 0
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}
Admin Topology Range
POST
/admin/anchors-mesh-topology/range
Window rebuild. 400 on bad input or span > settings cap.
Parameters
Header Parameters
authorization
x-api-key
Request Body
application/json
JSON "since": "string", "until": "string"
{
}
Responses
Successful Response
application/json
JSON "additionalProperties": "string"
{
}