Skip to main content

Service identities

Every call needs Authorization: Bearer <key>. 3 calls:

List service identities​

GET /v1/service-identities

MCP clients and the identities of AI agents, newest first. Tokens are never shown again.

Query parameters

NameTypeRequiredDescription
limitintegerNoFrom 1 to 100. Default 50.
cursorstringNoOpaque cursor from next_cursor. Up to 512 characters.

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
dataobject[]
data[].allowed_line_idsstring[]
data[].api_key_idstring or nullAPI key id (key_...).
data[].created_atstring (date-time)ISO 8601 timestamp.
data[].daily_limitinteger or nullFrom 0 to 9007199254740991.
data[].envenum or nullOne of: live, test.
data[].idstring (uuid)
data[].kindenumOne of: ai_agent, mcp_client.
data[].namestring
data[].scopesenum[]
data[].statusenumOne of: active, disabled.
next_cursorstring or nullPass as cursor to get the next page; null at the end.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Create a service identity for an MCP client​

POST /v1/service-identities

Returns the bearer token once, in token. It is an API key linked to the identity: the identity gets the scopes both allow, sends only from its lines and at most daily_limit messages a day. Rotate or revoke it through /v1/api-keys.

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes 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

FieldTypeRequiredDescription
allowed_line_idsstring[]NoUp to 500 items.
daily_limitinteger or nullNoFrom 1 to 100000.
envenumNoOne of: live, test. Default "live".
kindenumNoAI agent identities are made with their agent (POST /v1/agents). One of: mcp_client. Default "mcp_client".
namestringYesUp to 80 characters.
scopesenum[]YesUp to 3 items.

Response 201

FieldTypeDescription
allowed_line_idsstring[]
api_key_idstring or nullAPI key id (key_...).
created_atstring (date-time)ISO 8601 timestamp.
daily_limitinteger or nullFrom 0 to 9007199254740991.
envenum or nullOne of: live, test.
idstring (uuid)
kindenumOne of: ai_agent, mcp_client.
namestring
scopesenum[]
statusenumOne of: active, disabled.
tokenstringShown once. Use as a bearer token for the API or MCP.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Rename, re-scope, limit or disable a service identity​

PATCH /v1/service-identities/:id

Disabling stops its token at once. Changing scopes changes its token’s scopes too. AI agents’ identities change only through their agent.

Path parameters

NameTypeRequiredDescription
idstring (uuid)Yes

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes 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

FieldTypeRequiredDescription
allowed_line_idsstring[]NoUp to 500 items.
daily_limitinteger or nullNoFrom 1 to 100000.
namestringNoUp to 80 characters.
scopesenum[]NoUp to 3 items.
statusenumNoOne of: active, disabled.

Response 200

FieldTypeDescription
allowed_line_idsstring[]
api_key_idstring or nullAPI key id (key_...).
created_atstring (date-time)ISO 8601 timestamp.
daily_limitinteger or nullFrom 0 to 9007199254740991.
envenum or nullOne of: live, test.
idstring (uuid)
kindenumOne of: ai_agent, mcp_client.
namestring
scopesenum[]
statusenumOne of: active, disabled.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.