List 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
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
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?