Experiments API
Experiments run AutoML training on a dataset. Creating an experiment enqueues a background job that trains multiple models and selects the best one according to the configured metric.
Create Experiment
POST /api/experiments
Create a new experiment and enqueue an automl_train background job.
The experiment starts in queued status and transitions through
running to succeeded or failed.
Request Body
Field |
Type |
Required |
Description |
|---|---|---|---|
|
string |
Yes |
UUID of the project. |
|
string |
Yes |
UUID of the dataset version to train on. |
|
string |
Yes |
Human-readable experiment name. |
|
string |
Yes |
Name of the column to predict. |
|
string |
Yes |
|
|
object |
No |
AutoML configuration (see below). |
|
boolean |
No |
Request GPU-enabled training (default |
Config Options
Key |
Type |
Description |
|---|---|---|
|
integer |
Maximum training time in seconds (default 3600). |
|
integer |
Maximum number of models to train (default 20). May be capped by account quota. |
|
integer |
Maximum training time per individual model (optional). |
|
string |
Metric to rank models by (see Sort & Stopping Metrics below). Default
|
|
integer |
Random seed for reproducibility (default 42). |
|
boolean |
Oversample minority class (classification only, default |
|
array[string] |
Algorithms to exclude (see Supported Algorithms below). |
|
integer |
Number of cross-validation folds (default 5, use |
|
integer |
Number of scoring rounds without improvement before early stopping
(default 3, use |
|
string |
Metric to monitor for early stopping: |
|
float |
Relative tolerance for early stopping (default 0.001). |
|
float |
Ratio of time for fine-tuning vs. exploring new models (0.0–1.0). |
|
string |
Distribution family (regression): |
|
boolean |
Keep CV predictions for Stacked Ensembles (default |
|
boolean |
Keep individual CV models (default |
|
string |
Logging level: |
Supported Algorithms
CorePlexML uses H2O AutoML which automatically trains, tunes, and ranks models from the following algorithm families:
Algorithm ID |
Display Name |
Description |
|---|---|---|
|
Gradient Boosting |
Gradient Boosting Machine. Builds sequential decision trees where each tree corrects errors of the previous ones. Strong default performance on most tabular datasets. |
|
XGBoost |
Extreme Gradient Boosting. Optimized implementation with regularization options (L1/L2). Often produces top-performing models, especially on structured data. |
|
Random Forest |
Distributed Random Forest. Ensemble of decision trees using random feature subsets and bootstrap sampling. Robust to overfitting. |
|
Deep Learning |
Multi-layer feed-forward neural network. Multiple hidden layers with configurable activation functions. Best for datasets with complex nonlinear relationships. |
|
Linear Model |
Generalized Linear Model. Includes linear regression, logistic regression, and other link functions. Fast, interpretable, and useful as a baseline. |
|
Stacked Ensemble |
Meta-model that combines predictions from all other trained models using a secondary learner. Typically achieves the best accuracy. Note: SHAP feature contributions are not available for StackedEnsemble models. |
All six algorithms are trained by default. Use exclude_algos to skip
specific ones:
{
"config": {
"exclude_algos": ["DeepLearning", "StackedEnsemble"]
}
}
Sort & Stopping Metrics
The sort_metric determines how models are ranked on the leaderboard.
The stopping_metric determines when early stopping triggers. Set to
AUTO (default) and the platform selects the best metric for your
problem type.
Binary Classification Metrics
Metric |
Description |
|---|---|
|
Area Under ROC Curve (default for binary classification). Higher is better. Range: 0–1. |
|
Area Under Precision-Recall Curve. Better than AUC for imbalanced datasets. |
|
Logarithmic loss (cross-entropy). Lower is better. |
|
Average error rate across classes. Lower is better. |
|
Classification accuracy. Higher is better. Not recommended for imbalanced classes. |
|
Matthews Correlation Coefficient. Balanced metric for imbalanced data. Range: -1 to 1. |
Multiclass Classification Metrics
Metric |
Description |
|---|---|
|
Multinomial log loss (default for multiclass). Lower is better. |
|
Average error rate across all classes. Lower is better. |
Regression Metrics
Metric |
Description |
|---|---|
|
Root Mean Squared Error (default for regression). Lower is better. |
|
Mean Squared Error. Lower is better. |
|
Mean Absolute Error. Less sensitive to outliers. Lower is better. |
|
Root Mean Squared Logarithmic Error. Good for skewed targets. Lower is better. |
|
Mean Residual Deviance. Lower is better. |
|
R-squared (coefficient of determination). Higher is better. Range: 0–1. |
Distribution-Specific Metrics
Metric |
Description |
|---|---|
|
Quantile loss. Available when |
|
Deviance. Available for all distributions. Lower is better. |
Problem Types
Value |
Description |
|---|---|
|
Binary or multiclass classification. Auto-detected from the target column cardinality. |
|
Continuous numeric prediction. |
|
Alias for |
|
Alias for |
Experiment Status Lifecycle
An experiment transitions through these statuses:
Status |
Description |
|---|---|
|
Experiment created and waiting for worker to pick it up. |
|
AutoML training in progress. Models are being trained. |
|
Training finished successfully. Models are available on the
leaderboard. (API returns |
|
Training failed due to an error (bad data, configuration issue, or system error). Check experiment logs for details. |
Job Status Values
Background jobs (experiments, reports, synthgen) use these statuses:
Status |
Description |
|---|---|
|
Job created, waiting for worker. |
|
Worker is processing the job. |
|
Job completed successfully. |
|
Job failed. Error details in job payload. |
Example
curl -X POST "$BASE_URL/api/experiments" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"project_id": "d4e5f6a7-b8c9-0123-def4-567890123456",
"dataset_version_id": "f6a7b8c9-d0e1-2345-6789-0abcdef12345",
"name": "Fraud Detection AutoML",
"target_column": "is_fraud",
"problem_type": "classification",
"config": {
"max_runtime_secs": 300,
"max_models": 20,
"sort_metric": "auc",
"nfolds": 5,
"balance_classes": true,
"exclude_algos": ["DeepLearning"]
}
}'
import requests
import time
# Create the experiment
resp = requests.post(f"{BASE_URL}/api/experiments", headers={
"Authorization": "Bearer YOUR_API_KEY",
}, json={
"project_id": "d4e5f6a7-b8c9-0123-def4-567890123456",
"dataset_version_id": "f6a7b8c9-d0e1-2345-6789-0abcdef12345",
"name": "Fraud Detection AutoML",
"target_column": "is_fraud",
"problem_type": "classification",
"config": {
"max_runtime_secs": 300,
"max_models": 20,
"sort_metric": "auc",
"nfolds": 5,
"balance_classes": True,
},
})
experiment_id = resp.json()["experiment_id"]
# Poll for completion
while True:
status_resp = requests.get(
f"{BASE_URL}/api/experiments/{experiment_id}/status",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
status = status_resp.json()["status"]
print(f"Status: {status}")
if status in ("succeeded", "failed"):
break
time.sleep(10)
Response 201 Created
{
"id": "b8c9d0e1-f2a3-4567-8901-bcdef1234567",
"experiment_id": "b8c9d0e1-f2a3-4567-8901-bcdef1234567",
"job_id": "c9d0e1f2-a3b4-5678-9012-cdef12345678",
"status": "queued"
}
List Experiments
GET /api/experiments
Query Parameters
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
string |
– |
Filter by project. |
|
string |
– |
Filter by source dataset. |
|
string |
– |
Filter by status: |
|
integer |
50 |
Max items (1–500). |
|
integer |
0 |
Pagination offset. |
|
string |
– |
Search in name and target column. |
|
string |
|
|
|
string |
|
|
Example
curl "$BASE_URL/api/experiments?project_id=d4e5f6a7-b8c9-0123-def4-567890123456" \
-H "Authorization: Bearer YOUR_API_KEY"
Response 200 OK
{
"items": [
{
"id": "b8c9d0e1-f2a3-4567-8901-bcdef1234567",
"name": "Fraud Detection AutoML",
"project_name": "Fraud Detection v2",
"dataset_name": "Transactions Q4",
"target_column": "is_fraud",
"problem_type": "classification",
"status": "succeeded",
"model_count": 12,
"best_model_id": "a7b8c9d0-e1f2-3456-7890-abcdef123456",
"best_model_algo": "GBM",
"created_at": "2026-02-12T10:30:00Z"
}
],
"total": 1,
"limit": 50,
"offset": 0
}
Get Experiment Detail
GET /api/experiments/{experiment_id}
Return the experiment, its models, artifact links, and the best model ID.
Example
curl "$BASE_URL/api/experiments/b8c9d0e1-f2a3-4567-8901-bcdef1234567" \
-H "Authorization: Bearer YOUR_API_KEY"
resp = requests.get(
f"{BASE_URL}/api/experiments/b8c9d0e1-f2a3-4567-8901-bcdef1234567",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = resp.json()
print("Best model:", data["best_model_id"])
for m in data["models"]:
print(f" {m['algo']}: {m['metrics'].get('auc', 'N/A')}")
Response 200 OK
{
"experiment": {
"id": "b8c9d0e1-f2a3-4567-8901-bcdef1234567",
"name": "Fraud Detection AutoML",
"project_id": "d4e5f6a7-b8c9-0123-def4-567890123456",
"dataset_version_id": "f6a7b8c9-d0e1-2345-6789-0abcdef12345",
"target_column": "is_fraud",
"problem_type": "classification",
"status": "succeeded",
"max_runtime_secs": 300,
"max_models": 20,
"sort_metric": "auc"
},
"models": [
{
"id": "a7b8c9d0-e1f2-3456-7890-abcdef123456",
"name": "GBM_1_AutoML",
"algo": "GBM",
"metrics": {"auc": 0.982, "logloss": 0.071}
}
],
"artifact_links": [],
"best_model_id": "a7b8c9d0-e1f2-3456-7890-abcdef123456"
}
Get Experiment Status
GET /api/experiments/{experiment_id}/status
Lightweight polling endpoint that returns only the current status. Use this for progress polling instead of the full detail endpoint.
Example
curl "$BASE_URL/api/experiments/b8c9d0e1-f2a3-4567-8901-bcdef1234567/status" \
-H "Authorization: Bearer YOUR_API_KEY"
Response 200 OK
{
"experiment_id": "b8c9d0e1-f2a3-4567-8901-bcdef1234567",
"status": "running"
}
Possible status values: queued, running, succeeded, failed,
canceled.
Get Training Logs
GET /api/experiments/{experiment_id}/logs
Return training logs for debugging and monitoring. Includes H2O engine output, job status, and error messages.
Query Parameters
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
boolean |
|
Include detailed H2O event logs. |
Example
curl "$BASE_URL/api/experiments/b8c9d0e1-f2a3-4567-8901-bcdef1234567/logs" \
-H "Authorization: Bearer YOUR_API_KEY"
Response 200 OK
{
"experiment_id": "b8c9d0e1-f2a3-4567-8901-bcdef1234567",
"logs": [
"Experiment status: succeeded",
"Job status: completed",
"",
"AutoML progress: 100%",
"Best model: GBM_1_AutoML (AUC=0.982)"
],
"count": 5
}
Explainability
GET /api/experiments/{experiment_id}/explain
Return multi-model explainability data including a Pareto front (accuracy vs. training time) and a variable importance heatmap across all models in the experiment.
Example
curl "$BASE_URL/api/experiments/b8c9d0e1-f2a3-4567-8901-bcdef1234567/explain" \
-H "Authorization: Bearer YOUR_API_KEY"
Response 200 OK
{
"explain": {
"pareto_front": {
"models": [
{"name": "GBM_1_AutoML", "algo": "GBM", "metric": 0.982, "training_time": 45.2},
{"name": "XGBoost_1_AutoML", "algo": "XGBoost", "metric": 0.978, "training_time": 32.1}
]
},
"varimp_heatmap": {
"models": ["GBM_1_AutoML", "XGBoost_1_AutoML"],
"features": ["amount", "merchant_id", "hour"],
"matrix": [
[0.45, 0.30, 0.15],
[0.42, 0.35, 0.12]
]
}
}
}
Set Best Model
POST /api/experiments/{experiment_id}/best-model
Override the default best model selection for an experiment.
Request Body
Field |
Type |
Required |
Description |
|---|---|---|---|
|
string |
Yes |
UUID of a model that belongs to this experiment. |
Example
curl -X POST "$BASE_URL/api/experiments/b8c9d0e1-f2a3-4567-8901-bcdef1234567/best-model" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model_id": "a7b8c9d0-e1f2-3456-7890-abcdef123456"}'
Response 200 OK
{
"ok": true,
"experiment_id": "b8c9d0e1-f2a3-4567-8901-bcdef1234567",
"best_model_id": "a7b8c9d0-e1f2-3456-7890-abcdef123456"
}
Delete Experiment
DELETE /api/experiments/{experiment_id}
Delete an experiment and its associated models.
Example
curl -X DELETE "$BASE_URL/api/experiments/b8c9d0e1-f2a3-4567-8901-bcdef1234567" \
-H "Authorization: Bearer YOUR_API_KEY"
Response 200 OK
{
"ok": true
}
See also
Models API – Inspecting individual models from an experiment.
Deployments API – Deploying the best model to production.