Nexus API Reference
Full endpoint documentation for creating, reading, updating, and deleting projects, plus unified resource overview.
Authentication
All endpoints require authentication via Authorization: Bearer YOUR_API_KEY header.
Project context is automatically determined from your API key. No project_id query parameter needed.
Endpoints
POST /v1/projects
Create a new project namespace.
Request body:
{
"name": "Production",
"description": "Live environment resources"
}
Parameters:
name(required, string, 1-100 chars) — Human-readable project namedescription(optional, string, max 500 chars) — Project description
Response (201 Created):
{
"id": "proj_abc123...",
"name": "Production",
"slug": "production",
"description": "Live environment resources",
"created_at": "2026-02-10T12:00:00Z",
"updated_at": "2026-02-10T12:00:00Z"
}
Example:
curl -X POST "https://api.solenoid.systems/v1/projects" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Production","description":"Live environment"}'
GET /v1/projects
List all projects for your account with cursor-based pagination.
Query parameters:
limit(optional, integer, 1-100, default: 10) — Number of projects to returncursor(optional, string) — Pagination cursor from previous response
Response (200 OK):
{
"projects": [
{
"id": "proj_default...",
"name": "Default",
"slug": "default",
"description": null,
"created_at": "2026-01-15T10:00:00Z"
},
{
"id": "proj_abc123...",
"name": "Production",
"slug": "production",
"description": "Live environment",
"created_at": "2026-02-10T12:00:00Z"
}
],
"cursor": "eyJpZCI6InByb2pfYWJjMTIzIn0"
}
Example:
curl "https://api.solenoid.systems/v1/projects?limit=20" \
-H "Authorization: Bearer YOUR_API_KEY"
GET /v1/projects/:id
Get details of a specific project by ID.
Path parameters:
id(required, string) — Project ID (proj_…)
Response (200 OK):
{
"id": "proj_abc123...",
"name": "Production",
"slug": "production",
"description": "Live environment resources",
"created_at": "2026-02-10T12:00:00Z",
"updated_at": "2026-02-10T12:00:00Z"
}
Example:
curl "https://api.solenoid.systems/v1/projects/proj_abc123..." \
-H "Authorization: Bearer YOUR_API_KEY"
PATCH /v1/projects/:id
Update project name and/or description. Slug is immutable.
Path parameters:
id(required, string) — Project ID to update
Request body:
{
"name": "Production (US)",
"description": "US region production environment"
}
Parameters:
name(optional, string, 1-100 chars) — New project namedescription(optional, string or null, max 500 chars) — New description (null to remove)
Response (200 OK):
{
"id": "proj_abc123...",
"name": "Production (US)",
"slug": "production",
"description": "US region production environment",
"updated_at": "2026-02-10T14:00:00Z"
}
Example:
curl -X PATCH "https://api.solenoid.systems/v1/projects/proj_abc123..." \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Production (US)"}'
DELETE /v1/projects/:id
Soft-delete a project and enqueue async resource cleanup across all products.
Path parameters:
id(required, string) — Project ID to delete
Response (200 OK):
{
"success": true,
"deleted_at": "2026-02-10T15:00:00Z"
}
Example:
curl -X DELETE "https://api.solenoid.systems/v1/projects/proj_abc123..." \
-H "Authorization: Bearer YOUR_API_KEY"
Important:
- Cannot delete the default project unless you have at least one other active project
- Resources become immediately inaccessible (404 on access attempts)
- Full purge happens asynchronously with retry semantics
- Deletion is permanent after background cleanup completes
GET /v1/projects/:id/overview
Get aggregated resource counts and usage metrics for a project across all products.
Path parameters:
id(required, string) — Project ID to get overview for
Response (200 OK):
{
"project_id": "proj_abc123...",
"project_name": "Production",
"resources": {
"flags": 12,
"monitors": 3,
"relays": 5,
"buckets": 2,
"keys": 4,
"locks": 1,
"chains": 0,
"meters": 8
},
"usage": {
"meter_balance": 10000,
"last_activity": "2026-02-10T12:05:00Z"
}
}
Example:
curl "https://api.solenoid.systems/v1/projects/proj_abc123.../overview" \
-H "Authorization: Bearer YOUR_API_KEY"
Performance:
- Results cached for 5 minutes in KV
- Safe for dashboard polling
- Sub-second response time after initial cache
Pagination
All list endpoints use cursor-based pagination:
- Make initial request with optional
limitparameter - Response includes
cursorfield if more results exist - Pass cursor in next request:
?cursor=eyJpZCI6InByb2pfYWJjMTIzIn0 - Repeat until
cursorfield is absent
Project Isolation
Resources are automatically scoped to the project associated with your API key. No project_id query parameter needed.
To access resources in a different project:
- Create an API key scoped to that project via
/v1/keys - Use the new key in your
Authorizationheader - All requests now target the new project
Error Codes
See Errors for detailed error documentation.
Common errors:
validation_error(400) — Invalid request parametersunauthorized(401) — Missing or invalid API keyforbidden(403) — Cannot delete default project or access deleted projectnot_found(404) — Project doesn’t exist or is deletedconflict(409) — Slug collision (auto-resolved with -N suffix)rate_limit_exceeded(429) — Too many requests