Add a Path That Skips Sign-in
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?