Once you run more than a handful of machines, a flat list stops helping. Projects group your servers and cloud instances under names you choose: production and staging, one per customer, one per application. A project is a label with a total attached, not a boundary, so it never changes what a machine does or who can reach it.
What a project shows
Each project card lists the resources in it and a summary of what they add up to: how many servers and VMs, and their combined cores, memory and storage. It is the quickest way to answer “how much am I running for this customer” without adding invoices up by hand.

Create a project and add resources
- Open Projects under Identity in the left-hand menu and click New Project.
- Give it a name, an optional description, and a color so it is easy to pick out.
- On the project card, use Add resource and choose a server or VM. A resource belongs to one project at a time, so adding it to another moves it.
- Remove a resource with the cross on its row; the machine is untouched, it just leaves the project.

With the API
Listing needs read; changes need the Projects scope (projects.write). GET /v1/projects returns each project with its resources and totals:
{
"success": true,
"data": [
{
"id": 2, "name": "Production", "description": "Customer-facing web and database",
"color": "#16B364", "created_at": "2026-09-22 13:02:49",
"resources": [
{ "resource_type": "server", "resource_id": 955 },
{ "resource_type": "server", "resource_id": 957 },
{ "resource_type": "vm", "resource_id": 411 }
],
"summary": { "servers": 2, "vms": 1, "cores": 4, "memory_gb": 8, "storage_gb": 80 }
}
]
}
Create with POST /v1/projects (name, optional description and color), rename with PUT /v1/projects/{id}, delete with DELETE /v1/projects/{id}. Add a resource with POST /v1/projects/{id}/resources and remove it with DELETE /v1/projects/{id}/resources/{type}/{resourceId}:
curl -s -X POST https://api.amoni.app/v1/projects/2/resources \
-H "Authorization: Bearer nr_live_..." -H "Content-Type: application/json" \
-d '{"resource_type": "server", "resource_id": 955}'
# { "success": true, "data": { "message": "Assigned." } }
resource_type is server or vm. A resource you do not own answers 404 with code not_found, never a 403, so an id you were guessing at is not confirmed to exist.
Questions we get
- Can a server be in two projects? No. One project per resource; assigning it elsewhere moves it.
- Does a project change access or billing? No. It is an organizing label. Access is set under Contacts; billing is per service.
- Can I give a colleague one project only? Not yet; roles apply to the whole account. Projects are for organizing, not for scoping access.
- What counts in the totals? The cores, memory and storage of the servers and VMs in the project. Colocation and network services show as counts.
Still stuck?
Open a support ticket if a resource will not join a project; we can check that it is on your account.