AutoML
Create, manage, and monitor automated machine learning jobs. AutoML automatically selects the best model architecture, hyperparameters, and feature engineering for your dataset and prediction task.
All endpoints require authentication via X-API-Key header and the appropriate scope.
AutoMLJob Object
{
"id": "aml_abc123",
"name": "Churn Prediction Model",
"status": "running",
"description": "Predicting customer churn from usage and billing data",
"dataset": "ds_customers_001",
"problemType": "binary_classification",
"predictorType": "tabular",
"owner": "user_456",
"organizationId": "org_xyz",
"targetColumn": "churned",
"preset": "best_quality",
"timeLimit": 3600,
"startedAt": "2025-02-01T10:00:00Z",
"finishedAt": null,
"error": null,
"createdAt": "2025-02-01T09:55:00Z",
"updatedAt": "2025-02-01T12:30:00Z"
}
GET /api/v1/automl/jobs
List all AutoML jobs accessible to the authenticated user.
Scope: ml-workbench:read
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by status: queued, running, completed, failed, stopped |
search | string | No | Search by job name or description |
limit | integer | No | Number of results to return (default: 20) |
offset | integer | No | Number of results to skip (default: 0) |
sort | string | No | Sort field and direction, e.g. createdAt:desc |
Response 200 OK
{
"count": 10,
"limit": 20,
"offset": 0,
"jobs": [
{
"id": "aml_abc123",
"name": "Churn Prediction Model",
"status": "running",
"description": "Predicting customer churn from usage and billing data",
"dataset": "ds_customers_001",
"problemType": "binary_classification",
"predictorType": "tabular",
"owner": "user_456",
"organizationId": "org_xyz",
"targetColumn": "churned",
"preset": "best_quality",
"startedAt": "2025-02-01T10:00:00Z",
"finishedAt": null,
"createdAt": "2025-02-01T09:55:00Z",
"updatedAt": "2025-02-01T12:30:00Z"
}
]
}
POST /api/v1/automl/jobs
Create a new AutoML job.
Scope: ml-workbench:write
Datasets are S3-backed project volumes (uploaded through the UI or attached to a
project). Reference one by its volume id (from GET /automl/datasets); a volume
is a directory, so when it holds more than one data file, pass datasetFile
with the file key (discover files with GET /automl/datasets/:id/files). You
may also pass an s3:// path or a URL directly as dataset.
Request Body
{
"name": "Churn Prediction Model",
"dataset": "vol_customers_001",
"datasetFile": "data/customers.csv",
"targetColumn": "churned",
"featureColumns": ["usage_days", "monthly_spend", "support_tickets", "plan_type"],
"problemType": "tabular",
"predictorType": "auto",
"preset": "medium_quality",
"timeLimit": 600,
"metric": "accuracy",
"hardware": { "cpu_count": 4, "memory_gb": 16, "disk_gb": 20, "gpu_count": 0 },
"environmentId": "custom",
"advanced": { "excludeModels": ["KNN"] }
}
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Human-readable job name |
dataset | string | Yes | Project dataset volume id (from GET /automl/datasets), an s3:// path, or a URL |
targetColumn | string | Yes | Name of the column to predict |
datasetFile | string | No | File key within the volume, when it holds more than one data file |
featureColumns | string[] | No | Specific columns to use as features. All non-target columns used if omitted |
problemType | string | No | Data modality: tabular (default), multimodal, timeseries |
predictorType | string | No | auto (default, AutoGluon infers), BinaryClassifier, MultiClassifier, Regressor |
preset | string | No | AutoGluon quality preset: best_quality, high_quality, medium_quality (default: medium_quality) |
timeLimit | integer | No | Maximum training time in seconds (default: 600) |
metric | string | No | Optimization metric (e.g. accuracy, f1, rmse). Default: accuracy |
hardware | object | Yes | Pod sizing: { cpu_count, memory_gb, disk_gb, gpu_count } (gpu_count optional) |
environmentId | string | No | Training environment: custom (default) or an existing environment id |
advanced | object | No | Advanced AutoGluon options |
Response 201 Created
{
"id": "aml_abc123",
"name": "Churn Prediction Model",
"status": "queued",
"createdAt": "2025-02-01T09:55:00Z"
}
GET /api/v1/automl/jobs/:id
Get a single AutoML job by ID.
Scope: ml-workbench:read
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | AutoML job ID |
Response 200 OK
Returns the full AutoMLJob object.
DELETE /api/v1/automl/jobs/:id
Delete an AutoML job. Running jobs must be stopped before deletion.
Scope: ml-workbench:write
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | AutoML job ID |
Response 204 No Content
POST /api/v1/automl/jobs/:id/stop
Stop a running AutoML job. The job will be marked as stopped and training will be terminated.
Scope: ml-workbench:write
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | AutoML job ID |
Response 200 OK
{
"id": "aml_abc123",
"status": "stopped",
"message": "AutoML job stopped successfully"
}
POST /api/v1/automl/jobs/:id/deploy
Deploy the best model from a completed AutoML job. Makes the model available for inference via the model registry.
Scope: ml-workbench:write
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | AutoML job ID |
Response 200 OK
{
"id": "aml_abc123",
"modelId": "model_xyz789",
"modelName": "Churn Prediction Model - Best",
"status": "deployed",
"message": "Best model deployed successfully"
}
GET /api/v1/automl/jobs/:id/logs
Retrieve training logs for an AutoML job.
Scope: ml-workbench:read
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | AutoML job ID |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
lines | integer | No | Number of log lines to return (default: 100) |
since | string | No | Return logs after this ISO 8601 timestamp |
Response 200 OK
{
"jobId": "aml_abc123",
"logs": [
{
"timestamp": "2025-02-01T10:00:05Z",
"level": "info",
"message": "AutoML job started - problem type: binary_classification"
},
{
"timestamp": "2025-02-01T10:02:15Z",
"level": "info",
"message": "Feature engineering completed - 12 features generated"
},
{
"timestamp": "2025-02-01T10:15:30Z",
"level": "info",
"message": "Model training: LightGBM completed - f1: 0.891"
}
]
}
GET /api/v1/automl/stats
Get aggregate statistics for AutoML jobs in the organization.
Scope: ml-workbench:read
Response 200 OK
{
"total": 10,
"running": 1,
"completed": 6,
"failed": 2,
"queued": 1
}
GET /api/v1/automl/datasets
List the project dataset volumes (S3-backed) the authenticated user can train
on. A volume is a directory; use GET /automl/datasets/:id/files to list the
files inside it.
Scope: ml-workbench:read
Response 200 OK
{
"datasets": [
{
"_id": "vol_customers_001",
"name": "Customer Data Q4 2024",
"s3Location": "s3://strongly/projects/proj_1/volumes/vol_customers_001",
"sizeGB": 0.045,
"format": "csv",
"dataType": "structured",
"projectId": "proj_1",
"projectName": "Churn Analysis"
}
],
"projects": [
{ "_id": "proj_1", "name": "Churn Analysis", "isOwner": true }
]
}
POST /api/v1/automl/datasets/upload-url
Get a presigned URL to upload a local training dataset file. PUT the file bytes
to the returned uploadUrl, then reference the returned s3Path as the
dataset in POST /automl/jobs. This is the programmatic equivalent of the
UI's dataset uploader.
Scope: ml-workbench:write
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
filename | string | Yes | Dataset file name (e.g. titanic.csv) |
contentType | string | No | MIME type (default text/csv) |
Response 201 Created
{
"datasetId": "f22a9764e2ed836b9799a50b",
"uploadUrl": "https://s3.amazonaws.com/strongly-dev/mlops/automl/jobs/.../input/titanic.csv?X-Amz-...",
"s3Path": "mlops/automl/jobs/f22a9764e2ed836b9799a50b/input/titanic.csv",
"bucket": "strongly-dev"
}
Then PUT the raw file bytes to uploadUrl and create the job:
curl -X PUT "$uploadUrl" -H "Content-Type: text/csv" --data-binary @titanic.csv
# then POST /automl/jobs with { "dataset": "<s3Path>", "targetColumn": "Survived", ... }
GET /api/v1/automl/datasets/:id/files
List the data files inside a project dataset volume, so you can pick which one
to train on (pass its key as datasetFile to POST /automl/jobs).
Scope: ml-workbench:read
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Dataset volume id (from GET /automl/datasets) |
Response 200 OK
{
"volumeId": "vol_customers_001",
"s3Location": "s3://strongly/projects/proj_1/volumes/vol_customers_001",
"files": [
{ "key": "projects/proj_1/volumes/vol_customers_001/customers.csv", "name": "customers.csv", "size": 45000, "isDirectory": false }
]
}
GET /api/v1/automl/datasets/:id/columns
Get the column headers of a dataset file in a project volume (to choose the target and feature columns). Reads only the header row.
Scope: ml-workbench:read
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Dataset volume id |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
file | string | No | File key within the volume. Optional when the volume has exactly one data file |
Response 200 OK
{
"volumeId": "vol_customers_001",
"file": "projects/proj_1/volumes/vol_customers_001/customers.csv",
"columns": ["usage_days", "monthly_spend", "support_tickets", "plan_type", "churned"]
}