curl --request POST \
--url https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/pages \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"content": "<string>"
}
'import requests
url = "https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/pages"
payload = {
"title": "<string>",
"content": "<string>"
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({title: '<string>', content: '<string>'})
};
fetch('https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/pages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"page": {
"id": "68a1fc209c41d20014b3f302",
"title": "Objection handling",
"content": "Price too high -> value framing.",
"category": "custom",
"origin": "user",
"createdAt": "2026-08-24T19:14:55.387Z",
"updatedAt": "2026-08-24T19:14:55.387Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}Add a custom knowledge page
Adds a page you author yourself to the hub and indexes it into the hub’s knowledge store before answering — no polling. The page is stored with origin user, which means the hub’s rebuilds never overwrite or remove it. category groups the page alongside the generated ones and defaults to custom. Only the hub’s owner can add pages, and the hub needs a finished first build: a hub whose knowledge store does not exist yet — one still processing, or a draft — answers 409 KNOWLEDGE_HUB_NOT_READY, and a hub with no knowledge pages at all (one built before the pages pipeline, and a draft that was never built) answers 409 KNOWLEDGE_HUB_PAGES_UNAVAILABLE first.
Errors:
404KNOWLEDGE_HUB_NOT_FOUND— No hub with that id, it was deleted, or it belongs to another team.409KNOWLEDGE_HUB_NOT_READY— The hub is still building, or its build never finished.409KNOWLEDGE_HUB_PAGES_UNAVAILABLE— The hub predates knowledge pages.403KNOWLEDGE_HUB_OWNER_ONLY— You can read this teammate’s hub but only its owner can add pages.422VALIDATION_FAILED— title or content missing or too long, or an unknown category.500UNEXPECTED_ERROR— The page was saved but could not be indexed; edit it (PATCH) to retry the indexing.429RATE_LIMITED— More than 30 knowledge-hub/campaign requests in a minute (or 1000 in a day). Knowledge hubs share the campaigns bucket.
Requires one of the following token scopes: campaigns.
curl --request POST \
--url https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/pages \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"content": "<string>"
}
'import requests
url = "https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/pages"
payload = {
"title": "<string>",
"content": "<string>"
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({title: '<string>', content: '<string>'})
};
fetch('https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/pages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"page": {
"id": "68a1fc209c41d20014b3f302",
"title": "Objection handling",
"content": "Price too high -> value framing.",
"category": "custom",
"origin": "user",
"createdAt": "2026-08-24T19:14:55.387Z",
"updatedAt": "2026-08-24T19:14:55.387Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"param": "<string>",
"doc_url": "<string>",
"request_id": "<string>"
}
}Authorizations
Your API token (af_…) as the Basic-auth username, with an empty password.
Path Parameters
24-character hex id of the knowledge hub (from GET /business/knowledge-hubs).
Body
Page title (1-200 characters).
1 - 200Page body in Markdown (1-60,000 characters); indexed into the hub's knowledge store as soon as the page is created.
1 - 60000Page category, one of overview (company summary), products, pricing, icp-use-cases (ideal customers and use cases), differentiators, competitors, faq, source-digest (digest of one source), custom (user-authored); defaults to custom.
overview, products, pricing, icp-use-cases, differentiators, competitors, faq, source-digest, custom Response
Success
Show child attributes
Show child attributes