Eos Developers
Design target — not live yet. This documentation defines the contract Eos will implement. Existing internal application APIs are not part of this contract.

Projects API

The Projects API manages organization projects through a stable external model. It does not expose Firestore paths, internal screen payloads, access materialization fields, or implementation metadata.

Roles

Operation Member Manager Finance HR
List and read projects Yes Yes Financial fields only where permitted Staffing fields only where permitted
Create or update projects No Yes No No
Archive or restore projects No Yes No No

Organization-wide-by-Role access means a permitted client may see all active projects allowed by its fields and Role, without project membership.

Project object

{
  "object": "project",
  "id": "prj_01J8Q8QFXT2Y3QAD6M0MPB75GC",
  "code": "ACME-001",
  "name": "Acme implementation",
  "description": "Implement and launch Acme's operating workspace.",
  "status": "active",
  "start_date": "2026-08-01",
  "end_date": "2026-11-30",
  "customer_id": "com_01J8Q8VSMHH33D1FAMJNGHQCCM",
  "manager_member_id": "alice@example.com",
  "currency": "USD",
  "custom_fields": {},
  "created_at": "2026-07-20T12:00:00Z",
  "updated_at": "2026-08-22T09:45:00Z"
}

Organization-defined fields appear inside custom_fields and are described by the Custom Fields API.

List projects

GET /v1/projects

Operation ID: listProjects

Filters: status, customer_id, manager_member_id, start_date_gte, end_date_lte, search, sort, order, limit, and after.

Archived projects are excluded unless status=archived is requested.

Create a project

POST /v1/projects

Operation ID: createProject

Required Role: Manager. Required header: Idempotency-Key.

{
  "code": "ACME-001",
  "name": "Acme implementation",
  "description": "Implement and launch Acme's operating workspace.",
  "start_date": "2026-08-01",
  "end_date": "2026-11-30",
  "manager_member_id": "alice@example.com",
  "customer_id": "com_01J8Q8VSMHH33D1FAMJNGHQCCM",
  "custom_fields": {}
}

The server assigns id, audit fields, access materialization, and initial status. References must belong to the same organization and must not be deleted.

Get a project

GET /v1/projects/{project_id}

Operation ID: getProject

Returns ETag for concurrency control.

Update a project

PATCH /v1/projects/{project_id}

Operation ID: updateProject

Required Role: Manager. Use If-Match with the current ETag.

Immutable fields such as id, organization, creation audit fields, and internal access data are ignored only where explicitly documented; otherwise they produce IMMUTABLE_FIELD.

Archive a project

POST /v1/projects/{project_id}/archive

Operation ID: archiveProject

Required Role: Manager. Required header: Idempotency-Key.

Archiving is the v1 deletion model. It preserves audit history and dependent records. Eos returns 409 when an active workflow prevents archival.

Restore a project

POST /v1/projects/{project_id}/restore

Operation ID: restoreProject

Required Role: Manager. Restores an archived project when its dependencies remain valid.

Common errors

PROJECT_CODE_CONFLICT, PROJECT_NOT_FOUND, INVALID_MANAGER, INVALID_CUSTOM_FIELD, STALE_RESOURCE, and PROJECT_ARCHIVE_BLOCKED.

Next: Tasks API.