Skip to content

Sessions#

Live subscriber sessions: list/filter, detail with traffic counters, high-resolution live rates, and force-disconnect.

5 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

Sessions#


GET /api/v1/sessions#

List active sessions (filtered, newest first, paged).

Description

All filters combine with AND. String filters are case-insensitive; username and ip are prefix/substring matches, the rest are exact. 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.
encap query string No Access encapsulation: ipoe | pppoe-local | pppoe-lac | l2tp.
ip query string No Prefix match on the assigned IPv4 or IPv6 WAN address.
limit query 100 No Page size, clamped to 1–500 (default 100).
offset query 0 No Items to skip from the start of the (filtered, sorted) result.
port query No Subscriber-facing data-plane port id (excludes LNS-terminated sessions).
type query string No Session type, e.g. "ipoe" or "ppp".
username query string No Substring match on the subscriber username.
vrf query string No Exact VRF name ("default" for the global table).
walledGarden query boolean No true returns only walled-garden sessions.

Responses

{
    "total": 1842,
    "offset": 0,
    "items": [
        {
            "id": 40213,
            "type": "ppp",
            "encap": "pppoe-local",
            "username": "alice@example.net",
            "ipv4": "100.64.12.37",
            "ipv6": "2001:db8:64:12::1",
            "vrf": "residential",
            "mac": "a4:2b:8c:11:9f:03",
            "svlan": 101,
            "vlan": 1337,
            "plan": "fibre-900",
            "walledGarden": false,
            "uptimeSeconds": 86412.538912
        }
    ]
}
Schema of the response body
{
    "required": [
        "total",
        "offset",
        "items"
    ],
    "type": "object",
    "properties": {
        "total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Total sessions matching the filters (before paging).",
            "format": "int32"
        },
        "offset": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "The offset this page was taken at.",
            "format": "int32"
        },
        "items": {
            "type": "array",
            "items": {
                "$ref": "#/components/schemas/SessionSummary"
            },
            "description": "The page of session summaries, newest session first."
        }
    },
    "description": "GET /api/v1/sessions — one page of the filtered session list.",
    "example": {
        "total": 1842,
        "offset": 0,
        "items": [
            {
                "id": 40213,
                "type": "ppp",
                "encap": "pppoe-local",
                "username": "alice@example.net",
                "ipv4": "100.64.12.37",
                "ipv6": "2001:db8:64:12::1",
                "vrf": "residential",
                "mac": "a4:2b:8c:11:9f:03",
                "svlan": 101,
                "vlan": 1337,
                "plan": "fibre-900",
                "walledGarden": false,
                "uptimeSeconds": 86412.538912
            }
        ]
    }
}
{
    "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
    "title": "VRF not found",
    "status": 404,
    "detail": "No VRF named 'wholesale-b' is configured.",
    "instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "nullable": true
        },
        "title": {
            "type": "string",
            "nullable": true
        },
        "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
        },
        "detail": {
            "type": "string",
            "nullable": true
        },
        "instance": {
            "type": "string",
            "nullable": true
        }
    },
    "example": {
        "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
        "title": "VRF not found",
        "status": 404,
        "detail": "No VRF named 'wholesale-b' is configured.",
        "instance": "/api/v1/vrfs/wholesale-b"
    }
}
{
    "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
    "title": "VRF not found",
    "status": 404,
    "detail": "No VRF named 'wholesale-b' is configured.",
    "instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "nullable": true
        },
        "title": {
            "type": "string",
            "nullable": true
        },
        "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
        },
        "detail": {
            "type": "string",
            "nullable": true
        },
        "instance": {
            "type": "string",
            "nullable": true
        }
    },
    "example": {
        "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
        "title": "VRF not found",
        "status": 404,
        "detail": "No VRF named 'wholesale-b' is configured.",
        "instance": "/api/v1/vrfs/wholesale-b"
    }
}

GET /api/v1/sessions/summary#

Session counts for dashboard tiles.

Description

Returns the total number of active subscriber sessions plus breakdowns by session type, access encapsulation, subscriber-facing port, and VRF, and the number of sessions currently in the walled garden. Cheap to poll; 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

