Projects
Projects group monitors together and each carry their own api_key, separate from your account's bearer token. Every account gets a Default Project automatically.
Deleting a project soft-deletes it — it can be restored. Monitors inside it are affected too; see Monitors for restore behavior.
GET
List Projects/projectsRetrieve all projects owned by the authenticated user.
Example Request
curl -X GET /api/v1/projects \
-H "Authorization: Bearer ep_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"Example Response
{
"success": true,
"data": {
"projects": [
{
"id": 1,
"name": "Default Project",
"slug": "default-project-abc123",
"description": "Default monitoring scope",
"status": "active",
"api_key": "ep_proj_abcdef1234567890abcdef1234567890",
"monitors_count": 5,
"created_at": "2026-08-22T09:00:00Z",
"updated_at": "2026-08-22T10:00:00Z"
},
{
"id": 2,
"name": "Production",
"slug": "production-xyz789",
"description": "Production VPN servers",
"status": "active",
"api_key": "ep_proj_xyz1234567890xyz1234567890xyz",
"monitors_count": 3,
"created_at": "2026-08-20T14:22:00Z",
"updated_at": "2026-08-21T09:15:00Z"
}
]
}
}POST
Create Project/projectsCreate a new project to organize monitors. Each project gets a unique API key.
Request Body
| name* | string | Project name |
| description | string | Project description |
Notes
- •Fails with 422 if your project count is already at or over your plan's project_limit (default 3 on the base plan).
- •slug and api_key are generated server-side — you cannot set them on create.
Example Request
curl -X POST /api/v1/projects \
-H "Authorization: Bearer ep_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \
-H "Content-Type: application/json" \
-d '{
"name": "Production VPN",
"description": "Production exit nodes for EMEA region"
}'Example Response
{
"success": true,
"message": "Project created successfully.",
"data": {
"project": {
"id": 3,
"user_id": 1,
"name": "Production VPN",
"slug": "production-vpn-abc12",
"description": "Production exit nodes for EMEA region",
"status": "active",
"api_key": "ep_proj_prod1234567890prod1234567890",
"created_at": "2026-08-22T11:00:00Z",
"updated_at": "2026-08-22T11:00:00Z"
}
}
}GET
Get Project/projects/{id}Retrieve project details and its associated monitors.
Example Request
curl -X GET /api/v1/projects/1 \
-H "Authorization: Bearer ep_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"Example Response
{
"success": true,
"data": {
"project": {
"id": 1,
"user_id": 1,
"name": "Default Project",
"slug": "default-project-abc123",
"description": "Default monitoring scope",
"status": "active",
"api_key": "ep_proj_abcdef1234567890abcdef1234567890",
"created_at": "2026-08-22T09:00:00Z",
"updated_at": "2026-08-22T10:00:00Z",
"monitors": [
{
"id": 1,
"name": "VPN Exit Node 1",
"protocol": "wireguard",
"status": "up",
"check_interval_seconds": 300,
"last_check_at": "2026-08-22T10:30:00Z"
}
]
}
}
}PUT
Update Project/projects/{id}Modify project name or description.
Request Body (all optional)
| name | string | Updated project name |
| description | string | Updated project description |
| status | string | Project status: active or paused |
Example Request
curl -X PUT /api/v1/projects/1 \
-H "Authorization: Bearer ep_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \
-H "Content-Type: application/json" \
-d '{
"name": "Staging VPN"
}'Example Response
{
"success": true,
"message": "Project updated successfully.",
"data": {
"project": {
"id": 1,
"user_id": 1,
"name": "Staging VPN",
"slug": "default-project-abc123",
"description": "Default monitoring scope",
"status": "active",
"api_key": "ep_proj_abcdef1234567890abcdef1234567890",
"updated_at": "2026-08-22T11:30:00Z"
}
}
}DELETE
Delete Project/projects/{id}Permanently delete a project and all associated monitors.
Example Request
curl -X DELETE /api/v1/projects/1 \
-H "Authorization: Bearer ep_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"Example Response
{
"success": true,
"message": "Project deleted successfully."
}POST
Regenerate API Key/projects/{id}/regenerate-keyGenerate a new API key for a project. The old key will be invalidated.
Example Request
curl -X POST /api/v1/projects/1/regenerate-key \
-H "Authorization: Bearer ep_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"Example Response
{
"success": true,
"message": "Project API key regenerated successfully.",
"data": {
"api_key": "ep_proj_newkey1234567890newkey1234567890"
}
}DELETE
Clear Project Check History/projects/{id}/checksWipe all check history for every monitor in a project — the project and its monitors are kept, only their historical MonitorCheck rows are deleted. Irreversible.
Notes
- •This does not delete the project or any monitor — use Delete Project for that.
- •Resets uptime percentages and charts for every monitor in the project back to "no data" until new checks come in.
Example Request
curl -X DELETE /api/v1/projects/1/checks \
-H "Authorization: Bearer ep_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"Example Response
{
"success": true,
"message": "Cleared 4821 check record(s) across this project's monitors."
}