Projects
List projects#
GET /api/organizations/{organization_id}/projects
Your projects, with how many tasks each has and what they save.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
Response
projects(array of objects): The matching projects.id(string (uuid)): The project's ID.status(string): Whether the project is upcoming, open, or completed. One ofupcoming,open,completed.display_name(string): The project's name, like Project #3.tasks_count(integer): How many tasks the project has.open_tasks_count(integer): How many of its tasks are still open.monthly_savings(number): The monthly savings of the project's cost tasks, in USD.
Errors: 401, 403, 404, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/projects \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"projects": [
{
"id": "5fb4f472-04cb-532b-bf32-6a33aa4691f9",
"status": "open",
"display_name": "Project #1",
"tasks_count": 1,
"open_tasks_count": 1,
"monthly_savings": 0
}
]
}Get a project#
GET /api/organizations/{organization_id}/projects/{project_id}
One project with its tasks. A project that is locked, or hasn't started yet, returns 403.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
project_id | path | string (uuid) | The project's ID. Required. |
Response
project(object): The project.id(string (uuid)): The project's ID.status(string): Whether the project is upcoming, open, or completed. One ofupcoming,open,completed.display_name(string): The project's name, like Project #3.tasks_count(integer): How many tasks the project has.open_tasks_count(integer): How many of its tasks are still open.monthly_savings(number): The monthly savings of the project's cost tasks, in USD.tasks(array of objects): The project's tasks, by number.id(string (uuid)): The task's ID.number(integer): The task's number within the organization.status(string): Where the task is on its project's board. One oftodo,in_progress,solved,discarded,archived.resource_uid(string): The AWS resource the task is about, like an instance ID.title(string): What to do, like Upgrade db-1 to Graviton.categories(array of strings): What the task improves. One ofcost,security,hygiene,modernization.risk(string): How risky the change is. One oflow,medium,high,critical.last_detected_at(string (date-time) or null): When MilkStraw AI last found the issue.confidence(string): How sure MilkStraw AI is that the change applies. One oflow,medium,high.reversible(boolean): Whether the change can be undone.source(string): What found the issue. One ofaws,milkstraw.project(object): The project the task belongs to.monthly_savings(number or null): What the task saves a month, in USD, when it saves money.
Errors: 401, 403, 404, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/projects/$PROJECT_ID \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"project": {
"id": "5fb4f472-04cb-532b-bf32-6a33aa4691f9",
"status": "open",
"display_name": "Project #1",
"tasks_count": 1,
"open_tasks_count": 1,
"monthly_savings": 0,
"tasks": [
{
"id": "a05b8732-3ec1-537b-ad3b-e2e632bd94ed",
"number": 1,
"status": "todo",
"resource_uid": "i-0fixture0000000001",
"title": "Rightsize EC2 instance i-0fixture0000000001",
"categories": [
"cost"
],
"risk": "medium",
"last_detected_at": null,
"confidence": "medium",
"reversible": true,
"source": "aws",
"project": {
"id": "5fb4f472-04cb-532b-bf32-6a33aa4691f9",
"display_name": "Project #1",
"completed": false
},
"monthly_savings": null
}
]
}
}Get a task#
GET /api/organizations/{organization_id}/projects/{project_id}/tasks/{task_id}
One task with its resource details, instructions, and activity.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
organization_id | path | string (uuid) | The organization's ID, from the organizations list. Required. |
project_id | path | string (uuid) | The project's ID. Required. |
task_id | path | string (uuid) | The task's ID. Required. |
Response
task(object): The task.id(string (uuid)): The task's ID.number(integer): The task's number within the organization.status(string): Where the task is on its project's board. One oftodo,in_progress,solved,discarded,archived.resource_uid(string): The AWS resource the task is about, like an instance ID.title(string): What to do, like Upgrade db-1 to Graviton.categories(array of strings): What the task improves. One ofcost,security,hygiene,modernization.risk(string): How risky the change is. One oflow,medium,high,critical.last_detected_at(string (date-time) or null): When MilkStraw AI last found the issue.confidence(string): How sure MilkStraw AI is that the change applies. One oflow,medium,high.reversible(boolean): Whether the change can be undone.source(string): What found the issue. One ofaws,milkstraw.project(object): The project the task belongs to.monthly_savings(number or null): What the task saves a month, in USD, when it saves money.details(object): Facts about the resource, like its type and region.templates(object): The instructions for doing the task.content(string): The instructions, in Markdown.
activities(array of objects): What happened to the task, newest first.action(string): What happened. One of 10 values, likeopened.created_at(string (date-time)): When it happened.actor(string or null): The member who did it, or null when MilkStraw AI did.
Errors: 401, 403, 404, 429. See errors.
curl https://app.milkstraw.ai/api/organizations/$ORGANIZATION_ID/projects/$PROJECT_ID/tasks/$TASK_ID \
-H "Authorization: Bearer $MILKSTRAW_API_KEY"{
"task": {
"id": "a05b8732-3ec1-537b-ad3b-e2e632bd94ed",
"number": 1,
"status": "todo",
"resource_uid": "i-0fixture0000000001",
"title": "Rightsize EC2 instance i-0fixture0000000001",
"categories": [
"cost"
],
"risk": "medium",
"last_detected_at": null,
"confidence": "medium",
"reversible": true,
"source": "aws",
"project": {
"id": "5fb4f472-04cb-532b-bf32-6a33aa4691f9",
"display_name": "Project #1",
"completed": false
},
"monthly_savings": null,
"details": {
"region": "us-east-1"
},
"templates": {
"content": "Instance i-0fixture0000000001 is over-provisioned."
},
"activities": [
{
"action": "opened",
"created_at": "2026-11-08T13:01:58.000Z",
"actor": null
}
]
}
}