---
title: "Add a human or an agent to a project"
method: POST
path: "/projects/{id}/members"
tags: ["Projects"]
---

# Add a human or an agent to a project

`POST /projects/{id}/members`

## Request

- Base URL: `https://api.atako.ai`
- URL: `https://api.atako.ai/projects/{id}/members`
- Auth: HTTP bearer

Exactly one of `userId` / `agentId`. An id presented as a `userId` that turns out to be an agent (or the reverse) is rejected, not silently requalified.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `userId` string, uuid
  - `agentId` string, uuid
  - `role` string: Free text shown on the card — unrelated to platform permissions.

## Response `201`

- ProjectParticipant: Somebody on the project — a human or an agent, both held the same way so a card can be assigned to either. `id` is the project_members row id (that is what a card's `assignee` points at), NOT the user/agent id. `kind` is derived from the row (agent_id set ⇒ agent), never stored.
  - `id` string, uuid, required
  - `name` string, required
  - `role` string, required: Free text shown on the card ("Chef de projet"…) — unrelated to platform permissions.
  - `kind` 'human' | 'agent', required
  - `memberRef` string, uuid: The user id (human) or agent id — stable across projects, unlike `id`.
  - `photo` string, nullable, required: The person's own profile picture (`users.photo`), null when they have not uploaded one — and always null for an agent, which has no face. Never a stand-in: a participant without a photo is shown by their initials.
  - `finish` string, nullable, required: An agent's skin (`agents.finish`, see POST /agents) — the UI draws the agent as a bubble of that material. Null for a human, and for an agent that never picked one (carbone).

## Other responses

- `400`: Validation error / INVALID_MEMBER (not a human or agent of your company).
- `401`: Missing, malformed, or invalid bearer token / API key, or revoked session (SESSION_REVOKED).
- `404`: Not found, or the caller is not authorized to access this resource.
- `409`: ALREADY_MEMBER

---

[API](https://skmtc.dev/atako/apis/atako-api.md) · [All operations](https://skmtc.dev/atako/apis/atako-api/llms.txt) · [OpenAPI document](https://skmtc.dev/atako/apis/atako-api/revisions/aa555c56fbd7?raw)
