Skip to content

API

Last updated:

Quickchat AI provides a REST API for programmatic access to your AI Assistant’s Knowledge Base, Conversations, AI Actions, and more.

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)
Endpoint GroupBase URL
Knowledge Base, AI Actions, File Upload, Importhttps://app.quickchat.ai/v1/api/
Conversationshttps://app.quickchat.ai/v1/api_core/
Chat (Legacy)https://chat.quickchat.ai/

Rate limits are applied per token, per endpoint.

TierLimitApplies To
READ120 requests/minGET and list operations
WRITE60 requests/minPOST, PATCH, PUT, DELETE
HEAVY20 requests/minFile uploads, imports, scraping

When a rate limit is exceeded, the API returns HTTP 429 Too Many Requests.

List endpoints support pagination via query parameters:

ParameterTypeDescription
limitintegerNumber of items per page
offsetintegerNumber of items to skip

Paginated responses follow this structure:

{
"items": [],
"offset": 0,
"count": 100
}

All errors are returned as JSON in the following format:

{
"errors": {
"root": [
{
"message": "Description of the error",
"code": "ERROR_CODE"
}
]
}
}
StatusCodeDescription
400BAD_REQUESTInvalid input or missing required fields
401PERMISSION_DENIEDInvalid, expired, or revoked token
402PAYMENT_REQUIREDActive subscription required
404NOT_FOUNDResource not found
409CONFLICTConflicting operation (e.g., concurrent modification)
422VALIDATION_ERRORRequest body failed schema validation
429TOO_MANY_REQUESTSRate limit exceeded
500UNKNOWNInternal server error
503SERVICE_UNAVAILABLETemporary unavailability

The Chat endpoint uses legacy authentication with api_key and scenario_id in the request body. It does not use Bearer tokens.

POST https://chat.quickchat.ai/chat

Request Body

ParameterTypeRequiredDescription
api_keystringYesYour API key from the Dashboard
scenario_idstringYesID of your AI Assistant
textstringYesUser input message
conv_idstringNoConversation ID. Omit to start a new conversation
message_contextstringNoAdditional per-message context passed to the AI
client_metadataobjectNoCustom key-value pairs (max 5 keys) attached to messages
Terminal window
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"
}'

Response 200 OK

{
"ord_number": 236,
"conv_id": "abcd1234",
"reply": "Hey there!"
}
FieldTypeDescription
ord_numberintegerSequential message number in the conversation
conv_idstringConversation identifier (use to continue the conversation)
replystringAI Assistant’s response

Retrieve your Knowledge Base configuration.

GET https://app.quickchat.ai/v1/api/knowledge_base/

Terminal window
curl https://app.quickchat.ai/v1/api/knowledge_base/ \
-H 'Authorization: Bearer <API_TOKEN>'

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
}
FieldTypeDescription
one_word_descriptionstringShort label for the Knowledge Base
short_descriptionstringDescription of the AI Assistant’s purpose
ai_commandsarray of stringsCustom instructions for the AI
retrain_statestring or nullCurrent training status

PATCH https://app.quickchat.ai/v1/api/knowledge_base/

Request Body

ParameterTypeRequiredDescription
one_word_descriptionstringNoShort label for the Knowledge Base
short_descriptionstringNoDescription of the AI Assistant’s purpose
ai_commandsarray of stringsNoCustom instructions for the AI
Terminal window
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"
}'

Response 200 OK — Returns the updated Knowledge Base settings (same schema as Get Settings).


POST https://app.quickchat.ai/v1/api/knowledge_base/articles/

Request Body

ParameterTypeRequiredDescription
contentstringYesArticle content
typestringNo"Article" (default) or "Paragraph"
titlestringNoArticle title
Terminal window
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"
}'

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"
}

GET https://app.quickchat.ai/v1/api/knowledge_base/articles/

Query Parameters

