Nodes

A node is your Linux box running the ProxyKite agent, with the dongles plugged into it. Its id is in the panel URL (/nodes/12) and in each proxy's node.id. Not available to reseller sub-users (GET /nodes answers an empty list, the other endpoints 404 not_found).

The node object

{"id": 12, "name": "Rack A", "display_name": "Rack A", "hostname": "proxyserver2", "online": true,
 "tunnel_connected": true, "last_seen_at": "2026-10-10T08:00:00+00:00", "agent_version": "1.2.0",
 "os": "Debian GNU/Linux 12", "arch": "arm64", "uptime_s": 86400,
 "public_ip": "106.192.92.83",
 "location": {"country_code": "IN", "country": "India", "city": "Kolkata", "source": "auto"},
 "isp": {"name": "Airtel", "asn": 9498, "as_name": "BHARTI-AIRTEL", "org": "Bharti Airtel Ltd", "country_code": "IN",
         "logo_url": "https://proxykite.com/isp-logos/airtel.png"},
 "dongles": 2,
 "uplink": {"mode": "auto", "state": "system", "text": "Ethernet / default route"}}
FieldMeaning
nameyour name for the box (null = none)
display_namename, or the hostname when no name is set
hostnamethe box's own hostname
online, tunnel_connected, last_seen_atwhether the box is up and its tunnel to the cloud router is connected; last heartbeat
agent_version, os, arch, uptime_swhat the box reports about itself
public_ipthe box's public IP
locationcountry_code, country, city and source: auto = from the box's public IP, manual = set by you
isp{"name", "asn", "as_name", "org", "country_code", "logo_url"} of the box's connection
donglesnumber of dongles on the box
uplinktunnel uplink: your mode and the current state / text — see Tunnel uplink

List nodes

GET /nodes

Ability: read · Your boxes. Reseller sub-users get an empty list.

curl
Python
Node.js
PHP
curl 'https://proxykite.com/api/v1/nodes' \
  -H "Authorization: Bearer $HYP_TOKEN" \
  -H 'Accept: application/json'

Response 200: {"data": [<node>, ...]}

Get one node

GET /nodes/{id}

Ability: read

curl
Python
Node.js
PHP
curl 'https://proxykite.com/api/v1/nodes/12' \
  -H "Authorization: Bearer $HYP_TOKEN" \
  -H 'Accept: application/json'

Response 200: {"data": <node>}

Rename or set the location

PATCH /nodes/{id}

Ability: manage · Who: owner or team admin.

Body fieldType
namestring ≤ 64 chars, or nulloptional — null or "" = use the hostname
country_codeISO-2, e.g. INoptional — switches the location to manual
citystring or nulloptional — switches the location to manual
location_sourceauto | manualoptional — auto goes back to the location of the box's public IP
curl
Python
Node.js
PHP
curl -X PATCH 'https://proxykite.com/api/v1/nodes/12' \
  -H "Authorization: Bearer $HYP_TOKEN" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Rack A","country_code":"IN","city":"Kolkata"}'

To go back to the automatic location:

curl
Python
Node.js
PHP
curl -X PATCH 'https://proxykite.com/api/v1/nodes/12' \
  -H "Authorization: Bearer $HYP_TOKEN" \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{"location_source":"auto"}'

Response 200: {"data": <node>}

Interfaces of a node

GET /nodes/{id}/interfaces

Ability: read

Everything the box reported about its network interfaces: the dongles (as interface objects), its other interfaces, and box commands that are still pending.

curl
Python
Node.js
PHP
curl 'https://proxykite.com/api/v1/nodes/12/interfaces' \
  -H "Authorization: Bearer $HYP_TOKEN" \
  -H 'Accept: application/json'

Response 200

{"data": {
  "node_id": 12,
  "auto_adopt": true,
  "ignored_macs": [],
  "adopted_macs": [],
  "reported_at": "2026-10-09T18:00:00+00:00",
  "dongles": [{"proxy_id": 7, "iface": "enx0c5b8f279a64", "...": "..."}],
  "other_interfaces": [{"iface": "eth0", "mac": "dc:a6:32:00:00:01", "...": "..."}],
  "pending_actions": [{"id": 42, "type": "rescan", "mac": null, "hw_key": null, "status": "pending", "error": null,
                       "created_at": "2026-10-09T18:00:00+00:00"}]
}}
FieldMeaning
auto_adopttrue: new dongles become proxies automatically; false: they wait as pending_approval
ignored_macsinterfaces you told the panel to ignore
adopted_macsnon-Huawei interfaces you adopted as proxies
other_interfacesthe box's interfaces that are not proxies (as reported by the agent)
pending_actionsqueued box commands (rescan, reset_iface, …) not yet picked up

Rescan

POST /nodes/{id}/rescan

Ability: manage · Who: owner or team admin.

Asks the box to look for new or removed dongles now, instead of waiting for its next scan.

curl
Python
Node.js
PHP
curl -X POST 'https://proxykite.com/api/v1/nodes/12/rescan' \
  -H "Authorization: Bearer $HYP_TOKEN" \
  -H 'Accept: application/json'

Response 202

{"data": {"id": 42, "type": "rescan", "mac": null, "hw_key": null, "status": "pending", "error": null,
          "created_at": "2026-10-09T18:00:00+00:00"}}