API
Last updated:
Quickchat AI provides a REST API for programmatic access to your AI Assistant’s Knowledge Base, Conversations, AI Actions, and more.
Authentication
Section titled “Authentication”All API endpoints use Bearer token authentication. Include your API token in the Authorization header of every request:
Authorization: Bearer <API_TOKEN>Tokens are created in the Quickchat Dashboard under Integrations > API. Each token is a JWT that contains your scenario_id, so no additional identifier header is needed.
- Token validity: 52 weeks from creation
- Tokens can be revoked at any time from the Dashboard
- Each token is scoped to a single AI Assistant (scenario)
Base URL
Section titled “Base URL”| Endpoint Group | Base URL |
|---|---|
| Knowledge Base, AI Actions, File Upload, Import | https://app.quickchat.ai/v1/api/ |
| Conversations | https://app.quickchat.ai/v1/api_core/ |
| Chat (Legacy) | https://chat.quickchat.ai/ |
Rate Limits
Section titled “Rate Limits”Rate limits are applied per token, per endpoint.
| Tier | Limit | Applies To |
|---|---|---|
| READ | 120 requests/min | GET and list operations |
| WRITE | 60 requests/min | POST, PATCH, PUT, DELETE |
| HEAVY | 20 requests/min | File uploads, imports, scraping |
When a rate limit is exceeded, the API returns HTTP 429 Too Many Requests.
Pagination
Section titled “Pagination”List endpoints support pagination via query parameters:
| Parameter | Type | Description |
|---|---|---|
limit | integer | Number of items per page |
offset | integer | Number of items to skip |
Paginated responses follow this structure:
{ "items": [], "offset": 0, "count": 100}Error Handling
Section titled “Error Handling”All errors are returned as JSON in the following format:
{ "errors": { "root": [ { "message": "Description of the error", "code": "ERROR_CODE" } ] }}| Status | Code | Description |
|---|---|---|
| 400 | BAD_REQUEST | Invalid input or missing required fields |
| 401 | PERMISSION_DENIED | Invalid, expired, or revoked token |
| 402 | PAYMENT_REQUIRED | Active subscription required |
| 404 | NOT_FOUND | Resource not found |
| 409 | CONFLICT | Conflicting operation (e.g., concurrent modification) |
| 422 | VALIDATION_ERROR | Request body failed schema validation |
| 429 | TOO_MANY_REQUESTS | Rate limit exceeded |
| 500 | UNKNOWN | Internal server error |
| 503 | SERVICE_UNAVAILABLE | Temporary unavailability |
Chat (Legacy Auth)
Section titled “Chat (Legacy Auth)”The Chat endpoint uses legacy authentication with api_key and scenario_id in the request body. It does not use Bearer tokens.
Send Message
Section titled “Send Message”POST https://chat.quickchat.ai/chat
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
api_key | string | Yes | Your API key from the Dashboard |
scenario_id | string | Yes | ID of your AI Assistant |
text | string | Yes | User input message |
conv_id | string | No | Conversation ID. Omit to start a new conversation |
message_context | string | No | Additional per-message context passed to the AI |
client_metadata | object | No | Custom key-value pairs (max 5 keys) attached to messages |
curl -X POST https://chat.quickchat.ai/chat \ -H 'Content-Type: application/json' \ -d '{ "api_key": "<API_KEY>", "scenario_id": "<SCENARIO_ID>", "text": "Hello!", "conv_id": "abcd1234"}'import requests
response = requests.post( url="https://chat.quickchat.ai/chat", json={ "api_key": "<API_KEY>", "scenario_id": "<SCENARIO_ID>", "text": "Hello!", "conv_id": "abcd1234", },)data = response.json()Response 200 OK
{ "ord_number": 236, "conv_id": "abcd1234", "reply": "Hey there!"}| Field | Type | Description |
|---|---|---|
ord_number | integer | Sequential message number in the conversation |
conv_id | string | Conversation identifier (use to continue the conversation) |
reply | string | AI Assistant’s response |
Knowledge Base
Section titled “Knowledge Base”Get Settings
Section titled “Get Settings”Retrieve your Knowledge Base configuration.
GET https://app.quickchat.ai/v1/api/knowledge_base/
curl https://app.quickchat.ai/v1/api/knowledge_base/ \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api/knowledge_base/", headers={"Authorization": "Bearer <API_TOKEN>"},)data = response.json()Response 200 OK
{ "one_word_description": "Support Agent", "short_description": "A helpful customer support assistant.", "ai_commands": ["Be polite", "Stay on topic"], "retrain_state": null}| Field | Type | Description |
|---|---|---|
one_word_description | string | Short label for the Knowledge Base |
short_description | string | Description of the AI Assistant’s purpose |
ai_commands | array of strings | Custom instructions for the AI |
retrain_state | string or null | Current training status |
Update Settings
Section titled “Update Settings”PATCH https://app.quickchat.ai/v1/api/knowledge_base/
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
one_word_description | string | No | Short label for the Knowledge Base |
short_description | string | No | Description of the AI Assistant’s purpose |
ai_commands | array of strings | No | Custom instructions for the AI |
curl -X PATCH https://app.quickchat.ai/v1/api/knowledge_base/ \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "one_word_description": "Sales Bot"}'import requests
response = requests.patch( url="https://app.quickchat.ai/v1/api/knowledge_base/", headers={"Authorization": "Bearer <API_TOKEN>"}, json={"one_word_description": "Sales Bot"},)data = response.json()Response 200 OK — Returns the updated Knowledge Base settings (same schema as Get Settings).
Articles
Section titled “Articles”Create Article
Section titled “Create Article”POST https://app.quickchat.ai/v1/api/knowledge_base/articles/
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
content | string | Yes | Article content |
type | string | No | "Article" (default) or "Paragraph" |
title | string | No | Article title |
curl -X POST https://app.quickchat.ai/v1/api/knowledge_base/articles/ \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "content": "Our return policy allows returns within 30 days.", "title": "Return Policy"}'import requests
response = requests.post( url="https://app.quickchat.ai/v1/api/knowledge_base/articles/", headers={"Authorization": "Bearer <API_TOKEN>"}, json={ "content": "Our return policy allows returns within 30 days.", "title": "Return Policy", },)data = response.json()Response 201 Created
{ "id": 1234, "article_id": "abc-123", "type": "Article", "title": "Return Policy", "description": "", "content": "Our return policy allows returns within 30 days.", "state": "draft", "url": null, "parent_id": null, "parent_type": null, "shortened": false, "tags": [], "created_timestamp": "2026-01-15", "last_modified_timestamp": "2026-01-15"}List Articles
Section titled “List Articles”GET https://app.quickchat.ai/v1/api/knowledge_base/articles/
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Items per page |
offset | integer | No | Items to skip |
types | string | No | Filter by type: Article, Paragraph |
tags | string | No | Filter by tag |
url | string | No | Filter by URL |
title | string | No | Filter by title |
query | string | No | Search by content |
curl 'https://app.quickchat.ai/v1/api/knowledge_base/articles/?limit=10&offset=0' \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api/knowledge_base/articles/", headers={"Authorization": "Bearer <API_TOKEN>"}, params={"limit": 10, "offset": 0},)data = response.json()Response 200 OK
{ "items": [ { "id": 1234, "article_id": "abc-123", "type": "Article", "title": "Return Policy", "description": "", "state": "published", "url": null, "parent_id": null, "parent_type": null, "shortened": false, "tags": ["policies"], "created_timestamp": "2026-01-15", "last_modified_timestamp": "2026-01-15" } ], "offset": 0, "count": 1}Get Article
Section titled “Get Article”GET https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}
curl https://app.quickchat.ai/v1/api/knowledge_base/articles/1234 \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api/knowledge_base/articles/1234", headers={"Authorization": "Bearer <API_TOKEN>"},)data = response.json()Response 200 OK — Returns the full article object (same schema as Create Article response).
Update Article
Section titled “Update Article”PATCH https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
content | string | No | Updated article content |
title | string | No | Updated title |
tags | array of strings | No | Updated tags |
save_mode | string | No | "draft" (default) or "publish" |
curl -X PATCH https://app.quickchat.ai/v1/api/knowledge_base/articles/1234 \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "title": "Updated Return Policy", "content": "Returns accepted within 60 days.", "save_mode": "publish"}'import requests
response = requests.patch( url="https://app.quickchat.ai/v1/api/knowledge_base/articles/1234", headers={"Authorization": "Bearer <API_TOKEN>"}, json={ "title": "Updated Return Policy", "content": "Returns accepted within 60 days.", "save_mode": "publish", },)data = response.json()Response 200 OK — Returns the updated article object.
Delete Articles
Section titled “Delete Articles”Delete one or more articles by ID.
DELETE https://app.quickchat.ai/v1/api/knowledge_base/articles/
Request Body — JSON array of article IDs.
curl -X DELETE https://app.quickchat.ai/v1/api/knowledge_base/articles/ \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '[1234, 5678]'import requests
response = requests.delete( url="https://app.quickchat.ai/v1/api/knowledge_base/articles/", headers={"Authorization": "Bearer <API_TOKEN>"}, json=[1234, 5678],)Response 200 OK
Search Articles
Section titled “Search Articles”Search through article content with text matching.
GET https://app.quickchat.ai/v1/api/knowledge_base/articles/search
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | Search query |
is_case_insensitive | boolean | No | Case-insensitive search (default: true) |
with_title_url_and_tags | boolean | No | Include title/URL/tags in search (default: true) |
strict_search | boolean | No | Require exact match (default: false) |
num_of_display_articles | integer | No | Number of articles to display (default: 5) |
num_of_data_articles | integer | No | Number of articles to search (default: 15) |
curl 'https://app.quickchat.ai/v1/api/knowledge_base/articles/search?query=return%20policy' \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api/knowledge_base/articles/search", headers={"Authorization": "Bearer <API_TOKEN>"}, params={"query": "return policy"},)data = response.json()Response 200 OK
{ "article_snippets": [ { "article_id": 1234, "expository_sentence": "Our return policy allows returns within 30 days.", "query_words_ids": [ {"start_char": 4, "end_char": 10, "text": "return"} ] } ], "article_snapshots": { "items": [], "offset": 0, "count": 1 }}List Paragraphs
Section titled “List Paragraphs”List all paragraphs (chunked content) in the Knowledge Base.
GET https://app.quickchat.ai/v1/api/knowledge_base/articles/paragraphs
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Items per page |
offset | integer | No | Items to skip |
query | string | No | Filter by content |
curl 'https://app.quickchat.ai/v1/api/knowledge_base/articles/paragraphs?limit=10' \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api/knowledge_base/articles/paragraphs", headers={"Authorization": "Bearer <API_TOKEN>"}, params={"limit": 10},)data = response.json()Response 200 OK
{ "items": [ { "id": 1, "content": "Our return policy allows returns within 30 days." } ], "offset": 0, "count": 1}Article Language URLs
Section titled “Article Language URLs”Manage language-specific URLs for articles. These URLs allow linking articles to localized versions of the content.
Get Language URL
Section titled “Get Language URL”GET https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}/lang_urls/{language}
curl https://app.quickchat.ai/v1/api/knowledge_base/articles/1234/lang_urls/en \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api/knowledge_base/articles/1234/lang_urls/en", headers={"Authorization": "Bearer <API_TOKEN>"},)data = response.json()Response 200 OK
{ "url": "https://example.com/en/return-policy"}Create Language URL
Section titled “Create Language URL”POST https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}/lang_urls/{language}
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes | URL for the language-specific version |
curl -X POST https://app.quickchat.ai/v1/api/knowledge_base/articles/1234/lang_urls/en \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{"url": "https://example.com/en/return-policy"}'import requests
response = requests.post( url="https://app.quickchat.ai/v1/api/knowledge_base/articles/1234/lang_urls/en", headers={"Authorization": "Bearer <API_TOKEN>"}, json={"url": "https://example.com/en/return-policy"},)data = response.json()Response 200 OK
{ "url": "https://example.com/en/return-policy"}Update Language URL
Section titled “Update Language URL”PATCH https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}/lang_urls/{language}
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Updated URL |
Response 200 OK — Returns the updated URL object.
Delete Language URL
Section titled “Delete Language URL”DELETE https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}/lang_urls/{language}
curl -X DELETE https://app.quickchat.ai/v1/api/knowledge_base/articles/1234/lang_urls/en \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.delete( url="https://app.quickchat.ai/v1/api/knowledge_base/articles/1234/lang_urls/en", headers={"Authorization": "Bearer <API_TOKEN>"},)Response 200 OK
List Tags
Section titled “List Tags”Retrieve all tags used across Knowledge Base articles.
GET https://app.quickchat.ai/v1/api/knowledge_base/tags/
curl https://app.quickchat.ai/v1/api/knowledge_base/tags/ \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api/knowledge_base/tags/", headers={"Authorization": "Bearer <API_TOKEN>"},)tags = response.json()Response 200 OK
["policies", "faq", "product-info"]File Upload
Section titled “File Upload”Upload files to be processed and added to the Knowledge Base as articles.
Upload PDF
Section titled “Upload PDF”POST https://app.quickchat.ai/v1/api/knowledge_base/file_upload_api/pdf
Upload a PDF file. The content is extracted and added as an article.
curl -X POST https://app.quickchat.ai/v1/api/knowledge_base/file_upload_api/pdf \ -H 'Authorization: Bearer <API_TOKEN>' \ -F 'pdf_file=@document.pdf'import requests
with open("document.pdf", "rb") as f: response = requests.post( url="https://app.quickchat.ai/v1/api/knowledge_base/file_upload_api/pdf", headers={"Authorization": "Bearer <API_TOKEN>"}, files={"pdf_file": f}, )data = response.json()Response 200 OK
{ "status": "success", "message": "File processed successfully.", "article": { "id": 1234, "title": "document.pdf" }}| Field | Type | Description |
|---|---|---|
status | string | Processing status |
message | string | Human-readable result message |
article | object | The created article |
Upload File
Section titled “Upload File”POST https://app.quickchat.ai/v1/api/knowledge_base/file_upload_api/
Upload a supported file (PDF, DOCX). The content is extracted and added as an article.
curl -X POST https://app.quickchat.ai/v1/api/knowledge_base/file_upload_api/ \ -H 'Authorization: Bearer <API_TOKEN>' \ -F 'file=@document.docx'import requests
with open("document.docx", "rb") as f: response = requests.post( url="https://app.quickchat.ai/v1/api/knowledge_base/file_upload_api/", headers={"Authorization": "Bearer <API_TOKEN>"}, files={"file": f}, )data = response.json()Response 200 OK — Same schema as Upload PDF.
Import External Content
Section titled “Import External Content”Import content from external sources into the Knowledge Base. These endpoints process content asynchronously.
Scrape Website
Section titled “Scrape Website”Scrape a single webpage or an entire website and import the content.
POST https://app.quickchat.ai/v1/api/knowledge_base/import_external/website
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes | URL to scrape |
mode | string | No | "individual" (default), "site_wide", or "individual_with_summary" |
phrases | array of strings | No | Key phrases to extract |
html_selector | string | No | CSS selector to target specific content |
curl -X POST https://app.quickchat.ai/v1/api/knowledge_base/import_external/website \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "url": "https://example.com/docs", "mode": "individual"}'import requests
response = requests.post( url="https://app.quickchat.ai/v1/api/knowledge_base/import_external/website", headers={"Authorization": "Bearer <API_TOKEN>"}, json={"url": "https://example.com/docs", "mode": "individual"},)data = response.json()Response 200 OK
{ "status": "success", "url": "https://example.com/docs", "article": {}}Import YouTube Transcript
Section titled “Import YouTube Transcript”Import the transcript from a YouTube video.
POST https://app.quickchat.ai/v1/api/knowledge_base/import_external/youtube
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes | YouTube video URL |
toast_process_uuid | string | Yes | UUID v4 for tracking the import process |
curl -X POST https://app.quickchat.ai/v1/api/knowledge_base/import_external/youtube \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "toast_process_uuid": "550e8400-e29b-41d4-a716-446655440000"}'import uuidimport requests
response = requests.post( url="https://app.quickchat.ai/v1/api/knowledge_base/import_external/youtube", headers={"Authorization": "Bearer <API_TOKEN>"}, json={ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "toast_process_uuid": str(uuid.uuid4()), },)Response 202 Accepted — The transcript is processed asynchronously.
Import Sitemap
Section titled “Import Sitemap”Import content from all links in an XML sitemap.
POST https://app.quickchat.ai/v1/api/knowledge_base/import_external/site-map
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
site_map | string | Yes | URL to an XML sitemap |
link_filter_regex | string | No | Regex to filter which links to import (default: ".*") |
html_selector | string | No | CSS selector to target specific content |
summarize | boolean | No | Whether to summarize imported content (default: false) |
curl -X POST https://app.quickchat.ai/v1/api/knowledge_base/import_external/site-map \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "site_map": "https://example.com/sitemap.xml"}'import requests
response = requests.post( url="https://app.quickchat.ai/v1/api/knowledge_base/import_external/site-map", headers={"Authorization": "Bearer <API_TOKEN>"}, json={"site_map": "https://example.com/sitemap.xml"},)data = response.json()Response 200 OK
{ "status": "success", "links": ["https://example.com/page1", "https://example.com/page2"]}Scrape List of Links
Section titled “Scrape List of Links”Import content from a specific list of URLs.
POST https://app.quickchat.ai/v1/api/knowledge_base/import_external/scrape-list
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
links | array of strings | Yes | List of URLs to scrape (non-empty) |
tags | array of strings | No | Tags to apply to imported articles |
html_selector | string | No | CSS selector to target specific content |
summarize | boolean | No | Whether to summarize imported content (default: false) |
curl -X POST https://app.quickchat.ai/v1/api/knowledge_base/import_external/scrape-list \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "links": ["https://example.com/page1", "https://example.com/page2"], "tags": ["imported"]}'import requests
response = requests.post( url="https://app.quickchat.ai/v1/api/knowledge_base/import_external/scrape-list", headers={"Authorization": "Bearer <API_TOKEN>"}, json={ "links": ["https://example.com/page1", "https://example.com/page2"], "tags": ["imported"], },)data = response.json()Response 200 OK
{ "status": "success", "links": ["https://example.com/page1", "https://example.com/page2"]}Sources
Section titled “Sources”Manage external content sources (e.g., Intercom, Shopify) that sync articles to your Knowledge Base.
The {source} path parameter accepts values such as "intercom", "shopify", etc.
Import Source Articles
Section titled “Import Source Articles”POST https://app.quickchat.ai/v1/api/knowledge_base/sources/{source}/import
curl -X POST https://app.quickchat.ai/v1/api/knowledge_base/sources/intercom/import \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{}'import requests
response = requests.post( url="https://app.quickchat.ai/v1/api/knowledge_base/sources/intercom/import", headers={"Authorization": "Bearer <API_TOKEN>"}, json={},)data = response.json()Response 200 OK — Returns a list of imported article snapshots.
Delete Source Articles
Section titled “Delete Source Articles”POST https://app.quickchat.ai/v1/api/knowledge_base/sources/{source}/delete
Removes all articles imported from the specified source.
Response 204 No Content
Diff Source Articles
Section titled “Diff Source Articles”Compare local articles with the external source to detect changes.
POST https://app.quickchat.ai/v1/api/knowledge_base/sources/{source}/articles_diff
Response 200 OK
[ { "internal_article_diff": "CHANGED", "external_article_diff": "UNCHANGED", "article_snapshot": {} }]| Field | Type | Description |
|---|---|---|
internal_article_diff | string | "CHANGED" or "UNCHANGED" |
external_article_diff | string | "CHANGED", "UNCHANGED", or "REMOVED" |
article_snapshot | object | Article snapshot data |
Intercom Knowledge Base
Section titled “Intercom Knowledge Base”Dedicated endpoints for managing Intercom Knowledge Base integration.
Refresh Intercom Articles
Section titled “Refresh Intercom Articles”Re-fetch content from Intercom for existing articles.
POST https://app.quickchat.ai/v1/api/knowledge_base/intercom/refresh_articles
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
article_ids | array of integers | No | Specific article IDs to refresh (default: all) |
fetch_new_articles | boolean | No | Whether to fetch new articles (default: true) |
Response 204 No Content
Import Intercom Articles
Section titled “Import Intercom Articles”Import all articles from Intercom.
POST https://app.quickchat.ai/v1/api/knowledge_base/intercom/import
Response 200 OK — Returns a list of imported article snapshots.
Delete Intercom Articles
Section titled “Delete Intercom Articles”Remove all Intercom-sourced articles from the Knowledge Base.
POST https://app.quickchat.ai/v1/api/knowledge_base/intercom/delete
Response 204 No Content
Diff Intercom Articles
Section titled “Diff Intercom Articles”Compare local articles with Intercom to detect changes.
GET https://app.quickchat.ai/v1/api/knowledge_base/intercom/articles_diff
curl https://app.quickchat.ai/v1/api/knowledge_base/intercom/articles_diff \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api/knowledge_base/intercom/articles_diff", headers={"Authorization": "Bearer <API_TOKEN>"},)data = response.json()Response 200 OK — Returns a list of article diff objects (same schema as Diff Source Articles).
Conversations
Section titled “Conversations”List Conversations
Section titled “List Conversations”GET https://app.quickchat.ai/v1/api_core/conversations
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Items per page |
offset | integer | No | Items to skip |
query | string | No | Search by order number, UUID, or message text |
assignee_type | string | No | "ai_assistant", "human_operator", or "unassigned" |
source | string | No | "widget", "slack", "telegram", "whatsapp", etc. |
resolution_status | string | No | "open" or "resolved" |
created_timestamp_start_date | datetime | No | Filter by creation date (start) |
created_timestamp_end_date | datetime | No | Filter by creation date (end) |
last_message_at_start_date | datetime | No | Filter by last message date (start) |
last_message_at_end_date | datetime | No | Filter by last message date (end) |
most_frequent_language | string | No | Filter by detected language |
curl 'https://app.quickchat.ai/v1/api_core/conversations?limit=10&resolution_status=open' \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api_core/conversations", headers={"Authorization": "Bearer <API_TOKEN>"}, params={"limit": 10, "resolution_status": "open"},)data = response.json()Response 200 OK
{ "items": [ { "id": "conv-uuid-1234", "ord": 42, "created_at": "2026-01-15T10:30:00Z", "last_message_at": "2026-01-15T10:35:00Z", "title": "Return policy question", "source": "widget", "terminated": false, "resolution_status": "open", "has_unread_messages": true, "assignee": { "type": "ai_assistant" }, "visitor_name": "John", "visitor_email": "john@example.com", "visitor_phone_number": null, "visitor_label": null } ], "offset": 0, "count": 42}Get Conversation Details
Section titled “Get Conversation Details”GET https://app.quickchat.ai/v1/api_core/conversations/{conversation_id}/
curl https://app.quickchat.ai/v1/api_core/conversations/conv-uuid-1234/ \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api_core/conversations/conv-uuid-1234/", headers={"Authorization": "Bearer <API_TOKEN>"},)data = response.json()Response 200 OK
{ "id": "conv-uuid-1234", "ord": 42, "created_at": "2026-01-15T10:30:00Z", "last_message_at": "2026-01-15T10:35:00Z", "title": "Return policy question", "source": "widget", "terminated": false, "resolution_status": "open", "has_unread_messages": true, "assignee": { "type": "ai_assistant" }, "url": null, "client_metadata": {"userId": 12}, "data_gathering": null, "last_visitor_message_at": "2026-01-15T10:34:00Z", "visitor_name": "John", "visitor_email": "john@example.com", "visitor_phone_number": null, "visitor_label": null}Conversation Metadata
Section titled “Conversation Metadata”Store and retrieve custom metadata for conversations. Metadata is validated against a JSON schema if one is configured in the Dashboard.
Get Metadata
Section titled “Get Metadata”GET https://app.quickchat.ai/v1/api_core/conversations/{conv_id}/metadata
curl https://app.quickchat.ai/v1/api_core/conversations/conv-uuid-1234/metadata \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api_core/conversations/conv-uuid-1234/metadata", headers={"Authorization": "Bearer <API_TOKEN>"},)data = response.json()Response 200 OK
{ "metadata": { "ticket_id": "T-1234", "priority": "high" }}Set Metadata
Section titled “Set Metadata”Create or update metadata for a conversation.
POST https://app.quickchat.ai/v1/api_core/conversations/{conv_id}/metadata
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
metadata | object | Yes | Key-value metadata to store |
curl -X POST https://app.quickchat.ai/v1/api_core/conversations/conv-uuid-1234/metadata \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "metadata": { "ticket_id": "T-1234", "priority": "high" }}'import requests
response = requests.post( url="https://app.quickchat.ai/v1/api_core/conversations/conv-uuid-1234/metadata", headers={"Authorization": "Bearer <API_TOKEN>"}, json={ "metadata": {"ticket_id": "T-1234", "priority": "high"} },)data = response.json()Response 200 OK
{ "metadata": { "ticket_id": "T-1234", "priority": "high" }}AI Actions
Section titled “AI Actions”Create KB AI Action
Section titled “Create KB AI Action”Create a new Knowledge Base AI Action. KB AI Actions allow the AI to search tagged subsets of the Knowledge Base when triggered.
POST https://app.quickchat.ai/v1/api/ai_actions/knowledge_base
curl -X POST https://app.quickchat.ai/v1/api/ai_actions/knowledge_base \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{}'import requests
response = requests.post( url="https://app.quickchat.ai/v1/api/ai_actions/knowledge_base", headers={"Authorization": "Bearer <API_TOKEN>"}, json={},)data = response.json()Response 201 Created
{ "id": 1, "name": "", "description": "", "icon": null, "icon_color": null, "is_active": false, "is_valid": false, "tag": null, "parameter_description": "", "type": "knowledge_base"}| Field | Type | Description |
|---|---|---|
id | integer | AI Action identifier |
name | string | Display name (max 100 chars) |
description | string | Description of when the action should trigger (max 1000 chars) |
icon | string or null | Icon identifier |
icon_color | string or null | Icon color |
is_active | boolean | Whether the action is enabled |
is_valid | boolean | Whether the action is properly configured |
tag | string or null | Knowledge Base tag to filter articles (max 255 chars) |
parameter_description | string | Description of the parameter the AI extracts (max 500 chars) |
type | string | Always "knowledge_base" |
Get KB AI Action
Section titled “Get KB AI Action”GET https://app.quickchat.ai/v1/api/ai_actions/{action_id}/knowledge_base
curl https://app.quickchat.ai/v1/api/ai_actions/1/knowledge_base \ -H 'Authorization: Bearer <API_TOKEN>'import requests
response = requests.get( url="https://app.quickchat.ai/v1/api/ai_actions/1/knowledge_base", headers={"Authorization": "Bearer <API_TOKEN>"},)data = response.json()Response 200 OK — Returns the AI Action object (same schema as Create KB AI Action response).
Update KB AI Action
Section titled “Update KB AI Action”PUT https://app.quickchat.ai/v1/api/ai_actions/{action_id}/knowledge_base
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name (max 100 chars) |
description | string | Yes | When the action should trigger (max 1000 chars) |
parameter_description | string | Yes | Parameter description (max 500 chars) |
tag | string | Yes | Knowledge Base tag to filter (max 255 chars) |
curl -X PUT https://app.quickchat.ai/v1/api/ai_actions/1/knowledge_base \ -H 'Authorization: Bearer <API_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "name": "Search Returns", "description": "Search the return policy articles when customer asks about returns.", "parameter_description": "The return-related query from the customer", "tag": "returns"}'import requests
response = requests.put( url="https://app.quickchat.ai/v1/api/ai_actions/1/knowledge_base", headers={"Authorization": "Bearer <API_TOKEN>"}, json={ "name": "Search Returns", "description": "Search the return policy articles when customer asks about returns.", "parameter_description": "The return-related query from the customer", "tag": "returns", },)data = response.json()Response 200 OK — Returns the updated AI Action object.