Create Endpoint
Provision a new endpoint — the routing entry that connects a public URL to an agent. The endpoint persists across agent reconnects; tunnels are the live connections that come and go on top of it.
Endpoints are protocol-agnostic — one endpoint serves HTTP, TCP, UDP and QUIC at once. The protocol is chosen per tunnel by the agent (ngris http|tcp|udp), not at endpoint create, so there is no protocol field. Endpoints are also region-less — region is a property of the serving tunnel/agent (GeoDNS steers public traffic to the nearest region), so there is no region field; the plan's allowed_regions entitlement is enforced when a tunnel connects, not at create. Before creating, the server checks that the user has remaining endpoint quota on their plan and (for custom subdomains and root @ endpoints) that the user owns the target domain. Per-protocol plan entitlements are enforced when a tunnel of that protocol connects.
Request body
is_custom: true and you own the target domain — otherwise the platform auto-generates a memorable word-word-word identifier. Pass "@" to claim the root of the domain (admin or strict domain owner only).true to use the supplied subdomain. Requires the custom-subdomains entitlement on your plan and ownership of the target domain. Silently downgraded to false if either prerequisite isn't met.ngris.io).Response (201 Created)
uuid for API references./endpoints/{uuid}).myapp.example.com). Share this with the agent and clients.hostname — the bare FQDN with no scheme, because the endpoint may serve HTTP/TCP/UDP/QUIC. For HTTP/unified endpoints, build a browser URL as https://<public_url>.unified — endpoints are protocol-agnostic.false even if you requested true (entitlement or ownership check failed).null for the platform default.active | provisioning | error. New endpoints come up active immediately for HTTP; some protocols (TCP/UDP with dedicated ports) start provisioning.disabled, optional, required). Always disabled at creation; configure via PUT /v1/endpoints/{id}/mtls.Errors
protocol/region fields are accepted-but-ignored), or invalid subdomain format.@ endpoint without strict ownership, or organization endpoint limit hit. (Per-protocol and per-region plan entitlements are enforced when a tunnel connects, not at endpoint create.)domain_id doesn't exist or the user can't use it.