ParameterTypeRequiredDescription
limitintegerNoItems per page
offsetintegerNoItems to skip
typesstringNoFilter by type: Article, Paragraph
tagsstringNoFilter by tag
urlstringNoFilter by URL
titlestringNoFilter by title
querystringNoSearch by content
Terminal window
curl 'https://app.quickchat.ai/v1/api/knowledge_base/articles/?limit=10&offset=0' \
-H 'Authorization: Bearer <API_TOKEN>'

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 https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}

Terminal window
curl https://app.quickchat.ai/v1/api/knowledge_base/articles/1234 \
-H 'Authorization: Bearer <API_TOKEN>'

Response 200 OK — Returns the full article object (same schema as Create Article response).

PATCH https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}

Request Body

ParameterTypeRequiredDescription
contentstringNoUpdated article content
titlestringNoUpdated title
tagsarray of stringsNoUpdated tags
save_modestringNo"draft" (default) or "publish"
Terminal window
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"
}'

Response 200 OK — Returns the updated article object.

Delete one or more articles by ID.

DELETE https://app.quickchat.ai/v1/api/knowledge_base/articles/

Request Body — JSON array of article IDs.

Terminal window
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]'

Response 200 OK

Search through article content with text matching.

GET https://app.quickchat.ai/v1/api/knowledge_base/articles/search

Query Parameters

ParameterTypeRequiredDescription
querystringYesSearch query
is_case_insensitivebooleanNoCase-insensitive search (default: true)
with_title_url_and_tagsbooleanNoInclude title/URL/tags in search (default: true)
strict_searchbooleanNoRequire exact match (default: false)
num_of_display_articlesintegerNoNumber of articles to display (default: 5)
num_of_data_articlesintegerNoNumber of articles to search (default: 15)
Terminal window
curl 'https://app.quickchat.ai/v1/api/knowledge_base/articles/search?query=return%20policy' \
-H 'Authorization: Bearer <API_TOKEN>'

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 all paragraphs (chunked content) in the Knowledge Base.

GET https://app.quickchat.ai/v1/api/knowledge_base/articles/paragraphs

Query Parameters

ParameterTypeRequiredDescription
limitintegerNoItems per page
offsetintegerNoItems to skip
querystringNoFilter by content
Terminal window
curl 'https://app.quickchat.ai/v1/api/knowledge_base/articles/paragraphs?limit=10' \
-H 'Authorization: Bearer <API_TOKEN>'

Response 200 OK

{
"items": [
{
"id": 1,
"content": "Our return policy allows returns within 30 days."
}
],
"offset": 0,
"count": 1
}

Manage language-specific URLs for articles. These URLs allow linking articles to localized versions of the content.

GET https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}/lang_urls/{language}

Terminal window
curl https://app.quickchat.ai/v1/api/knowledge_base/articles/1234/lang_urls/en \
-H 'Authorization: Bearer <API_TOKEN>'

Response 200 OK

{
"url": "https://example.com/en/return-policy"
}

POST https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}/lang_urls/{language}

Request Body

ParameterTypeRequiredDescription
urlstringYesURL for the language-specific version
Terminal window
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"}'

Response 200 OK

{
"url": "https://example.com/en/return-policy"
}

PATCH https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}/lang_urls/{language}

Request Body

ParameterTypeRequiredDescription
urlstringYesUpdated URL

Response 200 OK — Returns the updated URL object.

DELETE https://app.quickchat.ai/v1/api/knowledge_base/articles/{article_id}/lang_urls/{language}

Terminal window
curl -X DELETE https://app.quickchat.ai/v1/api/knowledge_base/articles/1234/lang_urls/en \
-H 'Authorization: Bearer <API_TOKEN>'

Response 200 OK


Retrieve all tags used across Knowledge Base articles.

GET https://app.quickchat.ai/v1/api/knowledge_base/tags/

Terminal window
curl https://app.quickchat.ai/v1/api/knowledge_base/tags/ \
-H 'Authorization: Bearer <API_TOKEN>'