{
    "total": 1842,
    "byType": {
        "ppp": 1503,
        "ipoe": 339
    },
    "byEncap": {
        "pppoe-local": 1200,
        "l2tp": 303,
        "ipoe": 339
    },
    "byPort": [
        {
            "portId": 0,
            "label": "xe-0/0/0",
            "count": 1503
        }
    ],
    "byVrf": {
        "residential": 1789,
        "default": 53
    },
    "walledGarden": 7
}
Schema of the response body
{
    "required": [
        "total",
        "byType",
        "byEncap",
        "byPort",
        "byVrf",
        "walledGarden"
    ],
    "type": "object",
    "properties": {
        "total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Number of active subscriber sessions.",
            "format": "int32"
        },
        "byType": {
            "type": "object",
            "additionalProperties": {
                "pattern": "^-?(?:0|[1-9]\\d*)$",
                "format": "int32"
            },
            "description": "Session count per session type (e.g. \"ipoe\", \"ppp\")."
        },
        "byEncap": {
            "type": "object",
            "additionalProperties": {
                "pattern": "^-?(?:0|[1-9]\\d*)$",
                "format": "int32"
            },
            "description": "Session count per access encapsulation (ipoe | pppoe-local | pppoe-lac | l2tp)."
        },
        "byPort": {
            "type": "array",
            "items": {
                "$ref": "#/components/schemas/PortSessionCount"
            },
            "description": "Session count per subscriber-facing port (LNS-terminated sessions excluded)."
        },
        "byVrf": {
            "type": "object",
            "additionalProperties": {
                "pattern": "^-?(?:0|[1-9]\\d*)$",
                "format": "int32"
            },
            "description": "Session count per VRF; sessions in the global table count under \"default\"."
        },
        "walledGarden": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Number of sessions currently redirected to the walled garden.",
            "format": "int32"
        }
    },
    "description": "GET /api/v1/sessions/summary — dashboard counts over the active sessions.",
    "example": {
        "total": 1842,
        "byType": {
            "ppp": 1503,
            "ipoe": 339
        },
        "byEncap": {
            "pppoe-local": 1200,
            "l2tp": 303,
            "ipoe": 339
        },
        "byPort": [
            {
                "portId": 0,
                "label": "xe-0/0/0",
                "count": 1503
            }
        ],
        "byVrf": {
            "residential": 1789,
            "default": 53
        },
        "walledGarden": 7
    }
}
{
    "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
    "title": "VRF not found",
    "status": 404,
    "detail": "No VRF named 'wholesale-b' is configured.",
    "instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "nullable": true
        },
        "title": {
            "type": "string",
            "nullable": true
        },
        "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
        },
        "detail": {
            "type": "string",
            "nullable": true
        },
        "instance": {
            "type": "string",
            "nullable": true
        }
    },
    "example": {
        "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
        "title": "VRF not found",
        "status": 404,
        "detail": "No VRF named 'wholesale-b' is configured.",
        "instance": "/api/v1/vrfs/wholesale-b"
    }
}
{
    "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
    "title": "VRF not found",
    "status": 404,
    "detail": "No VRF named 'wholesale-b' is configured.",
    "instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "nullable": true
        },
        "title": {
            "type": "string",
            "nullable": true
        },
        "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
        },
        "detail": {
            "type": "string",
            "nullable": true
        },
        "instance": {
            "type": "string",
            "nullable": true
        }
    },
    "example": {
        "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
        "title": "VRF not found",
        "status": 404,
        "detail": "No VRF named 'wholesale-b' is configured.",
        "instance": "/api/v1/vrfs/wholesale-b"
    }
}

GET /api/v1/sessions/{id}#

Full detail for one active session.

Description

Includes addressing, VLANs, service plan, live data-plane traffic counters and — for L2TP-carried sessions — the tunnel endpoints. Fields that don't apply to the session's encapsulation are null. 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.
id path No The BNG session id (from the list endpoint).

Responses

