Skip to content

admin

34 endpoints at a glance
MethodPathSummary
GET/admin/db-statsAdmin Db Stats
GET/admin/locations/cities/datasetsList Datasets
GET/admin/locations/cities/importsList Imports
GET/admin/locations/cities/imports/{import_id}Get Import
POST/admin/locations/cities/imports/runSubmit Import
GET/admin/locations/cities/statsCities Stats
GET/admin/locations/cities/statusCities Status
GET/admin/locations/languages/importsList Language Imports
GET/admin/locations/languages/imports/{import_id}Get Language Import
POST/admin/locations/languages/imports/runRun Language Import
GET/admin/locations/languages/statsLanguages Stats
GET/admin/locations/languages/statusLanguages Status
GET/admin/mail/global-blocklistList Global Blocklist
POST/admin/mail/global-blocklistAdd Global Blocklist
DELETE/admin/mail/global-blocklist/{entry_id}Remove Global Blocklist
GET/admin/mail/keywordsList Keywords
POST/admin/mail/keywordsAdd Keyword
DELETE/admin/mail/keywords/{keyword_id}Remove Keyword
PATCH/admin/mail/keywords/{keyword_id}Patch Keyword
GET/admin/mail/nrd/importsList Nrd Imports
POST/admin/mail/nrd/imports/runRun Nrd Import
GET/admin/mail/nrd/statsNrd Stats
GET/admin/mail/nrd/statusNrd Status
GET/admin/mail/stalwart/allowed-ipsStalwart Allowed Ips
GET/admin/mail/stalwart/blocked-ipsStalwart Blocked Ips
DELETE/admin/mail/stalwart/blocked-ips/{ip}Stalwart Unblock Ip
GET/admin/mail/stalwart/healthStalwart Health
GET/admin/mail/stalwart/queueStalwart Queue
DELETE/admin/mail/stalwart/queue/{message_id}Stalwart Queue Cancel
GET/admin/mail/stalwart/queue/{message_id}Stalwart Queue Message
POST/admin/mail/stalwart/queue/{message_id}/retryStalwart Queue Retry
POST/admin/reminders/runAdmin Run Reminders
GET/admin/task-historyAdmin Task History
GET/admin/task-history/{task_id}Admin Task History Detail

admin


Admin Db Stats

GET
/admin/db-stats

Return the admin dashboard payload.

stale_days controls the threshold for the stale-users list
(default 14). Recomputed on every request — no caching.

Parameters

Header Parameters

authorization

Query Parameters

stale_days
Type
integer
Default
14

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Admin Run Reminders

POST
/admin/reminders/run

Run the due-date reminder scan once, now (all users).

The daily cron only runs on the scheduler-owning instance (production);
this button makes the feature testable on develop and lets an admin
force a pass after changing data. Idempotent — the per-item dedupe
markers mean a manual run never double-notifies.

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


Admin Task History

GET
/admin/task-history

List recent task runs, newest-first, with optional filters.

Always returns names (every distinct task name seen) and
counts_by_status so the SPA can render its filter dropdown and
status badges in one request.

Parameters

Header Parameters

authorization

Query Parameters

page
Type
integer
Default
1
limit
Type
integer
Default
50
name
status

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Admin Task History Detail

GET
/admin/task-history/{task_id}

Parameters

Header Parameters

authorization

Path Parameters

task_id*
Type
string
Required

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


List Datasets

GET
/admin/locations/cities/datasets

Importable GeoNames datasets with label + estimated row count.

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


Cities Status

GET
/admin/locations/cities/status

Current dataset, total cities, last import + live worker state.

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


Cities Stats

GET
/admin/locations/cities/stats

Live distributions + totals over the loaded dataset.

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


List Imports

GET
/admin/locations/cities/imports

Newest-first import-run rows. Optional YYYY-MM-DD bounds.

Parameters

Header Parameters

authorization

Query Parameters

since
until
limit
Type
integer
Maximum
1000
Minimum
1
Default
100

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Get Import

GET
/admin/locations/cities/imports/{import_id}

Parameters

Header Parameters

authorization

Path Parameters

import_id*
Type
string
Required

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Submit Import

POST
/admin/locations/cities/imports/run

Queue a cities import. Returns immediately with worker state.

Parameters

Header Parameters

authorization

Request Body

