---
title: "Add Staff"
method: POST
path: "/v1/teams/{team_id}/staff"
tags: ["teams"]
---

# Add Staff

`POST /v1/teams/{team_id}/staff`

## Request

- Base URL: `https://api.stormy.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.stormy.ai/v1/teams/{team_id}/staff`
- Auth: none declared

Put one of the business's own people on the team, on the OWNER's word.

Owner, 2026-10-03: "I want to add employees. I want them to have this phone
number … so it can communicate with them … we can see the employees, their
communication with Stormy." Until this, a person could be added only by an
owner's own API call: the desk's key fails `team.members.manage`, so "add Ana,
her cell is …" in chat had no door, and an employee added the ordinary way
landed `invited` with an `unverified` phone — which `caller_authority` reads
as a STRANGER when she texts the line.

Who may: the owner or an admin directly, or the desk inside a running turn
the owner started (`schedules._owners_turn`, the same proof schedules, the
web address and the customer portal use). A customer's text, an employee's
own text and a clock all resolve to another tier and get a 403 — nothing a
person who is not the owner says can put someone on the team.

What it grants: an ACTIVE internal membership with role `member` — never
admin, never a capability — and the contacts as VERIFIED, vouched for by the
owner (`verification_evidence.provider = "owner"`). That is what makes her
text a teammate's turn instead of a stranger's, and what lets the desk text
her without customer consent evidence (`communication_evidence_gate`).
Idempotent on the contact: someone already on the team is returned as is.

## Path parameters

- `team_id` string, uuid, required

## Headers

- `authorization` string, nullable
- `x-darwin-token` string, nullable

## Request body

- AddStaffRequest: One of the business's own people, on the owner's word.
  - `idempotency_key` string, required
  - `name` string, required
  - `phone` string, nullable
  - `email` string, nullable

## Response `201`

Successful Response

- object

## Other responses

- `422`: Validation Error

## Changes

> 68 revisions in range; 1 not diffed.

- **2026-10-04** `bba5cf256363`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/stormy/apis/stormy-control-plane/changes/v1/teams/:team_id/staff/post.md)

---

[API](https://skmtc.dev/stormy/apis/stormy-control-plane.md) · [All operations](https://skmtc.dev/stormy/apis/stormy-control-plane/llms.txt) · [OpenAPI document](https://skmtc.dev/stormy/apis/stormy-control-plane/revisions/a40e83844eaa?raw)
