VPN
A distributed VPN cluster for geographic routing: which exit a fetch leaves from.
partRunning the shop88 operationsid vpn
How it sits
A part does one thing, and any other part can call it. The counts and the links below are from the platform's spec and the other services' own descriptions.
| Operations | 88 GET 44 · POST 39 · DELETE 3 · PUT 2 |
| Resources | 14 |
| Leaned on by | no other service names it |
| Leans on | Intel |
| In recipes | none yet |
What it can do
88 operations in 14 resources, as the spec declares them. Each row is one call; paths are relative to the part.
egress
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/egress/cards | Removable media in Monroe's card reader |
| POST | /api/v1/egress/cards/burn | Write a commissioned residential card |
| GET | /api/v1/egress/events | Fleet change log |
| GET | /api/v1/egress/hub | Is the wg hub isolating residential peers, and will it after a reboot |
| POST | /api/v1/egress/hub/repair | Persist the isolation, or remove a peer from the hub config |
| GET | /api/v1/egress/migrations | Hardware swaps, pending and past |
| POST | /api/v1/egress/migrations | Register a hardware swap |
| DELETE | /api/v1/egress/migrations/{migration_id} | Cancel a pending swap |
| GET | /api/v1/egress/nodes | Residential egress nodes |
| POST | /api/v1/egress/nodes/mint | Mint a hub peer and stage its keyfile |
| GET | /api/v1/egress/nodes/{node_id} | One residential node |
| GET | /api/v1/egress/nodes/{node_id}/doctor | Ask a node how it is |
| GET | /api/v1/egress/nodes/{node_id}/logs | Tail a node's log |
| POST | /api/v1/egress/nodes/{node_id}/retire | Withdraw a node whose hardware is gone |
| GET | /api/v1/egress/sites | Per-site burn state |
15 operations
devices
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/devices/ | List Devices |
| POST | /api/v1/devices/ping-all | Ping All Devices |
| POST | /api/v1/devices/refresh | Refresh All Devices |
| GET | /api/v1/devices/{device_id} | Get Device |
| PUT | /api/v1/devices/{device_id} | Update Device |
| POST | /api/v1/devices/{device_id}/execute | Execute Command |
| GET | /api/v1/devices/{device_id}/external-ip | Get External Ip |
| POST | /api/v1/devices/{device_id}/ping | Ping Device |
| POST | /api/v1/devices/{device_id}/reboot | Reboot Device |
| POST | /api/v1/devices/{device_id}/refresh | Refresh Device |
| POST | /api/v1/devices/{device_id}/speedtest | Run Speedtest |
| GET | /api/v1/devices/{device_id}/status | Get Device Status |
| POST | /api/v1/devices/{device_id}/sync-time | Sync Time |
13 operations
workers
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/workers/ | List all workers |
| GET | /api/v1/workers/status | Enriched node status list |
| GET | /api/v1/workers/{worker_number} | Get worker status |
| POST | /api/v1/workers/{worker_number}/cycle | Cycle one worker to a fresh profile (same bank filter) |
| GET | /api/v1/workers/{worker_number}/exit-ip | Get exit IP and location |
| POST | /api/v1/workers/{worker_number}/proxy/restart | Restart HTTP proxy |
| POST | /api/v1/workers/{worker_number}/proxy/start | Start HTTP proxy |
| POST | /api/v1/workers/{worker_number}/proxy/stop | Stop HTTP proxy |
| POST | /api/v1/workers/{worker_number}/vpn/restart | Restart VPN tunnel |
| POST | /api/v1/workers/{worker_number}/vpn/start | Start VPN tunnel |
| POST | /api/v1/workers/{worker_number}/vpn/stop | Stop VPN tunnel |
11 operations
banks
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/banks/ | List all VPN banks |
| POST | /api/v1/banks/ | Create VPN bank |
| POST | /api/v1/banks/reconcile-endpoints | Regenerate the master's bank frontends from bank state |
| DELETE | /api/v1/banks/{bank_tag} | Delete bank and release workers |
| GET | /api/v1/banks/{bank_tag} | Get bank by tag |
| PUT | /api/v1/banks/{bank_tag} | Update bank configuration |
| POST | /api/v1/banks/{bank_tag}/cycle | Cycle bank to fresh random profiles (same filter) |
| POST | /api/v1/banks/{bank_tag}/idle | Idle bank (pause VPN) |
| POST | /api/v1/banks/{bank_tag}/resume | Resume bank (restart VPN) |
9 operations
daemon
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/daemon/ | Daemon status summary |
| GET | /api/v1/daemon/events | Recent lifecycle events |
| POST | /api/v1/daemon/prime | Prime workers and start health loop |
| POST | /api/v1/daemon/reconcile | Re-derive daemon worker state from the bank layer |
| POST | /api/v1/daemon/stop | Stop health loop only |
| POST | /api/v1/daemon/teardown | Tear down VPN connections |
| GET | /api/v1/daemon/workers | Per-worker lifecycle details |
| POST | /api/v1/daemon/workers/{worker_number}/hold | Put a worker under a maintenance hold |
| POST | /api/v1/daemon/workers/{worker_number}/release | Lift a worker's maintenance hold |
9 operations
cluster
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/cluster/ | Get cluster state |
| GET | /api/v1/cluster/health | Cluster health check |
| POST | /api/v1/cluster/idle | Idle cluster workers |
| POST | /api/v1/cluster/reset | Reset cluster to clean state |
| POST | /api/v1/cluster/resume | Resume cluster workers |
| GET | /api/v1/cluster/vpn-countries | Get Vpn Countries |
6 operations
fleet-update
| Method | Path | Does |
|---|---|---|
| POST | /api/v1/fleet-update/plan | Dry run: what would an update do to each worker |
| POST | /api/v1/fleet-update/run | Start a fleet update run |
| GET | /api/v1/fleet-update/runs | List update runs |
| GET | /api/v1/fleet-update/runs/{run_id} | Status of one run |
| POST | /api/v1/fleet-update/runs/{run_id}/continue | Go: carry on past the canary |
| POST | /api/v1/fleet-update/runs/{run_id}/resume | Resume a halted or interrupted run |
6 operations
usage
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/usage/ | List usage records |
| GET | /api/v1/usage/summary | Get usage summary |
| GET | /api/v1/usage/users/ | List tracked users |
| GET | /api/v1/usage/users/{user_id} | Get user info |
| DELETE | /api/v1/usage/{request_id} | Delete usage record |
| GET | /api/v1/usage/{request_id} | Get usage record |
6 operations
proton
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/proton/countries | Exit countries with server counts |
| GET | /api/v1/proton/features | Feature bitmask reference |
| GET | /api/v1/proton/inventory | Harvest metadata and totals |
| GET | /api/v1/proton/servers | Query available exit servers |
4 operations
telemetry
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/telemetry | Latest fleet telemetry snapshot |
| POST | /api/v1/telemetry | Ingest a fleet telemetry snapshot |
| GET | /api/v1/telemetry/history | Recent telemetry snapshots (trend history) |
| GET | /api/v1/telemetry/stream | Live telemetry push stream (Server-Sent Events) |
4 operations
health
| Method | Path | Does |
|---|---|---|
| GET | /health | Basic health check |
| GET | /health/detailed | Detailed health check |
2 operations
root
| Method | Path | Does |
|---|---|---|
| GET | / | Service info |
1 operation
prime
| Method | Path | Does |
|---|---|---|
| GET | /prime | Prime application caches |
1 operation
status
| Method | Path | Does |
|---|---|---|
| GET | /status | Service status overview |
1 operation
All the partsRunning the shopThe platform's own id for this service is cbvpn.
forge-catalog.json, generated Oct 30, 2026