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.

Get security group detail

GET
/scopes/{scopeId}/network/security-groups/{securityGroupId}

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.

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.

securityGroupId*string

Identifier of the security group (e.g. sg-web).

Response Body

The security group detail read model, including all embedded rules.

application/json
  1. response

A stateful virtual firewall grouping rules that are enforced on every attached port/NIC.

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

Security group identifier (e.g. sg-web).

name*string

Unique group name within the project; lowercase letters, numbers and hyphens, up to 63 chars.

Match^[a-z0-9-]{1,63}$
description*string

Free-text description of the group's purpose.

rules*array<>

The complete rule set of the group; inbound/outbound tabs filter on direction.

attachedPorts*integer

Number 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*string

Creation timestamp (ISO 8601).

Formatdate-time
curl -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"}