Response 200 OK

["policies", "faq", "product-info"]

Upload files to be processed and added to the Knowledge Base as articles.

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.

Terminal window
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'

Response 200 OK

{
"status": "success",
"message": "File processed successfully.",
"article": {
"id": 1234,
"title": "document.pdf"
}
}
FieldTypeDescription
statusstringProcessing status
messagestringHuman-readable result message
articleobjectThe created article

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.

Terminal window
curl -X POST https://app.quickchat.ai/v1/api/knowledge_base/file_upload_api/ \
-H 'Authorization: Bearer <API_TOKEN>' \
-F 'file=@document.docx'

Response 200 OK — Same schema as Upload PDF.


Import content from external sources into the Knowledge Base. These endpoints process content asynchronously.

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

ParameterTypeRequiredDescription
urlstringYesURL to scrape
modestringNo"individual" (default), "site_wide", or "individual_with_summary"
phrasesarray of stringsNoKey phrases to extract
html_selectorstringNoCSS selector to target specific content
Terminal window
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"
}'

Response 200 OK

{
"status": "success",
"url": "https://example.com/docs",
"article": {}
}

Import the transcript from a YouTube video.

POST https://app.quickchat.ai/v1/api/knowledge_base/import_external/youtube

Request Body

ParameterTypeRequiredDescription
urlstringYesYouTube video URL
toast_process_uuidstringYesUUID v4 for tracking the import process
Terminal window
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"
}'

Response 202 Accepted — The transcript is processed asynchronously.

Import content from all links in an XML sitemap.

POST https://app.quickchat.ai/v1/api/knowledge_base/import_external/site-map

Request Body

ParameterTypeRequiredDescription
site_mapstringYesURL to an XML sitemap
link_filter_regexstringNoRegex to filter which links to import (default: ".*")
html_selectorstringNoCSS selector to target specific content
summarizebooleanNoWhether to summarize imported content (default: false)
Terminal window
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"
}'

Response 200 OK

{
"status": "success",
"links": ["https://example.com/page1", "https://example.com/page2"]
}

Import content from a specific list of URLs.

POST https://app.quickchat.ai/v1/api/knowledge_base/import_external/scrape-list

Request Body

ParameterTypeRequiredDescription
linksarray of stringsYesList of URLs to scrape (non-empty)
tagsarray of stringsNoTags to apply to imported articles
html_selectorstringNoCSS selector to target specific content
summarizebooleanNoWhether to summarize imported content (default: false)
Terminal window
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"]
}'

Response 200 OK

{
"status": "success",
"links": ["https://example.com/page1", "https://example.com/page2"]
}

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.

POST https://app.quickchat.ai/v1/api/knowledge_base/sources/{source}/import

Terminal window
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 '{}'

Response 200 OK — Returns a list of imported article snapshots.

POST https://app.quickchat.ai/v1/api/knowledge_base/sources/{source}/delete

Removes all articles imported from the specified source.

Response 204 No Content

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": {}
}
]
FieldTypeDescription
internal_article_diffstring"CHANGED" or "UNCHANGED"
external_article_diffstring"CHANGED", "UNCHANGED", or "REMOVED"
article_snapshotobjectArticle snapshot data

Dedicated endpoints for managing Intercom Knowledge Base integration.

Re-fetch content from Intercom for existing articles.

POST https://app.quickchat.ai/v1/api/knowledge_base/intercom/refresh_articles

Request Body

ParameterTypeRequiredDescription
article_idsarray of integersNoSpecific article IDs to refresh (default: all)
fetch_new_articlesbooleanNoWhether to fetch new articles (default: true)

Response 204 No Content

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.

Remove all Intercom-sourced articles from the Knowledge Base.

POST https://app.quickchat.ai/v1/api/knowledge_base/intercom/delete

Response 204 No Content

Compare local articles with Intercom to detect changes.

