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 security group detail
Retrieves a single security group with its full read model for the security group detail page: identity
(id, name, description, createdAt), the complete embedded rules array — each rule exposing direction,
ether type, protocol, port range, source/dest CIDR or remote group reference and description — and the
attachedPorts count used by the Essentials panel and the "N attached" header metadata. The detail view
derives inbound/outbound tab contents by filtering rules on direction; no extra round-trip is needed.
Validation: securityGroupId must reference an existing, non-deleted security group inside the scope →
404 NOT_FOUND otherwise; the caller must hold at least reader on the scope → 403.
Async & state: Synchronous read; no state change. The detail view subscribes to resource.updated SSE
frames for this security group and merges status/rule patches into the cached entity.
Errors: 401 unauthenticated; 403 caller has no role on the scope; 404 unknown or soft-deleted security
group; 500 on read-model failure.
Idempotency/Concurrency: Safe, cacheable; no idempotency key required. The response carries an ETag the
UI presents as If-Match on subsequent PATCH/DELETE calls.
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.
securityGroupId*stringIdentifier of the security group (e.g. sg-web).
The security group detail read model, including all embedded rules.
application/json- response
A stateful virtual firewall grouping rules that are enforced on every attached port/NIC.
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*stringSecurity group identifier (e.g. sg-web).
name*stringUnique group name within the project; lowercase letters, numbers and hyphens, up to 63 chars.
^[a-z0-9-]{1,63}$description*stringFree-text description of the group's purpose.
rules*array<>The complete rule set of the group; inbound/outbound tabs filter on direction.
attachedPorts*integerNumber of ports/NICs currently attached to (enforcing) this group, DERIVED from the attached port set on every read — so a detach lowers it immediately and a deleted port stops counting. This is the number a "is anything still using this group?" decision rests on, which is why it is not a stored counter (it was one, was written 0 at create and maintained by nothing, and reported 0 for a group filtering a running VM —).
createdAt*stringCreation timestamp (ISO 8601).
date-timecurl -X GET "https://example.com/scopes/string/network/security-groups/string"{ "origin": "portal", "id": "string", "name": "string", "description": "string", "rules": [ { "id": "string", "direction": "ingress", "etherType": "IPv4", "protocol": "tcp", "portMin": 0, "portMax": 0, "remoteCidr": "string", "remoteGroup": "string", "description": "string" } ], "attachedPorts": 0, "createdAt": "2019-08-24T14:15:22Z"}