Oxide Experimental API

Experimental, unstable interfaces, primarily for use by Oxide personnel

Operations 24

GET /experimental/v1/probes List instrumentation probes #
POST /experimental/v1/probes Create instrumentation probe #
GET /experimental/v1/probes/{probe} View instrumentation probe #
DELETE /experimental/v1/probes/{probe} Delete instrumentation probe #
GET /v1/affinity-groups List affinity groups #
POST /v1/affinity-groups Create affinity group #
GET /v1/affinity-groups/{affinity_group} Fetch affinity group #
PUT /v1/affinity-groups/{affinity_group} Update affinity group #
DELETE /v1/affinity-groups/{affinity_group} Delete affinity group #
GET /v1/affinity-groups/{affinity_group}/members List affinity group members #
GET /v1/affinity-groups/{affinity_group}/members/instance/{instance} Fetch affinity group member #
POST /v1/affinity-groups/{affinity_group}/members/instance/{instance} Add member to affinity group #
DELETE /v1/affinity-groups/{affinity_group}/members/instance/{instance} Remove member from affinity group #
GET /v1/instances/{instance}/affinity-groups List affinity groups containing instance #
GET /v1/instances/{instance}/multicast-groups List multicast groups for an instance #
PUT /v1/instances/{instance}/multicast-groups/{multicast_group} Join multicast group by name, IP address, or UUID #
DELETE /v1/instances/{instance}/multicast-groups/{multicast_group} Leave multicast group by name, IP address, or UUID #
GET /v1/multicast-groups List multicast groups #
GET /v1/multicast-groups/{multicast_group} Fetch multicast group #
GET /v1/multicast-groups/{multicast_group}/members List members of multicast group #
GET /v1/system/hardware/racks/{rack_id}/membership Fetch rack cluster membership status #
POST /v1/system/hardware/racks/{rack_id}/membership/abort Abort the latest rack membership change #
POST /v1/system/hardware/racks/{rack_id}/membership/add Add new sleds to rack membership #
POST /v1/timeseries/query Run project-scoped timeseries query #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/oxide-computer-experimental-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

oxide-computer-experimental-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Oxide Region Experimental API
  description: API for interacting with the Oxide control plane
  contact:
    url: https://oxide.computer
    email: api@oxide.computer
  version: 2026081901.0.0
tags:
- name: experimental
  description: Experimental, unstable interfaces, primarily for use by Oxide personnel
  externalDocs:
    url: http://docs.oxide.computer/api/experimental
