Server API Reference
The WhatsNext server provides a REST API built with FastAPI.
Base URL: http://localhost:8000 (or your deployed server)
API Documentation: Access interactive docs at /docs (Swagger UI) or /redoc (ReDoc)
Authentication
If API keys are configured, include the X-API-Key header in all requests:
Projects
Projects are containers for organizing related tasks and jobs.
List Projects
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
limit |
int | Max results (default: 100) |
skip |
int | Offset for pagination |
status |
string | Filter by status (ACTIVE, ARCHIVED) |
Response:
[
{
"id": 1,
"name": "ml-training",
"description": "Machine learning experiments",
"status": "ACTIVE",
"created_at": "2024-01-15T10:30:00",
"updated_at": "2024-01-15T10:30:00"
}
]
Create Project
Request Body:
Response: 201 Created
{
"id": 1,
"name": "ml-training",
"description": "Machine learning experiments",
"status": "ACTIVE",
"created_at": "2024-01-15T10:30:00",
"updated_at": "2024-01-15T10:30:00"
}
Get Project
Update Project
Request Body:
Delete Project
Response: 204 No Content
Fetch Next Job
Get the next job ready for execution from a project's queue.
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
available_cpu |
int | Filter by CPU requirement (0 = no filter) |
available_accelerators |
int | Filter by accelerator requirement (0 = no filter) |
Response:
{
"job": {
"id": 42,
"name": "experiment-1",
"project_id": 1,
"task_id": 1,
"task_name": "train-model",
"parameters": {"lr": 0.01},
"status": "QUEUED",
"priority": 5,
"depends": {},
"created_at": "2024-01-15T10:30:00",
"updated_at": "2024-01-15T10:35:00"
},
"num_pending": 10
}
Notes:
- Jobs are returned in priority order (highest first)
- Jobs with unmet dependencies are skipped
- Jobs are marked as
QUEUEDwhen fetched
Clear Queue
Delete all pending jobs from a project's queue.
Response:
Batch Create Jobs
Create multiple jobs in a single request.
Request Body:
{
"jobs": [
{"name": "job-1", "task_id": 1, "parameters": {"x": 1}},
{"name": "job-2", "task_id": 1, "parameters": {"x": 2}},
{"name": "job-3", "task_id": 1, "parameters": {"x": 3}}
]
}
Response: 201 Created
Tasks
Tasks define types of jobs that can be run, including resource requirements.
List Tasks
Query Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
project_id |
int | Yes | Filter by project |
Create Task
Request Body:
{
"name": "train-model",
"project_id": 1,
"command_template": "python train.py --lr {lr} --epochs {epochs}",
"required_cpu": 8,
"required_accelerators": 4
}
Response: 201 Created
{
"id": 1,
"name": "train-model",
"project_id": 1,
"command_template": "python train.py --lr {lr} --epochs {epochs}",
"required_cpu": 8,
"required_accelerators": 4,
"created_at": "2024-01-15T10:30:00",
"updated_at": "2024-01-15T10:30:00"
}
Get Task
Update Task
Request Body: (partial updates supported)
Delete Task
Jobs
Jobs are instances of tasks waiting to be executed.
List Jobs
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
project_id |
int | Filter by project |
limit |
int | Max results |
skip |
int | Offset for pagination |
Create Job
Request Body:
{
"name": "experiment-001",
"project_id": 1,
"task_id": 1,
"parameters": {
"learning_rate": 0.01,
"epochs": 100,
"batch_size": 32
},
"priority": 5,
"depends": {}
}
Priority: Higher numbers = higher priority (processed first)
Depends: Map of job ID to job name for dependencies:
Get Job
Update Job
Request Body:
{
"name": "experiment-001",
"project_id": 1,
"task_id": 1,
"parameters": {"learning_rate": 0.01},
"status": "COMPLETED",
"priority": 5,
"depends": {}
}
Valid Status Values:
| Status | Description |
|---|---|
PENDING |
Waiting to be scheduled |
QUEUED |
Scheduled, waiting for worker |
RUNNING |
Currently executing |
COMPLETED |
Finished successfully |
FAILED |
Execution failed |
BLOCKED |
Dependency failed |
Delete Job
Get Job Dependencies
Check the status of a job's dependencies.
Response:
{
"job_id": 45,
"dependencies": [
{
"id": 42,
"name": "preprocessing",
"status": "COMPLETED"
},
{
"id": 43,
"name": "validation",
"status": "RUNNING"
}
],
"all_completed": false
}
Clients
Clients are worker processes that execute jobs.
Register Client
Register a new client or update an existing one.
Request Body:
{
"id": "worker-gpu-001",
"name": "GPU Worker 1",
"entity": "ml-team",
"description": "4x A100 training server",
"available_cpu": 64,
"available_accelerators": 4
}
Response: 201 Created
{
"id": "worker-gpu-001",
"name": "GPU Worker 1",
"entity": "ml-team",
"description": "4x A100 training server",
"available_cpu": 64,
"available_accelerators": 4,
"last_heartbeat": "2024-01-15T10:30:00",
"created_at": "2024-01-15T10:30:00",
"is_active": 1
}
List Clients
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
active_only |
bool | Only show active clients (default: true) |
limit |
int | Max results |
skip |
int | Offset |
Get Client
Update Client
Request Body: (partial updates supported)
Client Heartbeat
Update the client's last heartbeat timestamp.
Response:
Deactivate Client
Mark a client as inactive (graceful disconnect).
Response:
Delete Client
Health Checks
Connection Check
Response:
Database Check
Response:
Error Responses
All endpoints return standard HTTP error codes:
| Code | Description |
|---|---|
400 |
Bad request (invalid parameters) |
401 |
Unauthorized (missing API key) |
403 |
Forbidden (invalid API key) |
404 |
Resource not found |
422 |
Validation error |
429 |
Rate limit exceeded |
500 |
Internal server error |
Error Response Format:
Validation Error Format: