Skip to content

Articles are the building blocks of your Knowledge Base. Create, list, update, and delete the content your AI Agent uses to answer questions.

Articles are the building blocks of your AI Agent’s Knowledge Base. Each article represents a piece of knowledge — a help page, FAQ entry, product description, or any content your AI should know about.

There are three article types: Articles (full documents with title and body), Paragraphs (short standalone text entries), and URL articles (automatically created when importing web content). You can create articles manually via the API, import them from websites using Import External Content, upload files via File Upload, or sync from Intercom.

There is no retraining step. Every article you create, update, or delete is processed automatically in the background and takes effect as soon as it’s done — usually within seconds. Track it with the embed_state field below, or with pending_embed_count in Get Knowledge Base Settings.

  • Preview an API Action request. Render a supplied request template with synthetic sample values without sending it. Omit credential headers.

  • Preview JSONPath matches. Check root, field, array-index and wildcard paths against supplied JSON. This does not run an Action or save conversation memory.

Scope: write_all

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

Request Body

ParameterDescription
content
string, required
Article content
type
string
"Article" (default) or "Paragraph"
title
string
Article title
  • "Article" — A full knowledge base document with title and content. Use for FAQ entries, help articles, product descriptions.
  • "Paragraph" — A short standalone text entry without a title. Use for brief facts, one-liner answers, quick reference data.
  • "URL" (read-only) — Created automatically when content is imported from a website. Contains the scraped page content with the source URL. Cannot be set on creation.
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",
"deploy_state": "draft",
"embed_state": "pending",
"refresh_failure_reason": "",
"version": null,
"max_available_version": null,
"url": null,
"tags": [],
"created_timestamp": "2026-01-15",
"last_modified_timestamp": "2026-01-15",
"downloaded_timestamp": "2026-01-15",
"last_updated_timestamp": "2026-01-15",
"last_updated_from_external_source_timestamp": null
}
FieldDescription
id
integer
Article numeric ID. This is the canonical identifier used in all URL paths
article_id
string
Legacy string identifier. May be empty — use id instead
type
string
"Article", "Paragraph", or "URL"
title
string
Article title
description
string
Article description
content
string
Article content
deploy_state
string
"draft" or "published" — a label only (see note below)
embed_state
string or null
Whether the article is live: "pending", "embedding", "embedded", or "failed" (see note below)
state
string
Internal processing status (see note below)
refresh_failure_reason
string
Why the latest URL refresh failed. Empty when no classified refresh failure is stored
version
integer or null
Current version number
max_available_version
integer or null
Highest available version
url
string or null
Source URL (for URL-type articles)
tags
array of strings
Associated tags
created_timestamp
string
Creation date
last_modified_timestamp
string
Last modification date
downloaded_timestamp
string
Download date
last_updated_timestamp
string
Last update date
last_updated_from_external_source_timestamp
string or null
Last external source update

Articles have three state fields. Only one of them tells you whether your AI Agent is using the article:

  • embed_state: The one that matters. "pending" and "embedding" mean the article is still being processed; "embedded" means it is live and your AI Agent is using it; "failed" means processing didn’t complete and the article is not being used. This is the field to poll after a write.
  • deploy_state: "draft" or "published". A label for your own organisation only — it does not affect whether the AI uses the article.
  • state: Internal content-fetching status. For most API users this can be ignored. On a URL article, "refresh_failed" means the latest refresh did not replace the saved content.
  • refresh_failure_reason: A stable category for a classified URL refresh failure: "http_error", "soft_404", "off_domain_redirect", "auth_wall", "error_page", "empty_content", or "thin_content". It can be empty when the scrape failed before Quickchat could classify the page. The last saved content remains live unless embed_state also failed.
Scope: read_all

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

Query Parameters

ParameterDescription
limit
integer
Items per page
offset
integer
Items to skip
types
string
Filter by type: Article, Paragraph, URL
tags
string
Filter by tag
url
string
Filter by URL
title
string
Filter by title
query
string
Search 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",
"deploy_state": "published",
"embed_state": "embedded",
"refresh_failure_reason": "",
"version": 1,
"max_available_version": 1,
"url": null,
"tags": ["policies"],
"created_timestamp": "2026-01-15",
"last_modified_timestamp": "2026-01-15",
"downloaded_timestamp": "2026-01-15",
"last_updated_timestamp": "2026-01-15",
"last_updated_from_external_source_timestamp": null
}
],
"offset": 0,
"limit": 10,
"count": 1
}

The list response does not include the content field. Use Get Article to retrieve the full content of a specific article.

Scope: read_all

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), including the content field.

Scope: write_all

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

Request Body

ParameterDescription
content
string
Updated article content
title
string
Updated title
tags
array of strings
Updated tags
save_mode
string
"draft" (default) or "publish"

The save_mode: "draft" option only sets the deploy_state flag — it does not hold the content back from the AI. A draft article is processed and used exactly like a published one. Don’t rely on it to stage content; only write an article once you’re ready for it to go live.

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.

Scope: write_all

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.

Scope: read_all

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

Query Parameters

ParameterDescription
query
string, required
Search query
is_case_insensitive
boolean
Case-insensitive search (default: true)
with_title_url_and_tags
boolean
Include title/URL/tags in search (default: true)
strict_search
boolean
Require exact match (default: false)
num_of_display_articles
integer
Number of articles to display (default: 5)
num_of_data_articles
integer
Number 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 Paragraph-type articles. Paragraphs are short standalone text entries without a title — as opposed to full Articles which have both a title and content body.

Scope: read_all

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

Query Parameters

ParameterDescription
limit
integer
Items per page
offset
integer
Items to skip
query
string
Filter 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
}