GET https://app.quickchat.ai/v1/api/knowledge_base/intercom/articles_diff

Terminal window
curl https://app.quickchat.ai/v1/api/knowledge_base/intercom/articles_diff \
-H 'Authorization: Bearer <API_TOKEN>'

Response 200 OK — Returns a list of article diff objects (same schema as Diff Source Articles).


GET https://app.quickchat.ai/v1/api_core/conversations

Query Parameters

ParameterTypeRequiredDescription
limitintegerNoItems per page
offsetintegerNoItems to skip
querystringNoSearch by order number, UUID, or message text
assignee_typestringNo"ai_assistant", "human_operator", or "unassigned"
sourcestringNo"widget", "slack", "telegram", "whatsapp", etc.
resolution_statusstringNo"open" or "resolved"
created_timestamp_start_datedatetimeNoFilter by creation date (start)
created_timestamp_end_datedatetimeNoFilter by creation date (end)
last_message_at_start_datedatetimeNoFilter by last message date (start)
last_message_at_end_datedatetimeNoFilter by last message date (end)
most_frequent_languagestringNoFilter by detected language
Terminal window
curl 'https://app.quickchat.ai/v1/api_core/conversations?limit=10&resolution_status=open' \
-H 'Authorization: Bearer <API_TOKEN>'

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 https://app.quickchat.ai/v1/api_core/conversations/{conversation_id}/

Terminal window
curl https://app.quickchat.ai/v1/api_core/conversations/conv-uuid-1234/ \
-H 'Authorization: Bearer <API_TOKEN>'

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
}

Store and retrieve custom metadata for conversations. Metadata is validated against a JSON schema if one is configured in the Dashboard.

GET https://app.quickchat.ai/v1/api_core/conversations/{conv_id}/metadata

Terminal window
curl https://app.quickchat.ai/v1/api_core/conversations/conv-uuid-1234/metadata \
-H 'Authorization: Bearer <API_TOKEN>'

Response 200 OK

{
"metadata": {
"ticket_id": "T-1234",
"priority": "high"
}
}

Create or update metadata for a conversation.

POST https://app.quickchat.ai/v1/api_core/conversations/{conv_id}/metadata

Request Body

ParameterTypeRequiredDescription
metadataobjectYesKey-value metadata to store
Terminal window
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"
}
}'

Response 200 OK

{
"metadata": {
"ticket_id": "T-1234",
"priority": "high"
}
}

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

Terminal window
curl -X POST https://app.quickchat.ai/v1/api/ai_actions/knowledge_base \
-H 'Authorization: Bearer <API_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{}'

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"
}
FieldTypeDescription
idintegerAI Action identifier
namestringDisplay name (max 100 chars)
descriptionstringDescription of when the action should trigger (max 1000 chars)
iconstring or nullIcon identifier
icon_colorstring or nullIcon color
is_activebooleanWhether the action is enabled
is_validbooleanWhether the action is properly configured
tagstring or nullKnowledge Base tag to filter articles (max 255 chars)
parameter_descriptionstringDescription of the parameter the AI extracts (max 500 chars)
typestringAlways "knowledge_base"

GET https://app.quickchat.ai/v1/api/ai_actions/{action_id}/knowledge_base

Terminal window
curl https://app.quickchat.ai/v1/api/ai_actions/1/knowledge_base \
-H 'Authorization: Bearer <API_TOKEN>'

Response 200 OK — Returns the AI Action object (same schema as Create KB AI Action response).

PUT https://app.quickchat.ai/v1/api/ai_actions/{action_id}/knowledge_base

Request Body

ParameterTypeRequiredDescription
namestringYesDisplay name (max 100 chars)
descriptionstringYesWhen the action should trigger (max 1000 chars)
parameter_descriptionstringYesParameter description (max 500 chars)
tagstringYesKnowledge Base tag to filter (max 255 chars)
Terminal window
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"
}'

Response 200 OK — Returns the updated AI Action object.