application/json
JSON
{
  
"dataset": "string",
  
"skip_if_unchanged": false
}

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Body

Samples


Languages Status

GET
/admin/locations/languages/status

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


Languages Stats

GET
/admin/locations/languages/stats

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


List Language Imports

GET
/admin/locations/languages/imports

Parameters

Header Parameters

authorization

Query Parameters

since
until
limit
Type
integer
Maximum
1000
Minimum
1
Default
100

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Get Language Import

GET
/admin/locations/languages/imports/{import_id}

Parameters

Header Parameters

authorization

Path Parameters

import_id*
Type
string
Required

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Run Language Import

POST
/admin/locations/languages/imports/run

Download the SIL tables + upsert (admin only). Runs the blocking work
off the event loop and returns the resulting import-audit row.

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


List Keywords

GET
/admin/mail/keywords

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


Add Keyword

POST
/admin/mail/keywords

Parameters

Header Parameters

authorization

Request Body

application/json
JSON
{
  
"keyword": "string",
  
"block_domain": false
}

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Body

Samples


Remove Keyword

DELETE
/admin/mail/keywords/{keyword_id}

Parameters

Header Parameters

authorization

Path Parameters

keyword_id*
Type
string
Required

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Patch Keyword

PATCH
/admin/mail/keywords/{keyword_id}

Parameters

Header Parameters

authorization

Path Parameters

keyword_id*
Type
string
Required

Request Body

application/json
JSON
{
  
"block_domain": true
}

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value
Body

Samples


List Global Blocklist

GET
/admin/mail/global-blocklist

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


Add Global Blocklist

POST
/admin/mail/global-blocklist

Parameters

Header Parameters

authorization

Request Body

application/json
JSON
{
  
"value": "string"
}

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Body

Samples


Remove Global Blocklist

DELETE
/admin/mail/global-blocklist/{entry_id}

Parameters

Header Parameters

authorization

Path Parameters

entry_id*
Type
string
Required

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Nrd Status

GET
/admin/mail/nrd/status

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


Nrd Stats

GET
/admin/mail/nrd/stats

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


List Nrd Imports

GET
/admin/mail/nrd/imports

Parameters

Header Parameters

authorization

Query Parameters

limit
Type
integer
Maximum
1000
Minimum
1
Default
100

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Run Nrd Import

POST
/admin/mail/nrd/imports/run

Import the Whoisds NRD list — a specific date, else the daily default.
Runs the blocking download/upsert off the event loop.

Parameters

Header Parameters

authorization

Request Body

application/json
JSON
{
  
"date": "string"
}

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Body

Samples


Stalwart Health

GET
/admin/mail/stalwart/health

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


Stalwart Queue

GET
/admin/mail/stalwart/queue

Parameters

Header Parameters

authorization

Query Parameters

limit
Type
integer
Maximum
200
Minimum
1
Default
25

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Stalwart Queue Message

GET
/admin/mail/stalwart/queue/{message_id}

Parameters

Header Parameters

authorization

Path Parameters

message_id*
Type
string
Required

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Stalwart Queue Cancel

DELETE
/admin/mail/stalwart/queue/{message_id}

Parameters

Header Parameters

authorization

Path Parameters

message_id*
Type
string
Required

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Stalwart Blocked Ips

GET
/admin/mail/stalwart/blocked-ips

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


Stalwart Allowed Ips

GET
/admin/mail/stalwart/allowed-ips

Allowlist + integrity check (are the required Docker subnets still on it?).

Parameters

Header Parameters

authorization

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers

Samples


Stalwart Queue Retry

POST
/admin/mail/stalwart/queue/{message_id}/retry

Parameters

Header Parameters

authorization

Path Parameters

message_id*
Type
string
Required

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Stalwart Unblock Ip

DELETE
/admin/mail/stalwart/blocked-ips/{ip}

Remove one banned IP from Stalwart's config.

Returns a caveat the UI must show: the delete clears the persistent
ban, but a live in-memory ban may survive until a Stalwart reload/restart
(learned during the 502 incident). The durable fix is the allowlist, not
repeated unblocks.

Parameters

Header Parameters

authorization

Path Parameters

ip*
Type
string
Required

Responses

Successful Response

application/json
JSON
{
  
"additionalProperties": "string"
}

Playground

Headers
Variables
Key
Value

Samples


Kancil — one workspace for contacts, work and money.