Internal API (/api/v1), dashboard JWT (Authorization: Bearer ...). Requires the reports:read permission. Admin callers must pass service_provider_id; provider users are scoped to their own provider automatically.

Endpoint

Query parameters

Returns one row per switch port with an active subscription for the provider — only subscriptions whose location has both a switch host and an interface produce a row. Link status is read live over SSH, the learned MAC comes from the switch SNMP FDB, the IP from the DHCP lease table, and the manufacturer from the MAC OUI.

Response — 200 OK

match_status compares the learned MAC against the subscriber’s registered MAC: match | mismatch | unregistered (device seen, no MAC registered) | no_device. has_active_device is true when the link is up and a device is learned on the port. subscriber_name comes from the contract contact (null when absent); room/unit are parsed from canonical 4-segment location identifiers (null for legacy identifiers); expected_*_mbps derive from the plan version’s wholesale product and are null when unavailable. Enrichment is best-effort — fields degrade to null when SSH/SNMP/DHCP data is unavailable.
Sandbox callers get a reduced per-port shape: link state comes from the sandbox model, seen_mac/seen_ip/manufacturer are always null, and the row carries device_active and matches_expected instead of ip_address, hostname, seen_mac_count, match_status, and has_active_device (sandbox ports never have real devices, so no FDB/DHCP probing happens).