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.
Update router
Applies a partial configuration change to the selected Router, triggered by the "Edit" action in
the router detail page. Mutable attributes are the router name and the administrative state (adminStateUp);
gateway and SNAT changes go through the dedicated set-gateway and enable/disable SNAT actions, while
interface and route membership are managed via their own sub-resource endpoints. The updated configuration
is visible to subsequent reads immediately on success.
Validation: router must exist and be visible in scope → 404 NOT_FOUND; name, when supplied, must match
^[a-z0-9-]{1,63}$ and remain unique in the project → 422 VALIDATION_FAILED; the current resource
state must permit update (not mid-deletion, not locked) → 409 CONFLICT when a conflicting transition is in
flight.
Async & state: Synchronous — returns 200 with the updated Router; a resource.updated SSE frame with
kind: network.router and the changed field patch is emitted so open list/detail views refresh.
Errors: 401 unauthenticated; 403 caller lacks contributor/owner/admin rights; 404 unknown router;
409 router is in a state that does not permit update (e.g. deletion in progress); 412 If-Match ETag mismatch;
422 invalid field values; 500 internal failure.
Idempotency/Concurrency: This operation does not use Idempotency-Key; it may be omitted
and a sent one is ignored. A repeated identical PATCH re-applies the same fields (same end
state) and bumps the ETag. If-Match with the current ETag is mandatory and a stale ETag yields
412 PRECONDITION_FAILED, so resending a request that already succeeded with its original
If-Match also gets 412.
bearerTokenAuthorizationBearer <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.
scopeId*stringOpaque ownership+authorization scope resolving to tenant + subscription + project.
routerId*stringIdentifier of the router.
If-Match?stringETag for optimistic concurrency on mutations/deletes; mismatch results in 412.
application/json- body
Partial update of router configuration (Edit action).
name?stringNew router name.
^[a-z0-9-]{1,63}$adminStateUp?booleanNew administrative state of the router.
Router updated; the full updated resource is returned.
application/json- response
Virtual router connecting subnets and reaching external networks.
origin?stringWhere 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.
"portal""api""system""imported"id*stringRouter identifier.
name*stringRouter name (lowercase letters, numbers, hyphens; max 63 chars).
status*NetworkStatusLifecycle status shared by networking resources.
"ACTIVE""DOWN""BUILD""ERROR"statusReason*|Human-readable reason the last lifecycle command on this router failed (e.g. the Neutron message of a refused create or gateway attach); null once a later command settles the router healthy, or when nothing failed. Mirrors VirtualNetwork.statusReason. A router whose create failed after the Neutron router already existed shows the provider's real status, gateway, interfaces and routes, with the failure explained here.
statusReasonCode*|Machine-readable companion to statusReason: a small, OPEN vocabulary of codes the console can branch on without parsing the human text, deliberately a plain string rather than a closed enum so a code the client does not recognize yet degrades to the generic failure message. Today the only value is cancelled: the resource is in its failure state because its create operation was CANCELLED; a provider object the create had already built may be left in place, and the resource's DELETE removes it. Reported only while the resource is in that failure state; null otherwise.
adminStateUp*booleanAdministrative state of the router.
ha*booleanHigh availability (active/standby pair) enabled.
distributed*booleanDistributed virtual router (DVR) mode.
externalGateway*|nullExternal gateway attachment, or null when the router is internal-only.
interfaces*array<>Internal interfaces attached to the router.
routes*array<>Static routes configured on the router.
createdAt*stringCreation timestamp (ISO 8601).
date-timecurl -X PATCH "https://example.com/scopes/string/network/routers/string" \ -H "Content-Type: application/json" \ -d '{}'{ "origin": "portal", "id": "string", "name": "string", "status": "ACTIVE", "statusReason": "string", "statusReasonCode": "string", "adminStateUp": true, "ha": true, "distributed": true, "externalGateway": { "externalNetwork": "string", "externalIp": "string", "snatEnabled": true }, "interfaces": [ { "id": "string", "subnet": "string", "network": "string", "fixedIp": "string", "status": "ACTIVE", "platformManaged": true } ], "routes": [ { "id": "string", "destination": "string", "nexthop": "string" } ], "createdAt": "2019-08-24T14:15:22Z"}