paths:
  /experimental/v1/probes:
    get:
      tags:
      - experimental
      summary: List instrumentation probes
      operationId: probe_list
      parameters:
      - in: query
        name: limit
        description: Maximum number of items returned by a single call
        schema:
          type:
          - integer
          - 'null'
          format: uint32
          minimum: 1
      - in: query
        name: page_token
        description: Token returned by previous call to retrieve the subsequent page
        schema:
          type:
          - string
          - 'null'
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: query
        name: sort_by
        schema:
          $ref: '#/components/schemas/NameOrIdSortMode'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProbeInfoResultsPage'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
      x-dropshot-pagination:
        required:
        - project
    post:
      tags:
      - experimental
      summary: Create instrumentation probe
      operationId: probe_create
      parameters:
      - in: query
        name: project
        description: Name or ID of the project
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProbeCreate'
        required: true
      responses:
        '201':
          description: successful creation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Probe'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /experimental/v1/probes/{probe}:
    get:
      tags:
      - experimental
      summary: View instrumentation probe
      operationId: probe_view
      parameters:
      - in: path
        name: probe
        description: Name or ID of the probe
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: query
        name: project
        description: Name or ID of the project
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProbeInfo'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
    delete:
      tags:
      - experimental
      summary: Delete instrumentation probe
      operationId: probe_delete
      parameters:
      - in: query
        name: project
        description: Name or ID of the project
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: probe
        description: Name or ID of the probe
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      responses:
        '204':
          description: successful deletion
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /v1/affinity-groups:
    get:
      tags:
      - experimental
      summary: List affinity groups
      operationId: affinity_group_list
      parameters:
      - in: query
        name: limit
        description: Maximum number of items returned by a single call
        schema:
          type:
          - integer
          - 'null'
          format: uint32
          minimum: 1
      - in: query
        name: page_token
        description: Token returned by previous call to retrieve the subsequent page
        schema:
          type:
          - string
          - 'null'
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: query
        name: sort_by
        schema:
          $ref: '#/components/schemas/NameOrIdSortMode'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffinityGroupResultsPage'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
      x-dropshot-pagination:
        required:
        - project
    post:
      tags:
      - experimental
      summary: Create affinity group
      operationId: affinity_group_create
      parameters:
      - in: query
        name: project
        description: Name or ID of the project
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AffinityGroupCreate'
        required: true
      responses:
        '201':
          description: successful creation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffinityGroup'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /v1/affinity-groups/{affinity_group}:
    get:
      tags:
      - experimental
      summary: Fetch affinity group
      operationId: affinity_group_view
      parameters:
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: affinity_group
        description: Name or ID of the affinity group
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffinityGroup'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
    put:
      tags:
      - experimental
      summary: Update affinity group
      operationId: affinity_group_update
      parameters:
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: affinity_group
        description: Name or ID of the affinity group
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AffinityGroupUpdate'
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffinityGroup'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
    delete:
      tags:
      - experimental
      summary: Delete affinity group
      operationId: affinity_group_delete
      parameters:
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: affinity_group
        description: Name or ID of the affinity group
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      responses:
        '204':
          description: successful deletion
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /v1/affinity-groups/{affinity_group}/members:
    get:
      tags:
      - experimental
      summary: List affinity group members
      operationId: affinity_group_member_list
      parameters:
      - in: query
        name: limit
        description: Maximum number of items returned by a single call
        schema:
          type:
          - integer
          - 'null'
          format: uint32
          minimum: 1
      - in: query
        name: page_token
        description: Token returned by previous call to retrieve the subsequent page
        schema:
          type:
          - string
          - 'null'
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: query
        name: sort_by
        schema:
          $ref: '#/components/schemas/NameOrIdSortMode'
      - in: path
        name: affinity_group
        description: Name or ID of the affinity group
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffinityGroupMemberResultsPage'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
      x-dropshot-pagination:
        required: []
  /v1/affinity-groups/{affinity_group}/members/instance/{instance}:
    get:
      tags:
      - experimental
      summary: Fetch affinity group member
      operationId: affinity_group_member_instance_view
      parameters:
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: affinity_group
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: instance
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffinityGroupMember'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
    post:
      tags:
      - experimental
      summary: Add member to affinity group
      operationId: affinity_group_member_instance_add
      parameters:
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: affinity_group
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: instance
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      responses:
        '201':
          description: successful creation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffinityGroupMember'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
    delete:
      tags:
      - experimental
      summary: Remove member from affinity group
      operationId: affinity_group_member_instance_delete
      parameters:
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: affinity_group
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: instance
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      responses:
        '204':
          description: successful deletion
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /v1/instances/{instance}/affinity-groups:
    get:
      tags:
      - experimental
      summary: List affinity groups containing instance
      operationId: instance_affinity_group_list
      parameters:
      - in: query
        name: limit
        description: Maximum number of items returned by a single call
        schema:
          type:
          - integer
          - 'null'
          format: uint32
          minimum: 1
      - in: query
        name: page_token
        description: Token returned by previous call to retrieve the subsequent page
        schema:
          type:
          - string
          - 'null'
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: query
        name: sort_by
        schema:
          $ref: '#/components/schemas/NameOrIdSortMode'
      - in: path
        name: instance
        description: Name or ID of the instance
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AffinityGroupResultsPage'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
      x-dropshot-pagination:
        required: []
  /v1/instances/{instance}/multicast-groups:
    get:
      tags:
      - experimental
      summary: List multicast groups for an instance
      operationId: instance_multicast_group_list
      parameters:
      - in: query
        name: limit
        description: Maximum number of items returned by a single call
        schema:
          type:
          - integer
          - 'null'
          format: uint32
          minimum: 1
      - in: query
        name: page_token
        description: Token returned by previous call to retrieve the subsequent page
        schema:
          type:
          - string
          - 'null'
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: query
        name: sort_by
        schema:
          $ref: '#/components/schemas/IdSortMode'
      - in: path
        name: instance
        description: Name or ID of the instance
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MulticastGroupMemberResultsPage'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
      x-dropshot-pagination:
        required: []
  /v1/instances/{instance}/multicast-groups/{multicast_group}:
    put:
      tags:
      - experimental
      summary: Join multicast group by name, IP address, or UUID
      description: 'Groups can be referenced by name, IP address, or UUID. If the group doesn''t exist, it''s implicitly created with an auto-allocated IP from a multicast pool linked to the caller''s silo. When referencing by UUID, the group must already exist.


        Source IPs are optional for ASM addresses but required for SSM addresses (232.0.0.0/8 for IPv4, ff3x::/32 for IPv6). Duplicate IPs in the request are automatically deduplicated, with a maximum of 64 source IPs allowed.'
      operationId: instance_multicast_group_join
      parameters:
      - in: path
        name: instance
        description: Name or ID of the instance
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: multicast_group
        description: Name, ID, or IP address of the multicast group
        required: true
        schema:
          $ref: '#/components/schemas/MulticastGroupIdentifier'
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InstanceMulticastGroupJoin'
        required: true
      responses:
        '201':
          description: successful creation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MulticastGroupMember'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
    delete:
      tags:
      - experimental
      summary: Leave multicast group by name, IP address, or UUID
      operationId: instance_multicast_group_leave
      parameters:
      - in: path
        name: instance
        description: Name or ID of the instance
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      - in: path
        name: multicast_group
        description: Name, ID, or IP address of the multicast group
        required: true
        schema:
          $ref: '#/components/schemas/MulticastGroupIdentifier'
      - in: query
        name: project
        description: Name or ID of the project
        schema:
          $ref: '#/components/schemas/NameOrId'
      responses:
        '204':
          description: successful deletion
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /v1/multicast-groups:
    get:
      tags:
      - experimental
      summary: List multicast groups
      operationId: multicast_group_list
      parameters:
      - in: query
        name: limit
        description: Maximum number of items returned by a single call
        schema:
          type:
          - integer
          - 'null'
          format: uint32
          minimum: 1
      - in: query
        name: page_token
        description: Token returned by previous call to retrieve the subsequent page
        schema:
          type:
          - string
          - 'null'
      - in: query
        name: sort_by
        schema:
          $ref: '#/components/schemas/NameOrIdSortMode'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MulticastGroupResultsPage'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
      x-dropshot-pagination:
        required: []
  /v1/multicast-groups/{multicast_group}:
    get:
      tags:
      - experimental
      summary: Fetch multicast group
      description: The group can be specified by name, UUID, or multicast IP address. (e.g., "224.1.2.3" or "ff38::1").
      operationId: multicast_group_view
      parameters:
      - in: path
        name: multicast_group
        description: Name, ID, or IP address of the multicast group
        required: true
        schema:
          $ref: '#/components/schemas/MulticastGroupIdentifier'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MulticastGroup'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /v1/multicast-groups/{multicast_group}/members:
    get:
      tags:
      - experimental
      summary: List members of multicast group
      description: The group can be specified by name, UUID, or multicast IP address.
      operationId: multicast_group_member_list
      parameters:
      - in: path
        name: multicast_group
        description: Name, ID, or IP address of the multicast group
        required: true
        schema:
          $ref: '#/components/schemas/MulticastGroupIdentifier'
      - in: query
        name: limit
        description: Maximum number of items returned by a single call
        schema:
          type:
          - integer
          - 'null'
          format: uint32
          minimum: 1
      - in: query
        name: page_token
        description: Token returned by previous call to retrieve the subsequent page
        schema:
          type:
          - string
          - 'null'
      - in: query
        name: sort_by
        schema:
          $ref: '#/components/schemas/IdSortMode'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MulticastGroupMemberResultsPage'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
      x-dropshot-pagination:
        required: []
  /v1/system/hardware/racks/{rack_id}/membership:
    get:
      tags:
      - experimental
      summary: Fetch rack cluster membership status
      description: Returns the status for the most recent change, or a specific version if one is specified.
      operationId: rack_membership_status
      parameters:
      - in: path
        name: rack_id
        required: true
        schema:
          type: string
          format: uuid
      - in: query
        name: version
        schema:
          $ref: '#/components/schemas/RackMembershipVersion'
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RackMembershipStatus'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /v1/system/hardware/racks/{rack_id}/membership/abort:
    post:
      tags:
      - experimental
      summary: Abort the latest rack membership change
      description: This operation is synchronous. Upon returning from the API call, a success response indicates that the prior membership change was aborted. An error response indicates that there is no active membership change in progress (previous changes have completed) or that the current membership change could not be aborted.
      operationId: rack_membership_abort
      parameters:
      - in: path
        name: rack_id
        description: ID of the rack
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RackMembershipStatus'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /v1/system/hardware/racks/{rack_id}/membership/add:
    post:
      tags:
      - experimental
      summary: Add new sleds to rack membership
      operationId: rack_membership_add_sleds
      parameters:
      - in: path
        name: rack_id
        description: ID of the rack
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RackMembershipAddSledsRequest'
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RackMembershipStatus'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
  /v1/timeseries/query:
    post:
      tags:
      - experimental
      summary: Run project-scoped timeseries query
      description: Queries are written in OxQL. Project must be specified by name or ID in URL query parameter. The OxQL query will only return timeseries data from the specified project.
      operationId: timeseries_query
      parameters:
      - in: query
        name: project
        description: Name or ID of the project
        required: true
        schema:
          $ref: '#/components/schemas/NameOrId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TimeseriesQuery'
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OxqlQueryResult'
        4XX:
          $ref: '#/components/responses/Error'
        5XX:
          $ref: '#/components/responses/Error'
