Routing#
Live BGP and IGP (IS-IS or OSPF) status, per-VRF and per-neighbor route tables, and the editable BGP/routing configuration.
11 operations. Roles, error format and pagination are common to the whole API — see the REST API overview.
Authentication
Use a named bearer token. Every endpoint except POST /api/v1/auth/login,
POST /api/v1/auth/enrol and GET /api/v1/system/health requires one. A super-user creates a
token with POST /api/v1/auth/tokens; the plaintext (bngtok_…) is returned exactly once at
creation and only a SHA-256 hash is stored on the appliance, so a lost token is replaced rather
than recovered. Send it on every request:
Each token carries a fixed role (read-only, operator or super-user) and is exempt from CSRF
checks. This is the single credential you need for scripts, integrations and monitoring.
Accounts and tokens share one identity model with the appliance CLI (login.users). Repeated
authentication failures lock the account/source-IP pair out temporarily (HTTP 423 on login).
Session cookies (bundled web UI only)
The appliance also accepts an interactive session cookie, which is how the bundled web UI authenticates. It is documented for completeness — API clients should not use it. It is bound to a login session and obliges the caller to manage a CSRF token, neither of which suits automation.
POST /api/v1/auth/login with username + password (and a TOTP code when enrolled) sets the
bng_session cookie and returns a csrfToken (also available from GET /api/v1/auth/whoami).
Cookie-authenticated mutating requests (anything other than GET/HEAD/OPTIONS) must also send
that value in the X-CSRF-Token header or they are rejected with 403.
NetavoBNG Management API v1#
Routing#
GET /api/v1/routing/bgp/neighbor/{address}#
Key facts for one BGP neighbor.
Description
State, uptime, timers, router ids, BFD, and per-AFI/SAFI prefix counters.
reachable: false when FRR can't be asked or the peer is unknown (never an error
status). Fleet-proxyable.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
bearerToken |
header | string | N/A | No | Named API token — the recommended credential for automation. See Authentication in the API overview. |
address |
path | string | No | The neighbor address as configured (e.g. "10.255.255.2"). |
Responses
{
"reachable": true,
"peer": "10.255.255.2",
"description": "pe1.lon1 route reflector",
"remoteAs": 65000,
"localAs": 65000,
"state": "Established",
"uptimeSeconds": 86412.538912,
"routerId": "10.255.255.2",
"localRouterId": "10.255.255.10",
"holdTime": 90,
"keepAlive": 30,
"bfd": true,
"addressFamilies": [
{
"afiSafi": "ipv4Vpn",
"received": 4218,
"accepted": 4218,
"advertised": 1863
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"reachable": {
"type": "boolean"
},
"peer": {
"type": "string"
},
"description": {
"type": "string",
"nullable": true
},
"remoteAs": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int64",
"nullable": true
},
"localAs": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int64",
"nullable": true
},
"state": {
"type": "string"
},
"uptimeSeconds": {
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
"format": "double",
"nullable": true
},
"routerId": {
"type": "string",
"nullable": true
},
"localRouterId": {
"type": "string",
"nullable": true
},
"holdTime": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"keepAlive": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"bfd": {
"type": "boolean"
},
"addressFamilies": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BgpAfiSafi"
},
"description": "Per-AFI/SAFI prefix counters (accepted/advertised) for the neighbor."
}
},
"description": "GET /api/v1/routing/bgp/neighbor/{address} — the key facts for a neighbor.",
"example": {
"reachable": true,
"peer": "10.255.255.2",
"description": "pe1.lon1 route reflector",
"remoteAs": 65000,
"localAs": 65000,
"state": "Established",
"uptimeSeconds": 86412.538912,
"routerId": "10.255.255.2",
"localRouterId": "10.255.255.10",
"holdTime": 90,
"keepAlive": 30,
"bfd": true,
"addressFamilies": [
{
"afiSafi": "ipv4Vpn",
"received": 4218,
"accepted": 4218,
"advertised": 1863
}
]
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
GET /api/v1/routing/bgp/neighbor/{address}/routes#
Routes advertised to / received from a BGP neighbor (paged, filterable).
Description
type=advertised (default) returns what this appliance advertises to the
neighbor; type=received what it receives. af selects the address family using FRR's
AFI/SAFI names (e.g. "ipv4Unicast", "ipv4Vpn"); omitted = the default AF. Same paging and
filtering as the VRF route table. Fleet-proxyable.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
bearerToken |
header | string | N/A | No | Named API token — the recommended credential for automation. See Authentication in the API overview. |
address |
path | string | No | The neighbor address. | |
af |
query | string | No | AFI/SAFI name, e.g. "ipv4Unicast" or "ipv4Vpn" (null = default). | |
filter |
query | string | No | Substring filter across prefix / next-hop / AS-path / protocol. | |
limit |
query | 50 | No | Page size, clamped to 1–500 (default 50). | |
offset |
query | 0 | No | Rows to skip (default 0). | |
type |
query | string | advertised | No | "advertised" (default) or "received". |
Responses
{
"reachable": true,
"total": 4218,
"offset": 0,
"limit": 50,
"routes": [
{
"prefix": "100.64.12.0/24",
"nextHop": "10.255.1.1",
"protocol": "bgp",
"interface": "core0",
"metric": 0,
"localPref": 100,
"asPath": "65001 64512",
"origin": "IGP",
"best": true
}
]
}
Schema of the response body
{
"required": [
"reachable",
"total",
"offset",
"limit",
"routes"
],
"type": "object",
"properties": {
"reachable": {
"type": "boolean",
"description": "False when FRR could not be queried — the table is then empty."
},
"total": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"description": "Routes matching the filter (before paging).",
"format": "int32"
},
"offset": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"description": "The offset this page was taken at.",
"format": "int32"
},
"limit": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"description": "The effective page size (after clamping).",
"format": "int32"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Route"
},
"description": "The page of route rows."
}
},
"description": "One page of a route table (VRF FIB or BGP Adj-RIB view).",
"example": {
"reachable": true,
"total": 4218,
"offset": 0,
"limit": 50,
"routes": [
{
"prefix": "100.64.12.0/24",
"nextHop": "10.255.1.1",
"protocol": "bgp",
"interface": "core0",
"metric": 0,
"localPref": 100,
"asPath": "65001 64512",
"origin": "IGP",
"best": true
}
]
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
GET /api/v1/routing/bgp/summary#
BGP peer summary (all address families).
Description
One row per peer per AFI/SAFI with state, uptime and prefix counts — the API
equivalent of FRR's show bgp summary. reachable: false means FRR could not be queried
(the peer list is then empty); it is never an error status. Fleet-proxyable.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
bearerToken |
header | string | N/A | No | Named API token — the recommended credential for automation. See Authentication in the API overview. |
Responses
{
"reachable": true,
"peers": [
{
"peer": "10.255.255.2",
"description": "pe1.lon1 route reflector",
"remoteAs": 65000,
"state": "Established",
"uptimeSeconds": 86412.538912,
"prefixesReceived": 4218,
"prefixesSent": 1863,
"afiSafi": "ipv4Vpn"
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"reachable": {
"type": "boolean"
},
"peers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BgpPeerStatus"
}
}
},
"description": "GET /api/v1/routing/bgp/summary.",
"example": {
"reachable": true,
"peers": [
{
"peer": "10.255.255.2",
"description": "pe1.lon1 route reflector",
"remoteAs": 65000,
"state": "Established",
"uptimeSeconds": 86412.538912,
"prefixesReceived": 4218,
"prefixesSent": 1863,
"afiSafi": "ipv4Vpn"
}
]
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
GET /api/v1/routing/config#
Read the routing configuration.
Description
Global BGP/router settings plus the configured BGP peers. When the appliance has
no routing section at all, returns configured: false with every other field omitted.
Fleet-proxyable.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
bearerToken |
header | string | N/A | No | Named API token — the recommended credential for automation. See Authentication in the API overview. |
Responses
{
"configured": true,
"asn": 65000,
"routerId": "10.255.255.10",
"routerId6": "2001:db8:255::10",
"isisNet": "49.0001.0102.5525.5010.00",
"igpProtocol": "isis",
"igpInterfaces": [
"lo",
"core0",
"core1"
],
"ospfArea": "0.0.0.0",
"hostname": "lns1-hul1",
"enableVrfIpv6": true,
"originateDefaultRoute": false,
"peers": [
{
"address": "10.255.255.2",
"description": "pe1.lon1 route reflector",
"vpnOnly": true,
"bfd": true
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"configured": {
"type": "boolean",
"description": "Whether a routing configuration exists on this appliance."
},
"asn": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"description": "Local autonomous system number.",
"format": "uint32",
"nullable": true
},
"routerId": {
"type": "string",
"description": "IPv4 router id.",
"nullable": true
},
"routerId6": {
"type": "string",
"description": "IPv6 router id (empty when unset).",
"nullable": true
},
"isisNet": {
"type": "string",
"description": "IS-IS NET (area + system id). Empty unless the IGP is IS-IS.",
"nullable": true
},
"igpProtocol": {
"type": "string",
"description": "Interior gateway protocol: `isis`, `ospf` or `none`.",
"nullable": true
},
"igpInterfaces": {
"type": "array",
"items": {
"type": "string"
},
"description": "Interfaces the IGP runs on. Loopbacks are passive; the rest are point-to-point\n core links and also carry LDP.",
"nullable": true
},
"ospfArea": {
"type": "string",
"description": "Default OSPF area. Only meaningful when the IGP is OSPF.",
"nullable": true
},
"hostname": {
"type": "string",
"description": "FRR hostname.",
"nullable": true
},
"enableVrfIpv6": {
"type": "boolean",
"description": "Whether IPv6 (6VPE) address families are enabled in VRFs.",
"nullable": true
},
"originateDefaultRoute": {
"type": "boolean",
"description": "Whether an IPv4 default route is originated into BGP in the default (global)\n table (standalone-CGN internet-exit advertisement).",
"nullable": true
},
"peers": {
"type": "array",
"items": {
"$ref": "#/components/schemas/BgpPeer"
},
"description": "The configured BGP peers.",
"nullable": true
}
},
"description": "GET /api/v1/routing/config. When bool RoutingConfigDto.Configured is false the appliance has\n no routing section and every other field is omitted.",
"example": {
"configured": true,
"asn": 65000,
"routerId": "10.255.255.10",
"routerId6": "2001:db8:255::10",
"isisNet": "49.0001.0102.5525.5010.00",
"igpProtocol": "isis",
"igpInterfaces": [
"lo",
"core0",
"core1"
],
"ospfArea": "0.0.0.0",
"hostname": "lns1-hul1",
"enableVrfIpv6": true,
"originateDefaultRoute": false,
"peers": [
{
"address": "10.255.255.2",
"description": "pe1.lon1 route reflector",
"vpnOnly": true,
"bfd": true
}
]
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
PUT /api/v1/routing/config#
Update the global BGP/router settings.
Description
Validates and commits through the configuration store. Super-user only; local appliance only.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
bearerToken |
header | string | N/A | No | Named API token — the recommended credential for automation. See Authentication in the API overview. |
Request body
{
"asn": 65000,
"routerId": "10.255.255.10",
"routerId6": "2001:db8:255::10",
"isisNet": "49.0001.0102.5525.5010.00",
"hostname": "lns1-hul1",
"enableVrfIpv6": true,
"comment": "enable 6VPE on the core links",
"originateDefaultRoute": false,
"igpProtocol": "isis",
"igpInterfaces": [
"lo",
"core0",
"core1"
],
"ospfArea": "0.0.0.0"
}
Other accepted types: application/*+json, text/json
Schema of the request body
{
"required": [
"asn",
"routerId",
"routerId6",
"isisNet",
"hostname",
"enableVrfIpv6",
"comment"
],
"type": "object",
"properties": {
"asn": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"description": "Local autonomous system number.",
"format": "uint32"
},
"routerId": {
"type": "string",
"description": "IPv4 router id; null/empty keeps the current value.",
"nullable": true
},
"routerId6": {
"type": "string",
"description": "IPv6 router id; null clears it.",
"nullable": true
},
"isisNet": {
"type": "string",
"description": "IS-IS NET (area + system id); null/empty keeps the current value.\n Only meaningful when IgpProtocol is `isis`.",
"nullable": true
},
"hostname": {
"type": "string",
"description": "FRR hostname; null/empty keeps the current value.",
"nullable": true
},
"enableVrfIpv6": {
"type": "boolean",
"description": "Enable IPv6 (6VPE) address families in VRFs."
},
"comment": {
"type": "string",
"description": "Optional commit comment for the config history.",
"nullable": true
},
"originateDefaultRoute": {
"type": "boolean",
"description": "Originate an IPv4 default route into BGP in the default\n (global) table — a standalone CGN appliance advertising itself as the internet exit.",
"default": false
},
"igpProtocol": {
"type": "string",
"description": "Interior gateway protocol: `isis`, `ospf` or\n `none`. Null/empty keeps the current value. Switching this restarts FRR, because\n starting or stopping a routing daemon cannot be done by a configuration reload.",
"nullable": true
},
"igpInterfaces": {
"type": "array",
"items": {
"type": "string"
},
"description": "Full IGP interface list (loopbacks are made passive; the rest\n are treated as point-to-point core links and also carry LDP). Null keeps the current list;\n an empty list clears it.",
"nullable": true
},
"ospfArea": {
"type": "string",
"description": "Default OSPF area as a dotted quad or integer; null/empty keeps the\n current value. Only meaningful when IgpProtocol is `ospf`.",
"nullable": true
}
},
"description": "PUT /api/v1/routing/config body — global BGP/router settings.",
"example": {
"asn": 65000,
"routerId": "10.255.255.10",
"routerId6": "2001:db8:255::10",
"isisNet": "49.0001.0102.5525.5010.00",
"hostname": "lns1-hul1",
"enableVrfIpv6": true,
"comment": "enable 6VPE on the core links",
"originateDefaultRoute": false,
"igpProtocol": "isis",
"igpInterfaces": [
"lo",
"core0",
"core1"
],
"ospfArea": "0.0.0.0"
}
}
Responses
Schema of the response body
{
"required": [
"status",
"name",
"committedUtc"
],
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Always \"committed\"."
},
"name": {
"type": "string",
"description": "The object the commit touched (VRF name, CGN group name, peer address, …)."
},
"committedUtc": {
"type": "string",
"description": "UTC timestamp the new configuration version became active.",
"format": "date-time",
"nullable": true
}
},
"description": "Result of a successful configuration commit performed by a mutating endpoint.",
"example": {
"status": "committed",
"name": "residential",
"committedUtc": "2026-08-03T10:24:11Z"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
POST /api/v1/routing/config/peers#
Add a BGP peer.
Description
Validates and commits; FRR is reprovisioned from the committed config. Super-user only; local appliance only.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
bearerToken |
header | string | N/A | No | Named API token — the recommended credential for automation. See Authentication in the API overview. |
Request body
{
"address": "10.255.255.2",
"description": "pe1.lon1 route reflector",
"vpnOnly": true,
"bfd": true,
"comment": "add the lon1 route reflector"
}
Other accepted types: application/*+json, text/json
Schema of the request body
{
"required": [
"address",
"description",
"vpnOnly",
"bfd",
"comment"
],
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Peer address — the immutable key (ignored in the body on update)."
},
"description": {
"type": "string",
"description": "Free-text description shown in status views.",
"nullable": true
},
"vpnOnly": {
"type": "boolean",
"description": "True = activate only the VPN address families toward this peer\n (route-reflector style), not ipv4 unicast."
},
"bfd": {
"type": "boolean",
"description": "Enable BFD fast failure detection toward this peer."
},
"comment": {
"type": "string",
"description": "Optional commit comment for the config history.",
"nullable": true
}
},
"description": "BGP peer body for create/update.",
"example": {
"address": "10.255.255.2",
"description": "pe1.lon1 route reflector",
"vpnOnly": true,
"bfd": true,
"comment": "add the lon1 route reflector"
}
}
Responses
Schema of the response body
{
"required": [
"status",
"name",
"committedUtc"
],
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Always \"committed\"."
},
"name": {
"type": "string",
"description": "The object the commit touched (VRF name, CGN group name, peer address, …)."
},
"committedUtc": {
"type": "string",
"description": "UTC timestamp the new configuration version became active.",
"format": "date-time",
"nullable": true
}
},
"description": "Result of a successful configuration commit performed by a mutating endpoint.",
"example": {
"status": "committed",
"name": "residential",
"committedUtc": "2026-08-03T10:24:11Z"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
PUT /api/v1/routing/config/peers/{address}#
Update a BGP peer.
Description
Full-replace semantics for the peer's attributes; the address in the URL is the immutable key. Super-user only; local appliance only.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
bearerToken |
header | string | N/A | No | Named API token — the recommended credential for automation. See Authentication in the API overview. |
address |
path | string | No | The peer to update. |
Request body
{
"address": "10.255.255.2",
"description": "pe1.lon1 route reflector",
"vpnOnly": true,
"bfd": true,
"comment": "add the lon1 route reflector"
}
Other accepted types: application/*+json, text/json
Schema of the request body
{
"required": [
"address",
"description",
"vpnOnly",
"bfd",
"comment"
],
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Peer address — the immutable key (ignored in the body on update)."
},
"description": {
"type": "string",
"description": "Free-text description shown in status views.",
"nullable": true
},
"vpnOnly": {
"type": "boolean",
"description": "True = activate only the VPN address families toward this peer\n (route-reflector style), not ipv4 unicast."
},
"bfd": {
"type": "boolean",
"description": "Enable BFD fast failure detection toward this peer."
},
"comment": {
"type": "string",
"description": "Optional commit comment for the config history.",
"nullable": true
}
},
"description": "BGP peer body for create/update.",
"example": {
"address": "10.255.255.2",
"description": "pe1.lon1 route reflector",
"vpnOnly": true,
"bfd": true,
"comment": "add the lon1 route reflector"
}
}
Responses
Schema of the response body
{
"required": [
"status",
"name",
"committedUtc"
],
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Always \"committed\"."
},
"name": {
"type": "string",
"description": "The object the commit touched (VRF name, CGN group name, peer address, …)."
},
"committedUtc": {
"type": "string",
"description": "UTC timestamp the new configuration version became active.",
"format": "date-time",
"nullable": true
}
},
"description": "Result of a successful configuration commit performed by a mutating endpoint.",
"example": {
"status": "committed",
"name": "residential",
"committedUtc": "2026-08-03T10:24:11Z"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
DELETE /api/v1/routing/config/peers/{address}#
Delete a BGP peer.
Description
Validates and commits; the peering is removed from FRR. Super-user only; local appliance only.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
bearerToken |
header | string | N/A | No | Named API token — the recommended credential for automation. See Authentication in the API overview. |
address |
path | string | No | The peer to delete. |
Responses
Schema of the response body
{
"required": [
"status",
"name",
"committedUtc"
],
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Always \"committed\"."
},
"name": {
"type": "string",
"description": "The object the commit touched (VRF name, CGN group name, peer address, …)."
},
"committedUtc": {
"type": "string",
"description": "UTC timestamp the new configuration version became active.",
"format": "date-time",
"nullable": true
}
},
"description": "Result of a successful configuration commit performed by a mutating endpoint.",
"example": {
"status": "committed",
"name": "residential",
"committedUtc": "2026-08-03T10:24:11Z"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
GET /api/v1/routing/isis/neighbors#
IS-IS adjacencies.
Description
System id/hostname, interface, level, state, hold time and SNPA per neighbor —
the API equivalent of show isis neighbor. reachable: false means FRR could not be
queried. Fleet-proxyable.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
bearerToken |
header | string | N/A | No | Named API token — the recommended credential for automation. See Authentication in the API overview. |
Responses
{
"reachable": true,
"neighbors": [
{
"systemId": "0102.5525.5002",
"hostname": "pe1.lon1",
"interface": "core0",
"level": "L2",
"state": "Up",
"holdTimeSeconds": 27,
"snpa": "a4:2b:8c:11:04:02"
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"reachable": {
"type": "boolean"
},
"neighbors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/IsisNeighbor"
}
}
},
"description": "GET /api/v1/routing/isis/neighbors.",
"example": {
"reachable": true,
"neighbors": [
{
"systemId": "0102.5525.5002",
"hostname": "pe1.lon1",
"interface": "core0",
"level": "L2",
"state": "Up",
"holdTimeSeconds": 27,
"snpa": "a4:2b:8c:11:04:02"
}
]
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
GET /api/v1/routing/ospf/neighbors#
OSPF adjacencies (OSPFv2 and OSPFv3).
Description
Router-id, interface, state, priority, dead timer and neighbour address per
adjacency — the API equivalent of show ip ospf neighbor and show ipv6 ospf6 neighbor,
merged into one list with a protocol field of ospfv2 or ospfv3. A dual-stack box
legitimately lists the same neighbour twice: unlike IS-IS, OSPFv2 and OSPFv3 are separate
protocols forming separate adjacencies. reachable: false means FRR could not be queried.
Empty on a box whose configured IGP is not OSPF. Fleet-proxyable.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
bearerToken |
header | string | N/A | No | Named API token — the recommended credential for automation. See Authentication in the API overview. |
Responses
{
"reachable": true,
"neighbors": [
{
"routerId": "10.255.255.2",
"interface": "core0",
"state": "Full/-",
"priority": 1,
"deadTimeSeconds": 33,
"address": "10.255.1.1",
"protocol": "ospfv2"
}
]
}
Schema of the response body
{
"type": "object",
"properties": {
"reachable": {
"type": "boolean"
},
"neighbors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OspfNeighbor"
}
}
},
"description": "GET /api/v1/routing/ospf/neighbors.",
"example": {
"reachable": true,
"neighbors": [
{
"routerId": "10.255.255.2",
"interface": "core0",
"state": "Full/-",
"priority": 1,
"deadTimeSeconds": 33,
"address": "10.255.1.1",
"protocol": "ospfv2"
}
]
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
GET /api/v1/routing/vrf/{vrf}/routes#
Route table for a VRF (paged, filterable).
Description
Server-side paged and filtered: filter is a case-insensitive substring match
across prefix, next-hop, AS-path and protocol. Use VRF name "default" for the global
table. Fleet-proxyable.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
bearerToken |
header | string | N/A | No | Named API token — the recommended credential for automation. See Authentication in the API overview. |
filter |
query | string | No | Substring filter across prefix / next-hop / AS-path / protocol. | |
limit |
query | 50 | No | Page size, clamped to 1–500 (default 50). | |
offset |
query | 0 | No | Rows to skip (default 0). | |
vrf |
path | string | No | VRF name ("default" for the global table). |
Responses
{
"reachable": true,
"total": 4218,
"offset": 0,
"limit": 50,
"routes": [
{
"prefix": "100.64.12.0/24",
"nextHop": "10.255.1.1",
"protocol": "bgp",
"interface": "core0",
"metric": 0,
"localPref": 100,
"asPath": "65001 64512",
"origin": "IGP",
"best": true
}
]
}
Schema of the response body
{
"required": [
"reachable",
"total",
"offset",
"limit",
"routes"
],
"type": "object",
"properties": {
"reachable": {
"type": "boolean",
"description": "False when FRR could not be queried — the table is then empty."
},
"total": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"description": "Routes matching the filter (before paging).",
"format": "int32"
},
"offset": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"description": "The offset this page was taken at.",
"format": "int32"
},
"limit": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"description": "The effective page size (after clamping).",
"format": "int32"
},
"routes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Route"
},
"description": "The page of route rows."
}
},
"description": "One page of a route table (VRF FIB or BGP Adj-RIB view).",
"example": {
"reachable": true,
"total": 4218,
"offset": 0,
"limit": 50,
"routes": [
{
"prefix": "100.64.12.0/24",
"nextHop": "10.255.1.1",
"protocol": "bgp",
"interface": "core0",
"metric": 0,
"localPref": 100,
"asPath": "65001 64512",
"origin": "IGP",
"best": true
}
]
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"example": {
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
"title": "VRF not found",
"status": 404,
"detail": "No VRF named 'wholesale-b' is configured.",
"instance": "/api/v1/vrfs/wholesale-b"
}
}
Schemas#
BgpAfiSafi#
| Name | Type | Description |
|---|---|---|
accepted |
||
advertised |
||
afiSafi |
string | |
received |
BgpNeighborDetail#
| Name | Type | Description |
|---|---|---|
addressFamilies |
Array<BgpAfiSafi> | Per-AFI/SAFI prefix counters (accepted/advertised) for the neighbor. |
bfd |
boolean | |
description |
string | null | |
holdTime |
||
keepAlive |
||
localAs |
||
localRouterId |
string | null | |
peer |
string | |
reachable |
boolean | |
remoteAs |
||
routerId |
string | null | |
state |
string | |
uptimeSeconds |
BgpPeer#
| Name | Type | Description |
|---|---|---|
address |
string | Peer address (the key for the peer endpoints). |
bfd |
boolean | Whether BFD is enabled toward this peer. |
description |
string | null | Free-text description, or null. |
vpnOnly |
boolean | True = only VPN address families are activated toward this peer. |
BgpPeerStatus#
| Name | Type | Description |
|---|---|---|
afiSafi |
string | FRR AFI/SAFI section the peer row came from (e.g. "ipv4Unicast", "ipv4Vpn"). |
description |
string | null | |
peer |
string | |
prefixesReceived |
||
prefixesSent |
||
remoteAs |
||
state |
string | |
uptimeSeconds |
BgpSummary#
| Name | Type | Description |
|---|---|---|
peers |
Array<BgpPeerStatus> | |
reachable |
boolean |
CommitResult#
| Name | Type | Description |
|---|---|---|
committedUtc |
string(date-time) | null | UTC timestamp the new configuration version became active. |
name |
string | The object the commit touched (VRF name, CGN group name, peer address, …). |
status |
string | Always "committed". |
Global#
| Name | Type | Description |
|---|---|---|
asn |
Local autonomous system number. | |
comment |
string | null | Optional commit comment for the config history. |
enableVrfIpv6 |
boolean | Enable IPv6 (6VPE) address families in VRFs. |
hostname |
string | null | FRR hostname; null/empty keeps the current value. |
igpInterfaces |
Array<string> | Full IGP interface list (loopbacks are made passive; the rest are treated as point-to-point core links and also carry LDP). Null keeps the current list; an empty list clears it. |
igpProtocol |
string | null | Interior gateway protocol: `isis`, `ospf` or `none`. Null/empty keeps the current value. Switching this restarts FRR, because starting or stopping a routing daemon cannot be done by a configuration reload. |
isisNet |
string | null | IS-IS NET (area + system id); null/empty keeps the current value. Only meaningful when IgpProtocol is `isis`. |
originateDefaultRoute |
boolean | Originate an IPv4 default route into BGP in the default (global) table — a standalone CGN appliance advertising itself as the internet exit. |
ospfArea |
string | null | Default OSPF area as a dotted quad or integer; null/empty keeps the current value. Only meaningful when IgpProtocol is `ospf`. |
routerId |
string | null | IPv4 router id; null/empty keeps the current value. |
routerId6 |
string | null | IPv6 router id; null clears it. |
IsisNeighbor#
| Name | Type | Description |
|---|---|---|
holdTimeSeconds |
||
hostname |
string | null | |
interface |
string | |
level |
string | |
snpa |
string | null | |
state |
string | |
systemId |
string |
IsisNeighbors#
| Name | Type | Description |
|---|---|---|
neighbors |
Array<IsisNeighbor> | |
reachable |
boolean |
OspfNeighbor#
| Name | Type | Description |
|---|---|---|
address |
string | null | The neighbour's interface address (v2) or link-local address (v3). |
deadTimeSeconds |
||
interface |
string | |
priority |
||
protocol |
string | "ospfv2" or "ospfv3". |
routerId |
string | The neighbour's OSPF router-id (a dotted quad in both v2 and v3). |
state |
string | FRR's adjacency state, including the DR/BDR role where it applies (e.g. "Full/DR"). On the point-to-point core links the appliance configures, this is normally "Full/-". |
OspfNeighbors#
| Name | Type | Description |
|---|---|---|
neighbors |
Array<OspfNeighbor> | |
reachable |
boolean |
Peer#
| Name | Type | Description |
|---|---|---|
address |
string | Peer address — the immutable key (ignored in the body on update). |
bfd |
boolean | Enable BFD fast failure detection toward this peer. |
comment |
string | null | Optional commit comment for the config history. |
description |
string | null | Free-text description shown in status views. |
vpnOnly |
boolean | True = activate only the VPN address families toward this peer (route-reflector style), not ipv4 unicast. |
ProblemDetails#
| Name | Type | Description |
|---|---|---|
detail |
string | null | |
instance |
string | null | |
status |
||
title |
string | null | |
type |
string | null |
Route#
| Name | Type | Description |
|---|---|---|
asPath |
string | null | |
best |
boolean | null | |
interface |
string | null | |
localPref |
||
metric |
||
nextHop |
string | null | |
origin |
string | null | |
prefix |
string | |
protocol |
string | null |
RouteTablePage#
| Name | Type | Description |
|---|---|---|
limit |
The effective page size (after clamping). | |
offset |
The offset this page was taken at. | |
reachable |
boolean | False when FRR could not be queried — the table is then empty. |
routes |
Array<Route> | The page of route rows. |
total |
Routes matching the filter (before paging). |
RoutingConfig#
| Name | Type | Description |
|---|---|---|
asn |
Local autonomous system number. | |
configured |
boolean | Whether a routing configuration exists on this appliance. |
enableVrfIpv6 |
boolean | null | Whether IPv6 (6VPE) address families are enabled in VRFs. |
hostname |
string | null | FRR hostname. |
igpInterfaces |
Array<string> | Interfaces the IGP runs on. Loopbacks are passive; the rest are point-to-point core links and also carry LDP. |
igpProtocol |
string | null | Interior gateway protocol: `isis`, `ospf` or `none`. |
isisNet |
string | null | IS-IS NET (area + system id). Empty unless the IGP is IS-IS. |
originateDefaultRoute |
boolean | null | Whether an IPv4 default route is originated into BGP in the default (global) table (standalone-CGN internet-exit advertisement). |
ospfArea |
string | null | Default OSPF area. Only meaningful when the IGP is OSPF. |
peers |
Array<BgpPeer> | The configured BGP peers. |
routerId |
string | null | IPv4 router id. |
routerId6 |
string | null | IPv6 router id (empty when unset). |
Security schemes#
| Name | Type | Scheme | Description |
|---|---|---|---|
| bearerToken | http | bearer | Named API token — the recommended credential for automation. See Authentication in the API overview. |
| sessionCookie | apiKey | Interactive session cookie used by the bundled web UI. Not the integration path for API clients — use a bearer token. See Authentication in the API overview. |
Tags#
| Name | Description |
|---|---|
| Routing | Live BGP and IGP (IS-IS or OSPF) status, per-VRF and per-neighbor route tables, and the editable BGP/routing configuration. |