Node API
V2RaySocks's API uses query strings to complete verification and pull and push resources
Example:
https://yourdomain.com/web_api/?token=thisistoken&node_id=4&node_type=v2ray&act=user
Among them, token=thisistoken&node_id=4&node_type=v2ray is required. If any one of them is missing, an error will be returned
node_type
node_type indicates the type of node
| Acceptable values | Corresponding protocol |
|---|---|
| v2ray | Vmess, VLESS |
| trojan | trojan |
| shadowsocks | shadowsocks-AEAD, shadowsocks-2022 |
| hysteria2 | hysteria2 |
act
act indicates the behavior of the node, the following values are supported
config
Get the config of the node, the API returns a json data, supports ETag
In principle, a standard Xray configuration file will be returned
{
"api": {
"services": [
"HandlerService",
"StatsService"
],
"tag": "api"
},
"dns": [],
"stats": {},
"inbounds": [
{
"port": 36082,
"protocol": "vmess",
"settings": {
"clients": []
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"certificates": [
{
"certificateFile": "/root/.cert/server.crt",
"keyFile": "/root/.cert/server.key"
}
]
},
"wsSettings": {
"path": "/speedtest"
}
},
"tag": "proxy"
},
{
"listen": "127.0.0.1",
"port": 1,
"protocol": "dokodemo-door",
"settings": {
"address": "0.0.0.0"
},
"tag": "api"
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {
"domainStrategy": "UseIP"
}
},
{
"protocol": "blackhole",
"tag": "block"
}
],
"routing": {
"rules": [
{
"type": "field",
"inboundTag": "api",
"outboundTag": "api"
},
{
"type": "field",
"domain": [],
"outboundTag": "block"
},
{
"type": "field",
"protocol": [],
"outboundTag": "block"
}
]
},
"policy": {
"levels": {
"0": {
"handshake": 4,
"connIdle": 300,
"uplinkOnly": 5,
"downlinkOnly": 30,
"statsUserUplink": true,
"statsUserDownlink": true
}
}
}
}
The 0th of inbounds will be used as the node configuration, and the same, the 0th of the streamSettings, wsSettings, etc. (related to transport) are used as node configurations.
Please refer to XrayR , the implementation method is very simple
user
Get the user list of the node, the API returns a json data, supports ETag
v2ray and hysteria2
{
"msg": "ok",
"data": [
{
"id": 12,
"uuid": "21DE8081-81E4-4525-A226-DCA408C4D603",
"dt": 10,
"st": 1
},
{
"id": 13,
"uuid": "EAF06CBA-4047-4A01-A4B5-02E15CD5E718",
"dt": 10,
"st": 1
}
]
}
shadowsocks
{
"msg": "ok",
"data": [
{
"id": 12,
"secret": "21DE8081-81E4-4525-A226-DCA408C4D603",
"dt": 10,
"st": 1
},
{
"id": 13,
"secret": "EAF06CBA-4047-4A01-A4B5-02E15CD5E718",
"dt": 10,
"st": 1
}
]
}
trojan
{
"msg": "ok",
"data": [
{
"id": 12,
"password": "21DE8081-81E4-4525-A226-DCA408C4D603",
"dt": 10,
"st": 1
},
{
"id": 13,
"password": "EAF06CBA-4047-4A01-A4B5-02E15CD5E718",
"dt": 10,
"st": 1
}
]
}
dt indicates the device quantity limit, st indicates the speed limit (Mbps)
submit
Submit traffic usage data to V2RaySocks, accept a post request with json data
[
{
"uid": 1453,
"u": 189773,
"d": 52108028
},
{
"uid": 2122,
"u": 24518,
"d": 46877
},
{
"uid": 2379,
"u": 591,
"d": 5350
},
{
"uid": 2392,
"u": 2222,
"d": 1207
}
]
onlineusers
Submit the online user's IP to V2RaySocks, accept a post request with json data
Due to design issues, internal data can be duplicated
[
{
"uid": 1165323,
"ip": "116.202.118.150"
},
{
"uid": 1144103,
"ip": "27.45.47.47"
},
{
"uid": 1137593,
"ip": "117.61.24.234"
}
]
nodestatus
Submit node status data to V2RaySocks, accept a post request with json data
{
"cpu": "0%",
"mem": "13%",
"net": "",
"disk": "7%",
"uptime": 4183063
}
illegal
Submit users who violated the rules to access the banned domain name to V2RaySocks, accept a post request with json data
Due to design issues, internal data can be duplicated
[
{
"uid": 1165985
},
{
"uid": 1165985
},
{
"uid": 1158653
}
]
get_certificate
Get the node certificate stored in V2RaySocks
get_key
Get the node private key stored in V2RaySocks
Confirm post
All post requests will receive the following response indicating that the post has been successfully executed
{"msg":"ok","ret":200}
Or an error occurs
{"msg":"error","ret":500}