List Applications

GET /v1/applications

List the applications of the active account, newest first, one page at a time. Git configuration is included with the token and webhook secret redacted.

Query parameters

page int
1-based page number. Default 1; values below 1 read as 1.
page_size int
Applications per page. Default 15, max 200 (larger values are clamped).
q string
Case-insensitive substring match on the application name.
source string
upload or git.
status string
live (has a live deploy and an endpoint serves it), deployed (has a live deploy, no endpoint) or no-deploy (nothing deployed yet).

Response (200 OK)

applications array
This page's applications; [] when there are none. Each item has the application fields of Get Application except endpoints, primary_endpoint_uuid and the runtime fields (backend_paths, port, cpu_millis, …), plus the fields below. Its settings are the ones the single read answers: prod_visibility, preview_visibility, require_manual_promotion, root_directory, skew_protection_enabled, speed_insights_enabled, and quarantined_at / quarantine_reason on a suspended app.
page int
The page that was returned.
page_size int
The effective page size.
total int
Applications matching the filters, across all pages.

List-only item fields

requests_24h int
Requests served in the last 24 hours, summed over the endpoints that serve the app. 0 when it has none.
traffic_24h_csv string?
The same 24 hours as 24 comma-separated hourly request counts, oldest first, the last one the current hour (for a sparkline). Omitted when there was no traffic.
git object?
Git apps only: provider, repo_url, owner, repo, branch (the production branch), auto_deploy, and GitHub's own installation_id when the repo is connected through the ngris GitHub App. A shorter form than the git object of Get Application.

Errors

400
source is not upload / git, status is not one of the three values, or the page is too deep (invalid pagination parameters).
403
No active account, or the plan doesn't include application hosting.
Request
curl "https://api.ngris.com/v1/applications" \ -H "X-API-KEY: <your_api_key>"
Response — 200 OK
{ "applications": [ { "uuid": "019be838-d261-7d9b-9499-71995a3a91c6", "account_uuid": "019a68b9-1a79-7820-a884-41f554aba6bd", "name": "my-site", "type": "static", "source": "git", "current_deploy_uuid": "019bf3d2-0116-7612-9567-75a812bf45fc", "publish_dir": "", "index_document": "index.html", "spa_fallback": true, "prod_visibility": "public", "preview_visibility": "private", "require_manual_promotion": false, "root_directory": "", "skew_protection_enabled": false, "speed_insights_enabled": false, "quota_paused": false, "requests_24h": 1204, "traffic_24h_csv": "40,38,35,31,29,30,42,55,61,70,68,64,59,57,60,66,72,69,58,51,47,44,40,18", "git": { "provider": "github", "repo_url": "https://github.com/acme/site", "owner": "acme", "repo": "site", "branch": "main", "auto_deploy": true, "installation_id": 168204743 }, "created_at": "2026-07-28T12:00:00Z", "updated_at": "2026-07-28T12:05:00Z" } ], "page": 1, "page_size": 15, "total": 1 }

Get Application

GET /v1/applications/{uuid}

Fetch a single application by its uuid. Same object shape as the list items, plus the app's endpoints: an app can be served by several, one of them its primary (endpoints and primary_endpoint_uuid below; list items don't carry them).

Response fields

