Endpoints
Manage monitored endpoints (servers identified by IP address or hostname).
Manage monitored endpoints (servers identified by IP address or hostname). Endpoints created here behave exactly like endpoints provisioned through WHMCS; pass whmcs_customer_id to scope reads and writes to one customer.
Endpoint detail with scan data
/api/v1/endpoints/{endpoint}/detailEverything the client-area endpoint page shows in one call: the endpoint, its latest scan, up to 10 open alerts, currently allowed ports, and which ports appeared or disappeared between the last two scans.
latest_scanisnulluntil the first scan completes;new_ports/closed_portsare empty until at least two scans exist.whitelisted_portsentries are"port:protocol"strings; rules covering both protocols appear once per protocol.- Unlike the other reads in this group, this response has no
metaenvelope.
Query parameters
| Name | Type | Required | Notes |
|---|---|---|---|
whmcs_customer_id | integer | Optional | Customer making the request, for ownership checks. |
curl -X GET 'https://portal.example.com/api/v1/endpoints/9f2c1e4a-5b6d-4e7f-8a9b-0c1d2e3f4a5b/detail?whmcs_customer_id=1042' \
-H 'Authorization: Bearer $AEGIS_API_KEY'{
"data": {
"id": "9f2c1e4a-5b6d-4e7f-8a9b-0c1d2e3f4a5b",
"ip_address": "203.0.113.10",
"hostname": "web01.example.com",
"nickname": "Web server",
"platform": null,
"status": "active",
"nmap_cooldown_seconds": 0,
"last_scan_at": "2026-07-12T06:00:00+00:00",
"next_scan_at": "2026-07-13T06:00:00+00:00",
"created_at": "2026-06-01T12:00:00+00:00",
"updated_at": "2026-07-12T06:00:00+00:00",
"whmcs_customer_id": 1042
},
"latest_scan": {
"open_ports": [22, 80, 443],
"status": "completed",
"scan_duration_ms": 8425,
"scanned_at": "2026-07-12T06:00:00+00:00"
},
"alerts": [
{
"id": "4d3c2b1a-0f9e-4d8c-7b6a-5f4e3d2c1b0a",
"port": 22,
"protocol": "tcp",
"service": "ssh",
"severity": "high",
"risk_level": "high",
"status": "open",
"title": "SSH port 22 exposed",
"first_detected_at": "2026-07-10T06:00:00+00:00",
"last_detected_at": "2026-07-12T06:00:00+00:00"
}
],
"whitelisted_ports": ["80:tcp", "443:tcp"],
"new_ports": [],
"closed_ports": [8080]
}Errors
| Code | Status | Meaning |
|---|---|---|
404 | 404 | No endpoint with that ID in your account. |
List endpoints
/api/v1/endpointsList monitored endpoints as pages of endpoint resources. meta carries the plan's endpoint limit, current usage and per-status counts alongside the pagination fields.
- This group returns standard Laravel resource envelopes (
data/links/meta), not thesuccessenvelope used by the provisioning and alerts groups.
Query parameters
| Name | Type | Required | Notes |
|---|---|---|---|
whmcs_customer_id | integer | Optional | Limit results to one customer's endpoints. |
status | string | Optional | Filter by endpoint status.one of: active, paused |
per_page | integer | Optional | Page size. |
page | integer | Optional | Page number. |
curl -X GET 'https://portal.example.com/api/v1/endpoints?whmcs_customer_id=1042&per_page=15&page=1' \
-H 'Authorization: Bearer $AEGIS_API_KEY'{
"data": [
{
"id": "9f2c1e4a-5b6d-4e7f-8a9b-0c1d2e3f4a5b",
"ip_address": "203.0.113.10",
"hostname": "web01.example.com",
"nickname": "Web server",
"platform": null,
"status": "active",
"nmap_cooldown_seconds": 0,
"last_scan_at": "2026-07-12T06:00:00+00:00",
"next_scan_at": "2026-07-13T06:00:00+00:00",
"created_at": "2026-06-01T12:00:00+00:00",
"updated_at": "2026-07-12T06:00:00+00:00",
"whmcs_customer_id": 1042
}
],
"links": {
"first": "…",
"last": "…",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"per_page": 15,
"total": 1,
"endpoint_limit": 10,
"current_endpoint_count": 1,
"status_counts": {
"active": 1
}
}
}Create an endpoint
/api/v1/endpointsAdd a server to monitoring by IP address or hostname (hostnames are resolved at creation). Deduplicated per customer: re-adding an existing or previously deleted IP returns the existing endpoint with 200 instead of creating a duplicate.
Body parameters
| Name | Type | Required | Notes |
|---|---|---|---|
whmcs_customer_id | integer | Required | The customer the endpoint belongs to.min:1 |
ip_address | string | Required | IP address or hostname of the server to monitor.max:255 |
nickname | string | Optional | Display name for the endpoint.max:255 |
status | string | Optional | Initial status; defaults to active.one of: active, paused |
client_name | string | Optional | Customer name, used to create their account if it does not exist yet.max:255 |
client_email | Optional | Customer email, used to create their account if it does not exist yet.max:255 |
curl -X POST 'https://portal.example.com/api/v1/endpoints' \
-H 'Authorization: Bearer $AEGIS_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"whmcs_customer_id": 1042,
"ip_address": "203.0.113.10",
"nickname": "Web server",
"status": "active",
"client_name": "Jane Doe",
"client_email": "jane@example.com"
}'{
"data": {
"id": "9f2c1e4a-5b6d-4e7f-8a9b-0c1d2e3f4a5b",
"ip_address": "203.0.113.10",
"hostname": "web01.example.com",
"nickname": "Web server",
"platform": null,
"status": "active",
"nmap_cooldown_seconds": 0,
"last_scan_at": null,
"next_scan_at": "2026-07-13T06:00:00+00:00",
"created_at": "2026-07-12T09:30:00+00:00",
"updated_at": "2026-07-12T09:30:00+00:00",
"whmcs_customer_id": 1042
},
"meta": {
"timestamp": "2026-07-12T09:30:00+00:00",
"version": "v1"
}
}Errors
| Code | Status | Meaning |
|---|---|---|
ENDPOINT_LIMIT_EXCEEDED | 403 | The customer's plan does not allow another endpoint. |
DNS_RESOLUTION_FAILED | 422 | The hostname could not be resolved to an IP address. |
Get an endpoint
/api/v1/endpoints/{endpoint}Fetch one endpoint resource.
Query parameters
| Name | Type | Required | Notes |
|---|---|---|---|
whmcs_customer_id | integer | Optional | Customer making the request, for ownership checks. |
curl -X GET 'https://portal.example.com/api/v1/endpoints/9f2c1e4a-5b6d-4e7f-8a9b-0c1d2e3f4a5b?whmcs_customer_id=1042' \
-H 'Authorization: Bearer $AEGIS_API_KEY'{
"data": {
"id": "9f2c1e4a-5b6d-4e7f-8a9b-0c1d2e3f4a5b",
"ip_address": "203.0.113.10",
"hostname": "web01.example.com",
"nickname": "Web server",
"platform": null,
"status": "active",
"nmap_cooldown_seconds": 0,
"last_scan_at": "2026-07-12T06:00:00+00:00",
"next_scan_at": "2026-07-13T06:00:00+00:00",
"created_at": "2026-06-01T12:00:00+00:00",
"updated_at": "2026-07-12T06:00:00+00:00",
"whmcs_customer_id": 1042
},
"meta": {
"timestamp": "2026-07-12T09:30:00+00:00",
"version": "v1"
}
}Errors
| Code | Status | Meaning |
|---|---|---|
404 | 404 | No endpoint with that ID in your account. |
Update an endpoint
/api/v1/endpoints/{endpoint}Rename an endpoint or switch it between active and paused. Only nickname and status can be changed. The IP address is fixed at creation.
Body parameters
| Name | Type | Required | Notes |
|---|---|---|---|
whmcs_customer_id | integer | Required | The customer who owns the endpoint.min:1 |
nickname | string | Optional | New display name.max:255 |
status | string | Optional | Set to paused to stop scanning, active to resume.one of: active, paused |
curl -X PUT 'https://portal.example.com/api/v1/endpoints/9f2c1e4a-5b6d-4e7f-8a9b-0c1d2e3f4a5b' \
-H 'Authorization: Bearer $AEGIS_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"whmcs_customer_id": 1042,
"nickname": "Primary web server",
"status": "paused"
}'{
"data": {
"id": "9f2c1e4a-5b6d-4e7f-8a9b-0c1d2e3f4a5b",
"ip_address": "203.0.113.10",
"hostname": "web01.example.com",
"nickname": "Primary web server",
"platform": null,
"status": "paused",
"nmap_cooldown_seconds": 0,
"last_scan_at": "2026-07-12T06:00:00+00:00",
"next_scan_at": null,
"created_at": "2026-06-01T12:00:00+00:00",
"updated_at": "2026-07-12T09:30:00+00:00",
"whmcs_customer_id": 1042
},
"meta": {
"timestamp": "2026-07-12T09:30:00+00:00",
"version": "v1"
}
}Errors
| Code | Status | Meaning |
|---|---|---|
404 | 404 | No endpoint with that ID in your account. |
Delete an endpoint
/api/v1/endpoints/{endpoint}Stop monitoring an endpoint and remove it from lists (soft delete: history is retained, and re-adding the same IP restores it).
- The
204response has an empty body.
Query parameters
| Name | Type | Required | Notes |
|---|---|---|---|
whmcs_customer_id | integer | Optional | Customer making the request, for ownership checks. |
curl -X DELETE 'https://portal.example.com/api/v1/endpoints/9f2c1e4a-5b6d-4e7f-8a9b-0c1d2e3f4a5b?whmcs_customer_id=1042' \
-H 'Authorization: Bearer $AEGIS_API_KEY'nullErrors
| Code | Status | Meaning |
|---|---|---|
404 | 404 | No endpoint with that ID in your account. |