Skip to content

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:

Authorization: Bearer bngtok_…

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#

Contact: Netavo

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

{
    "status": "committed",
    "name": "residential",
    "committedUtc": "2026-08-03T10:24:11Z"
}
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"
    }
}
Schema of the response body

{
    "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"
    }
}
Schema of the response body

{
    "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"
    }
}
Schema of the response body

{
    "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

{
    "status": "committed",
    "name": "residential",
    "committedUtc": "2026-08-03T10:24:11Z"
}
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"
    }
}
Schema of the response body

{
    "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"
    }
}
Schema of the response body

{
    "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"
    }
}
Schema of the response body

{
    "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

{
    "status": "committed",
    "name": "residential",
    "committedUtc": "2026-08-03T10:24:11Z"
}
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"
    }
}
Schema of the response body

{
    "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"
    }
}
Schema of the response body

{
    "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"
    }
}
Schema of the response body

{
    "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

{
    "status": "committed",
    "name": "residential",
    "committedUtc": "2026-08-03T10:24:11Z"
}
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"
    }
}
Schema of the response body

{
    "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"
    }
}
Schema of the response body

{
    "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"
    }
}
Schema of the response body

{
    "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.