List Regions
Catalog of tunnel-server regions available on this deployment. Pass the slug as the region field when creating an endpoint to pin its tunnel-server to that location. Pinning matters for two reasons: (1) latency between agent and tunnel-server, (2) data-residency requirements that demand traffic stays in a particular jurisdiction.
The list returned here is the global catalog — your plan may restrict which slugs you can actually use. Cross-reference with the allowed_regions field on /account/plan to filter.
Response (200 OK)
An object with an items array of region objects:
slug string
Stable region identifier. Pass to
POST /v1/endpoints as the region field. Examples: eu-north-1, us-east-1, ap-south-1.name string
Human-readable name (city or geographic label).
display_name string
Display label for the region (falls back to
name when unset).public_ip string
Public edge IP for this region. Informational.
tunnel_server_address string
Public address agents connect to for this region. Informational; the agent receives this via the management API at handshake time.
is_active boolean
Whether this region currently accepts new endpoints. May be
false during planned maintenance or capacity issues.Errors
401 Unauthorized
Missing or invalid auth.
Request
curl "https://api.ngris.com/v1/regions" \
-H "X-API-KEY: <your_api_key>"
Python
from ngris import Ngris
client = Ngris(api_key="<your_api_key>")
plan = client.users.get_plan()
allowed = set(plan.get("allowed_regions") or [])
for r in client.regions.list_regions():
if r["is_active"] and (not allowed or r["slug"] in allowed):
print(r["slug"], r["name"])
Response — 200 OK
{
"items": [
{
"slug": "eu-north-1",
"name": "Stockholm",
"display_name": "EU North (Stockholm)",
"public_ip": "203.0.113.10",
"tunnel_server_address": "tunnel-eu-north-1.ngris.io:443",
"is_active": true
},
{
"slug": "us-east-1",
"name": "Virginia",
"display_name": "US East (Virginia)",
"public_ip": "198.51.100.20",
"tunnel_server_address": "tunnel-us-east-1.ngris.io:443",
"is_active": true
}
]
}