LocalSubscribers#
10 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#
LocalSubscribers#
GET /api/v1/subscribers/local#
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/subscribers/local/ipoe#
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
{
"vrfName": "residential",
"framedIp": "100.64.12.38",
"framedIpv6": "2001:db8:64:12::26",
"ipv6PdPrefix": "2001:db8:a012:3500::",
"ipv6PdLength": 56,
"dns1": "1.1.1.1",
"dns2": "1.0.0.1",
"dnsV6_1": "2606:4700:4700::1111",
"dnsV6_2": "2606:4700:4700::1001",
"planName": "Fibre 500",
"downloadRateKbps": 500000,
"uploadRateKbps": 100000,
"downloadRatePps": 0,
"uploadRatePps": 0,
"downloadBurstKb": 2048,
"uploadBurstKb": 1024,
"additionalRoutes": [],
"port": 0,
"vlan": 712,
"sVlan": 101,
"option82CircuitId": "MS3-HUL1-0712",
"subscriberServiceId": "SVC-100413"
}
Other accepted types: application/*+json, text/json
Schema of the request body
{
"type": "object",
"properties": {
"vrfName": {
"type": "string",
"nullable": true
},
"framedIp": {
"type": "string",
"nullable": true
},
"framedIpv6": {
"type": "string",
"nullable": true
},
"ipv6PdPrefix": {
"type": "string",
"nullable": true
},
"ipv6PdLength": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint8",
"nullable": true
},
"dns1": {
"type": "string",
"nullable": true
},
"dns2": {
"type": "string",
"nullable": true
},
"dnsV6_1": {
"type": "string",
"nullable": true
},
"dnsV6_2": {
"type": "string",
"nullable": true
},
"planName": {
"type": "string",
"nullable": true
},
"downloadRateKbps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"uploadRateKbps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"downloadRatePps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"uploadRatePps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"downloadBurstKb": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"uploadBurstKb": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"additionalRoutes": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"port": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint8"
},
"vlan": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint16"
},
"sVlan": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint16"
},
"option82CircuitId": {
"type": "string",
"nullable": true
},
"subscriberServiceId": {
"type": "string",
"nullable": true
}
},
"description": "Create/update body for a locally-defined IPoE (DHCP) subscriber.",
"example": {
"vrfName": "residential",
"framedIp": "100.64.12.38",
"framedIpv6": "2001:db8:64:12::26",
"ipv6PdPrefix": "2001:db8:a012:3500::",
"ipv6PdLength": 56,
"dns1": "1.1.1.1",
"dns2": "1.0.0.1",
"dnsV6_1": "2606:4700:4700::1111",
"dnsV6_2": "2606:4700:4700::1001",
"planName": "Fibre 500",
"downloadRateKbps": 500000,
"uploadRateKbps": 100000,
"downloadRatePps": 0,
"uploadRatePps": 0,
"downloadBurstKb": 2048,
"uploadBurstKb": 1024,
"additionalRoutes": [],
"port": 0,
"vlan": 712,
"sVlan": 101,
"option82CircuitId": "MS3-HUL1-0712",
"subscriberServiceId": "SVC-100413"
}
}
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"
}
}
PUT /api/v1/subscribers/local/ipoe/{key}#
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. |
key |
path | string | No |
Request body
{
"vrfName": "residential",
"framedIp": "100.64.12.38",
"framedIpv6": "2001:db8:64:12::26",
"ipv6PdPrefix": "2001:db8:a012:3500::",
"ipv6PdLength": 56,
"dns1": "1.1.1.1",
"dns2": "1.0.0.1",
"dnsV6_1": "2606:4700:4700::1111",
"dnsV6_2": "2606:4700:4700::1001",
"planName": "Fibre 500",
"downloadRateKbps": 500000,
"uploadRateKbps": 100000,
"downloadRatePps": 0,
"uploadRatePps": 0,
"downloadBurstKb": 2048,
"uploadBurstKb": 1024,
"additionalRoutes": [],
"port": 0,
"vlan": 712,
"sVlan": 101,
"option82CircuitId": "MS3-HUL1-0712",
"subscriberServiceId": "SVC-100413"
}
Other accepted types: application/*+json, text/json
Schema of the request body
{
"type": "object",
"properties": {
"vrfName": {
"type": "string",
"nullable": true
},
"framedIp": {
"type": "string",
"nullable": true
},
"framedIpv6": {
"type": "string",
"nullable": true
},
"ipv6PdPrefix": {
"type": "string",
"nullable": true
},
"ipv6PdLength": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint8",
"nullable": true
},
"dns1": {
"type": "string",
"nullable": true
},
"dns2": {
"type": "string",
"nullable": true
},
"dnsV6_1": {
"type": "string",
"nullable": true
},
"dnsV6_2": {
"type": "string",
"nullable": true
},
"planName": {
"type": "string",
"nullable": true
},
"downloadRateKbps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"uploadRateKbps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"downloadRatePps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"uploadRatePps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"downloadBurstKb": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"uploadBurstKb": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32",
"nullable": true
},
"additionalRoutes": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"port": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint8"
},
"vlan": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint16"
},
"sVlan": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint16"
},
"option82CircuitId": {
"type": "string",
"nullable": true
},
"subscriberServiceId": {
"type": "string",
"nullable": true
}
},
"description": "Create/update body for a locally-defined IPoE (DHCP) subscriber.",
"example": {
"vrfName": "residential",
"framedIp": "100.64.12.38",
"framedIpv6": "2001:db8:64:12::26",
"ipv6PdPrefix": "2001:db8:a012:3500::",
"ipv6PdLength": 56,
"dns1": "1.1.1.1",
"dns2": "1.0.0.1",
"dnsV6_1": "2606:4700:4700::1111",
"dnsV6_2": "2606:4700:4700::1001",
"planName": "Fibre 500",
"downloadRateKbps": 500000,
"uploadRateKbps": 100000,
"downloadRatePps": 0,
"uploadRatePps": 0,
"downloadBurstKb": 2048,
"uploadBurstKb": 1024,
"additionalRoutes": [],
"port": 0,
"vlan": 712,
"sVlan": 101,
"option82CircuitId": "MS3-HUL1-0712",
"subscriberServiceId": "SVC-100413"
}
}
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"
}
}
DELETE /api/v1/subscribers/local/ipoe/{key}#
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. |
key |
path | string | No |
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/subscribers/local/ppp#
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
{
"username": "alice@example.net",
"password": "correct horse battery staple",
"subscriberServiceId": "SVC-100412",
"vrfName": "residential",
"framedIp": "100.64.12.37",
"framedIpv6": "2001:db8:64:12::25",
"ipv6PdPrefix": "2001:db8:a012:3400::",
"ipv6PdLength": 56,
"dns1": "1.1.1.1",
"dns2": "1.0.0.1",
"dnsV6_1": "2606:4700:4700::1111",
"dnsV6_2": "2606:4700:4700::1001",
"planName": "Fibre 500",
"downloadRateKbps": 500000,
"uploadRateKbps": 100000,
"downloadRatePps": 0,
"uploadRatePps": 0,
"additionalRoutes": [
"192.0.2.64/28"
]
}
Other accepted types: application/*+json, text/json
Schema of the request body
{
"type": "object",
"properties": {
"username": {
"type": "string",
"nullable": true
},
"password": {
"type": "string",
"nullable": true
},
"subscriberServiceId": {
"type": "string",
"nullable": true
},
"vrfName": {
"type": "string",
"nullable": true
},
"framedIp": {
"type": "string",
"nullable": true
},
"framedIpv6": {
"type": "string",
"nullable": true
},
"ipv6PdPrefix": {
"type": "string",
"nullable": true
},
"ipv6PdLength": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint8",
"nullable": true
},
"dns1": {
"type": "string",
"nullable": true
},
"dns2": {
"type": "string",
"nullable": true
},
"dnsV6_1": {
"type": "string",
"nullable": true
},
"dnsV6_2": {
"type": "string",
"nullable": true
},
"planName": {
"type": "string",
"nullable": true
},
"downloadRateKbps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"uploadRateKbps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"downloadRatePps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"uploadRatePps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"additionalRoutes": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
}
},
"description": "Create/update body for a PPP (username/password) subscriber.\n On update, a null/empty password keeps the stored one.",
"example": {
"username": "alice@example.net",
"password": "correct horse battery staple",
"subscriberServiceId": "SVC-100412",
"vrfName": "residential",
"framedIp": "100.64.12.37",
"framedIpv6": "2001:db8:64:12::25",
"ipv6PdPrefix": "2001:db8:a012:3400::",
"ipv6PdLength": 56,
"dns1": "1.1.1.1",
"dns2": "1.0.0.1",
"dnsV6_1": "2606:4700:4700::1111",
"dnsV6_2": "2606:4700:4700::1001",
"planName": "Fibre 500",
"downloadRateKbps": 500000,
"uploadRateKbps": 100000,
"downloadRatePps": 0,
"uploadRatePps": 0,
"additionalRoutes": [
"192.0.2.64/28"
]
}
}
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"
}
}
PUT /api/v1/subscribers/local/ppp/{key}#
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. |
key |
path | string | No |
Request body
{
"username": "alice@example.net",
"password": "correct horse battery staple",
"subscriberServiceId": "SVC-100412",
"vrfName": "residential",
"framedIp": "100.64.12.37",
"framedIpv6": "2001:db8:64:12::25",
"ipv6PdPrefix": "2001:db8:a012:3400::",
"ipv6PdLength": 56,
"dns1": "1.1.1.1",
"dns2": "1.0.0.1",
"dnsV6_1": "2606:4700:4700::1111",
"dnsV6_2": "2606:4700:4700::1001",
"planName": "Fibre 500",
"downloadRateKbps": 500000,
"uploadRateKbps": 100000,
"downloadRatePps": 0,
"uploadRatePps": 0,
"additionalRoutes": [
"192.0.2.64/28"
]
}
Other accepted types: application/*+json, text/json
Schema of the request body
{
"type": "object",
"properties": {
"username": {
"type": "string",
"nullable": true
},
"password": {
"type": "string",
"nullable": true
},
"subscriberServiceId": {
"type": "string",
"nullable": true
},
"vrfName": {
"type": "string",
"nullable": true
},
"framedIp": {
"type": "string",
"nullable": true
},
"framedIpv6": {
"type": "string",
"nullable": true
},
"ipv6PdPrefix": {
"type": "string",
"nullable": true
},
"ipv6PdLength": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint8",
"nullable": true
},
"dns1": {
"type": "string",
"nullable": true
},
"dns2": {
"type": "string",
"nullable": true
},
"dnsV6_1": {
"type": "string",
"nullable": true
},
"dnsV6_2": {
"type": "string",
"nullable": true
},
"planName": {
"type": "string",
"nullable": true
},
"downloadRateKbps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"uploadRateKbps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"downloadRatePps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"uploadRatePps": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "int32"
},
"additionalRoutes": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
}
},
"description": "Create/update body for a PPP (username/password) subscriber.\n On update, a null/empty password keeps the stored one.",
"example": {
"username": "alice@example.net",
"password": "correct horse battery staple",
"subscriberServiceId": "SVC-100412",
"vrfName": "residential",
"framedIp": "100.64.12.37",
"framedIpv6": "2001:db8:64:12::25",
"ipv6PdPrefix": "2001:db8:a012:3400::",
"ipv6PdLength": 56,
"dns1": "1.1.1.1",
"dns2": "1.0.0.1",
"dnsV6_1": "2606:4700:4700::1111",
"dnsV6_2": "2606:4700:4700::1001",
"planName": "Fibre 500",
"downloadRateKbps": 500000,
"uploadRateKbps": 100000,
"downloadRatePps": 0,
"uploadRatePps": 0,
"additionalRoutes": [
"192.0.2.64/28"
]
}
}
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"
}
}
DELETE /api/v1/subscribers/local/ppp/{key}#
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. |
key |
path | string | No |
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/subscribers/local/pppoe#
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
{
"tunnelEndpoints": [
{
"address": "45.84.200.80",
"port": 1701,
"vrfName": "wholesale-a",
"sharedSecret": "correct horse battery staple",
"assignmentId": "acme-ltd",
"priority": 1
}
],
"port": 0,
"vlan": 713,
"sVlan": 101,
"option82CircuitId": "MS3-HUL1-0713",
"subscriberServiceId": "SVC-100414"
}
Other accepted types: application/*+json, text/json
Schema of the request body
{
"type": "object",
"properties": {
"tunnelEndpoints": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TunnelEndpointWrite"
},
"nullable": true
},
"port": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint8"
},
"vlan": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint16"
},
"sVlan": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint16"
},
"option82CircuitId": {
"type": "string",
"nullable": true
},
"subscriberServiceId": {
"type": "string",
"nullable": true
}
},
"description": "Create/update body for a wholesale (L2TP-relayed) PPPoE subscriber.",
"example": {
"tunnelEndpoints": [
{
"address": "45.84.200.80",
"port": 1701,
"vrfName": "wholesale-a",
"sharedSecret": "correct horse battery staple",
"assignmentId": "acme-ltd",
"priority": 1
}
],
"port": 0,
"vlan": 713,
"sVlan": 101,
"option82CircuitId": "MS3-HUL1-0713",
"subscriberServiceId": "SVC-100414"
}
}
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"
}
}
PUT /api/v1/subscribers/local/pppoe/{key}#
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. |
key |
path | string | No |
Request body
{
"tunnelEndpoints": [
{
"address": "45.84.200.80",
"port": 1701,
"vrfName": "wholesale-a",
"sharedSecret": "correct horse battery staple",
"assignmentId": "acme-ltd",
"priority": 1
}
],
"port": 0,
"vlan": 713,
"sVlan": 101,
"option82CircuitId": "MS3-HUL1-0713",
"subscriberServiceId": "SVC-100414"
}
Other accepted types: application/*+json, text/json
Schema of the request body
{
"type": "object",
"properties": {
"tunnelEndpoints": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TunnelEndpointWrite"
},
"nullable": true
},
"port": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint8"
},
"vlan": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint16"
},
"sVlan": {
"pattern": "^-?(?:0|[1-9]\\d*)$",
"format": "uint16"
},
"option82CircuitId": {
"type": "string",
"nullable": true
},
"subscriberServiceId": {
"type": "string",
"nullable": true
}
},
"description": "Create/update body for a wholesale (L2TP-relayed) PPPoE subscriber.",
"example": {
"tunnelEndpoints": [
{
"address": "45.84.200.80",
"port": 1701,
"vrfName": "wholesale-a",
"sharedSecret": "correct horse battery staple",
"assignmentId": "acme-ltd",
"priority": 1
}
],
"port": 0,
"vlan": 713,
"sVlan": 101,
"option82CircuitId": "MS3-HUL1-0713",
"subscriberServiceId": "SVC-100414"
}
}
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"
}
}
DELETE /api/v1/subscribers/local/pppoe/{key}#
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. |
key |
path | string | No |
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"
}
}
Schemas#
IpoeSubscriberWrite#
| Name | Type | Description |
|---|---|---|
additionalRoutes |
Array<string> | |
dns1 |
string | null | |
dns2 |
string | null | |
dnsV6_1 |
string | null | |
dnsV6_2 |
string | null | |
downloadBurstKb |
||
downloadRateKbps |
||
downloadRatePps |
||
framedIp |
string | null | |
framedIpv6 |
string | null | |
ipv6PdLength |
||
ipv6PdPrefix |
string | null | |
option82CircuitId |
string | null | |
planName |
string | null | |
port |
||
subscriberServiceId |
string | null | |
sVlan |
||
uploadBurstKb |
||
uploadRateKbps |
||
uploadRatePps |
||
vlan |
||
vrfName |
string | null |
PppoeSubscriberWrite#
| Name | Type | Description |
|---|---|---|
option82CircuitId |
string | null | |
port |
||
subscriberServiceId |
string | null | |
sVlan |
||
tunnelEndpoints |
Array<TunnelEndpointWrite> | |
vlan |
PppSubscriberWrite#
| Name | Type | Description |
|---|---|---|
additionalRoutes |
Array<string> | |
dns1 |
string | null | |
dns2 |
string | null | |
dnsV6_1 |
string | null | |
dnsV6_2 |
string | null | |
downloadRateKbps |
||
downloadRatePps |
||
framedIp |
string | null | |
framedIpv6 |
string | null | |
ipv6PdLength |
||
ipv6PdPrefix |
string | null | |
password |
string | null | |
planName |
string | null | |
subscriberServiceId |
string | null | |
uploadRateKbps |
||
uploadRatePps |
||
username |
string | null | |
vrfName |
string | null |
ProblemDetails#
| Name | Type | Description |
|---|---|---|
detail |
string | null | |
instance |
string | null | |
status |
||
title |
string | null | |
type |
string | null |
TunnelEndpointWrite#
| Name | Type | Description |
|---|---|---|
address |
string | null | |
assignmentId |
string | null | |
port |
||
priority |
||
sharedSecret |
string | null | |
vrfName |
string | null |
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 |
|---|---|
| LocalSubscribers |