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.
https://api.user360.cresclab.comhttps://api.user360.jp.cresclab.comBring the apikey parameter in the HTTP header to call CAAC OpenAPI
| header key | value |
|---|---|
| apikey | {API key} |
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.
Version: 1.0
| conversation_id | integer
|
required | Array of objects (payload.SelfHostedAIAgentMessage)
|
| org_uuid | string
|
required | object (payload.SelfHostedAIAgentParticipants)
|
| prompt | string
|
| version required | string Value: "1.0"
|
{- "conversation_id": 98765,
- "messages": [
- {
- "message_type": "text",
- "message_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "sender_id": 12345,
- "sender_type": "member",
- "text": "I would like to know more about your products",
- "timestamp": "2025-05-21T05:06:00Z"
}
], - "org_uuid": "123e4567-e89b-12d3-a456-426614174000",
- "participants": {
- "members": [
- {
- "channel_id": 12345,
- "channel_member_id": "U1234567890abcdef1234567890abcdef",
- "channel_type": "line",
- "external_member_id": "string",
- "member_id": 67890
}
]
}, - "prompt": "As a professional customer service representative, please respond to questions in a friendly tone.",
- "version": "1.0"
}{- "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!"
}Get Backup Detail
| backup_id required | integer Backup ID |
{ }{- "backup_id": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "download_url": "string",
- "state": "initiated"
}Trigger Messages Backup Task (csv template: https://storage.googleapis.com/caac-staging/organizations/1/backups/1_crescendo%20lab%20-%20dev_20240503_20240603_70633cdb-287e-11ef-a2d1-2ad595e5f252.csv)
TriggerMessagesBackupRequest
| channel_id | integer |
| ended_at required | string <date-time> |
| member_id | integer |
| started_at required | string <date-time> |
{- "channel_id": 0,
- "ended_at": "2019-08-24T14:15:22Z",
- "member_id": 0,
- "started_at": "2019-08-24T14:15:22Z"
}{- "backup_id": 0
}Create Message from User
| channel_id required | integer Channel ID |
| member_id required | integer Member ID |
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 |
{- "attachment_id": "string",
- "external_id": "string",
- "is_history": true,
- "line_flex_content": "string",
- "metadata": {
- "backup_media_url": "string",
- "download_expiration_date": "2019-08-24T14:15:22Z",
- "duration_ms": 0,
- "expiration_date_prefix": "string",
- "filename": "string",
- "filesize_bytes": 0,
- "filesize_prefix": "string",
- "google_ads_tracking": {
- "adgroupid": 0,
- "adid": 0,
- "campaignid": 0,
- "gbraid": "string",
- "gclid": "string",
- "wbraid": "string"
}, - "infobip_call_link_expired_at": "2019-08-24T14:15:22Z",
- "infobip_call_link_id": "string",
- "referral": {
- "body": "string",
- "ctwa_cl_id": "string",
- "headline": "string",
- "image_url": "string",
- "media_type": "string",
- "source_id": "string",
- "source_type": "string",
- "source_url": "string",
- "thumbnail_url": "string",
- "video_url": "string",
- "welcome_message": "string"
}
}, - "origin_url": "string",
- "preview_url": "string",
- "quoted_message_external_id": "string",
- "reply_to": 0,
- "text": "string",
- "type": "string",
- "user_id": 0
}{- "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": {
- "backup_media_url": "string",
- "download_expiration_date": "2019-08-24T14:15:22Z",
- "duration_ms": 0,
- "expiration_date_prefix": "string",
- "filename": "string",
- "filesize_bytes": 0,
- "filesize_prefix": "string",
- "google_ads_tracking": {
- "adgroupid": 0,
- "adid": 0,
- "campaignid": 0,
- "gbraid": "string",
- "gclid": "string",
- "wbraid": "string"
}, - "infobip_call_link_expired_at": "2019-08-24T14:15:22Z",
- "infobip_call_link_id": "string",
- "referral": {
- "body": "string",
- "ctwa_cl_id": "string",
- "headline": "string",
- "image_url": "string",
- "media_type": "string",
- "source_id": "string",
- "source_type": "string",
- "source_url": "string",
- "thumbnail_url": "string",
- "video_url": "string",
- "welcome_message": "string"
}
}, - "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"
}List Channels
{ }{- "channels": [
- {
- "broadcast_enabled": true,
- "created_at": "string",
- "external_access_token_expired_at": "string",
- "external_channel_id": "string",
- "id": 0,
- "language_code": "string",
- "name": "string",
- "status": "string",
- "timezone": "string",
- "type": "string",
- "updated_at": "string",
- "user_recognition_enabled": true,
- "uuid": "string"
}
]
}Get Member By Channel ID And External ID
| channel_id required | integer Channel ID |
| external_member_id required | string External Member ID |
{ }{- "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 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).
| channel_id required | integer Channel ID |
Create channel member payload. channel_member_id is the external UID from the channel platform.
| channel_member_id required | string |
{- "channel_member_id": "string"
}{- "member_id": 0
}Get Member Assignment Relationship
| channel_id required | integer Channel ID |
| member_id required | integer Member ID |
{ }{- "assign_type": "string",
- "assignment_relationship": {
- "team_id": 0,
- "user_id": 0
}
}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):
When the Collaborator feature is disabled for the org, no collaborator changes occur — the endpoint behaves as a pure assign/unassign.
InternalIndividualAssignment
object (payload.AssignmentRelationshipV2) | |
| channel_id | integer |
| org_id | integer |
{- "assignment_relationship": {
- "member_id": 0,
- "team_id": 0,
- "user_id": 0
}, - "channel_id": 0,
- "org_id": 0
}{- "assign_type": "string",
- "assignment_relationship": {
- "team_id": 0,
- "user_id": 0
}
}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):
When the Collaborator feature is disabled for the org, no collaborator changes occur — the endpoint behaves as a pure assign/unassign.
InternalManualAssignment
| assign_type | string assign_type should be unassigned or null |
object (payload.ManualAssignmentRelationship) | |
| channel_id | integer |
| member_id | integer |
| org_id | integer |
{- "assign_type": "string",
- "assignment_relationship": {
- "team_id": 0,
- "user_id": 0
}, - "channel_id": 0,
- "member_id": 0,
- "org_id": 0
}{- "assign_type": "string",
- "assignment_relationship": {
- "team_id": 0,
- "user_id": 0
}
}List Channels with pagination support
| limit | integer Maximum number of channels to return (default: 100, max: 1000) |
| cursor | string Pagination cursor token (supports 'cursor', 'after', or 'before' parameter) |
{ }{- "channels": [
- {
- "created_at": "string",
- "external_channel_id": "string",
- "id": 0,
- "language_code": "string",
- "name": "string",
- "status": "string",
- "timezone": "string",
- "type": "string",
- "updated_at": "string"
}
], - "cursor": {
- "after": "string",
- "before": "string"
}
}Get Member By ID
| channel_id required | integer Channel ID |
| member_id required | integer Member ID |
{ }{- "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 by updating member processing state to resolved
| channel_id required | integer Channel ID |
| member_id required | integer Member ID |
Close Conversation Request
| user_id required | integer User ID who performs the close action |
{- "user_id": 0
}Get Team By External Team ID
| external_team_id | string External team id |
{ }{- "description": "string",
- "editable": true,
- "external_team_id": "string",
- "id": 0,
- "name": "string",
- "routing_rule": "by-queue"
}{ }{- "description": "string",
- "editable": true,
- "external_team_id": "string",
- "id": 0,
- "name": "string",
- "routing_rule": "by-queue"
}Get Team By ID
| team_id required | integer Team ID |
{ }{- "description": "string",
- "editable": true,
- "external_team_id": "string",
- "id": 0,
- "name": "string",
- "routing_rule": "by-queue"
}Update Team
| team_id required | integer Team ID |
{ }{- "description": "string",
- "editable": true,
- "external_team_id": "string",
- "id": 0,
- "name": "string",
- "routing_rule": "by-queue"
}Add users to team
| team_id required | integer Team ID |
UserIDs
| user_ids | Array of integers |
{- "user_ids": [
- 0
]
}[- {
- "account_id": 0,
- "avatar": "string",
- "chat_name": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "deleted_at": "2019-08-24T14:15:22Z",
- "enable_popup_notification": true,
- "enable_sound_notification": true,
- "external_user_id": "string",
- "id": 0,
- "inviter_id": 0,
- "language_code": "en",
- "mobile": "string",
- "name": "string",
- "on_duty_status": "online",
- "org_id": 0,
- "role_id": 0,
- "status": "invited",
- "updated_at": "2019-08-24T14:15:22Z"
}
]List Teams with pagination support
| limit | integer Maximum number of teams to return (default: 100, max: 1000) |
| cursor | string Pagination cursor token (supports 'cursor', 'after', or 'before' parameter) |
{ }{- "cursor": {
- "after": "string",
- "before": "string"
}, - "teams": [
- {
- "description": "string",
- "external_team_id": "string",
- "id": 0,
- "name": "string",
- "routing_rule": "by-queue"
}
]
}Get Team By Team ID
| team_id required | integer Team ID |
{ }{- "description": "string",
- "external_team_id": "string",
- "id": 0,
- "name": "string",
- "routing_rule": "by-queue"
}Get User By External User ID
| external_user_id | string External user id |
{ }{- "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"
}Get User By ID v1
| user_id required | integer User ID |
{ }{- "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
| user_id required | integer User ID |
UpdateUser
| avatar | string |
| chat_name | string |
| external_user_id | string or null |
| mobile | string |
| name | string |
{- "avatar": "string",
- "chat_name": "string",
- "external_user_id": "string",
- "mobile": "string",
- "name": "string"
}{- "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 with pagination support
| limit | integer Maximum number of users to return (default: 100, max: 1000) |
| cursor | string Pagination cursor token (supports 'cursor', 'after', or 'before' parameter) |
{ }{- "cursor": {
- "after": "string",
- "before": "string"
}, - "users": [
- {
- "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"
}
]
}Get User By User ID
| user_id required | integer User ID |
{ }{- "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"
}