List Plans

GET /v1/plans

Returns the plan catalog: each plan's record plus everything the plan includes — every feature in entitlements and every quota in plan_limits. Auth is required. Non-admin callers see only plans with is_purchasable: true; admins see every plan. Use it to build pricing tables and the upgrade plan-picker.

Every plan endpoint serves this one plan object. GET /v1/account/plan returns it for the calling account, with that account's effective values (per-account overrides an admin has granted or revoked applied). The unauthenticated GET /v1/public/plans (it backs the public pricing page) returns the purchasable plans as {"generated": "<RFC 3339 time>", "plans": [ … ]}, without id, is_purchasable, the default domain and the timestamps; it is sent with Cache-Control: public, max-age=300.

The catalog is built from the plan-entitlements table, the same rows the platform enforces. Features live only in entitlements and every number lives only in plan_limits: there are no top-level max_*, allow_*, allowed_protocols, allowed_regions or retention fields.

Response (200 OK)

An object with an items array of plan objects: {"items": [ … ]}. Each plan has:

slug string
Stable identifier (e.g. free, team, enterprise) — how a plan is addressed; plans have no uuid. Send it as plan to POST /v1/billing/checkout and GET /v1/billing/preview-plan-change?plan=. Use it in URLs and config.
name, description string
Display name and marketing blurb, suitable for direct display.
price_monthly, price_yearly number
Price per month, and the total price for a year billed once. 0 for free plans. The plan object has no currency field.
plan_type, support_level, sort_order string, string, int
Plan category, support tier, and display order (items are returned in this order).
billing_model string
fixed, hybrid or payg. Hybrid and pay-as-you-go plans may also carry metered_prices.
is_purchasable boolean
false for grandfathered or admin-only plans, which only admins see here. POST /v1/billing/checkout rejects them with 403.
features string[]
Generated on every read from entitlements and plan_limits, so it always states what the platform enforces (e.g. "Up to 25 endpoints", "Unlimited custom domains", "Traffic inspector (15-day log retention)"). Display it as-is. It is prose, not an identifier list — read the two maps below for logic.
highlights string[]
Admin-written promises the data can't express (e.g. "Priority support (4h)"). Display them after features. When a highlight mentions support, it replaces the generated support line in features. Always an array, possibly empty.
entitlements object
Every feature in the platform registry → true / false; never a number. It includes the protocol:<p> keys (http, tcp, udp, unified — the tunnel protocols the edge accepts when an agent connects), one region:<slug> key per platform region (the regions a tunnel may serve from) and the traffic_rule:<type> keys (the traffic-policy rule types). rbac is endpoint access rules; account_rbac is custom account roles. The feature list is on /account/entitlements; treat an unknown or missing key as false.
plan_limits object
Every quota → a number: -1 means unlimited, 0 means none, N means N. A key that is missing belongs to a feature that is off — read it as not included, never as unlimited. The exceptions are the default-semantics keys, where -1 means the platform's built-in default or no cap (never unlimited, and they never hold 0): max_connections, rate_limit_rps, rate_limit_burst, rate_limit_per_endpoint_rps, max_concurrent_requests, managed_max_replicas, managed_cpu_millis_max, managed_memory_mb_max, max_preview_deploys, deploy_max_rollback_versions, backup_retention_max, edge_function_concurrency, ai_max_response_tokens, ai_context_messages. A traffic_log_retention_days of -1 keeps traffic logs indefinitely.
plan_limits: a feature's count int64
A feature that carries a count has its switch in entitlements and its number here, present only while the feature is on: endpoints → max_endpoints, ephemeral_endpoints → max_ephemeral_endpoints, tunnels → max_tunnels, account_members → max_members (active members plus pending invitations, the owner included), custom_domains → max_custom_domains, dedicated_ports → max_dedicated_ports, dedicated_ips → max_dedicated_ips, custom_ssl → max_custom_certificates, mtls_attachment → max_client_cas, sso → max_sso_configs, firewall_policies → max_firewall_policies, custom_rate_limits → max_rate_limit_rules, traffic_policies → max_traffic_policies, endpoint_routing_rules → max_routing_rules, metric_alerts → max_alert_rules, custom_error_pages → max_custom_error_pages, cron_jobs → max_cron_jobs, edge_functions → max_edge_functions, managed_backends → max_managed_apps (managed and full-stack apps), managed_database → max_managed_databases (a WordPress site's own database is not counted), managed_wordpress → max_wordpress_sites. Each is a per-account count.
plan_limits: other limits int64
Numbers listed under their own name: max_bandwidth (monthly data transfer in bytes; tunnels and hosted apps share this one pool), max_requests (per month), max_connections, rate_limit_rps, rate_limit_burst, rate_limit_per_endpoint_rps, max_concurrent_requests, traffic_log_retention_days, audit_log_retention_days, ai_writes_per_hour, ai_requests_per_hour, ai_tokens_per_month, ai_max_response_tokens, ai_context_messages, applications_max, application_storage_bytes, max_preview_deploys, deploy_max_rollback_versions, max_functions, managed_cpu_millis_max, managed_memory_mb_max, managed_max_replicas, backup_retention_max, edge_function_concurrency, and max_traffic_policy_rules (rules in one traffic policy).
metered_prices array
Hybrid/payg plans with active meters only (omitted otherwise). Each item's meter_key, display_name, unit_amount_cents, currency and included_quantity describe one usage meter.
default_domain_uuid, default_domain_name string (uuid), string
The plan's shared default domain (its uuid and name), when one is set (omitted otherwise).
created_at, updated_at string
RFC 3339 timestamps.

Deprecated: until the sunset each plan 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.

The response example is abridged: it shows one plan and a few entries of its entitlements, and leaves out the prices, the features lines that carry numbers, and plan_limits — their values depend on the plan. The real response carries every plan and every key. In plan_limits, -1 is unlimited (the platform default for a default-semantics key such as edge_function_concurrency), and a feature that is off has no key: with cron_jobs off, as here, there is no max_cron_jobs (not included).

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.
Request
curl "https://api.ngris.com/v1/plans" \ -H "X-API-KEY: <your_api_key>"
Python
from ngris import Ngris client = Ngris(api_key="<your_api_key>") for p in client.regions.list_plans()["items"]: if p["entitlements"].get("cron_jobs"): # a feature that is on carries its count; -1 = unlimited print(p["name"], p["plan_limits"]["max_cron_jobs"]) else: print(p["name"], "cron jobs not included")
Response — 200 OK (abridged)
{ "items": [ { "slug": "free", "name": "Developer", "description": "Free plan for personal use", "plan_type": "personal", "support_level": "community", "billing_model": "hybrid", "sort_order": 0, "is_purchasable": true, "features": [ "HTTP, TCP, UDP tunnels", "All regions", "SSO (OIDC)", "WAF \u0026 firewall rules", "Community support" ], "highlights": [], "entitlements": { "ai_chat": false, "application_hosting": true, "cron_jobs": false, "custom_domains": true, "dedicated_ports": false, "endpoints": true, "protocol:tcp": true, "region:eu-de": true, "sso": true, "tunnels": true }, "created_at": "2026-01-15T10:00:00Z", "updated_at": "2026-09-30T08:12:44Z" } ] }
Was this helpful?
On this page
List Plans
Was this helpful?