Forward Networks Synthetic Devices API
Model a network’s internet connections, intranets, L2VPNs, L3VPNs, WAN circuits, and encryptors
Model a network’s internet connections, intranets, L2VPNs, L3VPNs, WAN circuits, and encryptors
openapi: 3.2.0
info:
title: 'Forward Networks: Complete Aliases Synthetic Devices API'
description: Model and verify networks
contact:
email: support@forwardnetworks.com
license:
name: MIT
url: https://spdx.org/licenses/MIT
version: '26.6'
servers:
- url: /api
tags:
- name: Synthetic Devices
description: Model a network’s internet connections, intranets, L2VPNs, L3VPNs, WAN circuits, and encryptors
summary: Synthetic Devices
paths:
/networks/{networkId}/encryptors:
get:
tags:
- Synthetic Devices
summary: Get a network's encryptors
operationId: getEncryptors
parameters:
- name: networkId
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/EncryptorList'
security:
- api_token: []
put:
tags:
- Synthetic Devices
summary: Replace all of a network’s encryptors
operationId: putEncryptors
parameters:
- name: networkId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EncryptorList'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
/networks/{networkId}/encryptors/{deviceName}:
get:
tags:
- Synthetic Devices
summary: Get an encryptor
operationId: getEncryptor
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: deviceName
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Encryptor'
security:
- api_token: []
put:
tags:
- Synthetic Devices
summary: Add or replace an encryptor
operationId: putEncryptor
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: deviceName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Encryptor'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
patch:
tags:
- Synthetic Devices
summary: Update an encryptor
description: 'All JSON properties in the request body are optional. Include only the properties you wish to
change.'
operationId: patchEncryptor
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: deviceName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EncryptorPatch'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Encryptor'
security:
- api_token: []
delete:
tags:
- Synthetic Devices
summary: Remove an encryptor
operationId: deleteEncryptor
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: deviceName
in: path
required: true
schema:
type: string
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
/networks/{networkId}/internet-node:
get:
tags:
- Synthetic Devices
summary: Get the network’s internet node
operationId: getInternetNode
parameters:
- name: networkId
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/InternetNode'
security:
- api_token: []
put:
tags:
- Synthetic Devices
summary: Replace the network’s internet node
operationId: putInternetNode
parameters:
- name: networkId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/InternetNode'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
patch:
tags:
- Synthetic Devices
summary: Update the network’s internet node
description: 'All JSON properties in the request body are optional. Include only the properties you wish to
change.'
operationId: updateInternetNode
parameters:
- name: networkId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/InternetNodePatch'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/InternetNode'
security:
- api_token: []
/networks/{networkId}/internet-node/connections:
get:
tags:
- Synthetic Devices
summary: Get the internet node’s connections
operationId: getInternetNodeConnections
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: uplinkDevice
in: query
schema:
type: string
- name: uplinkPort
in: query
schema:
type: string
- name: gatewayDevice
in: query
schema:
type: string
- name: gatewayPort
in: query
schema:
type: string
- name: vlan
in: query
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SyntheticConnections'
security:
- api_token: []
post:
tags:
- Synthetic Devices
summary: Add a connection to the internet node
operationId: addInternetNodeConnection
parameters:
- name: networkId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/L3SyntheticWanConnection'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
delete:
tags:
- Synthetic Devices
summary: Remove internet node connections
operationId: deleteInternetNodeConnections
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: uplinkDevice
in: query
schema:
type: string
- name: uplinkPort
in: query
schema:
type: string
- name: gatewayDevice
in: query
schema:
type: string
- name: gatewayPort
in: query
schema:
type: string
- name: vlan
in: query
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SyntheticConnections'
security:
- api_token: []
/networks/{networkId}/intranet-nodes:
get:
tags:
- Synthetic Devices
summary: Get a network’s intranet nodes
operationId: getIntranetNodes
parameters:
- name: networkId
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/IntranetNodeList'
security:
- api_token: []
put:
tags:
- Synthetic Devices
summary: Replace all of a network’s intranet nodes
operationId: putIntranetNodes
parameters:
- name: networkId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IntranetNodeList'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
/networks/{networkId}/intranet-nodes/{nodeName}:
get:
tags:
- Synthetic Devices
summary: Get an intranet node
operationId: getIntranetNode
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: nodeName
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/IntranetNode'
security:
- api_token: []
put:
tags:
- Synthetic Devices
summary: Add or replace an intranet node
operationId: putIntranetNode
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: nodeName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IntranetNode'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
patch:
tags:
- Synthetic Devices
summary: Update an intranet node
description: 'All JSON properties in the request body are optional. Include only the properties you wish to
change.'
operationId: patchIntranetNode
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: nodeName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/IntranetNodePatch'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/IntranetNode'
security:
- api_token: []
delete:
tags:
- Synthetic Devices
summary: Remove an intranet node
operationId: deleteIntranetNode
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: nodeName
in: path
required: true
schema:
type: string
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
/networks/{networkId}/intranet-nodes/{nodeName}/connections:
get:
tags:
- Synthetic Devices
summary: Get an intranet node’s connections
operationId: getIntranetNodeConnections
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: nodeName
in: path
required: true
schema:
type: string
- name: uplinkDevice
in: query
schema:
type: string
- name: uplinkPort
in: query
schema:
type: string
- name: gatewayDevice
in: query
schema:
type: string
- name: gatewayPort
in: query
schema:
type: string
- name: vlan
in: query
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SyntheticConnections'
security:
- api_token: []
post:
tags:
- Synthetic Devices
summary: Add a connection to an intranet node
operationId: addIntranetNodeConnection
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: nodeName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/L3SyntheticWanConnection'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
delete:
tags:
- Synthetic Devices
summary: Remove an intranet node’s connections
operationId: deleteIntranetNodeConnections
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: nodeName
in: path
required: true
schema:
type: string
- name: uplinkDevice
in: query
schema:
type: string
- name: uplinkPort
in: query
schema:
type: string
- name: gatewayDevice
in: query
schema:
type: string
- name: gatewayPort
in: query
schema:
type: string
- name: vlan
in: query
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SyntheticConnections'
security:
- api_token: []
/networks/{networkId}/l2-vpns:
get:
tags:
- Synthetic Devices
summary: Get a network’s L2VPNs
operationId: getL2Vpns
parameters:
- name: networkId
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/L2VpnList'
security:
- api_token: []
put:
tags:
- Synthetic Devices
summary: Replace all of a network’s L2VPNs
operationId: putL2Vpns
parameters:
- name: networkId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/L2VpnList'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
/networks/{networkId}/l2-vpns/{l2VpnName}:
get:
tags:
- Synthetic Devices
summary: Get an L2VPN
operationId: getL2Vpn
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l2VpnName
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/L2Vpn'
security:
- api_token: []
put:
tags:
- Synthetic Devices
summary: Add or replace an L2VPN
operationId: putL2Vpn
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l2VpnName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/L2Vpn'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
patch:
tags:
- Synthetic Devices
summary: Update an L2VPN
description: 'All JSON properties in the request body are optional. Include only the properties you wish to
change.'
operationId: patchL2Vpn
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l2VpnName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/L2VpnPatch'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/L2Vpn'
security:
- api_token: []
delete:
tags:
- Synthetic Devices
summary: Remove an L2VPN
operationId: deleteL2Vpn
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l2VpnName
in: path
required: true
schema:
type: string
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
/networks/{networkId}/l2-vpns/{l2VpnName}/connections:
get:
tags:
- Synthetic Devices
summary: Get an L2VPN’s connections
operationId: getL2VpnConnections
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l2VpnName
in: path
required: true
schema:
type: string
- name: device
in: query
schema:
type: string
- name: port
in: query
schema:
type: string
- name: vlan
in: query
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SyntheticConnections'
security:
- api_token: []
post:
tags:
- Synthetic Devices
summary: Add a connection to an L2VPN
operationId: addL2VpnConnection
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l2VpnName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/L2VpnConnection'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
delete:
tags:
- Synthetic Devices
summary: Remove an L2VPN’s connections
operationId: deleteL2VpnConnections
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l2VpnName
in: path
required: true
schema:
type: string
- name: device
in: query
schema:
type: string
- name: port
in: query
schema:
type: string
- name: vlan
in: query
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SyntheticConnections'
security:
- api_token: []
/networks/{networkId}/l3-vpns:
get:
tags:
- Synthetic Devices
summary: Get a network’s L3VPNs
operationId: getL3Vpns
parameters:
- name: networkId
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/L3VpnList'
security:
- api_token: []
put:
tags:
- Synthetic Devices
summary: Replace all of a network’s L3VPNs
operationId: putL3Vpns
parameters:
- name: networkId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/L3VpnList'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
/networks/{networkId}/l3-vpns/{l3VpnName}:
get:
tags:
- Synthetic Devices
summary: Get an L3VPN
operationId: getL3Vpn
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l3VpnName
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/L3Vpn'
security:
- api_token: []
put:
tags:
- Synthetic Devices
summary: Add or replace an L3VPN
operationId: putL3Vpn
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l3VpnName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/L3Vpn'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
patch:
tags:
- Synthetic Devices
summary: Update an L3VPN
description: 'All JSON properties in the request body are optional. Include only the properties you wish to
change.'
operationId: patchL3Vpn
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l3VpnName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/L3VpnPatch'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/L3Vpn'
security:
- api_token: []
delete:
tags:
- Synthetic Devices
summary: Remove an L3VPN
operationId: deleteL3Vpn
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l3VpnName
in: path
required: true
schema:
type: string
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
/networks/{networkId}/l3-vpns/{l3VpnName}/connections:
get:
tags:
- Synthetic Devices
summary: Get an L3VPN’s connections
operationId: getL3VpnConnections
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l3VpnName
in: path
required: true
schema:
type: string
- name: uplinkDevice
in: query
schema:
type: string
- name: uplinkPort
in: query
schema:
type: string
- name: gatewayDevice
in: query
schema:
type: string
- name: gatewayPort
in: query
schema:
type: string
- name: vlan
in: query
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SyntheticConnections'
security:
- api_token: []
post:
tags:
- Synthetic Devices
summary: Add a connection to an L3VPN
operationId: addL3VpnConnection
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l3VpnName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/L3SyntheticWanConnection'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
delete:
tags:
- Synthetic Devices
summary: Remove an L3VPN’s connections
operationId: deleteL3VpnConnections
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: l3VpnName
in: path
required: true
schema:
type: string
- name: uplinkDevice
in: query
schema:
type: string
- name: uplinkPort
in: query
schema:
type: string
- name: gatewayDevice
in: query
schema:
type: string
- name: gatewayPort
in: query
schema:
type: string
- name: vlan
in: query
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SyntheticConnections'
security:
- api_token: []
/networks/{networkId}/wan-circuits:
get:
tags:
- Synthetic Devices
summary: Get a network’s WAN circuits
operationId: getWanCircuits
parameters:
- name: networkId
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/WanCircuitList'
security:
- api_token: []
put:
tags:
- Synthetic Devices
summary: Replace all of a network’s WAN circuits
operationId: putWanCircuits
parameters:
- name: networkId
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/WanCircuitList'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
/networks/{networkId}/wan-circuits/{wanCircuitName}:
get:
tags:
- Synthetic Devices
summary: Get a WAN circuit
operationId: getWanCircuit
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: wanCircuitName
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/WanCircuit'
security:
- api_token: []
put:
tags:
- Synthetic Devices
summary: Add or replace a WAN circuit
operationId: putWanCircuit
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: wanCircuitName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/WanCircuit'
required: true
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
patch:
tags:
- Synthetic Devices
summary: Update a WAN circuit
description: 'All JSON properties in the request body are optional. Include only the properties you wish to
change.'
operationId: patchWanCircuit
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: wanCircuitName
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/WanCircuitPatch'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/WanCircuit'
security:
- api_token: []
delete:
tags:
- Synthetic Devices
summary: Remove a WAN circuit
operationId: deleteWanCircuit
parameters:
- name: networkId
in: path
required: true
schema:
type: string
- name: wanCircuitName
in: path
required: true
schema:
type: string
responses:
'204':
description: No Content
content: {}
security:
- api_token: []
components:
schemas:
Encryptor:
type: object
required:
- name
- siteConnection
- tunnels
properties:
name:
type: string
examples:
- encryptor
siteConnection:
$ref: '#/components/schemas/EncryptorConnection'
description: A connection to a high site
underlayConnection:
$ref: '#/components/schemas/EncryptorConnection'
description: A connection to the underlay network (a low site)
tunnels:
type: array
items:
$ref: '#/components/schemas/EncryptorTunnel'
description: 'Tunnels to other encryptor devices. A tunnel source address is modeled as residing on this device and the
destination addresses on another encryptor device. A source address may be reused on an encryptor. Each
destination address must match the source address of the tunnel on another encryptor, and vice-versa'
subnets:
type: array
items:
type: string
description: 'Subnets to route to the high site, in addition to the source addresses of tunnels on the `siteConnection`
gateway device'
L3VpnPatch:
type: object
properties:
name:
type: string
connections:
type: array
items:
$ref: '#/components/schemas/L3SyntheticWanConnection'
description: If specified, this list will **replace** all existing connections on the L3 VPN node.
DevicePort:
type: object
properties:
device:
type: string
port:
type: string
SyntheticConnection:
type: object
properties:
name:
type: string
L2VpnConnection:
type: object
required:
- device
- port
properties:
device:
type: string
description: The customer edge device.
port:
type: string
description: The physical edge port on the customer edge device.
examples:
- eth1/1
# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/forward-networks/refs/heads/main/openapi/forward-networks-synthetic-devices-api-openapi.yml