{
    "id": 40213,
    "type": "ppp",
    "encap": "pppoe-local",
    "username": "alice@example.net",
    "ipv4": "100.64.12.37",
    "ipv6": "2001:db8:64:12::1",
    "ipv6PdPrefix": "2001:db8:1234:5600::/56",
    "vrf": "residential",
    "mac": "a4:2b:8c:11:9f:03",
    "svlan": 101,
    "vlan": 1337,
    "portId": 0,
    "portLabel": "xe-0/0/0",
    "plan": "fibre-900",
    "walledGarden": false,
    "pppoeSessionId": 4118,
    "additionalRoutes": [
        "198.51.100.64/29"
    ],
    "traffic": {
        "bytesIn": 184320000,
        "bytesOut": 2216755200,
        "packetsIn": 812004,
        "packetsOut": 1904321,
        "dropsUrpf": 0,
        "dropsRateLimit": 152
    },
    "createdUtc": "2026-08-02T10:24:00Z",
    "lastActivityUtc": "2026-08-03T10:23:58Z",
    "uptimeSeconds": 86412.538912,
    "sessionTimeoutSeconds": 0,
    "idleTimeoutSeconds": 1800,
    "l2tp": null
}
Schema of the response body
{
    "type": "object",
    "properties": {
        "id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "BNG session id.",
            "format": "uint32"
        },
        "type": {
            "type": "string",
            "description": "Session type: \"ipoe\" or \"ppp\"."
        },
        "encap": {
            "type": "string",
            "description": "Access encapsulation — drives which fields apply (requirements 21.7):\n    ipoe | pppoe-local | pppoe-lac | l2tp (LNS-terminated, subscriber behind a LAC)."
        },
        "username": {
            "type": "string",
            "description": "Subscriber username."
        },
        "ipv4": {
            "type": "string",
            "description": "Assigned IPv4 address, or null if IPv6-only.",
            "nullable": true
        },
        "ipv6": {
            "type": "string",
            "description": "IPv6 WAN address, or null.",
            "nullable": true
        },
        "ipv6PdPrefix": {
            "type": "string",
            "description": "Delegated IPv6 prefix (DHCPv6-PD), or null.",
            "nullable": true
        },
        "vrf": {
            "type": "string",
            "description": "VRF carrying the session (\"default\" = global table)."
        },
        "mac": {
            "type": "string",
            "description": "Subscriber MAC address, or null when unknown.",
            "nullable": true
        },
        "svlan": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Outer (service) VLAN id; 0 when untagged.",
            "format": "uint16"
        },
        "vlan": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Inner (customer) VLAN id; 0 when untagged.",
            "format": "uint16"
        },
        "portId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Data-plane port the session terminates on.",
            "format": "uint8"
        },
        "portLabel": {
            "type": "string",
            "description": "Operator-friendly label for that port, or null.",
            "nullable": true
        },
        "plan": {
            "type": "string",
            "description": "Service plan name, or null.",
            "nullable": true
        },
        "walledGarden": {
            "type": "boolean",
            "description": "True while the session is redirected to the walled garden."
        },
        "pppoeSessionId": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "PPPoE session id on the access side, or null for non-PPPoE sessions.",
            "format": "uint16",
            "nullable": true
        },
        "additionalRoutes": {
            "type": "array",
            "items": {
                "type": "string"
            },
            "description": "Extra framed routes installed for this subscriber, as \"prefix/len\" strings."
        },
        "traffic": {
            "oneOf": [
                {
                    "nullable": true
                },
                {
                    "$ref": "#/components/schemas/SessionTraffic"
                }
            ]
        },
        "createdUtc": {
            "type": "string",
            "description": "UTC time the session was established.",
            "format": "date-time"
        },
        "lastActivityUtc": {
            "type": "string",
            "description": "UTC time of the last packet seen from the subscriber.",
            "format": "date-time"
        },
        "uptimeSeconds": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "description": "Seconds since the session was established.",
            "format": "double"
        },
        "sessionTimeoutSeconds": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "RADIUS Session-Timeout being enforced; 0 = none.",
            "format": "uint32"
        },
        "idleTimeoutSeconds": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "RADIUS Idle-Timeout being enforced; 0 = none.",
            "format": "uint32"
        },
        "l2tp": {
            "oneOf": [
                {
                    "nullable": true
                },
                {
                    "$ref": "#/components/schemas/SessionL2tp"
                }
            ]
        }
    },
    "description": "GET /api/v1/sessions/{id} — full detail for one session.",
    "example": {
        "id": 40213,
        "type": "ppp",
        "encap": "pppoe-local",
        "username": "alice@example.net",
        "ipv4": "100.64.12.37",
        "ipv6": "2001:db8:64:12::1",
        "ipv6PdPrefix": "2001:db8:1234:5600::/56",
        "vrf": "residential",
        "mac": "a4:2b:8c:11:9f:03",
        "svlan": 101,
        "vlan": 1337,
        "portId": 0,
        "portLabel": "xe-0/0/0",
        "plan": "fibre-900",
        "walledGarden": false,
        "pppoeSessionId": 4118,
        "additionalRoutes": [
            "198.51.100.64/29"
        ],
        "traffic": {
            "bytesIn": 184320000,
            "bytesOut": 2216755200,
            "packetsIn": 812004,
            "packetsOut": 1904321,
            "dropsUrpf": 0,
            "dropsRateLimit": 152
        },
        "createdUtc": "2026-08-02T10:24:00Z",
        "lastActivityUtc": "2026-08-03T10:23:58Z",
        "uptimeSeconds": 86412.538912,
        "sessionTimeoutSeconds": 0,
        "idleTimeoutSeconds": 1800,
        "l2tp": null
    }
}
{
    "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/sessions/{id}#

Force-disconnect a session.

Description

Tears the session down exactly like the CLI request subscribers disconnect command: the subscriber is disconnected, accounting Stop is emitted, and the action is written to the audit log with the acting identity. Requires the operator role (or above); local appliance only — not available through the fleet proxy.

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.
id path No The BNG session id to disconnect.

Responses

{
    "status": "disconnected",
    "id": 40213,
    "username": "alice@example.net"
}
Schema of the response body
{
    "required": [
        "status",
        "id",
        "username"
    ],
    "type": "object",
    "properties": {
        "status": {
            "type": "string",
            "description": "Always \"disconnected\"."
        },
        "id": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "The disconnected session's id.",
            "format": "uint32"
        },
        "username": {
            "type": "string",
            "description": "The disconnected subscriber's username."
        }
    },
    "description": "DELETE /api/v1/sessions/{id} result.",
    "example": {
        "status": "disconnected",
        "id": 40213,
        "username": "alice@example.net"
    }
}
{
    "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
    "title": "VRF not found",
    "status": 404,
    "detail": "No VRF named 'wholesale-b' is configured.",
    "instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "nullable": true
        },
        "title": {
            "type": "string",
            "nullable": true
        },
        "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
        },
        "detail": {
            "type": "string",
            "nullable": true
        },
        "instance": {
            "type": "string",
            "nullable": true
        }
    },
    "example": {
        "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
        "title": "VRF not found",
        "status": 404,
        "detail": "No VRF named 'wholesale-b' is configured.",
        "instance": "/api/v1/vrfs/wholesale-b"
    }
}
Schema of the response body

