VRFs#
Configured VRFs merged with live per-VRF session counts, plus VRF create/edit/delete.
4 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#
VRFs#
GET /api/v1/vrfs#
List VRFs (configured ∪ observed on live sessions).
Description
Configured VRFs (routing.vrfs) come with their full routing attributes and
configured: true; VRF names that only appear on live sessions (e.g. "default") are
listed with counts only and configured: false. 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
{
"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/vrfs#
Create a VRF.
Description
Validates and commits through the configuration store; VRF add is hot-applied (no restart). 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
{
"name": "wholesale-a",
"tableId": 2502,
"rd": "65000:2502",
"importRt": [
"65000:2502"
],
"exportRt": [
"65000:2502"
],
"gatewayIp": "100.64.32.1",
"gatewayIpv6": "2001:db8:64:32::1",
"l2tpEndpointIp": "45.84.200.70",
"comment": "add the wholesale-a VRF",
"originateDefaultRoute": false
}
Other accepted types: application/*+json, text/json
Schema of the request body
{
"required": [
"name",
"tableId",
"rd",
"importRt",
"exportRt",
"gatewayIp",
"gatewayIpv6",
"l2tpEndpointIp",
"comment"
],
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "VRF name — the immutable key (ignored in the body on update; the URL wins)."
},
"tableId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"description": "Linux route table id backing the VRF (must be unique).",
"format": "uint32"
},
"rd": {
"type": "string",
"description": "BGP route distinguisher, e.g. \"65000:2501\" (empty = none).",
"nullable": true
},
"importRt": {
"type": "array",
"items": {
"type": "string"
},
"description": "VPN route targets imported into the VRF.",
"nullable": true
},
"exportRt": {
"type": "array",
"items": {
"type": "string"
},
"description": "VPN route targets exported from the VRF.",
"nullable": true
},
"gatewayIp": {
"type": "string",
"description": "Subscriber IPv4 gateway address inside the VRF.",
"nullable": true
},
"gatewayIpv6": {
"type": "string",
"description": "Subscriber IPv6 gateway address inside the VRF.",
"nullable": true
},
"l2tpEndpointIp": {
"type": "string",
"description": "Per-VRF L2TP endpoint /32 (LNS/wholesale-LAC transport), or null.",
"nullable": true
},
"comment": {
"type": "string",
"description": "Optional commit comment for the config history.",
"nullable": true
},
"originateDefaultRoute": {
"type": "boolean",
"description": "Originate an IPv4 default route into BGP inside this VRF\n (standalone-CGN inside VRF — this appliance advertises itself as the VRF's internet exit).",
"default": false
}
},
"description": "Request body for VRF create/update.",
"example": {
"name": "wholesale-a",
"tableId": 2502,
"rd": "65000:2502",
"importRt": [
"65000:2502"
],
"exportRt": [
"65000:2502"
],
"gatewayIp": "100.64.32.1",
"gatewayIpv6": "2001:db8:64:32::1",
"l2tpEndpointIp": "45.84.200.70",
"comment": "add the wholesale-a VRF",
"originateDefaultRoute": false
}
}
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/vrfs/{name}#
Update a VRF.
Description
Full-replace semantics: the body's attributes become the VRF's attributes (the name 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. |
name |
path | string | No | The VRF to update. |
Request body
{
"name": "wholesale-a",
"tableId": 2502,
"rd": "65000:2502",
"importRt": [
"65000:2502"
],
"exportRt": [
"65000:2502"
],
"gatewayIp": "100.64.32.1",
"gatewayIpv6": "2001:db8:64:32::1",
"l2tpEndpointIp": "45.84.200.70",
"comment": "add the wholesale-a VRF",
"originateDefaultRoute": false
}
Other accepted types: application/*+json, text/json
Schema of the request body
{
"required": [
"name",
"tableId",
"rd",
"importRt",
"exportRt",
"gatewayIp",
"gatewayIpv6",
"l2tpEndpointIp",
"comment"
],
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "VRF name — the immutable key (ignored in the body on update; the URL wins)."
},
"tableId": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"description": "Linux route table id backing the VRF (must be unique).",
"format": "uint32"
},
"rd": {
"type": "string",
"description": "BGP route distinguisher, e.g. \"65000:2501\" (empty = none).",
"nullable": true
},
"importRt": {
"type": "array",
"items": {
"type": "string"
},
"description": "VPN route targets imported into the VRF.",
"nullable": true
},
"exportRt": {
"type": "array",
"items": {
"type": "string"
},
"description": "VPN route targets exported from the VRF.",
"nullable": true
},
"gatewayIp": {
"type": "string",
"description": "Subscriber IPv4 gateway address inside the VRF.",
"nullable": true
},
"gatewayIpv6": {
"type": "string",
"description": "Subscriber IPv6 gateway address inside the VRF.",
"nullable": true
},
"l2tpEndpointIp": {
"type": "string",
"description": "Per-VRF L2TP endpoint /32 (LNS/wholesale-LAC transport), or null.",
"nullable": true
},
"comment": {
"type": "string",
"description": "Optional commit comment for the config history.",
"nullable": true
},
"originateDefaultRoute": {
"type": "boolean",
"description": "Originate an IPv4 default route into BGP inside this VRF\n (standalone-CGN inside VRF — this appliance advertises itself as the VRF's internet exit).",
"default": false
}
},
"description": "Request body for VRF create/update.",
"example": {
"name": "wholesale-a",
"tableId": 2502,
"rd": "65000:2502",
"importRt": [
"65000:2502"
],
"exportRt": [
"65000:2502"
],
"gatewayIp": "100.64.32.1",
"gatewayIpv6": "2001:db8:64:32::1",
"l2tpEndpointIp": "45.84.200.70",
"comment": "add the wholesale-a VRF",
"originateDefaultRoute": false
}
}
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/vrfs/{name}#
Delete a VRF.
Description
Refused while the VRF carries live sessions — disconnect or drain them first. 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. |
name |
path | string | No | The VRF 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"
}
}
Schemas#
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". |
ProblemDetails#
| Name | Type | Description |
|---|---|---|
detail |
string | null | |
instance |
string | null | |
status |
||
title |
string | null | |
type |
string | null |
Vrf#
| Name | Type | Description |
|---|---|---|
configured |
boolean | True if this VRF has a routing.vrfs entry (editable); false for session-only rows. |
exportRt |
Array<string> | VPN route targets exported from the VRF. |
gatewayIp |
string | null | Subscriber IPv4 gateway address inside the VRF. |
gatewayIpv6 |
string | null | Subscriber IPv6 gateway address inside the VRF. |
importRt |
Array<string> | VPN route targets imported into the VRF. |
l2tpEndpointIp |
string | null | Per-VRF L2TP endpoint address, when L2TP transport rides this VRF. |
name |
string | VRF name ("default" = the global routing table). |
originateDefaultRoute |
boolean | Whether an IPv4 default route is originated into BGP inside this VRF (standalone-CGN internet-exit advertisement). |
rd |
string | null | BGP route distinguisher, e.g. "65000:2501". |
sessions |
Live sessions currently carried in this VRF. | |
tableId |
Linux route table id backing the VRF (configured VRFs only). |
VrfWrite#
| Name | Type | Description |
|---|---|---|
comment |
string | null | Optional commit comment for the config history. |
exportRt |
Array<string> | VPN route targets exported from the VRF. |
gatewayIp |
string | null | Subscriber IPv4 gateway address inside the VRF. |
gatewayIpv6 |
string | null | Subscriber IPv6 gateway address inside the VRF. |
importRt |
Array<string> | VPN route targets imported into the VRF. |
l2tpEndpointIp |
string | null | Per-VRF L2TP endpoint /32 (LNS/wholesale-LAC transport), or null. |
name |
string | VRF name — the immutable key (ignored in the body on update; the URL wins). |
originateDefaultRoute |
boolean | Originate an IPv4 default route into BGP inside this VRF (standalone-CGN inside VRF — this appliance advertises itself as the VRF's internet exit). |
rd |
string | null | BGP route distinguisher, e.g. "65000:2501" (empty = none). |
tableId |
Linux route table id backing the VRF (must be unique). |
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 |
|---|---|
| VRFs | Configured VRFs merged with live per-VRF session counts, plus VRF create/edit/delete. |