Crescendo Lab CAAC OpenAPI (2.0.1)

Download OpenAPI specification:

If you would like to integrate with CAAC OpenAPI, please contact our support: help@cresclab.com

CAAC, the cutting-edge platform that stands for Conversation Analytics & Automation Cloud, a tool designed to empower businesses with AI-driven message generation capabilities. You can integrate CAAC OpenAPI to interact with CAAC automatically with your application.

  • If you are using Crescendo Lab product in the Taiwan or Thailand region, please use https://api.user360.cresclab.com
  • If you are using Crescendo Lab product in the Japan region, please use https://api.user360.jp.cresclab.com

Authentication

Bring the apikey parameter in the HTTP header to call CAAC OpenAPI

header key value
apikey {API key}

AI

Self Hosted AI Agent API

Self Hosted AI Agent API allows the CAAC platform to call the customer's own AI agent for automatic message replies. This endpoint must be implemented and hosted by the customer.

Important: This is a customer-implemented endpoint. The URL shown in the Router field below is for documentation reference only - customers must provide their own endpoint URL when configuring the AI Agent integration in CAAC platform.

Authentication: Bearer token in Authorization header (token is configured in CAAC platform settings)

Timeout: Must respond within 45 seconds

Handover Control: The API supports explicit handover control by including <HUMAN_HANDOVER> in the reply_text to request a handover to a human agent.

Version control: The API supports versioning to ensure compatibility between the CAAC platform and the customer's AI agent implementation.

Authorizations:
apikey
Request Body schema: application/json
required

Version: 1.0

conversation_id
integer
  • Conversation ID - CAAC platform's unique identifier for this conversation. Useful for the AI agent to maintain per-conversation state or memory across requests. May be 0 for health-check / out-of-conversation requests.
required
Array of objects (payload.SelfHostedAIAgentMessage)
  • Recent conversation content - Historical messages within a time period, including timestamps and speakers
org_uuid
string
  • Organization UUID - CAAC platform's stable UUID for the organization. Useful for the AI agent to scope tenant data, look up org-specific configuration, or correlate logs. Empty for health-check requests.
required
object (payload.SelfHostedAIAgentParticipants)
  • Conversation participants information - Details about all participants in the conversation
prompt
string
  • Platform-generated prompt - Optional guidance for LLM response style and task
  • Optional field
version
required
string
Value: "1.0"
  • API version - Indicates the version of the API request format

Responses

Request samples

Content type
application/json
{
  • "conversation_id": 98765,
  • "messages": [
    ],
  • "org_uuid": "123e4567-e89b-12d3-a456-426614174000",
  • "participants": {
    },
  • "prompt": "As a professional customer service representative, please respond to questions in a friendly tone.",
  • "version": "1.0"
}

Response samples

Content type
application/json
{
  • "reply_text": "Hello! Thank you for your inquiry about our products. Based on your needs, I would recommend Product A - it offers excellent value and includes comprehensive features such as X, Y, and Z. Would you like me to provide more detailed information, or would you prefer to speak with one of our specialists? I'm here to help!"
}

Messages & Backup

Get Backup Detail

Get Backup Detail

Authorizations:
apikey
path Parameters
backup_id
required
integer

Backup ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "backup_id": 0,
  • "created_at": "2019-08-24T14:15:22Z",
  • "download_url": "string",
  • "state": "initiated"
}

Trigger Messages Backup Task

Authorizations:
apikey
Request Body schema: application/json
required

TriggerMessagesBackupRequest

channel_id
integer
ended_at
required
string <date-time>
member_id
integer
started_at
required
string <date-time>

Responses

Request samples

Content type
application/json
{
  • "channel_id": 0,
  • "ended_at": "2019-08-24T14:15:22Z",
  • "member_id": 0,
  • "started_at": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "backup_id": 0
}

Create Message From User

Create Message from User

Authorizations:
apikey
path Parameters
channel_id
required
integer

Channel ID

member_id
required
integer

Member ID

Request Body schema: application/json
required

CreateMessageFromUserRequest

attachment_id
string
external_id
string
is_history
boolean
line_flex_content
string
object (payload.MessageMetadataRequest)
origin_url
string
preview_url
string
quoted_message_external_id
string
reply_to
integer
text
string
type
required
string
user_id
required
integer

Responses

Request samples

Content type
application/json
{
  • "attachment_id": "string",
  • "external_id": "string",
  • "is_history": true,
  • "line_flex_content": "string",
  • "metadata": {
    },
  • "origin_url": "string",
  • "preview_url": "string",
  • "quoted_message_external_id": "string",
  • "reply_to": 0,
  • "text": "string",
  • "type": "string",
  • "user_id": 0
}

