Add a Path That Skips Sign-in

POST /v1/endpoints/{uuid}/access-paths

List a path. In the open mode anyone can call it without signing in, for its methods; in the protect mode it is one of the only paths that need sign-in. The edge applies it within seconds in every region. How requests are matched (the most specific path decides, another case or a trailing / after an exact path needs sign-in, index.php and method overrides) is in Paths that skip sign-in.

Path parameters

uuid string (uuid) Req
The endpoint's uuid from /endpoints.

Request body

path string Req
Exact (/health), or a folder and everything under it: /webhooks/* covers /webhooks too, and /webhooks/** is the same. Up to 256 characters, starting with /, decoded (é, not %C3%A9), without a query or a fragment, a \ or ;, an empty segment, a . or .. segment, or a segment ending in a dot or a space. /* and /** are refused (to open every path, turn sign-in off), and so are the sign-in pages under /_tunnel_auth, which are always open. In the protect mode an exact path is saved without a trailing /: it protects both.
methods string[]
Any of GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS (any case), or ["*"] alone for every method. Left out: ["GET", "HEAD"] in the open mode, ["*"] in the protect mode. In the open mode, a path without a signature check that lists POST needs ["*"]: an app can take the method from the body (_method), so such a POST can act as any method.
mode string
open (default) or protect, for the first path only. Later paths take the list's mode: leave it out, or send the list's own mode. To change it, use PUT .../access-paths/mode.
signature object
open mode only: check the webhook's signature before the request goes through, as the Verify Webhook rule does. A request without a valid signature gets 401, a body over 2 MB gets 413, and neither reaches your app. Needs Verify Webhook in your plan.
• provider (required): github, slack, stripe or generic.
• secret (required): the signing secret from the sender's webhook settings, up to 256 characters. It is stored encrypted and never shown again: answers carry "****".
• generic only, a hex HMAC of the raw body: signature_header (the header that carries it; left out, X-Hub-Signature-256), algorithm (sha256, the default, or sha1) and signature_prefix (taken off the header's value before the check; left out, sha256= or sha1=). The other providers sign their own way and refuse these fields.

Response (201 Created)

The new path, as an entry of the list: uuid, path, methods, signature, created_at, updated_at.

Errors

400 Bad Request
A field the API doesn't know (invalid json payload), or a field it refuses, named in fields: the path, the methods, the mode or the signature check, with what to send instead. In the open mode, POST without a signature check and without every method: Without a signature check, a POST on this path can act as any method, so opening POST opens every method: send ["*"], or add a signature check.
401 Unauthorized
Missing auth.
403 Forbidden
Your role lacks endpoints:update, or a signature check without Verify Webhook in your plan ("code": "entitlement_required", "entitlement_required": "traffic_rule:verify-webhook").
404 Not Found
No such endpoint in your active account.
409 Conflict
this path is listed already: change its methods instead; the endpoint lists max_paths paths already; a mode other than the list's (switch the mode first, or leave mode out); a signature check on a protect list; the older protected_paths setting is still on (send "protected_paths": [] with the sign-in settings first); or the endpoint is paused over your plan's quota ("code": "quota_paused").
Request — a GitHub webhook
curl -X POST "https://api.ngris.com/v1/endpoints/019bb1e4-e785-77d2-9966-c3cff31d0a0e/access-paths" \ -H "X-API-KEY: <your_api_key>" \ -H "Content-Type: application/json" \ -d '{ "path": "/webhooks/github", "methods": ["POST"], "signature": {"provider": "github", "secret": "<the webhook secret from GitHub>"} }'
Request — a health check
curl -X POST "https://api.ngris.com/v1/endpoints/019bb1e4-e785-77d2-9966-c3cff31d0a0e/access-paths" \ -H "X-API-KEY: <your_api_key>" \ -H "Content-Type: application/json" \ -d '{"path": "/health"}'
CLI
ngris api endpoint-access-paths add 019bb1e4-e785-77d2-9966-c3cff31d0a0e \ --path /webhooks/github --methods POST \ --signature "{\"provider\": \"github\", \"secret\": \"$GITHUB_WEBHOOK_SECRET\"}" --yes
Response — 201 Created
{ "uuid": "019c1a20-5b7e-7c41-9a3e-2f6d8b0c4e11", "path": "/webhooks/github", "methods": ["POST"], "signature": { "provider": "github", "secret": "****", "signature_header": "", "algorithm": "", "signature_prefix": "", "locked": false }, "created_at": "2026-11-12T09:00:00Z", "updated_at": "2026-11-12T09:00:00Z" }
Response — 400 (POST without a check)
{ "error": "Without a signature check, a POST on this path can act as any method, so opening POST opens every method: send [\"*\"], or add a signature check.", "fields": { "methods": "Without a signature check, a POST on this path can act as any method, so opening POST opens every method: send [\"*\"], or add a signature check." } }
Was this helpful?
Was this helpful?