Networking

Preview — pending review

This reference is generated from the platform API contract and is still under review. Operations, fields, and descriptions can change before publication.

Allocate a new floating IP

POST
/scopes/{scopeId}/network/floating-ips

Allocates a public IPv4 address from an external network pool into the active scope, driven by the the floating IP creation form submission. Inputs mirror the visible form: region (fixed to the active scope's region), allocation pool, and an optional immediate association target. Floating IPs are billed pay-as-you-go only: billingCycle may be omitted (it defaults to pay-as-you-go). On acceptance the address becomes discoverable in the scoped list; when associateTo is omitted the address is created unassociated (status DOWN) and billed at the same rate as an associated one. Validation: scope must be active and writable by the caller (contributor or higher) → 403 FORBIDDEN otherwise; pool must name an existing external pool → 422 VALIDATION_FAILED; billingCycle, when given, must be pay-as-you-go → monthly / yearly are refused 422 VALIDATION_FAILED; associateTo, when present, must reference an instance/port reachable in the scope → 404 NOT_FOUND; floating-IP quota for the subscription must not be exhausted → 409 QUOTA_EXCEEDED; pool address exhaustion → 409 CAPACITY_UNAVAILABLE. Async & state: Asynchronous: returns 202 with the FloatingIp resource in its transitional state (status DOWN, fixedIp/instance/port/router null until association completes). The backend emits resource.updated SSE frames (kind: network.floating_ip, patch: {status, fixedIp, instance, port, router}) as allocation and the optional association settle; terminal states are ACTIVE (associated) or DOWN (allocated, unassociated). Errors: 401 unauthenticated; 403 missing create permission; 404 unknown associate target; 409 QUOTA_EXCEEDED when the scope's floating-IP quota is reached; 409 CAPACITY_UNAVAILABLE when the pool has no free addresses; 422 invalid body; 429 rate limited; 500 internal failure. Idempotency/Concurrency: Idempotency-Key is required; replaying the same key returns the original 202 result with the same FloatingIp id instead of allocating a second address.

Authorization

bearerToken
headerAuthorizationBearer <token>

An API token (pc_live_…) or a service-account key (sak_live_…), created in Identity & Access Management and sent as Authorization: Bearer <token>. Requests are rate limited per credential and per tenant: every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, and a refused request gets 429 RATE_LIMITED with Retry-After.

Path Parameters

scopeId*string

Opaque ownership+authorization scope resolving to tenant + subscription + project.

Header Parameters

Idempotency-Key*string

Required: this operation creates a new resource asynchronously, so a retry without the key would create a second one. Same key+body within 24h replays the original result; the same key with a different body is 409 CONFLICT. Keys are unique per tenant (the same key in two tenants is two different requests). An API token or service-account (bearer) caller MUST send it -- a request without it is refused with 400 IDEMPOTENCY_KEY_REQUIRED (ErrIdempotencyKeyRequired); reuse the same key on every retry of one logical request. A console session gets one from the edge.

Formatuuid

Request Body

application/json
  1. body

The floating IP creation form submission — allocate a public address from an external pool.

pool*string

External network pool to allocate from (UI default public-ext-net).

billingCycle?string

Optional; defaults to pay-as-you-go, the only cycle a floating IP is offered on (it is metered hourly at the network.floatingip price; there is no reserved pricing). monthly and yearly are REFUSED with 422 VALIDATION_FAILED (field billingCycle) rather than accepted and ignored.

Default"pay-as-you-go"
Value in"pay-as-you-go""monthly""yearly"
associateTo?|

Optional instance/port to associate immediately; null or omitted leaves the address unassociated.

Response Body

Allocation accepted; floating IP returned in its transitional state.

application/json
  1. response

A public floating IP allocation (list/detail core record, mirrors the FloatingIP interface).

origin?string

Where the resource was made -- portal for a create on the console, api for an object made straight against the OpenStack API (CLI, Terraform, the Kubernetes cloud provider) that discovery adopted. Informational; nothing behaves differently. Absent from a backend that predates it, which means portal.

Value in"portal""api""system""imported"
id*string

Stable identifier of the floating IP (e.g. fip-01).

ip*string

The public IPv4 address (e.g. 203.0.113.42).

status*string

ACTIVE when associated with a port; DOWN when allocated but unassociated.

Value in"ACTIVE""DOWN"
fixedIp*|

Private fixed IP of the associated port; null when unassociated.

pool*string

External network pool the address was allocated from (e.g. public-ext-net).

instance*|

Name of the associated instance or VIP owner; null when unassociated.

port*|

Name of the associated port; null when unassociated.

router*|

Router carrying the association; null when unassociated.

createdAt*string

Allocation timestamp (ISO 8601).

Formatdate-time
curl -X POST "https://example.com/scopes/string/network/floating-ips" \  -H "Idempotency-Key: 497f6eca-6276-4993-bfeb-53cbbbba6f08" \  -H "Content-Type: application/json" \  -d '{    "pool": "string"  }'
{  "origin": "portal",  "id": "string",  "ip": "string",  "status": "ACTIVE",  "fixedIp": "string",  "pool": "string",  "instance": "string",  "port": "string",  "router": "string",  "createdAt": "2019-08-24T14:15:22Z"}