Knowledge. What your agent answers from.
Add web pages, whole websites, files and text to a chatbot's knowledge, edit and refresh them, and remove them. Sources are processed in the background.
On this page
From added to ready
A new source starts as pending, becomes processing and ends ready (the chatbot now uses it) or failed (see error). A page or text is ready in about a minute; a whole website takes longer. Poll GET …/knowledge/{sourceId} or subscribe to the knowledge.synced webhook.
Only add content you trust: the agent may repeat it to visitors. Text in a source is treated as information to answer from, never as instructions to the agent, so a page that says "ignore your rules" is not obeyed.
List knowledge sources
/chatbots/{chatbotId}/knowledgeThe chatbot's sources, newest first, without their text.
Permission: knowledge:read
Path parameters
chatbotIdThe chatbot. Listed by GET /chatbots.
Query parameters
limitItems per page, 1 to 100. Default 20.
cursormeta.pagination.nextCursor from the previous page.
typeOnly website, file or text sources.
curl https://get-api.simplyboost.io/api/v1/chatbots/CHATBOT_ID/knowledge?type=website \
-H "Authorization: Bearer $SIMPLYBOOST_TOKEN"Response 200 OK
{
"ok": true,
"data": {
"sources": [
{
"id": "c2a7e3f1-9b4d-4e1a-a6c0-5d8f2b9e4a31",
"chatbotId": "f45268b2-1980-470d-865d-5048a89aedce",
"type": "website",
"title": "yourshop.com",
"url": "https://yourshop.com",
"status": "ready",
"error": null,
"isSourceOfTruth": false,
"refreshInterval": "weekly",
"lastSyncedAt": "2026-10-07T10:05:00+00:00",
"createdAt": "2026-10-07T10:02:00+00:00",
"updatedAt": "2026-10-07T10:02:00+00:00"
}
]
},
"meta": { "requestId": "req_…", "pagination": { "limit": 20, "hasMore": false, "nextCursor": null } }
}Response fields
data.sources[].idThe source's ID.
data.sources[].chatbotIdThe chatbot that uses it.
data.sources[].typewebsite, file or text.
data.sources[].titleIts title.
data.sources[].urlThe web address, for a website.
data.sources[].statuspending, processing, ready or failed. The chatbot uses a source once it is ready.
data.sources[].errorWhy processing failed.
data.sources[].isSourceOfTruthWhen sources disagree, this one wins.
data.sources[].refreshIntervaloff, daily or weekly: how often a website is read again.
data.sources[].lastSyncedAtWhen a website was last read.
data.sources[].createdAtWhen it was added.
data.sources[].updatedAtWhen it last changed.
meta.paginationlimit, hasMore (true when there is another page) and nextCursor (null on the last page).
Errors
| Status | Code | When |
|---|---|---|
| 404 | not_found | No such chatbot, or this token may not see it. |
| 400 | validation_error | type, limit or cursor is not valid. |
Add a website
/chatbots/{chatbotId}/knowledge/websiteReads one page, or follows its links up to 50 pages and 2 levels deep. Only public addresses are accepted.
Permission: knowledge:write
Path parameters
chatbotIdThe chatbot. Listed by GET /chatbots.
Body (JSON)
urlThe page or site, https://…, up to 2,048 characters.
crawlpage (only this address, the default) or site (follow its links).
pageUrlsRead exactly these pages of the same website, up to 50.
includePathsWith site: only read pages under these paths, for example ["/help"].
excludePathsWith site: skip pages under these paths, for example ["/blog"].
refreshIntervaloff (default), daily or weekly: read the website again on a schedule.
titleUp to 255 characters. Defaults to the address.
curl -X POST https://get-api.simplyboost.io/api/v1/chatbots/CHATBOT_ID/knowledge/website \
-H "Authorization: Bearer $SIMPLYBOOST_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://yourshop.com", "crawl": "site", "excludePaths": ["/blog"], "refreshInterval": "weekly"}'Response 201 Created
{
"ok": true,
"data": {
"source": {
"id": "c2a7e3f1-9b4d-4e1a-a6c0-5d8f2b9e4a31",
"chatbotId": "f45268b2-1980-470d-865d-5048a89aedce",
"type": "website",
"title": "yourshop.com",
"url": "https://yourshop.com",
"status": "pending",
"error": null,
"isSourceOfTruth": false,
"refreshInterval": "weekly",
"lastSyncedAt": null,
"createdAt": "2026-10-07T10:02:00+00:00",
"updatedAt": "2026-10-07T10:02:00+00:00"
}
},
"meta": { "requestId": "req_7c1e4b2a9f0d4e6c8b3a5d7f9e1c2b4a" }
}Response fields
data.source.idThe source's ID.
data.source.chatbotIdThe chatbot that uses it.
data.source.typewebsite, file or text.
data.source.titleIts title.
data.source.urlThe web address, for a website.
data.source.statuspending, processing, ready or failed. The chatbot uses a source once it is ready.
data.source.errorWhy processing failed.
data.source.isSourceOfTruthWhen sources disagree, this one wins.
data.source.refreshIntervaloff, daily or weekly: how often a website is read again.
data.source.lastSyncedAtWhen a website was last read.
data.source.createdAtWhen it was added.
data.source.updatedAtWhen it last changed.
Errors
| Status | Code | When |
|---|---|---|
| 400 | validation_error | url is missing or not a public http(s) address, a picked page is on another website, or another field is not valid. |
| 404 | not_found | No such chatbot, or this token may not see it. |
| 403 | subscription_inactive | The subscription is not active, so knowledge cannot be added. |
Add text
/chatbots/{chatbotId}/knowledge/textAdds text you write or export from another system, for example FAQs or opening hours.
Permission: knowledge:write
Path parameters
chatbotIdThe chatbot. Listed by GET /chatbots.
Body (JSON)
title1 to 255 characters.
text1 to 200,000 characters. Split longer content into several sources.
curl -X POST https://get-api.simplyboost.io/api/v1/chatbots/CHATBOT_ID/knowledge/text \
-H "Authorization: Bearer $SIMPLYBOOST_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "Opening hours", "text": "We are open Monday to Friday, 9:00 to 17:30."}'Response 201 Created
{
"ok": true,
"data": { "source": { "id": "…", "type": "text", "title": "Opening hours", "status": "pending", … } },
"meta": { "requestId": "req_7c1e4b2a9f0d4e6c8b3a5d7f9e1c2b4a" }
}Response fields
data.source.idThe source's ID.
data.source.chatbotIdThe chatbot that uses it.
data.source.typewebsite, file or text.
data.source.titleIts title.
data.source.urlThe web address, for a website.
data.source.statuspending, processing, ready or failed. The chatbot uses a source once it is ready.
data.source.errorWhy processing failed.
data.source.isSourceOfTruthWhen sources disagree, this one wins.
data.source.refreshIntervaloff, daily or weekly: how often a website is read again.
data.source.lastSyncedAtWhen a website was last read.
data.source.createdAtWhen it was added.
data.source.updatedAtWhen it last changed.
Errors
| Status | Code | When |
|---|---|---|
| 400 | validation_error | title or text is missing, empty or too long. |
| 404 | not_found | No such chatbot, or this token may not see it. |
| 403 | subscription_inactive | The subscription is not active. |
Upload a file
/chatbots/{chatbotId}/knowledge/filesUpload a PDF (scanned PDFs are read with text recognition), Word (.docx), CSV, text (.txt), Markdown (.md) or image file (PNG, JPEG, WebP, GIF, BMP) up to 50 MB. The file's content is checked, not only its name.
Permission: knowledge:write
Path parameters
chatbotIdThe chatbot. Listed by GET /chatbots.
Form fields (multipart/form-data)
fileThe file, sent as multipart/form-data.
titleUp to 255 characters. Defaults to the file name.
curl https://get-api.simplyboost.io/api/v1/chatbots/CHATBOT_ID/knowledge/files \
-H "Authorization: Bearer $SIMPLYBOOST_TOKEN" \
-F "file=@returns-policy.pdf" \
-F "title=Returns policy"Response 201 Created
{
"ok": true,
"data": { "source": { "id": "…", "type": "file", "title": "Returns policy", "status": "pending", … } },
"meta": { "requestId": "req_7c1e4b2a9f0d4e6c8b3a5d7f9e1c2b4a" }
}Response fields
data.source.idThe source's ID.
data.source.chatbotIdThe chatbot that uses it.
data.source.typewebsite, file or text.
data.source.titleIts title.
data.source.urlThe web address, for a website.
data.source.statuspending, processing, ready or failed. The chatbot uses a source once it is ready.
data.source.errorWhy processing failed.
data.source.isSourceOfTruthWhen sources disagree, this one wins.
data.source.refreshIntervaloff, daily or weekly: how often a website is read again.
data.source.lastSyncedAtWhen a website was last read.
data.source.createdAtWhen it was added.
data.source.updatedAtWhen it last changed.
Errors
| Status | Code | When |
|---|---|---|
| 400 | validation_error | No file, a file type that is not accepted, content that does not match the extension, or over 50 MB. |
| 413 | payload_too_large | The whole request is over 50 MB. |
| 404 | not_found | No such chatbot, or this token may not see it. |
| 403 | subscription_inactive | The subscription is not active. |
Get a knowledge source
/chatbots/{chatbotId}/knowledge/{sourceId}One source. Add ?include=text to get the text the chatbot reads.
Permission: knowledge:read
Path parameters
chatbotIdThe chatbot. Listed by GET /chatbots.
sourceIdThe knowledge source, from source.id.
Query parameters
includetext: add the source's text as source.text.
curl https://get-api.simplyboost.io/api/v1/chatbots/CHATBOT_ID/knowledge/SOURCE_ID?include=text \
-H "Authorization: Bearer $SIMPLYBOOST_TOKEN"Response 200 OK
{
"ok": true,
"data": { "source": { "id": "…", "type": "text", "title": "Opening hours", "status": "ready", …, "text": "We are open Monday to Friday, 9:00 to 17:30." } },
"meta": { "requestId": "req_7c1e4b2a9f0d4e6c8b3a5d7f9e1c2b4a" }
}Response fields
data.source.idThe source's ID.
data.source.chatbotIdThe chatbot that uses it.
data.source.typewebsite, file or text.
data.source.titleIts title.
data.source.urlThe web address, for a website.
data.source.statuspending, processing, ready or failed. The chatbot uses a source once it is ready.
data.source.errorWhy processing failed.
data.source.isSourceOfTruthWhen sources disagree, this one wins.
data.source.refreshIntervaloff, daily or weekly: how often a website is read again.
data.source.lastSyncedAtWhen a website was last read.
data.source.createdAtWhen it was added.
data.source.updatedAtWhen it last changed.
data.source.textOnly with ?include=text.
Errors
| Status | Code | When |
|---|---|---|
| 404 | not_found | No such chatbot or source, or this token may not see it. |
Update a knowledge source
/chatbots/{chatbotId}/knowledge/{sourceId}Change only the fields you send. New text for a text source replaces the old text and is processed again; the chatbot uses it once the source is ready.
Permission: knowledge:write
Path parameters
chatbotIdThe chatbot. Listed by GET /chatbots.
sourceIdThe knowledge source, from source.id.
Body (JSON)
title1 to 255 characters.
textText sources only. 1 to 200,000 characters.
isSourceOfTruthWhen sources disagree, the chatbot trusts this one.
refreshIntervalWebsites only. off, daily or weekly.
curl -X PATCH https://get-api.simplyboost.io/api/v1/chatbots/CHATBOT_ID/knowledge/SOURCE_ID \
-H "Authorization: Bearer $SIMPLYBOOST_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text": "We are open Monday to Saturday, 9:00 to 17:30.", "isSourceOfTruth": true}'Response 200 OK
{
"ok": true,
"data": { "source": { "id": "…", "status": "pending", "isSourceOfTruth": true, … } },
"meta": { "requestId": "req_7c1e4b2a9f0d4e6c8b3a5d7f9e1c2b4a" }
}Response fields
data.source.idThe source's ID.
data.source.chatbotIdThe chatbot that uses it.
data.source.typewebsite, file or text.
data.source.titleIts title.
data.source.urlThe web address, for a website.
data.source.statuspending, processing, ready or failed. The chatbot uses a source once it is ready.
data.source.errorWhy processing failed.
data.source.isSourceOfTruthWhen sources disagree, this one wins.
data.source.refreshIntervaloff, daily or weekly: how often a website is read again.
data.source.lastSyncedAtWhen a website was last read.
data.source.createdAtWhen it was added.
data.source.updatedAtWhen it last changed.
Errors
| Status | Code | When |
|---|---|---|
| 400 | validation_error | An unknown field, a wrong type, text on a non-text source or refreshInterval on a non-website source. |
| 404 | not_found | No such chatbot or source, or this token may not see it. |
| 409 | not_ready | Changing the text while the source is still being processed. |
Delete a knowledge source
/chatbots/{chatbotId}/knowledge/{sourceId}The chatbot stops using the source straight away.
Permission: knowledge:delete
Path parameters
chatbotIdThe chatbot. Listed by GET /chatbots.
sourceIdThe knowledge source, from source.id.
curl -X DELETE https://get-api.simplyboost.io/api/v1/chatbots/CHATBOT_ID/knowledge/SOURCE_ID \
-H "Authorization: Bearer $SIMPLYBOOST_TOKEN"Response 200 OK
{
"ok": true,
"data": { "id": "c2a7e3f1-9b4d-4e1a-a6c0-5d8f2b9e4a31", "deleted": true },
"meta": { "requestId": "req_7c1e4b2a9f0d4e6c8b3a5d7f9e1c2b4a" }
}Response fields
data.idThe deleted source's ID.
data.deletedAlways true.
Errors
| Status | Code | When |
|---|---|---|
| 404 | not_found | No such chatbot or source, or this token may not see it. |
Refresh a website now
/chatbots/{chatbotId}/knowledge/{sourceId}/refreshReads the website again now, instead of waiting for its refresh interval.
Permission: knowledge:write
Path parameters
chatbotIdThe chatbot. Listed by GET /chatbots.
sourceIdThe knowledge source, from source.id.
curl -X POST https://get-api.simplyboost.io/api/v1/chatbots/CHATBOT_ID/knowledge/SOURCE_ID/refresh \
-H "Authorization: Bearer $SIMPLYBOOST_TOKEN"Response 202 Accepted
{
"ok": true,
"data": { "source": { "id": "…", "type": "website", "status": "processing", … } },
"meta": { "requestId": "req_7c1e4b2a9f0d4e6c8b3a5d7f9e1c2b4a" }
}Response fields
data.source.idThe source's ID.
data.source.chatbotIdThe chatbot that uses it.
data.source.typewebsite, file or text.
data.source.titleIts title.
data.source.urlThe web address, for a website.
data.source.statuspending, processing, ready or failed. The chatbot uses a source once it is ready.
data.source.errorWhy processing failed.
data.source.isSourceOfTruthWhen sources disagree, this one wins.
data.source.refreshIntervaloff, daily or weekly: how often a website is read again.
data.source.lastSyncedAtWhen a website was last read.
data.source.createdAtWhen it was added.
data.source.updatedAtWhen it last changed.
Errors
| Status | Code | When |
|---|---|---|
| 400 | not_a_website | Only websites can be refreshed. |
| 404 | not_found | No such chatbot or source, or this token may not see it. |
| 409 | not_ready | The website is still being read for the first time. |
| 409 | refresh_running | A refresh is already running. |