ADOS support API via Internet since 1.5.0 to provide user with ability to get information of resource they have in ADOS.
User can simply use this API with http/https infrastructure without any client limitation.
The official API endpoint is https://nest.axesdn.com:8443, user can use endpoint with following resource URL to all API.
To use this API, user must have account in ADOS, and then create API key/secret pair under account as credential in ADOS web page. With this credential, user is able to login API system via API call.
For security reason, the API uses token-based authorization mechanism. After logining, user will get two tokens --- access token and refresh token.
Authorization: Bearer <access token>, then API will be able to get token from request and decide if it's legeal. But for protecting user credential, the access token is only effective in 1 hour. After the access token is expired, user need to re-login or refresh it to get new one.Authorization: Bearer <refresh token>, API will be able to get token from request and decide if it's legeal. Expiration of refresh token is longer than access token, it's normally 7 days.Login API system with user API credential and get access and refresh token.
| Action | Resource URL |
|---|---|
POST |
api/v1/login |
This API only allows 1 request/second per user.
jsonapi_access_key: api key api_access_secret: api secret{
"api_access_key": "",
"api_access_secret": ""
}
jsonaccess_token: token for access API resource, expiration is 1 hourrefresh_token: token for refreshing access token, expiration is 7 days{
"access_token": "",
"refresh_token": ""
}
Refresh access token, the request header must include Authorization: Bearer <refresh token>
| Action | Resource URL |
|---|---|
POST |
api/v1/refresh |
This API only allows 1 request/second per user.
jsonaccess_token: token for access API resource, expiration is 1 hour{
"access_token": ""
}
Router is core resource of API and entity performing network functions, API provides various aspect infomation related to router.
List all routers under user, the request header must include Authorization: Bearer <access token>
| Action | Resource URL |
|---|---|
GET |
api/v1/routers |
This API only allows 1 request/second per user.
jsondata: Array/List of routercreated_at: router created time, format comply with ISO8601, ie. 2022-01-01T00:00:00 updated_at: router latest updated time, format comply with ISO8601, ie. 2022-01-01T00:00:00 description: description of router name: name of router status: status of routertype: type of router uuid: identifier of routermsg: message of reponse{
"data": [
{
"created_at": "",
"description": "",
"name": "",
"status": "",
"type": "",
"updated_at": "",
"uuid": ""
}
],
"msg": ""
}
Get current/instant monitor data of all routers under user, the request header must include Authorization: Bearer <access token>
| Action | Resource URL |
|---|---|
GET |
api/v1/routers/monitor/instant |
This API only allows 1 request/second per user.
jsondata: data of routersrouters: Array/List of routername: name of router type: type of router uuid: identifier of routermonitor: monitor of routercpu_used_percent: usage of each cpu on router in percentagecpuX: X represent cpu numbermemory_used_percent: usage of memory on router in percentagestatus: status of router, 1 means up, 0 means downtimestamp: timestamp of monitor data in Unix/Epoch time formatmsg: message of reponse{
"data": {
"routers": [{
"name": "",
"type": "",
"uuid": "",
"monitor": {
"cpu_used_percent": {
"cpu0": "6.133333333612734"
},
"memory_used_percent": "29.38048842012329",
"status": "1"
}
}],
"timestamp": 1647878061.439556
},
"msg": "success"
}
Get monitor data of specified router during a period, the request header must include Authorization: Bearer <access token>
| Action | Resource URL |
|---|---|
GET |
api/v1/router/<router uuid>/monitor/range |
This API only allows 1 request/second per user.
start: Required. Start time that monitor collect data from, its format must comply with ISO8601 like 2022-01-01T00:00:00 end: Required. End time that monitor collect data to, its format must comply with ISO8601 like 2022-01-01T00:00:00Note: Allowed time range specified by
startandendis[15s, 90d], larger than 15 seconds and less than 90 days.
jsondata: Instance of monitorcpu_used_percent: usage of each cpu on router in percentagecpuX: X represent cpu numbermemory_used_percent: usage of memory on router in percentagestatus: status of router, 1 means up, 0 means downmsg: message of reponse{
"data": {
"cpu_used_percent": {
"cpu0": [
[
1647734445,
"7.600000000093132"
],
[
1647734460,
"5.333333333643775"
]
]
},
"memory_used_percent": [
[
1647734445,
"29.171987576660516"
],
[
1647734460,
"29.141638682621515"
]
],
"status": [
[
1647734445,
"1"
],
[
1647734460,
"1"
]
]
},
"msg": "success"
}
Get sorted TopN data of specified router during a period, the request header must include Authorization: Bearer <access token>
Note: before using this API, TopN function must be enabled in this router
| Action | Resource URL |
|---|---|
GET |
api/v1/router/<router uuid>/topn/sort |
This API only allows 1 request/second per user.
start: Required. Start time that TopN collect data from, its format must comply with ISO8601 like 2022-01-01T00:00:00 end: Required. End time that TopN collect data to, its format must comply with ISO8601 like 2022-01-01T00:00:00 ifaces: Required. Interfaces which TopN collect data from, if there are one more interfaces, separate with comma, ie. eth0,eth1. Be aware that TopN must be enabled in according interfaces, otherwise, there is no data collected from top_num: Optional. Specify N in TopN, maximum sorted top data. There are following options:defaultsort_by: Optional. Specify according to which element TopN perform the aggregation. There are following options:defaultsort_for: Optional. Specify according to which field TopN perform the aggregation. There are following options:defaultdirection: Optional. Specify according to which direction TopN perform the aggregation. There are following options:defaultjsondata: Instance of sorted TopN datastart_time: Start time that TopN collect data from, its format comply with Unix/Epoch time end_time: End time that TopN collect data to, its format comply with Unix/Epoch time result:sort_item: sort item according to parameter sort_bysize: accumulated bytes of packets matching sort_itempercent: percentage of sort_item size in TopNrank: rank of sort_item in TopNmsg: message of reponse{
"data": {
"direction": "uplink",
"end_time": 1647820800,
"ifaces": [
"eth0"
],
"result": [
{
"percent": "67.61%",
"rank": 1,
"size": "1.28 GB",
"sort_item": "192.168.72.162/tcp/41807"
},
{
"percent": "32.37%",
"rank": 2,
"size": "613.62 MB",
"sort_item": "192.168.72.162/udp/31099"
},
{
"percent": "0.02%",
"rank": 3,
"size": "327.64 KB",
"sort_item": "192.168.72.162/udp/123"
},
{
"percent": "0.00%",
"rank": 4,
"size": "1.39 KB",
"sort_item": "192.168.72.162/tcp/28358"
},
{
"percent": "0.00%",
"rank": 5,
"size": "1.37 KB",
"sort_item": "192.168.72.162/tcp/49730"
}
],
"sort_by": "flow",
"sort_for": "src",
"start_time": 1646870400,
"topn": 5
},
"msg": "success"
}
Connection represent network topology and is most important indicator of network performance in ADOS, API provides various aspect infomation related to connection.
List all connections under user, the request header must include Authorization: Bearer <access token>
| Action | Resource URL |
|---|---|
GET |
api/v1/connections |
This API only allows 1 request/second per user.
jsondata: Array/List of connectioncreated_at: connection created time, format comply with ISO8601, ie. 2022-01-01T00:00:00 updated_at: connection latest updated time, format comply with ISO8601, ie. 2022-01-01T00:00:00 name: name of connection type: type of connection uuid: identifier of connectionrouter: uuid of router which originate the connection monitorpeer_router: uuid of router which is another side of connection compared with routermsg: message of reponse{
"data": [
{
"created_at": "",
"name": "",
"peer_router": "",
"router": "",
"type": "",
"updated_at": "",
"uuid": ""
}
],
"msg": "success"
}
Get current/instant monitor data of all connections under user, the request header must include Authorization: Bearer <access token>
| Action | Resource URL |
|---|---|
GET |
api/v1/connections/monitor/instant |
This API only allows 1 request/second per user.
jsondata: data of connectionsconnections: Array/List of connectionname: name of connection type: type of connection uuid: identifier of connectionmonitor: monitor of routerpacket_loss_percent: packet loss rate of connection in percentagelatency_ms: latency of connection in millisecondthroughput_in_bps: ingress throughput of connection in bit per secondthroughput_out_bps: egress throughput of connection in bit per secondstatus: status of connection, 1 means up, 0 means downtimestamp: timestamp of monitor data in Unix/Epoch time formatmsg: message of reponse{
"data": {
"connections": [{
"name": "",
"type": "",
"uuid": "",
"monitor": {
"latency_ms": "0.5946557",
"packet_loss_percent": "0",
"status": "1",
"throughput_in_bps": "1027.2",
"throughput_out_bps": "1027.2"
}
}],
"timestamp": 1647883955.896893
},
"msg": "success"
}
Get monitor data of specified connection during a period, the request header must include Authorization: Bearer <access token>
| Action | Resource URL |
|---|---|
GET |
api/v1/connection/<connection uuid>/monitor/range |
This API only allows 1 request/second per user.
start: Required. Start time that monitor collect data from, its format must comply with ISO8601 like 2022-01-01T00:00:00 end: Required. End time that monitor collect data to, its format must comply with ISO8601 like 2022-01-01T00:00:00 Note: Allowed time range specified by
startandendis[15s, 90d], larger than 15 seconds and less than 90 days.
monitor:
jsondata: Instance of monitorpacket_loss_percent: packet loss rate of connection in percentagelatency_ms: latency of connection in millisecondthroughput_in_bps: ingress throughput of connection in bit per secondthroughput_out_bps: egress throughput of connection in bit per secondstatus: status of connection, 1 means up, 0 means downmsg: message of reponseexample:
{
"data": {
"latency_ms": [
[
1647734445,
"0.5467287000000001"
],
[
1647734460,
"0.5060959"
]
],
"packet_loss_percent": [
[
1647734445,
"0"
],
[
1647734460,
"0"
]
],
"status": [
[
1647734445,
"1"
],
[
1647734460,
"1"
]
],
"throughput_in_bps": [
[
1647734445,
"803.2"
],
[
1647734460,
"737.6"
]
],
"throughput_out_bps": [
[
1647734445,
"803.2"
],
[
1647734460,
"737.6"
]
]
},
"msg": "success"
}
List all ADAS apps under user, the request header must include Authorization: Bearer <access token>.
| Action | Resource URL |
|---|---|
GET |
api/v1/apps/adas |
This API only allows 1 request/second per user.
jsondata: Array/List of ADAS appsmsg: message of responsename: ADAS app nameuuid: ADAS app uuiddescription: ADAS app descriptiondomain: app domain listips: source IP listservices: service list. Each service contains port and protocolstatus: app statusservice: service type. ADAS apps return adasoperation_status: operation statuscreated_at: create timeupdated_at: update timeapp_dns_record: DNS record list. Each record contains uuid, name, domains, adas_line_ids, record_type, weight, redundancy, and locationapp_line: line list. Each line contains line_name, line_id, line_uuid, and edge_ip{
"data": [
{
"app_dns_record": [
{
"adas_line_ids": [2],
"domains": ["awsdenv011111.aeolusnet.com"],
"location": {
"country": "*"
},
"name": "test1",
"record_type": "A",
"redundancy": 1,
"uuid": "2072597097059717120",
"weight": 100
}
],
"app_line": [
{
"edge_ip": "61.172.165.74",
"line_id": 2,
"line_name": "test1",
"line_uuid": "2072597097059717120"
}
],
"created_at": "2025-11-10T04:52:31.781534",
"description": "",
"domain": [],
"ips": ["1.1.1.1"],
"name": "dns",
"operation_status": "",
"service": "adas",
"services": [
{
"port": "53",
"protocol": "tcp"
},
{
"port": "53",
"protocol": "udp"
}
],
"status": "active",
"updated_at": "2026-07-02T08:29:52.165084",
"uuid": "1987745161932705792"
}
],
"msg": "success"
}
Get current/instant monitor data of all lines under user of one ADAS app, the request header must include Authorization: Bearer <access token>.
| Action | Resource URL |
|---|---|
GET |
api/v1/apps/adas/<id>/monitor/instant |
This API only allows 1 request/second per user.
jsondata:
name: ADAS app nameuuid: ADAS app uuidtimestamp: response timestamplines: Array/List of ADAS line monitor data
line_name: ADAS line nameline_id: ADAS line IDline_uuid: ADAS line uuidedge_ip: ADAS line edge IPstatus: ADAS line status, for example up, down, or unknownmonitor: current/instant monitor data of the linemonitor.latency_ms: latency in millisecondsmonitor.packet_loss_percent: packet loss percentagemonitor.throughput_in_bps: inbound throughput in bpsmonitor.throughput_out_bps: outbound throughput in bpsmsg: message of response{
"data": {
"lines": [
{
"edge_ip": "61.172.165.74",
"line_id": 2,
"line_name": "test1",
"line_uuid": "2072597097059717120",
"monitor": {
"latency_ms": "25.73",
"packet_loss_percent": "0.00",
"throughput_in_bps": "5068.80",
"throughput_out_bps": "6603.73"
},
"status": "up"
}
],
"name": "dns",
"timestamp": 1783394200.880278,
"uuid": "1987745161932705792"
},
"msg": "success"
}
Get current/instant monitor data of all lines under user of one ADAS app, the request header must include Authorization: Bearer <access token>.
| Action | Resource URL |
|---|---|
GET |
api/v1/apps/adas/<id>/monitor/regions |
This API only allows 1 request/second per user.
jsondata:
name: ADAS app nameuuid: ADAS app uuidtimestamp: response timestampdns_records: Array/List of DNS record region monitor data
uuid: DNS record uuiddomains: Array/List of DNS domainslocation: DNS record location policyredundancy: DNS record redundancy modelines: Array/List of ADAS line monitor data under this DNS record
line_name: ADAS line nameline_id: ADAS line IDline_uuid: ADAS line uuidedge_ip: ADAS line edge IPstatus: ADAS line status, for example up, down, or unknownmonitor: current/instant monitor data of the linemonitor.latency_ms: latency in millisecondsmonitor.packet_loss_percent: packet loss percentagemonitor.throughput_in_bps: inbound throughput in bpsmonitor.throughput_out_bps: outbound throughput in bpsmsg: message of response{
"data": {
"dns_records": [
{
"uuid": "dns-record-uuid",
"domains": ["awsdenv011111.aeolusnet.com"],
"location": {
"country": "*"
},
"redundancy": "active-active",
"lines": [
{
"edge_ip": "61.172.165.74",
"line_id": 2,
"line_name": "test1",
"line_uuid": "line-uuid",
"monitor": {
"latency_ms": "25.64",
"packet_loss_percent": "0.00",
"throughput_in_bps": "4851.20",
"throughput_out_bps": "4610.13"
},
"status": "up"
}
]
}
],
"name": "dns",
"timestamp": 1783332032.624551,
"uuid": "1987745161932705792"
},
"msg": "success"
}
Get monitor data of specified ADAS line during a period, the request header must include Authorization: Bearer <access token>.
| Action | Resource URL |
|---|---|
GET |
api/v1/apps/adas/<line_uuid>/monitor/range |
This API only allows 1 request/second per user.
start: Required. Start time that monitor collect data from, its format must comply with ISO8601 like 2022-01-01T00:00:00end: Required. End time that monitor collect data to, its format must comply with ISO8601 like 2022-01-01T00:00:00Note: Allowed time range specified by
startandendis[15s, 90d], larger than 15 seconds and less than 90 days.
jsondata: Instance of monitorpacket_loss_percent: packet loss rate of connection in percentagelatency_ms: latency of connection in millisecondthroughput_in_bps: ingress throughput of connection in bit per secondthroughput_out_bps: egress throughput of connection in bit per secondstatus: status of connection, 1 means up, 0 means downmsg: message of responsestatus.{
"data": {
"latency_ms": [
[
1780761600,
"25.64"
]
],
"packet_loss_percent": [
[
1780761600,
"0.00"
]
],
"status": [
[
1780761600,
"1"
]
],
"throughput_in_bps": [
[
1780761600,
"4263.47"
]
],
"throughput_out_bps": [
[
1780761600,
"5575.47"
]
]
},
"msg": "success"
}
ANOS is a service resource under the current customer. API provides the ability to list ANOS services and operate service status.
List all ANOS services under user, the request header must include Authorization: Bearer <access token>.
| Action | Resource URL |
|---|---|
GET |
api/v1/anoses |
This API only allows 1 request/second per user.
jsondata: Array/List of ANOS servicemsg: message of responseid: id of ANOS serviceuuid: identifier of ANOS servicename: name of ANOS serviceis_active: whether ANOS service is activeaccess_router: access router basic informationpeer_router: peer router basic informationconnections: Array/List of related connectionscreated_at: ANOS service created time, format comply with ISO8601, ie. 2022-01-01T00:00:00updated_at: ANOS service latest updated time, format comply with ISO8601, ie. 2022-01-01T00:00:00{
"data": [
{
"id": 6,
"uuid": "2029446561406128129",
"name": "anoslink-sh-test4-to-fra-through-test3",
"is_active": true,
"access_router": {
"name": "sh",
"uuid": "26c83c2c-c66d-467d-a4e1-7928429c71f6"
},
"peer_router": {
"name": "fra",
"uuid": "ef129da4-993b-4f0d-a7ff-455e484be6d2"
},
"connections": [
{
"name": "anoslink-sh-test4-to-fra-through-test3",
"uuid": "2029446561406128128"
}
],
"created_at": "2026-03-05T06:39:00.190684",
"updated_at": "2026-03-06T09:46:06.947400"
}
],
"msg": "success"
}
Start specified ANOS service, the request header must include Authorization: Bearer <access token>.
| Action | Resource URL |
|---|---|
POST |
api/v1/anos/<service_id>/start |
This API only allows 1 request/second per user.
service_id: Required. Integer ID of ANOS servicejsondata: empty stringmsg: message of response{
"data": "",
"msg": "success"
}
Stop specified ANOS service, the request header must include Authorization: Bearer <access token>.
| Action | Resource URL |
|---|---|
POST |
api/v1/anos/<service_id>/stop |
This API only allows 1 request/second per user.
service_id: Required. Integer ID of ANOS servicejsondata: empty stringmsg: message of response{
"data": "",
"msg": "success"
}
Basically, user can use any popular http client to archive the API call in ADOS, like postman, http library in various languages, etc..., here just take curl in command line as example to show usage of API.
# Don't forget to record the access_token and refresh_token
curl -X POST "https://nest.axesdn.com:8443/api/v1/login" \
-H "Content-Type: application/json" \
-d '{"api_access_key": "<key>", "api_access_secret": "<secret>"}'
# Don't forget to record the new access_token
curl -X POST "https://nest.axesdn.com:8443/api/v1/refresh" \
-H "Accept: application/json" \
-H "Authorization: Bearer <refresh_token>"
curl -X GET "https://nest.axesdn.com:8443/api/v1/routers" \
-H "Accept: application/json" \
-H "Authorization: Bearer <access_token>"
curl -X GET "https://nest.axesdn.com:8443/api/v1/routers/monitor/instant" \
-H "Accept: application/json" \
-H "Authorization: Bearer <access_token>"
# get 24h monitor data for specific router
curl -X GET "https://nest.axesdn.com:8443/api/v1/router/<router uuid>/monitor/range?start=2022-03-01T00:00:00&end=2022-03-02T00:00:00" \
-H "Accept: application/json" \
-H "Authorization: Bearer <access_token>"
# get top5 data which is sorted by downlink source address from eth1 in 1 hour
# most of parameters have its default value, you don't need to fill with everyone, please refer to API for details
curl -X GET "https://nest.axesdn.com:8443/api/v1/router/<router uuid>/topn/sort?start=2022-03-01T00:00:00&end=2022-03-01T01:00:00&ifaces=eth1&top_num=5&sort_by=addr&sort_for=src&direction=downlink" \
-H "Accept: application/json" \
-H "Authorization: Bearer <access_token>"
please note: make sure the TopN is enabled in this router before you try to get related data.
curl -X GET "https://nest.axesdn.com:8443/api/v1/anoses" \
-H "Accept: application/json" \
-H "Authorization: Bearer <access_token>"
curl -X POST "https://nest.axesdn.com:8443/api/v1/anos/6/start" \
-H "Accept: application/json" \
-H "Authorization: Bearer <access_token>"
curl -X POST "https://nest.axesdn.com:8443/api/v1/anos/6/stop" \
-H "Accept: application/json" \
-H "Authorization: Bearer <access_token>"
There is python library developed for using API programmatically. If your program happens to be written in python and want to use this API, then you may consider using it in your code.
It's very easy to install it via pip:
pip install axesdn_sdk
Please Note: this python library depends on python >=3.7 and requests >= 2.26.0
For more usage of this library, please refer to axesdn_sdk page