Response samples

Content type
application/json
{
  • "created_at": "2019-08-24T14:15:22Z",
  • "deleted_at": "2019-08-24T14:15:22Z",
  • "external_channel_id": "string",
  • "external_id": "string",
  • "external_member_id": "string",
  • "id": 0,
  • "line_flex_content": "string",
  • "member_avatar": "string",
  • "member_display_name": "string",
  • "metadata": {
    },
  • "origin_url": "string",
  • "preview_url": "string",
  • "quotable": true,
  • "read": true,
  • "reply_to": "string",
  • "sender_type": "user",
  • "text": "string",
  • "type": "text",
  • "updated_at": "2019-08-24T14:15:22Z"
}

Members & Assignment

List Channels v1

List Channels

Authorizations:
apikey
Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "channels": [
    ]
}

Get Member By Channel ID And External ID

Get Member By Channel ID And External ID

Authorizations:
apikey
path Parameters
channel_id
required
integer

Channel ID

query Parameters
external_member_id
required
string

External Member ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "account_manager": "string",
  • "assign_type": "string",
  • "avatar": "string",
  • "birthday": "string",
  • "channel_id": 0,
  • "city": "string",
  • "company": "string",
  • "connect_id": "string",
  • "country": "string",
  • "customer_id": "string",
  • "display_email": "string",
  • "display_mobile": "string",
  • "display_name": "string",
  • "engagement_level": "string",
  • "external_member_id": "string",
  • "gender": "string",
  • "id": 0,
  • "location": "string",
  • "member_level": "string",
  • "name": "string",
  • "original_email": "string",
  • "original_mobile": "string",
  • "original_name": "string",
  • "processing_state": "string",
  • "star_mark": true,
  • "status": "string",
  • "type": "string"
}

Create Channel Member

Create or update a channel member. Currently only supports LINE channel type. The channel_member_id in the request body is the external UID (external member ID) from the channel platform (e.g., LINE user ID).

Authorizations:
apikey
path Parameters
channel_id
required
integer

Channel ID

Request Body schema: application/json
required

Create channel member payload. channel_member_id is the external UID from the channel platform.

channel_member_id
required
string

Responses

Request samples

Content type
application/json
{
  • "channel_member_id": "string"
}

Response samples

Content type
application/json
{
  • "member_id": 0
}

Get Member Assignment Relationship

Get Member Assignment Relationship

Authorizations:
apikey
path Parameters
channel_id
required
integer

Channel ID

member_id
required
integer

Member ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "assign_type": "string",
  • "assignment_relationship": {
    }
}

Individual Assign

Assigns a member to a specific individual user (specified by user_id inside assignment_relationship). Passing an empty / null assignment relationship triggers an unassign.

