Skip to content

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:

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

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

[
    {
        "name": "residential",
        "tableId": 2501,
        "rd": "65000:2501",
        "importRt": [
            "65000:2501"
        ],
        "exportRt": [
            "65000:2501"
        ],
        "gatewayIp": "100.64.0.1",
        "gatewayIpv6": "2001:db8:64::1",
        "l2tpEndpointIp": "45.84.200.69",
        "originateDefaultRoute": false,
        "sessions": 1842,
        "configured": true
    }
]
Schema of the response body
{
    "type": "array",
    "items": {
        "$ref": "#/components/schemas/Vrf"
    }
}
{
    "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

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

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

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

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.