Table of content
- Overview:
- Create training data:
- Path: https://api-demo.cxgenie.ai/api/v2/public-api/bot-data
- Method: POST
- Payload:
- Result:
- Chat with bot:
- Get list customers
- Get customer detail
- Path: https://api-demo.cxgenie.ai/api/v2/public-api/customer-detail/:customer_id
- Method: GET
- Query:
- Result:
- Get list conversations by customer
- Get conversations detail
- Path: https://api-demo.cxgenie.ai/api/v2/public-api/detail-sessions/:session_id
- Method: GET
- Query
- Result:
- Upload File
Public API V2 Endpoint Document
Mar 28 2025
Table of content
- Overview:
- Create training data:
- Path: https://api-demo.cxgenie.ai/api/v2/public-api/bot-data
- Method: POST
- Payload:
- Result:
- Chat with bot:
- Get list customers
- Get customer detail
- Path: https://api-demo.cxgenie.ai/api/v2/public-api/customer-detail/:customer_id
- Method: GET
- Query:
- Result:
- Get list conversations by customer
- Get conversations detail
- Path: https://api-demo.cxgenie.ai/api/v2/public-api/detail-sessions/:session_id
- Method: GET
- Query
- Result:
- Upload File
Overview:
- Create Training data
- Chat with bot
- Get list customers
- Get customer detail
- Get list conversations by customers
- Get conversation detail
- Upload file
Postman Link:
Workspace token can be acquired in workspace general settings, as shown in the picture below:
Bot id can be acquired from parameter aid in launch bot URL
https://chat-demo.cxgenie.ai?aid=<bot_id>
or attribute data-aid in launch bot widget
<script src="https://widget-demo.cxgenie.ai/widget.js" data-aid="<BOT_ID>" data-lang="lang"></script>

