List network interfaces in a project.
curl --request GET \ --url https://stratum.example.com/v1/projects/example/network/network-interfaces \ --header 'Authorization: Bearer <token>'Optional ?subnetId= filter narrows to a subnet; ?instanceId=
narrows to NICs attached to a specific instance;
?securityGroupId= returns only NICs that have that SG
attached (backs the SG detail page’s “used by” reverse-
reference in the web UI).
Every returned NIC has its securityGroupIds hydrated — the
list payload matches the shape of the per-NIC GET so
clients don’t need a second round-trip per NIC.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”NICs.
object
object
Server-generated QEMU 52:54:00:XX:XX:XX MAC.
IPv4 address allocated by Stratum IPAM.
Reserved for 2.x multi-IP NICs.
0-or-1 floating IPs per NIC at v1.
Embedded on a NIC when state is in-use. instanceId is the
opaque Compute-side identifier; deviceIndex orders the NIC
within the instance’s domain XML.
object
What kind of port this is. interface is a plain instance-attachable NIC; load-balancer marks a Stratum-owned LB data-plane port whose owning LB is in ownerId; nat-gateway is reserved; database is a Stratum Database endpoint port in your subnet whose owning db instance is in ownerId — it carries your security groups and is released with the instance. System-set — never accepted on create.
The owning resource for non-interface kinds (e.g. the lb-... id for a load-balancer data-plane port). Absent on plain interfaces — instance attachments stay on attachment.instanceId.
AWS-style anti-spoofing; drop packets not addressed to this NIC’s IP.
AWS-shape resource tags. Freeform UTF-8 keys (1-128 bytes, no
leading/trailing whitespace) mapped to freeform UTF-8 values
(0-256 bytes). Max 50 tags per resource. Reserved prefixes
(stratum.dev/, stratum.platform_health., stratum:,
aws:) return 400 RESERVED_NAMESPACE on customer input.
PATCH replaces the whole map..
object
True when the server had more rows than it returned. The response is a valid prefix of the result, not the whole of it.
Without this flag a client at the server’s row ceiling receives a full
page and no nextPageToken, which means “this is
the complete set” — so data it never saw would be indistinguishable
from data that does not exist.
It does not imply a cursor exists. These queries do not all sort on a total order, so a resumable token cannot be minted for them yet. The remedy is to narrow the request (a filter, or a tighter scope), not to page.
Example
{ "items": [ { "interfaceType": "interface", "state": "creating" } ]}