{
    "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
    "title": "VRF not found",
    "status": 404,
    "detail": "No VRF named 'wholesale-b' is configured.",
    "instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "nullable": true
        },
        "title": {
            "type": "string",
            "nullable": true
        },
        "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
        },
        "detail": {
            "type": "string",
            "nullable": true
        },
        "instance": {
            "type": "string",
            "nullable": true
        }
    },
    "example": {
        "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
        "title": "VRF not found",
        "status": 404,
        "detail": "No VRF named 'wholesale-b' is configured.",
        "instance": "/api/v1/vrfs/wholesale-b"
    }
}
{
    "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
    "title": "VRF not found",
    "status": 404,
    "detail": "No VRF named 'wholesale-b' is configured.",
    "instance": "/api/v1/vrfs/wholesale-b"
}
Schema of the response body
{
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "nullable": true
        },
        "title": {
            "type": "string",
            "nullable": true
        },
        "status": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "format": "int32",
            "nullable": true
        },
        "detail": {
            "type": "string",
            "nullable": true
        },
        "instance": {
            "type": "string",
            "nullable": true
        }
    },
    "example": {
        "type": "https://tools.ietf.org/html/rfc9110#section-15.5.5",
        "title": "VRF not found",
        "status": 404,
        "detail": "No VRF named 'wholesale-b' is configured.",
        "instance": "/api/v1/vrfs/wholesale-b"
    }
}

