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.
Get one VPN service
Returns one VPN service with its router, external gateway address, administrative state, neutron's status and statusReason, this record's provisioning state and the site connections terminating on it (usedBy). Validation: vpnServiceId must reference an existing, non-deleted service in the scope (404). Async & state: Synchronous read; no state change. Errors: 401; 403; 404; 500. Idempotency/Concurrency: Safe; carries a weak ETag for read-then-If-Match.
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.
vpnServiceId*stringIdentifier of the VPN service within the scope.
The VPN service.
application/json- response
One VPN service plus the site connections terminating on it.
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*stringPlatform identifier of the VPN service.
name*stringService display name, unique within the scope.
^[^\p{C}\p{Z}\x{10000}-\x{10FFFF}](?:[^\p{C}\p{Zl}\p{Zp}\x{10000}-\x{10FFFF}]*[^\p{C}\p{Z}\x{10000}-\x{10FFFF}])?$1 <= length <= 255description*stringFree-text description; empty string when unset.
routerId*stringIdentifier of the router this service terminates tunnels on; the router must have an external gateway.
routerName*stringDisplay name of that router, resolved from the networking read model.
externalV4Ip?|The router's external gateway IPv4 address, read from neutron's external_v4_ip - the tunnel's local endpoint, and the address the remote peer must be configured with. Null until neutron has reported it.
adminStateUp*booleanAdministrative state of the service; false brings every tunnel on it down.
status?|nullneutron's own status for the service, verbatim. Null until the provider has reported one. A freshly created service stays PENDING_CREATE until the first site connection attaches - that is neutron's behaviour, not a stalled record.
statusReason?|The provider's own message from the last failed write; null when the last write succeeded.
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.
provisioningState*stringLifecycle state of this platform record.
"PENDING_CREATE""PENDING_UPDATE""PENDING_DELETE""READY""ERROR"providerId?|neutron's UUID for this service; null until the worker has created it.
usedByCount*integerHow many IPsec site connections terminate on this service. Non-zero means a delete will be refused with 409 DEPENDENCY_BLOCKED.
usedBy*array<>The IPsec site connections terminating on this service. While this list is non-empty the service cannot be deleted.
curl -X GET "https://example.com/scopes/string/network/vpn/services/string"{ "origin": "portal", "id": "string", "name": "string", "description": "string", "routerId": "string", "routerName": "string", "externalV4Ip": "string", "adminStateUp": true, "status": "ACTIVE", "statusReason": "string", "statusReasonCode": "string", "provisioningState": "PENDING_CREATE", "providerId": "string", "usedByCount": 0, "usedBy": [ { "id": "string", "name": "string" } ]}