uuid string (uuid)
Stable identifier.
account_uuid string (uuid)
The account that owns the app.
name string
The application name, unique within the account.
type string
static, managed, fullstack, function or wordpress.
source string
upload or git.
current_deploy_uuid string (uuid)?
The live deploy; omitted until there is one.
publish_dir string
Site-root subfolder.
index_document string
Directory index document.
spa_fallback boolean
SPA client-routing fallback.
not_found_path string?
Custom 404 document. Omitted when unset.
prod_visibility string
public or private — production-URL access. Set with PUT /visibility.
preview_visibility string
public or private — preview-URL access.
require_manual_promotion boolean
true when every new deploy builds as a not-live candidate you promote by hand. Set with PUT /applications/{uuid}.
root_directory string
The repository subfolder builds run in (monorepos); "" = the repository root.
install_command, build_command, output_dir, start_command string
The app's build settings: its own install, build and start commands and output directory; "" = detected. Set with PUT /applications/{uuid}. Omitted only when they could not be read. Not in the List Applications items.
skew_protection_enabled boolean
Whether Skew Protection is on.
speed_insights_enabled boolean
Whether Speed Insights collection is on.
quota_paused boolean
true while the app is paused over a plan limit (the app itself, or the managed database it uses): not served, scaled to zero, data kept, and every change except a delete is refused with 409. It resumes on its own once the account has room. While paused, quota_paused_label and quota_paused_limit name the limit that holds it, quota_paused_key is its entitlement key and quota_paused_message is the sentence the API refuses changes with; all four are omitted otherwise.
primary_endpoint_uuid string (uuid)?
The app's primary endpoint: its hostname is the host the app's cron jobs call and a WordPress app's site address. The stored primary while it is served, else the oldest served endpoint; omitted when the app has no served endpoint (none yet, or every one paused or suspended). Change it with PUT /primary-endpoint.
endpoints array
Every endpoint serving the app, oldest first; [] when it has none. Each endpoint serves the production deploy with its own settings. Fields: uuid; hostname; url (https://<hostname>); primary (boolean); serving_mode (agentless for a static app, managed for an app with a backend); status (pending_dns or dns_failed while DNS isn't done, else active once the app has a live deploy, inactive before); tls_status, the certificate the edge presents for the hostname (issued, expiring = less than 30 days left, expired, pending = issuance under way or the domain's CNAME not verified yet, failed, or none = no certificate); tls_source (endpoint, domain or platform; omitted with no certificate); tls_expires_at (omitted with no expiry); quota_paused (not served: paused over a plan limit, on a paused custom domain, or suspended); admin_suspended (present and true when the ngris team suspended it); auth_mode (the endpoint's stored sign-in mode, none when it has none; SSO reads back as basic); auth_protected (false when anyone can get in); created_at. Omitted only when the endpoints could not be read.
git object?
Git apps only: where the app deploys from. provider, repo_url, owner, repo, branch (the production branch), auto_deploy (a push to branch deploys), auto_preview (a push to any other branch builds a branch preview), connected (ngris holds credentials for the repository: a stored access token or a GitHub App installation), last_synced_sha / last_synced_at (omitted until a push has been synced), and, when the repo is connected through the ngris GitHub App, GitHub's own installation_id and repo_id plus connected_by_user_uuid (the ngris user who picked the repository); application_uuid repeats the app. Tokens and secrets are never returned.
backend_paths string[]
A fullstack app's URL path prefixes routed to its backend; [] for other types.
port, health_check_path int, string
The port the backend listens on and the path its readiness probe calls. 0 / "" for an app with no backend (static). Change them with PUT /runtime.
cpu_millis, memory_mb int
The backend's CPU (millicores) and memory (MiB) per replica; 0 with no backend.
min_replicas, max_replicas int
The backend's replica range; 0 with no backend.
function_runtime, function_handler string?
function apps only: the base runtime and the <file>:<export> entry. Omitted for other types.
function_idle_seconds, function_timeout_seconds, function_max_concurrency int?
function apps only: scale to zero after this many idle seconds, the per-request time cap, and the concurrent requests per instance before scale-up. Omitted for other types (and when 0).
quarantined_at, quarantine_reason datetime?, string?
Present only when the ngris team has suspended the app (usually after an abuse report): it is stopped and not served, and a redeploy can't revive it. Contact support.
created_at, updated_at datetime
RFC 3339 UTC timestamps.

Deprecated: until the sunset application objects also carry the legacy integer id and *_id fields. Don't use them; read uuid and the *_uuid fields.

Errors

404 Not Found
No application with that uuid in the active account.
Request
curl "https://api.ngris.com/v1/applications/019be838-d261-7d9b-9499-71995a3a91c6" \ -H "X-API-KEY: <your_api_key>"
Response — 200 OK
{ "uuid": "019be838-d261-7d9b-9499-71995a3a91c6", "account_uuid": "019a68b9-1a79-7820-a884-41f554aba6bd", "name": "my-site", "type": "static", "source": "upload", "current_deploy_uuid": "019bf3d2-0116-7612-9567-75a812bf45fc", "publish_dir": "", "index_document": "index.html", "spa_fallback": false, "prod_visibility": "public", "preview_visibility": "private", "require_manual_promotion": false, "root_directory": "", "skew_protection_enabled": false, "speed_insights_enabled": false, "quota_paused": false, "backend_paths": [], "port": 0, "cpu_millis": 0, "memory_mb": 0, "min_replicas": 0, "max_replicas": 0, "health_check_path": "", "install_command": "", "build_command": "npm run build -- --outDir site", "output_dir": "site", "start_command": "", "primary_endpoint_uuid": "019bb1e2-6f10-7c41-a1d3-2b8e4c9f0a17", "endpoints": [ { "uuid": "019bb1e2-6f10-7c41-a1d3-2b8e4c9f0a17", "hostname": "example.com", "url": "https://example.com", "primary": true, "serving_mode": "agentless", "status": "active", "tls_status": "issued", "tls_source": "domain", "tls_expires_at": "2027-01-05T10:00:00Z", "quota_paused": false, "auth_mode": "basic", "auth_protected": true, "created_at": "2026-10-01T09:00:00Z" }, { "uuid": "019bb1e4-e785-77d2-9966-c3cff31d0a0e", "hostname": "www.example.com", "url": "https://www.example.com", "primary": false, "serving_mode": "agentless", "status": "active", "tls_status": "pending", "quota_paused": false, "auth_mode": "none", "auth_protected": false, "created_at": "2026-10-16T14:30:00Z" } ], "created_at": "2026-07-28T12:00:00Z", "updated_at": "2026-10-16T14:30:00Z" }
Was this helpful?
Was this helpful?