My Plan & Limits

GET /v1/account/plan

The plan of the caller's active account, as the same plan object /plans returns (see there for every field), with the account's effective values: entitlements and plan_limits have any active per-account admin override applied on top of the plan — exactly what the platform enforces for this account. An expired override falls back to the plan automatically, and features is generated from these effective values. 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.

There is no separate limits object: every effective limit is in plan_limits (for example plan_limits.max_endpoints), and every feature switch in entitlements. -1 means unlimited (for a default-semantics key such as rate_limit_rps, the platform default or no cap), 0 means none, and a key missing from plan_limits means its feature is not included. This endpoint returns limits, not consumption — pair it with /account/usage for current-period usage.

Response (200 OK) — selected fields

slug string
Plan slug (free, team, enterprise, …) — how a plan is addressed (plans have no uuid), e.g. as plan in billing requests and responses.
name string
Display name ("Developer", "Team").
price_monthly, price_yearly number
Plan price. 0 for free plans.
features, highlights string[]
Display lines: features is generated from the effective entitlements + plan_limits; highlights are the plan's admin-written promises. Show them in that order.
entitlements object
Every feature → whether this account has it, overrides applied. Includes protocol:<p> (tunnel protocols accepted when an agent connects) and region:<slug> (regions a tunnel may serve from). Same keys as on /plans.
plan_limits object
Every quota → this account's effective number, overrides applied. -1 unlimited, 0 none, N N; a missing key means the feature is not included. The key names and the default-semantics keys are listed on /plans.
…plus the rest of the plan object
description, plan_type, support_level, billing_model, sort_order, is_purchasable, metered_prices, default_domain_uuid / default_domain_name, created_at / updated_at — see /plans.

Deprecated: until the sunset this response also carries the legacy integer id and default_domain_id. Don't use them; address a plan by its slug and read default_domain_uuid.

Common plan_limits keys

max_endpoints int64
Maximum endpoints the account may have (present while entitlements.endpoints is on).
max_tunnels int64
Maximum concurrent tunnels (connected agents) (present while entitlements.tunnels is on).
max_connections int64
Maximum concurrent client connections across the account. -1 = no cap.
max_bandwidth int64
Monthly data-transfer quota in bytes (in + out). Resets each billing period.
max_requests int64
Monthly request quota (count). Resets each billing period.
rate_limit_rps int64
Sustained account-wide request rate, requests per second. -1 = no cap.
rate_limit_burst int64
Token-bucket burst size allowed above the sustained rate. -1 = twice rate_limit_rps.
rate_limit_per_endpoint_rps int64
Per-endpoint sustained request rate, requests per second. -1 = no cap.
max_concurrent_requests int64
Maximum in-flight requests at any instant across the account. -1 = no cap.
max_members, max_custom_domains, max_dedicated_ports, … int64
The count of a feature that carries one, present while the feature is on (account_members, custom_domains, dedicated_ports, …). The full list is on /plans.

The response example is abridged: entitlements shows a few of its entries, and the prices, features and plan_limits are left out — their values depend on the plan. The real response carries every key.

Creating a resource beyond its plan_limits count fails with 403. The count quotas answer {"error": "You've reached your plan's limit of N <things> — delete one or upgrade your plan"}, or "Your plan doesn't include any <things> — upgrade your plan" when the limit is 0.

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 plan's entitlements or the account's 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._get_raw("/account/plan") print(plan["plan_limits"]["max_endpoints"]) # -1 = unlimited print(plan["entitlements"]["custom_domains"])
Response — 200 OK (abridged)
{ "slug": "team", "name": "Team", "description": "Professional plan with higher limits", "plan_type": "personal", "support_level": "community", "billing_model": "fixed", "sort_order": 1, "is_purchasable": true, "highlights": [ "Priority email support" ], "entitlements": { "ai_chat": true, "custom_domains": true, "dedicated_ports": true, "endpoints": true, "protocol:udp": true, "region:us-va": true, "tunnels": true }, "default_domain_uuid": "019a2f6e-4b1c-7d3a-9e5f-2c8b1a0d7e64", "default_domain_name": "ngris.dev", "created_at": "2026-01-15T10:00:00Z", "updated_at": "2026-09-30T08:12:44Z" }
Was this helpful?
On this page
My Plan & Limits
Was this helpful?