Attach Dedicated IP to Endpoint

POST /v1/endpoints/{uuid}/dedicated-ip

Attach a dedicated IP (previously provisioned via /dedicated-ips/requests and fulfilled by the operator) to an endpoint. Once attached, the platform updates DNS so the endpoint's hostname resolves to the dedicated IP instead of the shared anycast pool.

Use cases:

  • Allow-listing: customer firewalls that only let traffic in from a specific IP.
  • SLA / reputation: avoid getting "noisy neighbor" rate-limits or blocklist entries from shared anycast IPs.
  • Compliance: regulators that demand dedicated infrastructure.

Each dedicated IP can be attached to one endpoint at a time. Re-attaching to a different endpoint requires detaching first. DNS propagation typically takes 1-2 minutes after attach.

A single-IP binding is mutually exclusive with a per-region group: attaching a single IP here clears any group binding on the endpoint, and vice-versa.

The IP's region binding lives on the dedicated-IP assignment (region_slug), not on the endpoint — endpoints are region-less. The IP is validated against the allowed CIDR ranges for its own region before the binding is persisted.

Path parameters

uuid string (uuid) Req
Endpoint UUID. The endpoint must be eligible for dedicated IPs (use /dedicated-ips/attachable-endpoints to filter).

Request body

assignment_uuid string (uuid) Req
The uuid of an active dedicated-IP assignment allocated to your account. Get it from /dedicated-ips. The assignment must be in active status and belong to your account.

Deprecated: assignment_id (integer) is still accepted until the sunset. Send assignment_uuid; sending both for different objects is a 400 id_uuid_mismatch.

Response (200 OK)

endpoint_uuid string (uuid)
The endpoint's uuid (echo).
assignment_uuid string (uuid)
The uuid of the dedicated-IP assignment now bound to this endpoint (echo).
ip_address string
The IP address now associated with this endpoint.
region_slug string
Region the dedicated IP belongs to (from the assignment).

Deprecated: until the sunset this response also carries the legacy integer id and *_id fields. Don't use them; read uuid and the *_uuid fields.

Errors

400 Bad Request
Missing assignment_uuid, a malformed assignment_uuid, assignment_id and assignment_uuid naming different assignments (id_uuid_mismatch), invalid JSON, or an agentless (static hosting) endpoint.
401 Unauthorized
Missing auth.
403 Forbidden
Plan doesn't include the dedicated_ips entitlement, or your role can't update dedicated IPs.
404 Not Found
Endpoint or assignment not found in your active account — an unknown uuid and another account's read the same.
409 Conflict
Assignment is not active, or the IP fails CIDR validation for its region.
502 Bad Gateway
DNS repoint failed after the binding was written — the change is automatically reverted; safe to retry.
Request
curl -X POST "https://api.ngris.com/v1/endpoints/<uuid>/dedicated-ip" \ -H "X-API-KEY: <your_api_key>" \ -H "Content-Type: application/json" \ -d '{"assignment_uuid": "019b230b-86f2-701a-8001-a15a433823c1"}'
Python
from ngris import Ngris client = Ngris(api_key="<your_api_key>") result = client._post_raw("/endpoints/<endpoint_uuid>/dedicated-ip", {"assignment_uuid": "019b230b-86f2-701a-8001-a15a433823c1"}) print(f"Now serving from {result['ip_address']}")
Response — 200 OK
{ "endpoint_uuid": "019bb1e4-e785-77d2-9966-c3cff31d0a0e", "assignment_uuid": "019b230b-86f2-701a-8001-a15a433823c1", "ip_address": "203.0.113.5", "region_slug": "eu-central" }
Was this helpful?
Was this helpful?