Slide Networks API

Everything about [networks](#model/network)

OpenAPI Specification

slide-networks-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  contact:
    email: hey@slide.tech
    name: Slide Team
    url: https://docs.slide.tech
  description: "## Introduction\nThe Slide API is organized around REST. Our API has predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.\n\n## Authentication\nWe use API tokens to authenticate requests. You can view and manage your API tokens in the [Slide Console](https://docs.slide.tech).\nWhen making HTTP requests, you'll need to include the API token in the `Authorization` header, using Bearer auth (e.g. `Authorization: Bearer YOUR_SECRET_TOKEN`).\n\nExample:\n```shell\n$ curl -H 'Authorization: Bearer YOUR_SECRET_TOKEN' 'https://api.slide.tech/v1/device'\n```\n\n## Pagination\nAll list endpoints support pagination. You can use the `limit` and `offset` query parameters to control the number of items returned and the starting index.\nList responses will include a `pagination` key that includes the `next_offset` to use for pagination.\nIf `next_offset` is not present, that indicates there are no more items to fetch.\n\nExample:\n```shell\n$ curl -H 'Authorization: Bearer YOUR_SECRET_TOKEN' \\\n    'https://api.slide.tech/v1/device?offset=0&limit=10'\n{\n    \"pagination\": {\n        \"next_offset\": 10\n    },\n    \"data\": [\n        ...\n    ]\n}\n```\n\n## Rate Limiting\nWe limit the number of requests you can make to the API within a certain time frame.\nEach API token has a pool of `50` requests. We refill this pool at a rate of `10` requests per second.\nIf you exceed the rate limit, you'll receive a response with a `429 Too Many Requests` HTTP code and a `err_rate_limit_exceeded` error code.\nPlease wait before retrying the request. We recommend you implement an exponential backoff strategy to handle rate limits.\n\n## Errors\nSlide uses conventional HTTP response codes to indicate the success or failure of an API request.\nIn general, codes in the 2xx range indicate success, codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted), and codes in the 5xx range indicate an error with Slide's servers.\n\nWe also include [error codes and details](#model/error) in the response, which may provide more context about the error.\n\nExample:\n```shell\n$ curl 'https://api.slide.tech/v1/device'\n{\n    \"codes\": [\n        \"err_missing_authentication\"\n    ],\n    \"details\": [\n        ...\n    ],\n    \"message\": \"unauthorized\"\n}\n```\n\nSome common error codes are:\n\n| Code                         | Description                                                                                                                                             |\n|------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `err_endpoint_not_found`     | Requested endpoint does not exist.                                                                                                                      |\n| `err_entity_not_found`       | Requested entity does not exist.                                                                                                                        |\n| `err_validation_error`       | Bad request due to validation error. The error `details` will contain any fields that were not valid.                                                   |\n| `err_missing_authentication` | Unauthorized due to missing API token. See [authentication](#description/authentication) for more details.                                              |\n| `err_unauthorized`           | Unauthorized due to invalid API token. You've provided an invalid API token or the API token does not have permission to access the requested resource. |\n| `err_internal_server_error`  | Something went wrong. If you retry the request and it does not succeed, you may contact us at `hey@slide.tech`.                                         |\n| `err_rate_limit_exceeded`    | Rate limit exceeded. Please wait before retrying the request. See [rate limiting](#description/rate-limiting) for more details.                         |\n\n<details>\n  <summary>Show more error codes.</summary>\n\n| Code                                | Description                                                                                                           |\n|-------------------------------------|-----------------------------------------------------------------------------------------------------------------------|\n| `err_agent_not_connected_to_device` | Agent is not connected to the device. Ensure the agent is powered on and has network connectivity.                    |\n| `err_device_not_connected_to_cloud` | Device is not connected to the cloud. Ensure the device is powered on and has network connectivity.                   |\n| `err_backup_already_running`        | A backup is already running for this agent. Please wait for the current backup to complete before starting a new one. |\n| `err_client_not_found`              | Client not found. Ensure the client ID is valid and the client exists.                                                |\n\n</details>\n\n## Eventual Consistency\n\nSlide operates an eventual consistency model, where data may not be immediately available after an operation.\nThis is due to the distributed nature of our system and the need for replication and synchronization across multiple\nsystems. Users should expect that operations may take a short period of time to propagate and become visible to all\ncomponents of the system.\n\n## Deprecations and Breaking Changes\n\n### Active Deprecations\n\n`Device.ip_addresses` and `Agent.ip_addresses` will be removed. They have been replaced by `Device.addresses` and `Agent.addresses` respectively.\n"
  title: Slide Accounts Networks API
  version: 1.34.0
servers:
- url: https://api.slide.tech
security:
- BearerAuth: []
tags:
- description: Everything about [networks](#model/network)
  name: Networks
paths:
  /v1/network:
    get:
      operationId: Networks
      parameters:
      - $ref: '#/components/parameters/QueryClientID'
      - $ref: '#/components/parameters/QueryOffset'
      - $ref: '#/components/parameters/QueryLimit'
      - description: Sort by a specific field
        in: query
        name: sort_by
        schema:
          default: id
          enum:
          - id
          type: string
      - $ref: '#/components/parameters/QuerySortAsc'
      - $ref: '#/components/parameters/QueryCreatedAfter'
      - $ref: '#/components/parameters/QueryCreatedBefore'
      responses:
        '200':
          content:
            application/json:
              schema:
                description: Paginated response
                properties:
                  data:
                    description: List of networks
                    items:
                      $ref: '#/components/schemas/Network'
                    title: Networks
                    type: array
                  pagination:
                    $ref: '#/components/schemas/Pagination'
                required:
                - pagination
                - data
                title: Paginated response
                type: object
          description: OK
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '500':
          $ref: '#/components/responses/500'
      summary: List networks
      tags:
      - Networks
    post:
      operationId: NetworkCreate
      requestBody:
        content:
          application/json:
            examples:
              bridgedNetworking:
                summary: Bridged networking configuration
                value:
                  bridge_device_id: d_0123456789ab
                  client_id: c_0123456789ab
                  name: My Bridge to LAN Network
                  type: bridge-lan
                  vlan_tag: 100
              standardNetworking:
                summary: Standard networking configuration
                value:
                  client_id: c_0123456789ab
                  dhcp: true
                  dhcp_range_end: 10.0.0.200
                  dhcp_range_start: 10.0.0.100
                  name: My Disaster Recovery Network
                  nameservers:
                  - 1.1.1.1
                  - 1.0.0.1
                  router_prefix: 10.0.0.1/24
                  type: standard
                  wg: true
            schema:
              properties:
                bridge_device_id:
                  $ref: '#/components/schemas/DeviceID'
                client_id:
                  $ref: '#/components/schemas/ClientIDOrEmpty'
                comments:
                  $ref: '#/components/schemas/NetworkComments'
                dhcp:
                  description: Whether the disaster network should have DHCP
                  example: true
                  type: boolean
                dhcp_range_end:
                  description: DHCP range end for the network
                  example: 10.0.0.200
                  type: string
                dhcp_range_start:
                  description: DHCP range start for the network
                  example: 10.0.0.100
                  type: string
                internet:
                  description: Whether the network should have Internet access
                  example: true
                  type: boolean
                name:
                  $ref: '#/components/schemas/DisasterNetworkName'
                nameservers:
                  description: List of DNS servers
                  example:
                  - 1.1.1.1
                  - 1.0.0.1
                  items:
                    type: string
                  type: array
                router_prefix:
                  description: Router IP and netmask for the network
                  example: 10.0.0.1/24
                  type: string
                type:
                  $ref: '#/components/schemas/DisasterNetworkType'
                vlan_tag:
                  description: VLAN tag for bridge-LAN networks (0 = no tagging, 1-4094 = tagged)
                  example: 100
                  type: integer
                wg:
                  description: Whether the network should have WireGuard enabled
                  example: true
                  type: boolean
                wg_prefix:
                  description: WireGuard IP address and netmask for the WireGuard network
                  example: 192.168.178.1/24
                  type: string
              required:
              - name
              - type
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Network'
          description: Created
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '409':
          $ref: '#/components/responses/409'
        '500':
          $ref: '#/components/responses/500'
      summary: Create network
      tags:
      - Networks
  /v1/network/{network_id}:
    delete:
      operationId: NetworkDelete
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      summary: Delete network
      tags:
      - Networks
    get:
      operationId: NetworkByID
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Network'
          description: OK
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      summary: Get network
      tags:
      - Networks
    patch:
      operationId: NetworkUpdate
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      requestBody:
        content:
          application/json:
            example: "{\n  \"name\": \"My Bridge to LAN Network\",\n  \"comments\": \"This is a replacement network\"\n}"
            schema:
              properties:
                client_id:
                  $ref: '#/components/schemas/ClientIDOrEmpty'
                comments:
                  $ref: '#/components/schemas/NetworkComments'
                dhcp:
                  description: Whether the disaster network should have DHCP
                  example: true
                  type: boolean
                dhcp_range_end:
                  description: DHCP range end for the network
                  example: 10.0.0.200
                  type: string
                dhcp_range_start:
                  description: DHCP range start for the network
                  example: 10.0.0.100
                  type: string
                internet:
                  description: Whether the network should have Internet access
                  example: true
                  type: boolean
                name:
                  $ref: '#/components/schemas/DisasterNetworkName'
                nameservers:
                  description: List of DNS servers
                  example:
                  - 1.1.1.1
                  - 1.0.0.1
                  items:
                    type: string
                  type: array
                router_prefix:
                  description: Router IP and netmask for the network
                  example: 10.0.0.1/24
                  type: string
                vlan_tag:
                  description: VLAN tag for bridge-LAN networks (0 = no tagging, 1-4094 = tagged)
                  example: 100
                  type: integer
                wg:
                  description: Whether the network should have WireGuard enabled
                  example: true
                  type: boolean
                wg_prefix:
                  description: WireGuard IP address and netmask for the WireGuard network
                  example: 192.168.178.1/24
                  type: string
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Network'
          description: Updated
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      summary: Update network
      tags:
      - Networks
  /v1/network/{network_id}/ipsec:
    post:
      operationId: NetworkIPSecConnCreate
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      requestBody:
        content:
          application/json:
            example: "{\n  \"name\": \"InfoSec IT, 192.168.200.0/24 subnet\",\n  \"remote_addrs\": [\"1.2.3.4\"],\n  \"remote_networks\": [\"10.0.0.0/24\", \"10.10.0.0/24\"]\n}"
            schema:
              properties:
                name:
                  description: Name of the IPsec connection
                  example: InfoSec IT Site-to-Site
                  type: string
                remote_addrs:
                  description: Public IP addresses of the partner-side of the router/firewall
                  items:
                    description: Public IP address used to connect to the Slide Cloud network's IPsec connection
                    example: 1.2.3.4
                    title: Public IP Address
                    type: string
                  type: array
                remote_networks:
                  description: List of partner-side networks that are accessible through the IPsec connection
                  items:
                    example: 10.0.0.0/24
                    title: Network in CIDR format
                    type: string
                  type: array
              required:
              - name
              - remote_addrs
              - remote_networks
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetworkIPSecConn'
          description: Created
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '409':
          $ref: '#/components/responses/409'
        '500':
          $ref: '#/components/responses/500'
      summary: Create IPsec connection
      tags:
      - Networks
  /v1/network/{network_id}/ipsec/{ipsec_id}:
    delete:
      operationId: NetworkIPSecConnDelete
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      - $ref: '#/components/parameters/PathIPSecID'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      summary: Delete IPsec connection
      tags:
      - Networks
    patch:
      operationId: NetworkIPSecConnUpdate
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      - $ref: '#/components/parameters/PathIPSecID'
      requestBody:
        content:
          application/json:
            examples:
              updateName:
                summary: Update name of the IPsec connection
                value:
                  name: InfoSec IT Site-to-Site
              updateRemoteAddrs:
                summary: Update remote IP addresses of the IPsec connection
                value:
                  remote_addrs:
                  - 10.0.0.0/24
                  - 10.20.0.0/24
            schema:
              properties:
                name:
                  description: Name of the IPsec connection
                  example: tcp
                  type: string
                remote_addrs:
                  description: Public IP addresses of the partner-side of the router/firewall
                  items:
                    description: Public IP address used to connect to the Slide Cloud network's IPsec connection
                    example: 1.2.3.4
                    title: Public IP Address
                    type: string
                  type: array
                remote_networks:
                  description: List of partner-side networks that are accessible through the IPsec connection
                  items:
                    example: 10.0.0.0/24
                    title: Network in CIDR format
                    type: string
                  type: array
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetworkIPSecConn'
          description: OK
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '409':
          $ref: '#/components/responses/409'
        '500':
          $ref: '#/components/responses/500'
      summary: Update IPsec connection
      tags:
      - Networks
  /v1/network/{network_id}/port-forward:
    post:
      operationId: NetworkPortForwardCreate
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      requestBody:
        content:
          application/json:
            example: "{\n  \"proto\": \"tcp\",\n  \"dest\": \"10.0.0.100:25881\"\n}"
            schema:
              properties:
                dest:
                  description: Destination IP address and port pair
                  example: 10.0.0.100:80
                  type: string
                proto:
                  description: Protocol, tcp or udp
                  example: tcp
                  type: string
              required:
              - proto
              - dest
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetworkPortForward'
          description: Created
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      summary: Create port forward
      tags:
      - Networks
  /v1/network/{network_id}/port-forward/{port_forward_id}:
    delete:
      operationId: NetworkPortForwardDelete
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      - $ref: '#/components/parameters/PathPortForwardID'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      summary: Delete port forward
      tags:
      - Networks
    patch:
      operationId: NetworkPortForwardUpdate
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      - $ref: '#/components/parameters/PathPortForwardID'
      requestBody:
        content:
          application/json:
            example: "{\n  \"proto\": \"tcp\",\n  \"dest\": \"10.0.0.100:25881\"\n}"
            schema:
              properties:
                dest:
                  description: Destination IP address and port pair
                  example: 10.0.0.100:80
                  type: string
                proto:
                  description: Protocol, tcp or udp
                  example: tcp
                  type: string
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetworkPortForward'
          description: Updated
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      summary: Update port forward
      tags:
      - Networks
  /v1/network/{network_id}/wg-peer:
    post:
      operationId: NetworkWGPeerCreate
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      requestBody:
        content:
          application/json:
            example: "{\n  \"peer_name\": \"My Bridge to LAN Network\",\n  \"remote_networks\": [\"10.80.0.0/24\", \"10.80.1.0/24\"]\n}"
            schema:
              properties:
                peer_name:
                  description: Name of the WireGuard client
                  example: My PC
                  type: string
                remote_networks:
                  $ref: '#/components/schemas/RemoteNetworks'
              required:
              - peer_name
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetworkWGPeer'
          description: Created
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      summary: Create WireGuard peer
      tags:
      - Networks
  /v1/network/{network_id}/wg-peer/{wg_peer_id}:
    delete:
      operationId: NetworkWGPeerDelete
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      - $ref: '#/components/parameters/PathWGPeerID'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      summary: Delete WireGuard peer
      tags:
      - Networks
    patch:
      operationId: NetworkWGPeerUpdate
      parameters:
      - $ref: '#/components/parameters/PathNetworkID'
      - $ref: '#/components/parameters/PathWGPeerID'
      requestBody:
        content:
          application/json:
            example: "{\n  \"peer_name\": \"My Bridge to LAN Network\",\n  \"remote_networks\": [\"10.80.0.0/24\", \"10.80.1.0/24\"]\n}"
            schema:
              properties:
                peer_name:
                  description: Name of the WireGuard client
                  example: My PC
                  type: string
                remote_networks:
                  $ref: '#/components/schemas/RemoteNetworks'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NetworkWGPeer'
          description: Updated
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '500':
          $ref: '#/components/responses/500'
      summary: Update WireGuard peer
      tags:
      - Networks
components:
  schemas:
    ClientID:
      description: ID of a client
      example: c_0123456789ab
      pattern: ^c_[a-z0-9]{12}$
      type: string
    DeviceID:
      description: ID of a device
      example: d_0123456789ab
      pattern: ^d_[a-z0-9]{12}$
      type: string
    NetworkWGPeer:
      description: NetworkWGPeer object that represents a WireGuard client.
      properties:
        peer_name:
          description: Name of the WireGuard client
          example: My PC
          type: string
        remote_networks:
          $ref: '#/components/schemas/RemoteNetworks'
        wg_address:
          description: WireGuard address of this peer, part of the network defined in wg_prefix
          example: 10.0.0.100
          type: string
        wg_endpoint:
          description: Address of the WireGuard endpoint that this peer connects to
          example: use1-prod-gateway-1.slide.tech:51820
          type: string
        wg_peer_id:
          $ref: '#/components/schemas/WGPeerID'
        wg_private_key:
          description: WireGuard private key of this peer
          example: INRPOJHOzuMiRzim2tzzU2OU7Z3jNOIS4HRVA32NzUY
          type: string
        wg_public_key:
          description: WireGuard public key of this peer
          example: buRAPDIX5SMlPlzLsLO8WVaWe+1+FXf+TKk26e4Vkm8=
          type: string
      required:
      - wg_peer_id
      - peer_name
      - wg_public_key
      - wg_private_key
      - wg_address
      - wg_endpoint
      - remote_networks
      type: object
    NetworkID:
      description: ID of an network
      example: net_012345
      pattern: ^net_[a-z0-9]{6}$
      type: string
    PortForwardID:
      description: ID of a port forward definition
      example: pfw_0123456789ab
      pattern: ^pfw_[a-z0-9]{12}$
      type: string
    DisasterNetworkName:
      description: Name of the network
      example: Bridge to LAN Network
      maxLength: 128
      minLength: 1
      type: string
    DisasterNetworkType:
      description: Network type of the disaster network
      enum:
      - standard
      - bridge-lan
      example: standard
      type: string
    NetworkPortForward:
      description: NetworkPortForward object that represents a port forwarding.
      properties:
        dest:
          description: Destination IP address and port pair
          example: 10.0.0.100:80
          type: string
        endpoint:
          description: Public host:port pair of the public gateway of the port forward
          example: use1-prod-gateway-1.slide.tech:25881
          pattern: ^[0-9a-zA-Z.-]+:[0-9]+$
          type: string
        port:
          description: Listen port number on the public gateway
          example: 25881
          type: integer
        port_forward_id:
          $ref: '#/components/schemas/PortForwardID'
        proto:
          description: Protocol, tcp or udp
          example: tcp
          type: string
      required:
      - port_forward_id
      - proto
      - port
      - dest
      type: object
    NetworkIPSecConn:
      description: NetworkIPsecConn object that represents an IPsec connection into a network.
      properties:
        ipsec_id:
          $ref: '#/components/schemas/IPSecID'
        local_addrs:
          description: Public IP addresses of the Slide Cloud gateway that manages the IPsec connection
          items:
            description: Public IP address of the Slide Cloud gateway
            example: 1.2.3.4
            title: Public IP Address
            type: string
          type: array
        local_id:
          description: Identifier for the Slide Cloud-side of the IPsec connection
          example: ipsec_0123456789ab_slide
          type: string
        local_networks:
          description: List of Slide-side networks that are accessible through the IPsec connection
          items:
            example: 10.0.0.0/24
            title: Network in CIDR format
            type: string
          type: array
        name:
          description: Name of the IPsec connection
          example: Dental Associates, Main Office
          type: string
        psk:
          description: Pre-shared key for the IPsec connection
          example: buRAPDIX5SMlPlzLsLO8WVaWeFXam1Aa
          type: string
        remote_addrs:
          description: Public IP addresses of the partner-side of the router/firewall
          items:
            description: Public IP address used to connect to the Slide Cloud network's IPsec connection
            example: 1.2.3.4
            title: Public IP Address
            type: string
          type: array
        remote_id:
          description: Identifier for the partner-side of the IPsec connection
          example: ipsec_0123456789ab_partner
          type: string
        remote_networks:
          description: List of partner-side networks that are accessible through the IPsec connection
          items:
            example: 10.0.0.0/24
            title: Network in CIDR format
            type: string
          type: array
      required:
      - ipsec_id
      - name
      - psk
      - local_id
      - local_addrs
      - local_networks
      - remote_id
      - remote_addrs
      - remote_networks
      type: object
    ClientIDOrEmpty:
      description: ID of a client or an empty string
      example: c_0123456789ab
      pattern: ^(c_[a-z0-9]{12}|)$
      type: string
    IPSecID:
      description: ID of an IPsec connection
      example: ipsec_0123456789ab
      pattern: ^ipsec_[a-z0-9]{12}$
      type: string
    WGPeerID:
      description: ID of a WireGuard peer
      example: wgp_0123456789ab
      pattern: ^wgp_[a-z0-9]{12}$
      type: string
    Network:
      description: Network object that represents a network.
      properties:
        bridge_device_id:
          $ref: '#/components/schemas/DeviceID'
        client_id:
          $ref: '#/components/schemas/ClientID'
        comments:
          description: Comments about the network
          example: This is a test network
          type: string
        connected_virt_ids:
          description: List of the virtual machines connected to the network.
          items:
            $ref: '#/components/schemas/VirtID'
          type: array
        dhcp:
          description: Whether the disaster network should have DHCP
          example: true
          type: boolean
        dhcp_range_end:
          description: DHCP range end for the network
          example: 10.0.0.200
          type: string
        dhcp_range_start:
          description: DHCP range start for the network
          example: 10.0.0.100
          type: strin

# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/slide/refs/heads/main/openapi/slide-networks-api-openapi.yml