Projects API
Projects are the top-level organizational unit. Datasets, experiments, models, deployments, and all other resources belong to a project.
List Projects
GET /api/projects
Return projects accessible to the authenticated user (owned or shared).
Query Parameters
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
integer |
50 |
Max items (1–500). |
|
integer |
0 |
Pagination offset. |
|
string |
– |
Search in name and description (case-insensitive). |
|
string |
|
One of |
|
string |
|
|
Example
curl "$BASE_URL/api/projects?limit=10&search=fraud" \
-H "Authorization: Bearer YOUR_API_KEY"
import requests
resp = requests.get(f"{BASE_URL}/api/projects", headers={
"Authorization": "Bearer YOUR_API_KEY",
}, params={"limit": 10, "search": "fraud"})
data = resp.json()
for p in data["items"]:
print(p["id"], p["name"])
Response 200 OK
{
"items": [
{
"id": "c3d4e5f6-a7b8-9012-cdef-345678901234",
"name": "Fraud Detection v2",
"description": "Credit card fraud classification",
"status": "active",
"dataset_count": 3,
"experiment_count": 5,
"model_count": 12,
"created_at": "2026-02-10T09:00:00Z"
}
],
"total": 1,
"limit": 10,
"offset": 0
}
Create Project
POST /api/projects
Request Body
Field |
Type |
Required |
Description |
|---|---|---|---|
|
string |
Yes |
Project name (must not be empty). |
|
string |
No |
Optional description. |
Example
curl -X POST "$BASE_URL/api/projects" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Churn Prediction", "description": "Telco customer churn"}'
resp = requests.post(f"{BASE_URL}/api/projects", headers={
"Authorization": "Bearer YOUR_API_KEY",
}, json={
"name": "Churn Prediction",
"description": "Telco customer churn",
})
project = resp.json()
print("Project ID:", project["project_id"])
Response 201 Created
{
"project_id": "d4e5f6a7-b8c9-0123-def4-567890123456",
"project": {
"id": "d4e5f6a7-b8c9-0123-def4-567890123456",
"name": "Churn Prediction",
"description": "Telco customer churn",
"created_at": "2026-02-28T14:30:00Z"
}
}
Get Project
GET /api/projects/{project_id}
Path Parameters
Parameter |
Type |
Description |
|---|---|---|
|
UUID |
Project identifier. |
Example
curl "$BASE_URL/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456" \
-H "Authorization: Bearer YOUR_API_KEY"
resp = requests.get(
f"{BASE_URL}/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
print(resp.json()["project"]["name"])
Response 200 OK
{
"project": {
"id": "d4e5f6a7-b8c9-0123-def4-567890123456",
"name": "Churn Prediction",
"description": "Telco customer churn",
"created_at": "2026-02-28T14:30:00Z"
}
}
Update Project
PUT /api/projects/{project_id}
Request Body
Field |
Type |
Required |
Description |
|---|---|---|---|
|
string |
Yes |
Updated name. |
|
string |
No |
Updated description. |
Example
curl -X PUT "$BASE_URL/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Churn Prediction v2", "description": "Updated scope"}'
resp = requests.put(
f"{BASE_URL}/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"name": "Churn Prediction v2", "description": "Updated scope"},
)
Response 200 OK
{
"project": {
"id": "d4e5f6a7-b8c9-0123-def4-567890123456",
"name": "Churn Prediction v2",
"description": "Updated scope"
}
}
Delete Project
DELETE /api/projects/{project_id}
Permanently delete a project. Only the project owner can perform this action.
Example
curl -X DELETE "$BASE_URL/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456" \
-H "Authorization: Bearer YOUR_API_KEY"
Response 200 OK
{
"ok": true
}
List Members
GET /api/projects/{project_id}/members
Return the list of users who have access to this project.
Query Parameters
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
integer |
50 |
Max items (1–100). |
|
integer |
0 |
Pagination offset. |
Example
curl "$BASE_URL/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456/members" \
-H "Authorization: Bearer YOUR_API_KEY"
resp = requests.get(
f"{BASE_URL}/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456/members",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
for member in resp.json()["items"]:
print(member["email"], member["role"])
Response 200 OK
{
"items": [
{
"user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"email": "alice@example.com",
"name": "Alice Chen",
"role": "owner",
"created_at": "2026-02-10T09:00:00Z"
},
{
"user_id": "f6a7b8c9-0123-4567-89ab-cdef01234567",
"email": "bob@example.com",
"name": "Bob Smith",
"role": "editor",
"created_at": "2026-02-15T11:00:00Z"
}
],
"total": 2,
"limit": 50,
"offset": 0
}
Add Member
POST /api/projects/{project_id}/members
Add a user to the project or update their role. Only the project owner can manage members. You cannot assign a role higher than your own.
Request Body
Field |
Type |
Required |
Description |
|---|---|---|---|
|
string |
Yes |
Email of the user to add (must be a registered user). |
|
string |
No |
One of |
Example
curl -X POST "$BASE_URL/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456/members" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "bob@example.com", "role": "editor"}'
resp = requests.post(
f"{BASE_URL}/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456/members",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"email": "bob@example.com", "role": "editor"},
)
Response 201 Created
{
"member": {
"user_id": "f6a7b8c9-0123-4567-89ab-cdef01234567",
"email": "bob@example.com",
"name": "Bob Smith",
"role": "editor"
}
}
Activity Timeline
GET /api/projects/{project_id}/timeline
Return a chronological list of events (datasets uploaded, experiments run) within the project. Useful for dashboards and audit trails.
Example
curl "$BASE_URL/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456/timeline" \
-H "Authorization: Bearer YOUR_API_KEY"
Response 200 OK
{
"project_id": "d4e5f6a7-b8c9-0123-def4-567890123456",
"events": [
{
"id": "e5f6a7b8-c9d0-1234-5678-90abcdef1234",
"type": "dataset",
"name": "transactions.csv",
"timestamp": "2026-02-12T08:00:00Z",
"rows": 50000,
"columns": 15
},
{
"id": "f6a7b8c9-d0e1-2345-6789-0abcdef12345",
"type": "experiment",
"name": "AutoML Run 1",
"timestamp": "2026-02-12T10:30:00Z",
"status": "completed",
"target_column": "is_fraud",
"problem_type": "classification",
"best_model_type": "GBM",
"duration": 342
}
]
}
Export Project
GET /api/projects/{project_id}/export
Download the entire project as a ZIP archive containing a
manifest.json and all associated artifacts (datasets, model binaries,
reports).
Example
curl -o project_export.zip \
"$BASE_URL/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456/export" \
-H "Authorization: Bearer YOUR_API_KEY"
resp = requests.get(
f"{BASE_URL}/api/projects/d4e5f6a7-b8c9-0123-def4-567890123456/export",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
with open("project_export.zip", "wb") as f:
f.write(resp.content)
Response 200 OK
Returns a binary ZIP file with Content-Type: application/zip.
See also
Datasets API – Uploading data to a project.
Experiments API – Running AutoML within a project.