Collaborator side effect (active only when the org has the Collaborator feature enabled — determined server-side from the org's feature plan; callers do not send this flag):

  • On assign: the previous assignee (if any) is automatically added to the member's collaborator list. If the new assignee was already a collaborator on this member, they are removed from the collaborator list.
  • On unassign: all collaborators on the member are cleared.

When the Collaborator feature is disabled for the org, no collaborator changes occur — the endpoint behaves as a pure assign/unassign.

Authorizations:
apikey
Request Body schema: application/json
required

InternalIndividualAssignment

object (payload.AssignmentRelationshipV2)
channel_id
integer
org_id
integer

Responses

Request samples

Content type
application/json
{
  • "assignment_relationship": {
    },
  • "channel_id": 0,
  • "org_id": 0
}

Response samples

Content type
application/json
{
  • "assign_type": "string",
  • "assignment_relationship": {
    }
}

Manual Assign

Manually assigns a member to a user or team, or unassigns them. The action is controlled by the assign_type field in the request body: omit it (or pass manual) to assign, pass unassigned to clear the assignment.

Collaborator side effect (active only when the org has the Collaborator feature enabled — determined server-side from the org's feature plan; callers do not send this flag):

  • On assign: the previous assignee (if any) is automatically added to the member's collaborator list. If the new assignee was already a collaborator on this member, they are removed from the collaborator list.
  • On unassign: all collaborators on the member are cleared.

When the Collaborator feature is disabled for the org, no collaborator changes occur — the endpoint behaves as a pure assign/unassign.

Authorizations:
apikey
Request Body schema: application/json
required

InternalManualAssignment

assign_type
string

assign_type should be unassigned or null

object (payload.ManualAssignmentRelationship)
channel_id
integer
member_id
integer
org_id
integer

Responses

Request samples

Content type
application/json
{
  • "assign_type": "string",
  • "assignment_relationship": {
    },
  • "channel_id": 0,
  • "member_id": 0,
  • "org_id": 0
}

Response samples

Content type
application/json
{
  • "assign_type": "string",
  • "assignment_relationship": {
    }
}

List Channels v2

List Channels with pagination support

Authorizations:
apikey
query Parameters
limit
integer

Maximum number of channels to return (default: 100, max: 1000)

cursor
string

Pagination cursor token (supports 'cursor', 'after', or 'before' parameter)

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "channels": [
    ],
  • "cursor": {
    }
}

Get Member By ID

Get Member By ID

Authorizations:
apikey
path Parameters
channel_id
required
integer

Channel ID

member_id
required
integer

Member ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "account_manager": "string",
  • "assign_type": "string",
  • "avatar": "string",
  • "birthday": "string",
  • "city": "string",
  • "company": "string",
  • "connect_id": "string",
  • "country": "string",
  • "created_at": "string",
  • "custom_id": "string",
  • "display_name": "string",
  • "email": "string",
  • "engagement_level": "string",
  • "external_channel_id": "string",
  • "external_member_id": "string",
  • "gender": "string",
  • "id": 0,
  • "last_member_message_send": "string",
  • "last_message_at": "string",
  • "location": "string",
  • "member_level": "string",
  • "mobile": "string",
  • "name": "string",
  • "note": "string",
  • "original_email": "string",
  • "original_mobile": "string",
  • "original_name": "string",
  • "processing_state": "string",
  • "star_mark": true,
  • "status": "string",
  • "type": "string",
  • "updated_at": "string"
}

Close Conversation

Close Conversation by updating member processing state to resolved

Authorizations:
apikey
path Parameters
channel_id
required
integer

Channel ID

member_id
required
integer

Member ID

Request Body schema: application/json
required

Close Conversation Request

user_id
required
integer

User ID who performs the close action

Responses

Request samples

Content type
application/json
{
  • "user_id": 0
}

Tags Management

List Member Tags

List all tags for a member for the organization derived from consumer username

Authorizations:
apikey
path Parameters
member_id
required
integer

Member ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "tag_ids": [
    ]
}

Add Tag to Member

Add a tag to a member for the organization derived from consumer username

Authorizations:
apikey
path Parameters
member_id
required
integer

Member ID

Request Body schema: application/json
required

Request body

tag_id
required
integer

Responses

Request samples

Content type
application/json
{
  • "tag_id": 0
}

Response samples

Content type
application/json
{ }

Remove Tag from Member

Remove a tag from a member for the organization derived from consumer username

Authorizations:
apikey
path Parameters
member_id
required
integer

Member ID

tag_id
required
integer

Tag ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

List Tags

List tags for the organization derived from consumer username

Authorizations:
apikey
Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "tags": [
    ]
}

Create Tag

Create tag for the organization derived from consumer username

Authorizations:
apikey
Request Body schema: application/json
required

CreateTag

name
string

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "created_at": "string",
  • "id": 0,
  • "name": "string",
  • "org_id": 0,
  • "updated_at": "string",
  • "usage_count": 0
}

Delete Tag

Delete tag for the organization derived from consumer username

Authorizations:
apikey
path Parameters
tag_id
required
integer

Tag ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Update Tag

Update tag name for the organization derived from consumer username

Authorizations:
apikey
path Parameters
tag_id
required
integer

Tag ID

Request Body schema: application/json
required

UpdateTag

object (payload.NullableWrapper-string)

Responses

Request samples

Content type
application/json
{
  • "name": {
    }
}

Response samples

Content type
application/json
{
  • "created_at": "string",
  • "id": 0,
  • "name": "string",
  • "org_id": 0,
  • "updated_at": "string",
  • "usage_count": 0
}

Teams Management

Get Team By External Team ID

Get Team By External Team ID

Authorizations:
apikey
query Parameters
external_team_id
string

External team id

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "description": "string",
  • "editable": true,
  • "external_team_id": "string",
  • "id": 0,
  • "name": "string",
  • "routing_rule": "by-queue"
}

Create Team

Create Team

Authorizations:
apikey
Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "description": "string",
  • "editable": true,
  • "external_team_id": "string",
  • "id": 0,
  • "name": "string",
  • "routing_rule": "by-queue"
}

