# Name a person on a board

`POST https://evohub.io/api/v1/board/boards/{boardID}/members`

Part of the [Board API](https://docs.evohub.io/board.md) reference · operationId `addBoardMember`.

Names a person on the board, so they see it whatever its visibility.
The person must be a member of the organization. Naming someone who
is already on the board changes nothing and answers the same.

What they may do on the board comes from their organization role, not
from the board: a `role` in the body is accepted and ignored.

Requires the `board:member:write` scope.

## Authorization

Any one of:

- `bearerKey`
- `headerKey`

Where:

- `bearerKey`: HTTP Bearer — An EvoHub API key (`evohub_…`) as a bearer token.
- `headerKey`: API key in the header `X-API-Key` — An EvoHub API key (`evohub_…`).

## Path parameters

- `boardID` (string, required, example `brd_5b0c8e1a2f3d4c6b9a7e0d1f2c3b4a59`): The board's ID.

## Request body (required)

Content type: `application/json`

Type: `MemberRequest`

- `user_id` (string)
- `role` (string, deprecated): Ignored. Boards have no roles.

## Responses

### 201 — The person is on the board.

Content type: `application/json`

Type: `MemberEnvelope`

- `data` (object)
  - `member` (Member)
    - `user_id` (string)
    - `added_by` (string)
    - `added_at` (string (date-time))

### 400 — The body is not JSON for this endpoint, or carries a field it does not know (`INVALID_BODY`), or a field breaks a rule (`VALIDATION_ERROR`; the message says which).

Content type: `application/json`

Type: `Error`

- `error` (object, required)
  - `code` (string, required, example `NOT_FOUND`)
  - `message` (string, required, example `not found`)
  - `request_id` (string)

### 401 — No API key was sent, or it is unknown, revoked or expired (`UNAUTHORIZED`).

Content type: `application/json`

Type: `Error`

- `error` (object, required)
  - `code` (string, required, example `NOT_FOUND`)
  - `message` (string, required, example `not found`)
  - `request_id` (string)

### 403 — The key lacks the scope this endpoint needs (`FORBIDDEN`).

Content type: `application/json`

Type: `Error`

- `error` (object, required)
  - `code` (string, required, example `NOT_FOUND`)
  - `message` (string, required, example `not found`)
  - `request_id` (string)

### 404 — The board is not one the caller can see (`NOT_FOUND`), or the person is not in this organization (`USER_NOT_FOUND`).

Content type: `application/json`

Type: `Error`

- `error` (object, required)
  - `code` (string, required, example `NOT_FOUND`)
  - `message` (string, required, example `not found`)
  - `request_id` (string)

### 429 — Too many requests (`RATE_LIMITED`). Wait for `Retry-After` seconds.

Headers:

- `Retry-After` (integer): Seconds to wait before retrying.

Content type: `application/json`

Type: `Error`

- `error` (object, required)
  - `code` (string, required, example `NOT_FOUND`)
  - `message` (string, required, example `not found`)
  - `request_id` (string)

### 500 — Something went wrong on EvoHub's side (`INTERNAL_ERROR`). Retry later.

Content type: `application/json`

Type: `Error`

- `error` (object, required)
  - `code` (string, required, example `NOT_FOUND`)
  - `message` (string, required, example `not found`)
  - `request_id` (string)

### 503 — The person's membership of the organization could not be checked right now (`MEMBERSHIP_CHECK_UNAVAILABLE`). Retry shortly.

Content type: `application/json`

Type: `Error`

- `error` (object, required)
  - `code` (string, required, example `NOT_FOUND`)
  - `message` (string, required, example `not found`)
  - `request_id` (string)

## Example request

```bash
curl -X POST 'https://evohub.io/api/v1/board/boards/brd_5b0c8e1a2f3d4c6b9a7e0d1f2c3b4a59/members' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <TOKEN>' \
  -d '{
  "user_id": "usr_6c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f"
}'
```
