Team
Every call needs Authorization: Bearer <key>. 8 calls:
- The workspace's pending invites:
GET /v1/invites - Invite someone to the workspace:
POST /v1/invites - Accept an invite as the signed-in user:
POST /v1/invites/accept - Revoke an invite:
DELETE /v1/invites/:id - Resend an invite:
POST /v1/invites/:id/resend - List the workspace's members:
GET /v1/members - Change a member's role, team or status:
PATCH /v1/members/:id - Remove a member from the workspace:
DELETE /v1/members/:id
The workspace's pending invites
GET /v1/invites
Invites not yet accepted, newest first, including expired ones.
Headers
| Name | Type | Required | Description |
|---|---|---|---|
x-workspace-id | string | No | Workspace for session (JWT) callers. API keys carry their own workspace. |
Response 200
| Field | Type | Description |
|---|---|---|
data | object[] | |
data[].accepted_at | string (date-time) or null | ISO 8601 timestamp. |
data[].created_at | string (date-time) | ISO 8601 timestamp. |
data[].email | string | |
data[].expires_at | string (date-time) | ISO 8601 timestamp. |
data[].id | string (uuid) | |
data[].role | enum | One of: owner, admin, billing, manager, agent, developer, analyst. |
data[].team_id | string (uuid) or null |
Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.
Invite someone to the workspace
POST /v1/invites
Emails a single-use link that expires after 7 days. Only an owner can invite an owner. With team_id, the member joins that team on acceptance.
Headers
| Name | Type | Required | Description |
|---|---|---|---|
x-workspace-id | string | No | Workspace for session (JWT) callers. API keys carry their own workspace. |
idempotency-key | string | No | Makes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
email | string (email) | Yes | Up to 254 characters. |
role | enum | Yes | One of: owner, admin, billing, manager, agent, developer, analyst. |
team_id | string (uuid) | No |
Response 201
| Field | Type | Description |
|---|---|---|
accepted_at | string (date-time) or null | ISO 8601 timestamp. |
created_at | string (date-time) | ISO 8601 timestamp. |
email | string | |
expires_at | string (date-time) | ISO 8601 timestamp. |
id | string (uuid) | |
role | enum | One of: owner, admin, billing, manager, agent, developer, analyst. |
team_id | string (uuid) or null |
Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.
Accept an invite as the signed-in user
POST /v1/invites/accept
Needs a user session whose email matches the invite. No X-Workspace-Id is needed.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
token | string | Yes | Up to 256 characters. |
Response 200
| Field | Type | Description |
|---|---|---|
org | object | |
org.id | string | Organisation id (org_...). |
org.name | string | |
org.plan | enum | One of: pilot, growth, enterprise. |
org.slug | string | |
org.status | enum | One of: onboarding, live, paused, suspended, offboarded. |
org.timezone | string | The organisation's IANA time zone, used for analytics days and weeks. |
role | enum | One of: owner, admin, billing, manager, agent, developer, analyst. |
status | enum | One of: active, invited, suspended. |
team_id | string (uuid) or null | |
workspace | object | |
workspace.id | string | Workspace id (ws_...). |
workspace.is_default | boolean | |
workspace.name | string |
Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.
Revoke an invite
DELETE /v1/invites/:id
Deletes a pending invite, so its link stops working. Only an owner can revoke an owner invite.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | Yes |
Headers
| Name | Type | Required | Description |
|---|---|---|---|
x-workspace-id | string | No | Workspace for session (JWT) callers. API keys carry their own workspace. |
idempotency-key | string | No | Makes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters. |
Response 200
| Field | Type | Description |
|---|---|---|
deleted | enum | One of: true. |
id | string (uuid) |
Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.
Resend an invite
POST /v1/invites/:id/resend
Emails a new single-use link that expires after 7 days. The previous link stops working once the email is sent. Only an owner can resend an owner invite. Each invite can be resent once a minute and 5 times in 24 hours; beyond that the response is 429 with retry-after.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | Yes |
Headers
| Name | Type | Required | Description |
|---|---|---|---|
x-workspace-id | string | No | Workspace for session (JWT) callers. API keys carry their own workspace. |
idempotency-key | string | No | Makes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters. |
Response 200
| Field | Type | Description |
|---|---|---|
accepted_at | string (date-time) or null | ISO 8601 timestamp. |
created_at | string (date-time) | ISO 8601 timestamp. |
email | string | |
expires_at | string (date-time) | ISO 8601 timestamp. |
id | string (uuid) | |
role | enum | One of: owner, admin, billing, manager, agent, developer, analyst. |
team_id | string (uuid) or null |
Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.
List the workspace's members
GET /v1/members
Headers
| Name | Type | Required | Description |
|---|---|---|---|
x-workspace-id | string | No | Workspace for session (JWT) callers. API keys carry their own workspace. |
Response 200
| Field | Type | Description |
|---|---|---|
data | object[] | |
data[].avatar_url | string or null | |
data[].created_at | string (date-time) | ISO 8601 timestamp. |
data[].email | string | |
data[].full_name | string or null | |
data[].id | string (uuid) | Membership id. |
data[].last_active_at | string (date-time) or null | ISO 8601 timestamp. |
data[].role | enum | One of: owner, admin, billing, manager, agent, developer, analyst. |
data[].status | enum | One of: active, invited, suspended. |
data[].team_id | string (uuid) or null | |
data[].user_id | string (uuid) |
Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.
Change a member's role, team or status
PATCH /v1/members/:id
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | Yes |
Headers
| Name | Type | Required | Description |
|---|---|---|---|
x-workspace-id | string | No | Workspace for session (JWT) callers. API keys carry their own workspace. |
idempotency-key | string | No | Makes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
role | enum | No | One of: owner, admin, billing, manager, agent, developer, analyst. |
status | enum | No | One of: active, suspended. |
team_id | string (uuid) or null | No |
Response 200
| Field | Type | Description |
|---|---|---|
avatar_url | string or null | |
created_at | string (date-time) | ISO 8601 timestamp. |
email | string | |
full_name | string or null | |
id | string (uuid) | Membership id. |
last_active_at | string (date-time) or null | ISO 8601 timestamp. |
role | enum | One of: owner, admin, billing, manager, agent, developer, analyst. |
status | enum | One of: active, invited, suspended. |
team_id | string (uuid) or null | |
user_id | string (uuid) |
Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.
Remove a member from the workspace
DELETE /v1/members/:id
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string (uuid) | Yes |
Headers
| Name | Type | Required | Description |
|---|---|---|---|
x-workspace-id | string | No | Workspace for session (JWT) callers. API keys carry their own workspace. |
idempotency-key | string | No | Makes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters. |
Response 204
No body.
Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.