components:
  schemas:
    AffinityGroup:
      description: View of an Affinity Group
      type: object
      properties:
        description:
          description: Human-readable free-form text about a resource
          type: string
        failure_domain:
          $ref: '#/components/schemas/FailureDomain'
        id:
          description: Unique, immutable, system-controlled identifier for each resource
          type: string
          format: uuid
        name:
          description: Unique, mutable, user-controlled identifier for each resource
          allOf:
          - $ref: '#/components/schemas/Name'
        policy:
          $ref: '#/components/schemas/AffinityPolicy'
        project_id:
          type: string
          format: uuid
        time_created:
          description: Timestamp when this resource was created
          type: string
          format: date-time
        time_modified:
          description: Timestamp when this resource was last modified
          type: string
          format: date-time
      required:
      - description
      - failure_domain
      - id
      - name
      - policy
      - project_id
      - time_created
      - time_modified
    ProbeInfo:
      type: object
      properties:
        external_ips:
          type: array
          items:
            $ref: '#/components/schemas/ProbeExternalIp'
        id:
          type: string
          format: uuid
        interface:
          $ref: '#/components/schemas/NetworkInterface'
        name:
          $ref: '#/components/schemas/Name'
        sled:
          type: string
          format: uuid
      required:
      - external_ips
      - id
      - interface
      - name
      - sled
    BaseboardId:
      description: 'A representation of a Baseboard ID as used in the inventory subsystem.


        This type is essentially the same as a `Baseboard` except it doesn''t have a revision or HW type (Gimlet, PC, Unknown).'
      type: object
      properties:
        part_number:
          description: Oxide Part Number
          type: string
        serial_number:
          description: Serial number (unique for a given part number)
          type: string
      required:
      - part_number
      - serial_number
    NetworkInterfaceKind:
      description: The type of network interface
      oneOf:
      - description: A vNIC attached to a guest instance
        type: object
        properties:
          id:
            type: string
            format: uuid
          type:
            type: string
            enum:
            - instance
        required:
        - id
        - type
      - description: A vNIC associated with an internal service
        type: object
        properties:
          id:
            type: string
            format: uuid
          type:
            type: string
            enum:
            - service
        required:
        - id
        - type
      - description: A vNIC associated with a probe
        type: object
        properties:
          id:
            type: string
            format: uuid
          type:
            type: string
            enum:
            - probe
        required:
        - id
        - type
    Values:
      description: A single list of values, for one dimension of a timeseries.
      type: object
      properties:
        metric_type:
          description: The type of this metric.
          allOf:
          - $ref: '#/components/schemas/MetricType'
        values:
          description: The data values.
          allOf:
          - $ref: '#/components/schemas/ValueArray'
      required:
      - metric_type
      - values
    FailureDomain:
      description: Describes the scope of affinity for the purposes of co-location.
      oneOf:
      - description: Instances are considered co-located if they are on the same sled
        type: string
        enum:
        - sled
    NetworkInterface:
      description: Information required to construct a virtual network interface
      type: object
      properties:
        id:
          type: string
          format: uuid
        ip_config:
          $ref: '#/components/schemas/PrivateIpConfig'
        kind:
          $ref: '#/components/schemas/NetworkInterfaceKind'
        mac:
          $ref: '#/components/schemas/MacAddr'
        name:
          $ref: '#/components/schemas/Name'
        primary:
          type: boolean
        slot:
          type: integer
          format: uint8
          minimum: 0
        vni:
          $ref: '#/components/schemas/Vni'
      required:
      - id
      - ip_config
      - kind
      - mac
      - name
      - primary
      - slot
      - vni
    ProbeCreate:
      description: Create time parameters for probes.
      type: object
      properties:
        description:
          type: string
        name:
          $ref: '#/components/schemas/Name'
        pool_selector:
          description: Pool to allocate from.
          default:
            ip_version: null
            type: auto
          allOf:
          - $ref: '#/components/schemas/PoolSelector'
        sled:
          type: string
          format: uuid
      required:
      - description
      - name
      - sled
    MulticastGroupMember:
      description: View of a Multicast Group Member (instance belonging to a multicast group)
      type: object
      properties:
        description:
          description: Human-readable free-form text about a resource
          type: string
        id:
          description: Unique, immutable, system-controlled identifier for each resource
          type: string
          format: uuid
        instance_id:
          description: The ID of the instance that is a member of this group.
          type: string
          format: uuid
        multicast_group_id:
          description: The ID of the multicast group this member belongs to.
          type: string
          format: uuid
        multicast_ip:
          description: The multicast IP address of the group this member belongs to.
          type: string
          format: ip
        name:
          description: Unique, mutable, user-controlled identifier for each resource
          allOf:
          - $ref: '#/components/schemas/Name'
        source_ips:
          description: 'Source IP addresses for this member''s multicast subscription.


            - **ASM**: Sources are optional. Empty array means any source is allowed. Non-empty array enables source filtering (IGMPv3/MLDv2). - **SSM**: Sources are required for SSM addresses (232/8, ff3x::/32).'
          type: array
          items:
            type: string
            format: ip
        state:
          description: Current state of the multicast group membership.
          type: string
        time_created:
          description: Timestamp when this resource was created
          type: string
          format: date-time
        time_modified:
          description: Timestamp when this resource was last modified
          type: string
          format: date-time
      required:
      - description
      - id
      - instance_id
      - multicast_group_id
      - multicast_ip
      - name
      - source_ips
      - state
      - time_created
      - time_modified
    PoolSelector:
      description: Specify which IP or external subnet pool to allocate from.
      oneOf

# --- truncated at 32 KB (61 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/oxide-computer/refs/heads/main/openapi/oxide-computer-experimental-api-openapi.yml