# Get a user's status bubble

`GET /user.statusBubble.get`

## Description

Returns the shared UI/API thought bubble, or null when no live bubble exists. Expired bubbles are omitted before storage cleanup runs.

See [Status bubbles](/docs/guides/user-status-bubble).

**Access:** Organization and Personal. Organization credentials may target an active user in the workspace. Personal OAuth and PATs may target only their owner. The workspace comes from the token.

**Required scope:** `user:read.statusBubble`. PATs skip the scope check; personal OAuth requires the scope.

---

**OpenAPI Spec:** [chat-v1.json](https://developer.ro.am/chat-v1.json)

## Authentication

```
Authorization: Bearer YOUR_API_KEY
```

## Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `userId` | query | string | Yes | Bare UUID, tagged U-… ID, or ASCII email of the target user. |

## Responses

### 200 - Current bubble and canonical user identifier.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `userId` | string | Yes | Canonical UUID of the target user. |
| `statusBubble` | object | Yes | The live thought bubble, or null when none is set or it has expired. |

**statusBubble**:

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `text` | string | Yes | Trimmed text, limited to 20 Unicode code points. |
| `expiresAt` | string | Yes | Server-stamped expiration in RFC3339 format with millisecond precision. |

### 400 - Missing or invalid input. See the guide for stable error codes.

### 401 - Invalid authentication credentials.

### 403 - Missing scope or personal token targeting someone else.

### 404 - Unknown, archived, or cross-account user.

### 405 - Unsupported method.

### 500 - Internal error.

---

*Machine-readable API documentation.*
*Full documentation: https://developer.ro.am/docs/api/user-status-bubble-get*