GET /api/v1/sessions/{id}/live#

High-resolution live traffic rates for one session.

Description

2-second samples for the session-detail live chart (requirements: watched sessions). Polling this endpoint IS the watch keepalive — the appliance samples a session only while something polls it, so the first call may return an empty series. Returns parallel arrays keyed by the shared times axis. Fleet-proxyable (watching a remote appliance's session registers the watch on that appliance).

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.
id path No The BNG session id.

Responses

{
    "intervalSeconds": 5,
    "times": [
        "2026-08-03T10:24:00Z",
        "2026-08-03T10:24:05Z"
    ],
    "rxBps": [
        18422137.6,
        17980412.8
    ],
    "txBps": [
        214880993.6,
        221304476.8
    ],
    "rxPps": [
        2140.4,
        2098.2
    ],
    "txPps": [
        19040.8,
        19422.6
    ]
}
Schema of the response body
{
    "required": [
        "intervalSeconds",
        "times",
        "rxBps",
        "txBps",
        "rxPps",
        "txPps"
    ],
    "type": "object",
    "properties": {
        "intervalSeconds": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "description": "Sampling interval of the series (seconds).",
            "format": "int32"
        },
        "times": {
            "type": "array",
            "items": {
                "type": "string",
                "format": "date-time"
            },
            "description": "UTC sample timestamps; all rate arrays align to this axis."
        },
        "rxBps": {
            "type": "array",
            "items": {
                "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
                "format": "double"
            },
            "description": "Bits/second received from the subscriber (upload)."
        },
        "txBps": {
            "type": "array",
            "items": {
                "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
                "format": "double"
            },
            "description": "Bits/second sent to the subscriber (download)."
        },
        "rxPps": {
            "type": "array",
            "items": {
                "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
                "format": "double"
            },
            "description": "Packets/second received from the subscriber."
        },
        "txPps": {
            "type": "array",
            "items": {
                "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
                "format": "double"
            },
            "description": "Packets/second sent to the subscriber."
        }
    },
    "description": "GET /api/v1/sessions/{id}/live — parallel rate series keyed by the shared\n    List<DateTime> SessionLiveRatesDto.Times axis. Arrays are empty until the watch has collected samples.",
    "example": {
        "intervalSeconds": 5,
        "times": [
            "2026-08-03T10:24:00Z",
            "2026-08-03T10:24:05Z"
        ],
        "rxBps": [
            18422137.6,
            17980412.8
        ],
        "txBps": [
            214880993.6,
            221304476.8
        ],
        "rxPps": [
            2140.4,
            2098.2
        ],
        "txPps": [
            19040.8,
            19422.6
        ]
    }
}
{
    "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#

PortSessionCount#

Name Type Description
count Active sessions on this port.
label string | null Operator-friendly port label from config (label/ifname/PCI), or null.
portId Data-plane port id (subscriber interfaces first, then network interfaces).

ProblemDetails#

Name Type Description
detail string | null
instance string | null
status
title string | null
type string | null

SessionDetail#

Name Type Description
additionalRoutes Array<string> Extra framed routes installed for this subscriber, as "prefix/len" strings.
createdUtc string(date-time) UTC time the session was established.
encap string Access encapsulation — drives which fields apply (requirements 21.7): ipoe | pppoe-local | pppoe-lac | l2tp (LNS-terminated, subscriber behind a LAC).
id BNG session id.
idleTimeoutSeconds RADIUS Idle-Timeout being enforced; 0 = none.
ipv4 string | null Assigned IPv4 address, or null if IPv6-only.
ipv6 string | null IPv6 WAN address, or null.
ipv6PdPrefix string | null Delegated IPv6 prefix (DHCPv6-PD), or null.
l2tp
lastActivityUtc string(date-time) UTC time of the last packet seen from the subscriber.
mac string | null Subscriber MAC address, or null when unknown.
plan string | null Service plan name, or null.
portId Data-plane port the session terminates on.
portLabel string | null Operator-friendly label for that port, or null.
pppoeSessionId PPPoE session id on the access side, or null for non-PPPoE sessions.
sessionTimeoutSeconds RADIUS Session-Timeout being enforced; 0 = none.
svlan Outer (service) VLAN id; 0 when untagged.
traffic
type string Session type: "ipoe" or "ppp".
uptimeSeconds Seconds since the session was established.
username string Subscriber username.
vlan Inner (customer) VLAN id; 0 when untagged.
vrf string VRF carrying the session ("default" = global table).
walledGarden boolean True while the session is redirected to the walled garden.

SessionDisconnectResult#

Name Type Description
id The disconnected session's id.
status string Always "disconnected".
username string The disconnected subscriber's username.

SessionL2tp#

Name Type Description
localSessionId Session id inside the tunnel on this appliance.
localTunnelId Tunnel id on this appliance.
peerIp string | null Peer tunnel endpoint IP, or null when unknown.
peerSessionId Session id on the peer.
peerTunnelId Tunnel id on the peer (LAC or LNS).
remoteHostname string | null The peer's L2TP Host Name AVP, or null when unknown.

SessionListPage#

Name Type Description
items Array<SessionSummary> The page of session summaries, newest session first.
offset The offset this page was taken at.
total Total sessions matching the filters (before paging).

SessionLiveRates#

Name Type Description
intervalSeconds Sampling interval of the series (seconds).
rxBps Array<> Bits/second received from the subscriber (upload).
rxPps Array<> Packets/second received from the subscriber.
times Array<string(date-time)> UTC sample timestamps; all rate arrays align to this axis.
txBps Array<> Bits/second sent to the subscriber (download).
txPps Array<> Packets/second sent to the subscriber.

SessionsSummary#

Name Type Description
byEncap Session count per access encapsulation (ipoe | pppoe-local | pppoe-lac | l2tp).
byPort Array<PortSessionCount> Session count per subscriber-facing port (LNS-terminated sessions excluded).
byType Session count per session type (e.g. "ipoe", "ppp").
byVrf Session count per VRF; sessions in the global table count under "default".
total Number of active subscriber sessions.
walledGarden Number of sessions currently redirected to the walled garden.

SessionSummary#

Name Type Description
encap string Access encapsulation: ipoe | pppoe-local | pppoe-lac | l2tp (LNS-terminated).
id BNG session id — the key for the detail/live/disconnect endpoints.
ipv4 string | null Assigned IPv4 address, or null if the session is IPv6-only.
ipv6 string | null IPv6 WAN address, or null if not dual-stack.
mac string | null Subscriber MAC address (aa:bb:cc:dd:ee:ff), or null when unknown.
plan string | null Service plan name, or null when no plan is applied.
svlan Outer (service) VLAN id; 0 when untagged.
type string Session type: "ipoe" or "ppp".
uptimeSeconds Seconds since the session was established.
username string Subscriber username (PPP username, or the IPoE circuit identity).
vlan Inner (customer) VLAN id; 0 when untagged.
vrf string VRF carrying the session ("default" = global table).
walledGarden boolean True while the session is redirected to the walled garden.

SessionTraffic#

Name Type Description
bytesIn Bytes received from the subscriber.
bytesOut Bytes sent to the subscriber.
dropsRateLimit Packets dropped by the plan rate limiter.
dropsUrpf Upstream packets dropped by the uRPF source check.
packetsIn Packets received from the subscriber.
packetsOut Packets sent to the subscriber.

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
Sessions Live subscriber sessions: list/filter, detail with traffic counters, high-resolution live rates, and force-disconnect.