Delete Team

Delete Team

Authorizations:
apikey
path Parameters
team_id
required
integer

Team ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Get Team By ID v1

Get Team By ID

Authorizations:
apikey
path Parameters
team_id
required
integer

Team ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "description": "string",
  • "editable": true,
  • "external_team_id": "string",
  • "id": 0,
  • "name": "string",
  • "routing_rule": "by-queue"
}

Update Team

Update Team

Authorizations:
apikey
path Parameters
team_id
required
integer

Team ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "description": "string",
  • "editable": true,
  • "external_team_id": "string",
  • "id": 0,
  • "name": "string",
  • "routing_rule": "by-queue"
}

Add users to team

Add users to team

Authorizations:
apikey
path Parameters
team_id
required
integer

Team ID

Request Body schema: application/json
required

UserIDs

user_ids
Array of integers

Responses

Request samples

Content type
application/json
{
  • "user_ids": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

Remove user from team

Remove user from team

Authorizations:
apikey
path Parameters
team_id
required
integer

Team ID

user_id
required
integer

User ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

List Teams

List Teams with pagination support

Authorizations:
apikey
query Parameters
limit
integer

Maximum number of teams to return (default: 100, max: 1000)

cursor
string

Pagination cursor token (supports 'cursor', 'after', or 'before' parameter)

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "cursor": {
    },
  • "teams": [
    ]
}

Get Team By ID v2

Get Team By Team ID

Authorizations:
apikey
path Parameters
team_id
required
integer

Team ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "description": "string",
  • "external_team_id": "string",
  • "id": 0,
  • "name": "string",
  • "routing_rule": "by-queue"
}

Users Management

Get User By External User ID

Get User By External User ID

Authorizations:
apikey
query Parameters
external_user_id
string

External user id

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "avatar": "string",
  • "chat_name": "string",
  • "created_at": "string",
  • "email": "string",
  • "external_user_id": "string",
  • "id": 0,
  • "inviter_id": 0,
  • "is_internal_user": true,
  • "name": "string",
  • "on_duty_status": "string",
  • "org_id": 0,
  • "role_id": 0,
  • "role_name": "string",
  • "role_type": "string",
  • "status": "string",
  • "type": "string"
}

Delete User

Delete User

Authorizations:
apikey
path Parameters
user_id
required
integer

User ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Get User By ID v1

Get User By ID v1

Authorizations:
apikey
path Parameters
user_id
required
integer

User ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "avatar": "string",
  • "chat_name": "string",
  • "created_at": "string",
  • "email": "string",
  • "external_user_id": "string",
  • "id": 0,
  • "inviter_id": 0,
  • "is_internal_user": true,
  • "name": "string",
  • "on_duty_status": "string",
  • "org_id": 0,
  • "role_id": 0,
  • "role_name": "string",
  • "role_type": "string",
  • "status": "string",
  • "type": "string"
}

Update User

Update User

Authorizations:
apikey
path Parameters
user_id
required
integer

User ID

Request Body schema: application/json
required

UpdateUser

avatar
string
chat_name
string
external_user_id
string or null
mobile
string
name
string

Responses

Request samples

Content type
application/json
{
  • "avatar": "string",
  • "chat_name": "string",
  • "external_user_id": "string",
  • "mobile": "string",
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "avatar": "string",
  • "chat_name": "string",
  • "created_at": "string",
  • "email": "string",
  • "external_user_id": "string",
  • "id": 0,
  • "inviter_id": 0,
  • "is_internal_user": true,
  • "name": "string",
  • "on_duty_status": "string",
  • "org_id": 0,
  • "role_id": 0,
  • "role_name": "string",
  • "role_type": "string",
  • "status": "string",
  • "type": "string"
}

List Users

List Users with pagination support

Authorizations:
apikey
query Parameters
limit
integer

Maximum number of users to return (default: 100, max: 1000)

cursor
string

Pagination cursor token (supports 'cursor', 'after', or 'before' parameter)

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "cursor": {
    },
  • "users": [
    ]
}

Get User By ID v2

Get User By User ID

Authorizations:
apikey
path Parameters
user_id
required
integer

User ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "avatar": "string",
  • "chat_name": "string",
  • "created_at": "string",
  • "external_user_id": "string",
  • "id": 0,
  • "is_internal_user": true,
  • "name": "string",
  • "on_duty_status": "string",
  • "role_name": "string",
  • "role_type": "string",
  • "status": "string",
  • "type": "string"
}