curl --request POST \
--url https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/attachments \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"noteId": "<string>",
"fileBase64": "<string>",
"filename": "<string>"
}
'import requests
url = "https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/attachments"
payload = {
"noteId": "<string>",
"fileBase64": "<string>",
"filename": "<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({noteId: '<string>', fileBase64: '<string>', filename: '<string>'})
};
fetch('https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/attachments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"attachment": {
"noteId": "68a1f8509c41d20014b3ee55",
"filename": "positioning.pdf",
"contentType": "application/pdf",
"byteSize": 284913
}
}{
"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>"
}
}Attach a document to one of the hub's notes
Attaches a document to one of the hub’s notes; note ids come from notes[].id in the hub detail. Send the file as padded base64 in fileBase64, up to 10,485,760 characters (about 7.5 MB of file data); allowed types are PDF, plain text, CSV, Word (.doc and .docx) and RTF. The file is stored for download only — it is not parsed into the hub’s knowledge, so put the text you want the hub to learn in the note’s own text. A note holds one attachment: a second upload answers 409 ATTACHMENT_ALREADY_EXISTS, and there is no replace endpoint. The response does not include a download URL; fetch one with GET /business/knowledge-hubs/{hubId}/attachments/{noteId}. Only the hub’s owner can upload, and not while the hub is processing.
Errors:
404KNOWLEDGE_HUB_NOT_FOUND— No hub with that id, it was deleted, or it belongs to another team.404NOTE_NOT_FOUND— No note with that id on this hub.409ATTACHMENT_ALREADY_EXISTS— The note already holds a document; delete the note’s attachment first.409KNOWLEDGE_HUB_NOT_READY— The hub is processing a build, update or refresh.403KNOWLEDGE_HUB_OWNER_ONLY— You can read this teammate’s hub but only its owner can upload attachments.422VALIDATION_FAILED— Malformed base64, a file over the size cap, an unsupported contentType, or a missing field.500UNEXPECTED_ERROR— The file could not be stored; 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 POST \
--url https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/attachments \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"noteId": "<string>",
"fileBase64": "<string>",
"filename": "<string>"
}
'import requests
url = "https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/attachments"
payload = {
"noteId": "<string>",
"fileBase64": "<string>",
"filename": "<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({noteId: '<string>', fileBase64: '<string>', filename: '<string>'})
};
fetch('https://api.tryfuse.ai/api/v1/business/knowledge-hubs/{hubId}/attachments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"attachment": {
"noteId": "68a1f8509c41d20014b3ee55",
"filename": "positioning.pdf",
"contentType": "application/pdf",
"byteSize": 284913
}
}{
"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
24-character hex id of the note to attach the document to; a note holds at most one attachment.
Accepted values: standard base64 with padding — alphabet A-Z a-z 0-9 + / and a length that is a multiple of 4. A URL-safe (-_) string, an unpadded one, or one that still carries a data:...;base64, prefix answers 422 VALIDATION_FAILED. The whole JSON request body is capped at 10 MB, which puts the real ceiling at roughly 7.5 MB of file data (base64 is a third larger than the file it encodes). The bytes are stored and handed back by the download endpoint unchanged: nothing reads, extracts or indexes them, so an attachment on its own adds no knowledge to the hub — only the note's text does.
10485760File name stored with the attachment and returned by the download endpoint (1-255 characters). Free text: it is stored verbatim, never parsed, and never checked against contentType or against the note's own filename label — an extension that contradicts contentType is accepted and changes nothing. Give it the real extension anyway, since it is the name whoever opens the download sees.
1 - 255MIME type of the file: PDF, plain text, CSV, Word (.doc or .docx) or RTF.
application/pdf, text/plain, text/csv, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/rtf Response
Success
Show child attributes
Show child attributes