Create training data:
Path: https://api-demo.cxgenie.ai/api/v2/public-api/bot-data
Method: POST
Payload:
{ "bot_id": "string", "content": "string", "content_value": "string", "type": "TEXT" | "DOCUMENT" | "Q_AND_A" | "URL", "title": "string", "workspace_token": "string"}
Property content_value and title is optional, since content_value is used for Q_AND_A type knowledges and title is used for Article type knowledges (which is indicated as TEXT)
Result:
{ "success": boolean, "data": { "id": "uuid", "bot_id": "uuid", "content": "string", "content_value": "string", "type": "TEXT" | "DOCUMENT" | "Q_AND_A" | "URL", "title": "string" | null, "status_learning": "WAITING", "updated_at": Date, "created_at": Date, "source": "USER", "total_relearning": number | null, "filename": "string" | null, "size": number | null, "mimetype": "string" | null, "created_by": null, "updated_by": null, "deleted_at": null }}
Chat with bot:
Path: https://api-demo.cxgenie.ai/api/v2/public-api/messages
Method: POST
Payload:
{ "workspace_token": "string", "bot_id": "string", "media": { "uid": "string", "name": "string", "size": number, "url": "string", "type": "image/jpeg" }[], "content": "string", "metadata": {}, "customer_info": { "name": "string", "email": "string", "phone_number": "string", "external_id": "string" }}
Property customer_info is optional, if not provided, the chat session will be count as an Anonymous session. The field inside this object is simulated as customer entering their information upon entering chat session.
Property media is optional, the information of file to use on property media can be acquired via upload endpoint.
Result:
{ "success": boolean, "data": "string"}
Get list customers
Path: https://api-demo.cxgenie.ai/api/v2/public-api/customer-list
Method: GET
Query:
{ "search": "string"; "bot_ids": "string"[]; "types": <"lead" | "users">[]; "is_testing": boolean; "cursor": date_string; "workspace_token": string;}
All the property except workspace_token is optional, types is used to differentiate customers that has both phone and email or not (users will have both phone and email, else otherwise)
Property cursor is provided as pagination method, since this data changes frequently, which traditional method (limit and offset) can cause missing records when querying. Cursor will use created_at as the property to query.
Result:
{ "success": boolean, "data": { "total": number, "customers": [ { "id": "string", "name": "string", "access_token": null, "metadata": {}, "is_full_history_chat": boolean, "extract_knowledge_status": "string" | null, "conversation_status": "OPENED" | "CLOSED", "last_extract_data_conversation": Date | null, "last_summary": Date | null, "last_recap": Date | null, "total_summary_one_hour": number | null, "avatar": "string" | null, "email": "string", "phone_number": "string", "country_code": "string" | null, "country": "string" | null, "country_flag": "string" | null, "discord_id": "string" | null, "note": "string" | null, "bot_id": "string", "auto_reply": boolean, "workspace_id": "string", "is_read": boolean, "external_id": "uuid" | null, "language_using": "string", "vocative": "", "source": "string", "source_type": "string", "class": "string" | null, "last_message_at": Date, "message_id": "uuid", "last_social_message": jsonb | null, "is_testing": boolean, "is_hidden": boolean, "conversation_id": null | "uuid", "last_session_id": "uuid", "conversation_state": "OPEN" | "CLOSED", "is_generating_tag": boolean | null, "social_account_id": "uuid" | null, "customer_category_id": "uuid" | null, "queued_at": Date, "created_at": Date, "updated_at": Date, "deleted_at": Date | null, "customer_category": { "id": "uuid", "name": "string", "workspace_id": "string", "created_at": Date, "updated_at": Date, "deleted_at": null | Date } | null, "bot": { "id": "string", "auto_reply": boolean, "auto_suggestion": boolean, "name": "string", "avatar": "string", "is_watermark_shown": boolean, "is_allow_learning_from_conversation": boolean, "member_import_knowledge_from_conversation": jsonb[] }, "contact_tag_ids": string[] }, }, ]}
Get customer detail
Path: https://api-demo.cxgenie.ai/api/v2/public-api/customer-detail/:customer_id
Method: GET
Query:
{ "workshop_id": "string";}
Result:
{ "success": true, "data": { "id": "string", "name": "string", "access_token": null, "metadata": {}, "is_full_history_chat": boolean, "extract_knowledge_status": "string" | null, "conversation_status": "OPENED" | "CLOSED", "last_extract_data_conversation": Date | null, "last_summary": Date | null, "last_recap": Date | null, "total_summary_one_hour": number | null, "avatar": "string" | null, "email": "string", "phone_number": "string", "country_code": "string" | null, "country": "string" | null, "country_flag": "string" | null, "discord_id": "string" | null, "note": "string" | null, "bot_id": "string", "auto_reply": boolean, "workspace_id": "string", "is_read": boolean, "external_id": "uuid" | null, "language_using": "string", "vocative": "", "source": "string", "source_type": "string", "class": "string" | null, "last_message_at": Date, "message_id": "uuid", "last_social_message": jsonb | null, "is_testing": boolean, "is_hidden": boolean, "conversation_id": null | "uuid", "last_session_id": "uuid", "conversation_state": "OPEN" | "CLOSED", "is_generating_tag": boolean | null, "social_account_id": "uuid" | null, "customer_category_id": "uuid" | null, "queued_at": Date, "created_at": Date, "updated_at": Date, "deleted_at": Date | null, "replied_by": { "id": "uuid", "name": "string", "avatar": "string", "is_bot": boolean, "is_online": boolean, "is_available": boolean }[], "tag_list": [], "is_customer_answered": boolean, "agent_reply": boolean, "contact_tags": [], "customer_category": { "id": "uuid", "name": "string", "workspace_id": "string", "created_at": Date, "updated_at": Date, "deleted_at": null | Date } | null, "bot": { "id": "string", "auto_reply": boolean, "auto_suggestion": boolean, "name": "string", "avatar": "string", "is_watermark_shown": boolean, "is_allow_learning_from_conversation": boolean, "member_import_knowledge_from_conversation": jsonb[] }, "social_account": null, "last_message": { "id": "uuid", "content": "string", "external_id": "uuid" | null, "rating": number, "reaction": "string" | null, "started_ticket_id": "uuid" | null, "media": { "uid": "string", "name": "string", "size": number, "url": "string", "type": "image/jpeg" }[], "receiver_id": "uuid", "bot_id": "uuid", "sender_id": "uuid" | null, "session_id": "uuid" | null, "block_id": "uuid" | null, "type": "TEXT" | 'IMAGE' | 'VIDEO' | 'FEEDBACK', "unsent": boolean, "meta_tags": json[], "data": json | null, "variables": json | null, "quoted_id": "uuid" | null, "disabled_submit_form": boolean | null, "notification_data": json | null, "count_message_notes": number | null, "language_using": "string", "total_qa_feedback": number, "receiver_read_at": Date | null, "created_at": Date, "updated_at": Date, "deleted_at": Date | null, }, "last_session": { "id": "uuid", "created_at": Date | null, "status": "OPEN" | "CLOSED", "assignee_id": "uuid" | null }, }}
Get list conversations by customer
Path: https://api-demo.cxgenie.ai/api/v2/public-api/sessions-by-customer
Method: GET
Query:
{ "limit": number, //Default 10 "offset": number, //Default 0 "workspace_token": string, "customer_id": uuid, "bot_ids": string, "status": <"OPEN", "CLOSED">[], "reply_status": <"UNREAD_ONLY", "READ_ONLY", "REPLIED_ONLY">[], "date_range": [start_timestamp_string, end_timestamp_string],}
All the property except workspace_token and is optional, types is used to differentiate customers that has both phone and email or not (users will have both phone and email, else otherwise)
Result
"success": true, "total": 1, "data": { id: "uuid"; from_user_id: "uuid"; to_user_id: string | null; created_at: Date; deleted_at: Date| null; updated_at: Date; bot_id: "uuid"; workspace_id: "uuid"; assignee_id: "uuid"| null; note: "string" | null; is_read: boolean; status: "OPEN" | "CLOSED"; ticket_id: "uuid" | null; category_id: "uuid" | null; sub_category_id: "uuid" | null; team_id: "uuid" | null; last_message_by: "BOT" | "AGENT" | "CUSTOMER" | "SOCIAL_ACCOUNT"; last_message_at: Date; social_account_id: "uuid" | null; last_message_id: "uuid"; tag_ids: "uuid"[]; reply_by_ids: ReplyBy[]; last_social_message: "uuid" | null; is_last_session: boolean; queued_at: Date; source: "string"; have_message_from_agent: boolean; auto_reply: boolean; bot: { auto_reply: boolean; auto_suggestion: boolean; id: "uuid"; is_allow_learning_from_conversation: boolean; is_watermark_shown: boolean; member_import_knowledge_from_conversation: json[]; reply_unknown: "string"; name: "string"; avatar: "string"; is_max_conversation_usage: boolean; theme_color: "string"; }; customer: { id: "uuid"; auto_reply: boolean; avatar: "uuid"| null; bot_id: "uuid"; name: "string"; country_code: "string" | null; country: "string" | null; country_flag: "string" | null; email: "string"; phone_number: "string"; external_id: "string" | null; is_full_history_chat: boolean; queued_at: Date; conversation_status: "OPENED" | "CLOSED"; metadata: json; }; social_account: json | null; last_message: { "id": "uuid", "content": "string", "external_id": "uuid" | null, "rating": number, "reaction": "string" | null, "started_ticket_id": "uuid" | null, "media": { "uid": "string", "name": "string", "size": number, "url": "string", "type": "image/jpeg" }[], "receiver_id": "uuid", "bot_id": "uuid", "sender_id": "uuid" | null, "session_id": "uuid" | null, "block_id": "uuid" | null, "type": "TEXT" | 'IMAGE' | 'VIDEO' | 'FEEDBACK', "unsent": boolean, "meta_tags": json[], "data": json | null, "variables": json | null, "quoted_id": "uuid" | null, "disabled_submit_form": boolean | null, "notification_data": json | null, "count_message_notes": number | null, "language_using": "string", "total_qa_feedback": number, "receiver_read_at": Date | null, "created_at": Date, "updated_at": Date, "deleted_at": Date | null, } }[]}
Get conversations detail
Path: https://api-demo.cxgenie.ai/api/v2/public-api/detail-sessions/:session_id
Method: GET
Query
{ "limit": number, //Default 10 "offset": number, //Default 0 "workspace_token": string, "customer_id": uuid, "order": "asc" | "desc" //Default asc "remove_system_message": boolean //Default false}
Beside default property, workspace_token and customer_id is required
Result:
{ "success": boolean, "data": { "id": "uuid", "content": "string", "external_id": "uuid" | null, "rating": number, "reaction": "string" | null, "started_ticket_id": "uuid" | null, "media": { "uid": "string", "name": "string", "size": number, "url": "string", "type": "image/jpeg" }[], "receiver_id": "uuid", "bot_id": "uuid", "sender_id": "uuid" | null, "session_id": "uuid" | null, "block_id": "uuid" | null, "type": "TEXT" | 'IMAGE' | 'VIDEO' | 'FEEDBACK' | 'ICON', "unsent": boolean, "meta_tags": json[], "data": json | null, "variables": json | null, "quoted_id": "uuid" | null, "disabled_submit_form": boolean | null, "notification_data": json | null, "count_message_notes": number | null, "language_using": "string", "total_qa_feedback": number, "receiver_read_at": Date | null, "created_at": Date, "updated_at": Date, "deleted_at": Date | null, "bot": { "id": "string", "name": "string", "avatar": "string", "auto_reply": boolean, "reply_language": "string" | null, "reply_unknown": "string", "workspace_id": "uuid" }, "reactions": json{}, "quoted_from": MessageResult, }[]}
Upload File
Path: https://api-demo.cxgenie.ai/api/v2/public-api/upload/multiple
Method: POST (multipart/form-data)
Query
{ "files": binary[] "workspace_token": "string"}
Result
{ "success": true, "data": [ { "name": "string", "url": "https://...", "type": "image/png", "size": 0 } ]}
Related articles
No data


