My Plan & Limits

GET /v1/account/plan

The plan record for the caller's active account, plus a canonical limits object holding the account's effective limits. Plans and limits are an account property: the values reflect the account the request operates in (the one an API key is scoped to, or the account you last switched to), not a per-user setting.

The plan's own attributes (id, name, slug, pricing, allowed protocols/regions, default domain, dedicated-port allowances, …) are returned flat at the top level — the same record as /plans. The limits object is the authoritative part: its numbers are effective — plan defaults with any active per-account admin override applied on top, exactly the ceilings the edge enforces. An expired override falls back to the plan default automatically. 0 on any limit means unlimited.

The top-level max_bandwidth and max_requests are overlaid with the same effective values for convenience; the per-second rate-limit ceilings appear only under limits. This endpoint returns limits, not consumption — pair it with /account/usage for current-period usage, and /account/entitlements for which features are enabled.

Response (200 OK) — selected top-level fields

id int64
Numeric plan ID. Useful for cross-referencing with billing.
slug string
Plan slug (free, pro, team, …).
name string
Display name ("Pro", "Team").
price_monthly, price_yearly number
Plan price for a single seat. 0 for free plans.
allowed_protocols string
Comma-separated protocols permitted (e.g. "http,tcp"). Empty string = all protocols.
allowed_regions string
Comma-separated region slugs permitted. Empty string = all regions.
limits object
The active account's effective limits (plan defaults with active admin overrides applied). 0 on any field = unlimited. Fields below. This is the canonical limits block.
…plus the full plan record
Other plan fields (default_domain_id, default_domain_name, max_custom_domains, allow_dedicated_ports, max_dedicated_ports, …) are included flat — see /plans for the full schema.

limits object (effective)

max_endpoints int64
Maximum endpoints the account may have.
max_tunnels int64
Maximum concurrent tunnels (connected agents).
max_connections int64
Maximum concurrent client connections across the account.
max_bandwidth int64
Monthly bandwidth quota in bytes (in + out). Resets each billing period. Overridable.
max_requests int64
Monthly request quota (count). Resets each billing period. Overridable.
rate_limit_rps int64
Sustained account-wide request rate, requests per second. Overridable.
rate_limit_burst int64
Token-bucket burst size allowed above the sustained rate. Overridable.
rate_limit_per_endpoint_rps int64
Per-endpoint sustained request rate, requests per second. Overridable.
max_concurrent_requests int64
Maximum in-flight requests at any instant across the account. Overridable.

Errors

401 Unauthorized
Missing or invalid auth.
403 Forbidden
No active account on the request context.
404 Not Found
The active account's plan record is missing, or the account was deleted mid-request.
500
Database error resolving the effective limits.
Request
curl "https://api.ngris.com/v1/account/plan" \ -H "X-API-KEY: <your_api_key>"
Python
from ngris import Ngris client = Ngris(api_key="<your_api_key>") plan = client.account.get_plan() print(plan["limits"]["max_endpoints"])
Response — 200 OK
{ "id": 3, "name": "Pro", "slug": "pro", "price_monthly": 29, "price_yearly": 290, "allowed_protocols": "http,tcp", "allowed_regions": "", "max_custom_domains": 10, "allow_dedicated_ports": true, "max_dedicated_ports": 5, "max_bandwidth": 107374182400, "max_requests": 50000, "limits": { "max_endpoints": 20, "max_tunnels": 10, "max_connections": 5000, "max_bandwidth": 107374182400, "max_requests": 50000, "rate_limit_rps": 100, "rate_limit_burst": 200, "rate_limit_per_endpoint_rps": 50, "max_concurrent_requests": 500 } }
On this page
My Plan & Limits
Iris