> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trychert.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Remove a participant

> DELETE /api/v1/chats/:id/participants/:address — remove a participant from a group chat.

<Note>
  **Auth.** HMAC v1 or bearer token — see [Authentication](/api/authentication).
  **Status.** Live · **Idempotent:** No (removing the same address twice yields a "not in group" error).
</Note>

Removes a participant from an iMessage group chat. The `address` path parameter is URL-encoded (E.164 phone or email). Apple enforces a minimum group size of 3 — removals that would shrink the group below 3 are rejected with `1002`.

## Request

`DELETE /api/v1/chats/{id}/participants/{address}`

<RequestExample>
  ```bash cURL theme={null}
  curl -X DELETE \
    "https://console.trychert.com/api/v1/chats/ch_01H.../participants/%2B14155551234" \
    -H "x-chert-tenant: $TENANT" \
    -H "x-chert-signature: v1,$TS,$SIG"
  ```

  ```js Node.js theme={null}
  const ts = Math.floor(Date.now() / 1000)
  const body = ""
  const sig = crypto.createHmac("sha256", SIGNING_SECRET).update(`${ts}.${body}`).digest("hex")
  const address = encodeURIComponent("+14155551234")
  const res = await fetch(
    `https://console.trychert.com/api/v1/chats/${chatId}/participants/${address}`,
    {
      method: "DELETE",
      headers: {
        "x-chert-tenant": TENANT_SLUG,
        "x-chert-signature": `v1,${ts},${sig}`,
      },
    },
  )
  ```

  ```python Python theme={null}
  import hmac, hashlib, time, urllib.parse, requests
  ts = int(time.time())
  body = ""
  sig = hmac.new(SIGNING_SECRET.encode(), f"{ts}.{body}".encode(), hashlib.sha256).hexdigest()
  addr = urllib.parse.quote("+14155551234", safe="")
  r = requests.delete(
      f"https://console.trychert.com/api/v1/chats/{chat_id}/participants/{addr}",
      headers={
          "x-chert-tenant": TENANT_SLUG,
          "x-chert-signature": f"v1,{ts},{sig}",
      },
  )
  ```
</RequestExample>

## Response

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "chat_id": "ch_01H...",
    "removed": "+14155551234",
    "participants": ["+14155550100", "+14155550200"]
  }
  ```
</ResponseExample>

### Path parameters

<ParamField path="id" type="string" required>
  Chat identifier (`ch_…`).
</ParamField>

<ParamField path="address" type="string" required>
  URL-encoded E.164 phone number or email of the participant to remove.
</ParamField>

### Response fields

<ResponseField name="chat_id" type="string">
  The chat the participant was removed from.
</ResponseField>

<ResponseField name="removed" type="string">
  The address that was removed.
</ResponseField>

<ResponseField name="participants" type="string[]">
  Full participant roster after the remove.
</ResponseField>

## Errors

| Code   | HTTP | When                                                       |
| ------ | ---- | ---------------------------------------------------------- |
| `1001` | 400  | `address` missing or not in the group.                     |
| `1002` | 400  | Group is at the minimum size of 3 — cannot shrink further. |
| `1006` | 400  | Chat is a direct message.                                  |
| `2002` | 404  | Chat not found.                                            |
| `4001` | 502  | Delivery failed.                                           |
| `4099` | 422  | Group is missing its chat key or has no pinned line.       |

See the full [error code reference](/api/errors).

## See also

* [Add a participant](/api/group-chats/add-participant)
* [Leave a group](/api/group-chats/leave)
* [Rename a group](/api/group-chats/rename)
