# People

> The People operations of the Kabu API: person-wide profile, pending asks and notification restrictions.

Person-wide profile, pending asks and notification restrictions.

Generated from the contract, version `2.0.0-draft.2` ([OpenAPI](/openapi.yaml)). Base URL `https://usekabu.com/api`. Errors are problem details, each [code](/docs/errors) with its own page.

## `GET /v2/me` · Me get

- **Kabu apps only:** a signed-in human's token. Integrations use API keys.
- **Signed-in humans:** `self`.

| Status | Means | Body |
|---|---|---|
| `200` | OK | [Me](#schema-Me) |
| `4XX` | Error | [Problem](/docs/api/discovery#schema-Problem) |
| `5XX` | Error | [Problem](/docs/api/discovery#schema-Problem) |

```sh
curl "https://usekabu.com/api/v2/me" \
  -H "Authorization: Bearer $KABU_USER_TOKEN"
```

## `GET /v2/me/asks` · Me asks list

Cross-org pending asks over current memberships, recipient-projected, labelled by org. Keyset (expires_at, id) ascending, opaque cursor, at most 100. User tokens only; Kabu-Org does not narrow this list. Refresh on foreground and push.

- **Kabu apps only:** a signed-in human's token. Integrations use API keys.
- **Signed-in humans:** `self`.

| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| `limit` | query | integer, from 1 to 100 | no |  |
| `after` | query | string | no | Opaque cursor from next_cursor. |

| Status | Means | Body |
|---|---|---|
| `200` | OK | [MyAskList](#schema-MyAskList) |
| `4XX` | Error | [Problem](/docs/api/discovery#schema-Problem) |
| `5XX` | Error | [Problem](/docs/api/discovery#schema-Problem) |

```sh
curl "https://usekabu.com/api/v2/me/asks" \
  -H "Authorization: Bearer $KABU_USER_TOKEN"
```

## `GET /v2/me/settings` · Me settings get

- **Kabu apps only:** a signed-in human's token. Integrations use API keys.
- **Signed-in humans:** `self`.

| Status | Means | Body |
|---|---|---|
| `200` | OK | [UserSettings](#schema-UserSettings) |
| `4XX` | Error | [Problem](/docs/api/discovery#schema-Problem) |
| `5XX` | Error | [Problem](/docs/api/discovery#schema-Problem) |

```sh
curl "https://usekabu.com/api/v2/me/settings" \
  -H "Authorization: Bearer $KABU_USER_TOKEN"
```

## `PATCH /v2/me/settings` · Me settings update

- **Kabu apps only:** a signed-in human's token. Integrations use API keys.
- **Signed-in humans:** `self`.

**Request body**: [UserSettingsUpdate](#schema-UserSettingsUpdate).

| Status | Means | Body |
|---|---|---|
| `200` | OK | [UserSettings](#schema-UserSettings) |
| `4XX` | Error | [Problem](/docs/api/discovery#schema-Problem) |
| `5XX` | Error | [Problem](/docs/api/discovery#schema-Problem) |

```sh
curl -X PATCH "https://usekabu.com/api/v2/me/settings" \
  -H "Authorization: Bearer $KABU_USER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
```

## Schemas

### Me

| Property | Type | Required | Description |
|---|---|---|---|
| `object` | `"me"` | yes |  |
| `user_id` | string | yes |  |
| `name` | string or null | yes |  |
| `email` | string or null | yes |  |
| `memberships` | array of [Membership](/docs/api/org#schema-Membership) | yes |  |
| `account_deletion` | [AccountDeletion](#schema-AccountDeletion) | yes | Personal orgs are deleted. Team orgs transfer to earliest active admin, else member (joined_at then id), else delete. Successor's plan applies and successor is notified. Deletion is never blocked. |

### AccountDeletion

Personal orgs are deleted. Team orgs transfer to earliest active admin, else member (joined_at then id), else delete. Successor's plan applies and successor is notified. Deletion is never blocked.

| Property | Type | Required | Description |
|---|---|---|---|
| `orgs` | array of [DeletionOrgEffect](#schema-DeletionOrgEffect) | yes |  |

### DeletionOrgEffect

| Property | Type | Required | Description |
|---|---|---|---|
| `org` | string | yes |  |
| `effect` | string | yes |  |
| `successor` | [OrgMember](/docs/api/org#schema-OrgMember) or null | yes |  |
| `plan` | string or null | yes |  |
| `successor_notified` | boolean | yes |  |

### MyAskList

| Property | Type | Required | Description |
|---|---|---|---|
| `object` | `"list"` | yes |  |
| `data` | array of [MyAsk](#schema-MyAsk) | yes |  |
| `has_more` | boolean | yes |  |
| `next_cursor` | string or null | yes |  |

### MyAsk

| Property | Type | Required | Description |
|---|---|---|---|
| `org` | string | yes |  |
| `org_name` | string | yes |  |
| `message` | [Message](/docs/api/messages#schema-Message) | yes | One object for notify, ask and steer. Never contains answer links. On human routes (user token, answer link, delegate) Kabu returns the recipient projection: `to` lists only the caller, metadata is `{}`, and correlation, extensions and quiz answers before the reveal point are null. For a recipient who did not respond, `resolution` is null (status and settled_at still show the ask is settled), so no recipient learns who else was asked or what they answered; the responding human, the creator and integrators see the full resolution and receipt. |

### UserSettings

| Property | Type | Required | Description |
|---|---|---|---|
| `object` | `"user_settings"` | yes |  |
| `interruption_threshold` | [Priority](/docs/api/messages#schema-Priority) | yes | Open enum. Known values are `PriorityKnown`; accept and ignore unknown values. |
| `quiet_hours` | [QuietHoursView](#schema-QuietHoursView) or null | yes |  |
| `live_activities` | boolean | yes |  |
| `muted_agents` | array of string, at most 100 items | yes |  |
| `muted_projects` | array of string, at most 100 items | yes |  |
| `muted_chats` | array of (string, at most 140 characters), at most 500 items | no | Muted chats as `project/agent` normalised keys. Muting silences updates from that chat (delivered passively, still shown in the app); asks always alert. |
| `contact_email` | string, at most 254 characters or null | no |  |

### QuietHoursView

| Property | Type | Required | Description |
|---|---|---|---|
| `start` | string, matching `^([01][0-9]\|2[0-3]):[0-5][0-9]$` | yes |  |
| `end` | string, matching `^([01][0-9]\|2[0-3]):[0-5][0-9]$` | yes |  |
| `time_zone` | string | yes |  |

### UserSettingsUpdate

Silence interruptions: threshold above which interruptions are allowed. Personal restrictions win over workspace settings. Quieted asks remain passive with delivery.reason; notifies are suppressed, except an update from a muted chat (`muted_chat`), which is delivered passively: no sound, no banner, still shown in the app. Asks always alert in a muted chat.

| Property | Type | Required | Description |
|---|---|---|---|
| `interruption_threshold` | [PriorityKnown](/docs/api/messages#schema-PriorityKnown) | no | Registry-backed priority. `urgent` needs the `messages:urgent` scope. Unknown values render as `normal`. |
| `quiet_hours` | [QuietHours](#schema-QuietHours) or null | no |  |
| `live_activities` | boolean | no |  |
| `muted_agents` | array of string, at most 100 items | no |  |
| `muted_projects` | array of string, at most 100 items | no |  |
| `muted_chats` | array of (string, at most 140 characters), at most 500 items | no | Muted chats as `project/agent` normalised keys. Muting silences updates from that chat (delivered passively, still shown in the app); asks always alert. |
| `mute_add` | array of (string, at most 140 characters), at most 100 items | no | Chats to mute, added to the stored list atomically on the server (two devices muting at once both survive). Applied after `muted_chats`. |
| `mute_remove` | array of (string, at most 140 characters), at most 100 items | no | Chats to unmute, removed from the stored list atomically. Applied after `muted_chats` and before `mute_add`. |
| `contact_email` | string, at most 254 characters or null | no |  |

Unknown properties are refused.

### QuietHours

| Property | Type | Required | Description |
|---|---|---|---|
| `start` | string, matching `^([01][0-9]\|2[0-3]):[0-5][0-9]$` | yes |  |
| `end` | string, matching `^([01][0-9]\|2[0-3]):[0-5][0-9]$` | yes |  |
| `time_zone` | string | yes |  |

Unknown properties are refused.
