curl --request PATCH \
--url https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId} \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}"
payload = {}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"knowledgeHub": {
"id": "68a1f8509c41d20014b3ee41",
"name": "Brightpay KB",
"companyName": "Brightpay",
"status": "processing",
"isDefault": true,
"websites": [
{
"url": "https://brightpay.com",
"includeSubPages": true,
"isCompetitor": false,
"parentUrl": null,
"lastCrawledAt": "2026-08-09T04:01:13.461Z"
}
],
"notes": [
{
"id": "68a1f8509c41d20014b3ee55",
"text": "We sell payroll software to UK accountants.",
"filename": "positioning.md",
"isCompetitor": false,
"hasAttachment": true
}
],
"createdAt": "2026-06-01T12:00:00.000Z",
"updatedAt": "2026-08-25T12:04:11.221Z"
}
}{
"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>"
}
}Update a hub's name, websites, or notes
Renames the hub and/or merges websites and notes into it, then rebuilds it in the background (202). Websites merge by URL — a URL the hub already has is re-crawled, a new one is added — and notes merge by filename, so sending a known filename edits that note in place and keeps its attachment. Nothing is ever removed: there is no public way to drop a website or a note. The hub flips to status processing immediately; the websites and notes in this response are still the PRE-merge values, so poll GET /business/knowledge-hubs/{hubId} until status is complete to see the merged hub. A hub that is already processing a build, update or refresh answers 409 KNOWLEDGE_HUB_NOT_READY.
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 already processing a build, update or refresh — wait for status complete.422VALIDATION_FAILED— Nothing to update, a value outside its limits, or a website URL the crawler cannot parse.500UNEXPECTED_ERROR— The update workflow could not be enqueued; the hub may be left processing — retry.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 PATCH \
--url https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId} \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}"
payload = {}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"knowledgeHub": {
"id": "68a1f8509c41d20014b3ee41",
"name": "Brightpay KB",
"companyName": "Brightpay",
"status": "processing",
"isDefault": true,
"websites": [
{
"url": "https://brightpay.com",
"includeSubPages": true,
"isCompetitor": false,
"parentUrl": null,
"lastCrawledAt": "2026-08-09T04:01:13.461Z"
}
],
"notes": [
{
"id": "68a1f8509c41d20014b3ee55",
"text": "We sell payroll software to UK accountants.",
"filename": "positioning.md",
"isCompetitor": false,
"hasAttachment": true
}
],
"createdAt": "2026-06-01T12:00:00.000Z",
"updatedAt": "2026-08-25T12:04:11.221Z"
}
}{
"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
At least one of name, websites or notes is required.
New hub name (1-100 characters).
1 - 100Websites to add or re-crawl: at least 1, at most 20 per call, and the 20 caps the call, not the hub. Accepted values for each entry's url: any http(s) web address, with or without the scheme. Merged into the hub's existing websites — on a hub built through this API a known URL is matched ignoring scheme, www., a trailing slash and case — and a match is re-crawled while an unknown URL is added; nothing is ever removed. A matched entry is REPLACED by what you send, so omitting includeSubPages or isCompetitor resets that flag to false. Re-crawling runs in the background after the 202, so a site that cannot be fetched is not reported as an error: its entry simply keeps the lastCrawledAt it already had.
1 - 20 elementsShow child attributes
Show child attributes
Notes to add or update: at least 1, at most 50 per call. Each note's text carries the free-text knowledge itself; filename is only its label. Merged into the hub's existing notes by exact filename: a match keeps its id and its attachment but has its text and isCompetitor overwritten by exactly what you send, so omitting isCompetitor resets that flag to false and a competitor note silently becomes company material; an unknown filename adds a note, and nothing is removed. Two entries with the same filename in one call collapse into one — the last wins, with no error.
1 - 50 elementsShow child attributes
Show child attributes
Response
Success
Show child attributes
Show child attributes