Reference
View as MarkdownProxy API
6 operations. Every call needs a session cookie or an Authorization: Bearer nct_… token unless marked Public. Conventions, errors and scopes
/servers/{serverId}/proxyServer-level proxy state: certificates, upstream policy, TCP/UDP ports and tailnet
| Parameter | In | Type | Description |
|---|---|---|---|
serverIdrequired | path | string |
Response 200 · OK · application/json
- agentTooOldbooleanrequiredTrue when the agent lacks proxy.v2; staging proxy features returns 422 agent_too_old
- appliedGenerationinteger (int64)required
- ProxyUpstreamPolicyrequired
- capabilitiesstring[] | nullrequired
- ServerCertificate[] | nullrequired
- errorstringrequired
- generationinteger (int64)required
- ProxyL4Port[] | nullrequired
- ProxyDeployInfo
- ProxyPortsrequired
- stagedbooleanrequiredStaged server-level changes await Deploy proxy
- statusstringrequiredTraefik state reported by the agent: ok, starting, error, or empty
- ProxyTailnetrequired
- ProxyUpstreamPolicyrequired
401Unauthorized403Forbidden404Not Found422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/servers/{serverId}/proxy/deployDeploy the server-level proxy configuration
Sends a proxy_configure command with the desired certificates, upstream policy and tailnet. The result updates the applied state asynchronously.
| Parameter | In | Type | Description |
|---|---|---|---|
Idempotency-Key | header | string | Client-chosen key (<=255 chars). A retry with the same key replays the original response for 24 hours. |
serverIdrequired | path | string |
Request body · application/json · required
- reprovisionbooleanDelete the managed node and register it again with a new key
Response 202 · Accepted · application/json
- commandIdstringrequired
- generationinteger (int64)required
- ProxyPlanrequired
401Unauthorized403Forbidden404Not Found409Conflict422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/servers/{serverId}/proxy/planPreview what deploying the proxy would change
Lists the staged differences, whether the proxy container is recreated and warnings (a tailnet node is created, replaced or deleted, a port another process holds, HTTP-01 certificates that cannot validate off port 80). ports plans the deploy as if that proxy ports setting were staged too, without staging it (0 = the agent's own port).
| Parameter | In | Type | Description |
|---|---|---|---|
serverIdrequired | path | string |
Request body · application/json · required
- PortsStruct1
- reprovisionbooleanDelete the managed node and register it again with a new key
Response 200 · OK · application/json
- ProxyPlanChange[] | nullrequired
- reasonsstring[] | nullrequired
- restartRequiredbooleanrequiredThe proxy container is recreated (about 1 second of dropped connections)
- warningsstring[] | nullrequired
401Unauthorized403Forbidden404Not Found422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/servers/{serverId}/proxy/routesThe effective route table of the server's proxy (read-only)
Hostnames, upstreams and policies as the proxy receives them. Basic-auth users and hashes are never included.
| Parameter | In | Type | Description |
|---|---|---|---|
serverIdrequired | path | string |
Response 200 · OK · application/json
- ProxyRoute[] | nullrequired
401Unauthorized403Forbidden404Not Found422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/servers/{serverId}/proxy/settingsStage upstream policy and tailnet settings
Needs proxy:write; the loopback and link-local toggles need admin; the proxy ports can only be changed by the instance administrator (403 instance_admin_required; 422 invalid_proxy_ports, proxy_port_clash, agent_too_old). Changes are staged until POST /servers/{id}/proxy/deploy, which recreates the proxy container when a port changes. A managed tailnet needs the Tailscale integration (422 tailnet_not_configured); host mode needs Tailscale detected on the host (422 host_tailscale_not_detected).
| Parameter | In | Type | Description |
|---|---|---|---|
serverIdrequired | path | string |
Request body · application/json · required
- PortsStruct
- TailnetStruct
- UpstreamPolicyStruct
Response 200 · OK · application/json
- agentTooOldbooleanrequiredTrue when the agent lacks proxy.v2; staging proxy features returns 422 agent_too_old
- appliedGenerationinteger (int64)required
- ProxyUpstreamPolicyrequired
- capabilitiesstring[] | nullrequired
- ServerCertificate[] | nullrequired
- errorstringrequired
- generationinteger (int64)required
- ProxyL4Port[] | nullrequired
- ProxyDeployInfo
- ProxyPortsrequired
- stagedbooleanrequiredStaged server-level changes await Deploy proxy
- statusstringrequiredTraefik state reported by the agent: ok, starting, error, or empty
- ProxyTailnetrequired
- ProxyUpstreamPolicyrequired
401Unauthorized403Forbiddeninstance_admin_required404Not Found422Unprocessable Entityinvalid_proxy_portstailnet_not_configuredhost_tailscale_not_detected500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.
/servers/{serverId}/proxy/tailnet/reprovisionRe-provision the managed tailnet node
Deletes the node's state, registers it again with a fresh single-use key and removes the old device from the tailnet. Use it when the device was removed in the Tailscale admin console.
| Parameter | In | Type | Description |
|---|---|---|---|
Idempotency-Key | header | string | Client-chosen key (<=255 chars). A retry with the same key replays the original response for 24 hours. |
serverIdrequired | path | string |
Response 202 · Accepted · application/json
- commandIdstringrequired
- generationinteger (int64)required
- ProxyPlanrequired
401Unauthorized403Forbidden404Not Found409Conflict422Unprocessable Entity500Internal Server Error
Errors are RFC 9457 application/problem+json with a stable code field.