Dateien, Projekte und Wissen
Über die REST-API Dateien hochladen, Arbeit in Projekten organisieren, Wissensdatenbanken aufbauen und teilen sowie Teams verwalten.
Diese Ressourcen geben einem Modell etwas, womit es arbeiten kann. Dateien sind Uploads, die Sie an eine Nachricht oder eine Ausführung anhängen. Projekte bündeln Chats, Prompts und Dateien mit gemeinsamen Anweisungen und einem Standardmodell. Wissensdatenbanken sind Ordnerbäume mit Dokumenten, die für die Suche indexiert und in Antworten als Quelle angegeben werden. Teams sind Gruppen innerhalb Ihres Workspace, mit denen Sie Projekte, Wissensdatenbanken und Unterhaltungen teilen.
Alle Pfade beziehen sich auf https://api.stickyprompts.com/api/v1. Jeder Request läuft als der Benutzer, dem der API-Schlüssel gehört. Alle Prüfungen zu Eigentum, Freigaben und Workspace-Rollen gelten also für diesen Benutzer.
Konventionen
- Objekte enthalten neben Feldern in snake_case die großgeschriebenen Basisfelder
ID,CreatedAt,UpdatedAtundDeletedAt(nullbei aktiven Datensätzen). - Paginierte Endpunkte lesen
page(Standard1) undsize(Standard10) und setzen die Response-HeaderX-Total-Count,X-PageundX-Page-Size. Siehe Fehler, Paginierung und Kontingente. - Fehler haben die Form
{"error": "message"}. Kontingentfehler lauten429 {"error": "Quota exceeded", "reason": "<reason>"}.
Dateien
Das Datei-Objekt
Jeder Upload-Endpunkt liefert dasselbe Datei-Objekt.
{
"ID": 4812,
"CreatedAt": "2026-09-28T09:14:03.512Z",
"UpdatedAt": "2026-09-28T09:14:03.512Z",
"DeletedAt": null,
"name": "northwind-q3-report.pdf",
"path": "https://<storage-host>/<bucket>/231/k9Tq2vX8bLmN3pRs7wYz4cDf6gHj1kLm.pdf",
"preview_path": "",
"public_path": "",
"user_id": 231,
"workspace_id": 17,
"project_id": null,
"fileType": "file_search",
"partial": false
}
| Feld | Typ | Bedeutung |
|---|---|---|
ID | integer | Die Datei-ID, die Sie in Unterhaltungen und Ausführungen als Anhang übergeben. |
name | string | Ursprünglicher Dateiname. |
path | string | Direkte URL des gespeicherten Objekts: <storage URI>/<bucket>/<user id>/<32 random chars><extension>. Ob es ohne Zugangsdaten lesbar ist, hängt von der Speicherkonfiguration außerhalb der API ab. |
preview_path | string | Nur bei .docx gesetzt (in eine PDF-Vorschau umgewandelt) und bei .jfif (als .jpg ausgeliefert). Sonst leer. |
public_path | string | Öffentlicher Freigabe-Slug, leer, wenn die Datei nicht geteilt ist. Siehe POST /file/:id/public. |
user_id, workspace_id, project_id | integer oder null | Wer hochgeladen hat, dessen Workspace zum Zeitpunkt des Uploads und das Projekt, falls in ein Projekt hochgeladen wurde. |
fileType | string | Schlüssel in camelCase. image, file_search, spreadsheet, code_interpreter oder code_interpreter_output, abgeleitet aus der Dateiendung. |
partial | boolean | Nur true, solange generierte Inhalte noch geschrieben werden. Bei Uploads immer false. |
So wird fileType ermittelt. Der Abgleich der Endung unterscheidet Groß- und Kleinschreibung. REPORT.PDF landet daher bei code_interpreter.
image:.png .jpg .jpeg .gif .webp .bmp .tiff .tif .ico .heic .heif .jfif .avif .svgfile_search:.c .cc .cpp .h .hpp .cs .css .scss .less .doc .docx .go .html .java .js .jsx .ts .tsx .vue .json .md .pdf .php .pptx .py .rb .sh .bat .ps1 .tex .txt .xml .yaml .yml .toml .ini .log .rtf .odt .rst .sql .kt .swift .rs .r .m .lua .plspreadsheet:.xlsx .xlsm .xlam .xltm .xltx .xls .csv .tsv .ods .ots .numberscode_interpreter: alles andere
POST /file
/api/v1/file Lädt eine oder mehrere Dateien in Ihre persönliche Dateibibliothek hoch. Der Upload läuft synchron: Wenn die Antwort eintrifft, ist jede Datei gespeichert und hat eine ID. Ein MCP-Gegenstück zum Hochladen gibt es nicht.
-
upload[]file in form erforderlich - Ein Part pro Datei. Wiederholen Sie das Feld, um mehrere Dateien hochzuladen. Der Name lautet wörtlich
upload[]: Parts unter einem anderen Namen werden ignoriert, und der Request gelingt mit[].
Der API-Code erzwingt hier weder eine Größenbeschränkung noch eine Liste zulässiger Dateiendungen. Jede Grenze, auf die Sie stoßen, stammt von der Infrastruktur vor der API.
curl -X POST https://api.stickyprompts.com/api/v1/file \
-H "Authorization: Bearer $STICKY_API_KEY" \
-F "upload[]=@northwind-q3-report.pdf" \
-F "upload[]=@pricing.xlsx"import os, requests
with open("northwind-q3-report.pdf", "rb") as a, open("pricing.xlsx", "rb") as b:
r = requests.post(
"https://api.stickyprompts.com/api/v1/file",
headers={"Authorization": f"Bearer {os.environ['STICKY_API_KEY']}"},
files=[("upload[]", a), ("upload[]", b)],
)
r.raise_for_status()
for f in r.json():
print(f["ID"], f["name"], f["fileType"])import { readFile } from "node:fs/promises";
const form = new FormData();
form.append("upload[]", new Blob([await readFile("northwind-q3-report.pdf")]), "northwind-q3-report.pdf");
form.append("upload[]", new Blob([await readFile("pricing.xlsx")]), "pricing.xlsx");
const files = await fetch("https://api.stickyprompts.com/api/v1/file", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.STICKY_API_KEY}` },
body: form,
}).then((r) => r.json());
console.log(files.map((f) => [f.ID, f.fileType]));Antwort. 200 mit einem Array von Datei-Objekten in der Reihenfolge des Uploads.
Fehler. 500 {"error": "could not upload files"}, wenn der Body kein gültiges Multipart ist oder das Speichern fehlschlägt.
Eine hochgeladene Datei verwenden
- In einer Nachricht einer Unterhaltung oder in einer Ausführung:
"attachments": [{"id": 4812, "type": "file"}]. Mit"temp": truehängen Sie die Datei nur für diesen einen Aufruf an. Siehe Unterhaltungen und Nachrichten. - An einem Prompt:
POST /prompt/:id/filemit{"file_ids": [4812]}. Siehe Prompts und Ausführungen. - Für die Tabellenverarbeitung: Übergeben Sie die Datei als
file_idanPOST /xlsx/start-process. Siehe Modelle und Medien.
GET /file
/api/v1/file Listet jede Datei auf, die Sie hochgeladen haben, einschließlich der Dateien in Projekten und Wissensdatenbanken und der generierten Ausgaben der Tabellenverarbeitung. Eine feste Sortierreihenfolge gibt es nicht.
-
pageinteger in query optional Standard1 - Seitennummer.
-
sizeinteger in query optional Standard10 - Einträge pro Seite.
Antwort. 200 mit einem Array von Datei-Objekten.
DELETE /file/:id
/api/v1/file/:id Löscht eine Datei, die Sie hochgeladen haben: Sie wird (samt einer etwaigen Vorschau) aus dem Speicher entfernt, und der Datensatz wird als gelöscht markiert (Soft Delete).
-
idinteger in path erforderlich - Datei-ID.
Antwort. 204, ohne Body.
Fehler. 400 {"error": "Invalid file ID"}, 404 {"error": "File not found"}, 403 {"error": "You do not have permission to delete this file"} (Sie haben die Datei nicht hochgeladen), 502 {"error": "Failed to delete file"}.
POST /file/:id/public
/api/v1/file/:id/public Erstellt oder ersetzt einen öffentlichen Freigabe-Slug für eine Datei, die Sie hochgeladen haben. Ein erneuter Aufruf erzeugt einen neuen Slug und macht den alten ungültig. Wer den Slug kennt, kann GET /public/file/:slug ohne Authentifizierung aufrufen. Der Aufruf liefert das Datei-Objekt einschließlich path (und 404 {"error": "File not found"}, sobald die Freigabe widerrufen ist). Ein URL-Format für Freigaben auf Basis des Slugs legt die API nicht fest.
-
idinteger in path erforderlich - Datei-ID.
Antwort. 200 mit dem Datei-Objekt. public_path enthält einen neuen 32-stelligen Slug wie "Qx7_mB2kLr9-TtZwP4nV8cHd3JfG6sYq".
Fehler. 400 Invalid file ID, 404 File not found, 403 {"error": "You do not have permission to share this file"}.
DELETE /file/:id/public
/api/v1/file/:id/public Widerruft den öffentlichen Link, indem public_path geleert wird.
-
idinteger in path erforderlich - Datei-ID.
Antwort. 204. Fehler. 400 Invalid file ID, 404 File not found, 403 {"error": "You do not have permission to modify this file"}.
Projekte
Ein Projekt bündelt Unterhaltungen, Prompts und Dateien und bringt Standardanweisungen und ein Standardmodell mit. Es ist die API-Seite von Projekte. Jede :id akzeptiert die numerische ID oder den slug. Dateien, die in ein Projekt hochgeladen wurden, werden automatisch an Unterhaltungen angehängt, die im Projekt gestartet werden, jeweils nur für diesen Aufruf (verwenden Sie dafür bei den Unterhaltungs-Endpunkten den Header X-Project-ID).
Zugriffsmodell
- Der Inhaber darf alles. Nur der Inhaber kann das Projekt löschen oder seine Freigaben ändern.
- Andere erhalten Zugriff über Freigaben für den gesamten Workspace, einzelne Benutzer oder Teams. Die wirksamen Flags ergeben sich aus der Vereinigung aller Freigaben. Eine Freigabe gewährt Lesezugriff (das Projekt und seine Dateien sehen, es anheften). Zusätzliche Flags:
prompt_management(die Prompts des Projekts verwalten),file_management(Dateien hochladen und löschen) undproject_management(das Projekt mitPATCHbearbeiten).
Das Projekt-Objekt
{
"ID": 305,
"CreatedAt": "2026-09-01T12:00:00Z",
"UpdatedAt": "2026-09-27T16:40:00Z",
"DeletedAt": null,
"slug": "k7Tq2vX",
"name": "Northwind Launch",
"description": "Everything for the Q4 launch",
"instructions": "Answer in British English. Keep it short.",
"color": "#3B82F6",
"icon": "rocket",
"ai_model_id": null,
"auto_model_type": "best",
"user_id": 231,
"is_pinned": false,
"has_files": true,
"current_user_permission": { "prompt_management": false, "file_management": false, "project_management": false },
"workspace_share": true,
"workspace_share_flags": { "prompt_management": true, "file_management": false, "project_management": false },
"user_shares": [
{ "user_id": 240, "user": { "ID": 240, "first_name": "Dora", "...": "..." },
"flags": { "prompt_management": true, "file_management": true, "project_management": false } }
],
"team_shares": [
{ "team_id": 12, "team": { "ID": 12, "name": "Marketing", "...": "..." },
"flags": { "prompt_management": false, "file_management": true, "project_management": false } }
]
}
iconmuss leer sein oder einer dieser Werte:folder rocket hat-glasses box flask-conical book-open briefcase circle-dollar-sign puzzle cpu plane cross database paw-print headset.colorist ein Hex-String und wird nicht validiert.- Normalerweise ist genau eines der beiden Felder gesetzt:
ai_model_id(ein festes Modell) oderauto_model_type(best,balanced,cheapest). ai_model,pin,files,conversations,promptsundhas_filesfehlen, wenn sie nicht geladen wurden.current_user_permissionzeigt nur Flags, die über Freigaben gewährt wurden. Der Inhaber hat alle Rechte, sieht aber meist überallfalse.has_files,current_user_permission,user_sharesundteam_shareswerden nur vonGET /project/:idbefüllt. An anderer Stelle fehlthas_files, die Berechtigungsflags sind allefalse, und die Freigabelisten sindnull.
POST /project
/api/v1/project Legt ein Projekt an. Das Standardmodell stammt aus Ihren Voreinstellungen (bevorzugtes Modell oder automatische Modellwahl), ersatzweise gilt der Standard der Plattform. instructions lässt sich hier nicht setzen: Verwenden Sie dafür PATCH.
-
namestring erforderlich - Projektname.
-
descriptionstring optional - Freitext.
-
colorstring optional - Hex-Farbe.
-
iconstring optional - Einer der oben genannten Icon-Namen.
curl -X POST https://api.stickyprompts.com/api/v1/project \
-H "Authorization: Bearer $STICKY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Northwind Launch", "description": "Everything for the Q4 launch", "icon": "rocket" }'
Antwort. 201 mit dem Projekt-Objekt.
Fehler. 400 ("Project name is required" oder ein Binding-Fehler, "Invalid project icon"), 500 {"error": "Failed to create project"}.
GET /project
/api/v1/project Listet die Projekte auf, die Ihnen gehören, und dazu die Projekte, die mit Ihnen geteilt wurden, die neuesten zuerst.
-
pageinteger in query optional Standard1 - Seitennummer.
-
sizeinteger in query optional Standard10 - Einträge pro Seite.
-
searchstring in query optional - Abgleich mit Name oder Beschreibung, ohne Unterscheidung von Groß- und Kleinschreibung.
-
is_sharedboolean in query optional true: nur Projekte, die mit Ihnen geteilt wurden.false: nur Projekte, die Ihnen gehören. Weglassen für beides.
Antwort. 200 mit einem Array von Projekt-Objekten.
Die Zugriffsfilterung greift erst nach der Paginierung. Eine Seite kann daher weniger als size Einträge enthalten, und X-Total-Count kann höher sein als das, was Sie sehen. is_pinned ist in dieser Liste immer false: Verwenden Sie GET /project/pinned. Fehler. 400 {"error": "Invalid is_shared parameter"}.
GET /project/pinned
/api/v1/project/pinned Ihre angehefteten Projekte, das zuerst angeheftete zuerst, mit is_pinned: true und befülltem pin. Nicht paginiert.
GET /project/:id
/api/v1/project/:id Liefert das vollständige Projekt-Objekt.
-
idstring in path erforderlich - Projekt-ID oder Slug.
-
include_filesstring in query optional trueliefert die Dateien des Projekts alsfiles(Datei-Objekte) mit.
Fehler. 404 {"error": "Project not found"}, 403 {"error": "You don't have access to this project"}.
PATCH /project/:id
/api/v1/project/:id Ändert ein Projekt. Sie müssen der Inhaber sein oder project_management besitzen. Jedes Feld ist optional, senden Sie aber mindestens eines.
-
idstring in path erforderlich - Projekt-ID oder Slug.
-
namestring optional - Darf nicht leer sein.
-
descriptionstring optional - Freitext.
-
colorstring optional - Hex-Farbe.
-
iconstring optional - Icon-Name oder
"", um das Icon zu entfernen. -
instructionsstring optional - Anweisungen für das Modell auf Projektebene. Es gelten die Regeln Ihres Workspace für sensible Daten: Passende Inhalte werden geschwärzt, oder der Request wird abgelehnt.
-
ai_model_idinteger optional - Setzt ein festes Modell und leert
auto_model_type. -
auto_model_typestring optional best,balancedodercheapest. Leertai_model_id.
Antwort. 200 mit dem Projekt-Objekt.
Fehler. 400 bei Project name cannot be empty, only one of ai_model_id or auto_model_type may be set, invalid auto_model_type, Invalid project icon, No fields provided for update oder einer Sperre wegen sensibler Daten ({"error": "...", "code": "..."}); 404 Project not found; 403 You don't have access to this project.
DELETE /project/:id
/api/v1/project/:id Löscht das Projekt zusammen mit seinen Unterhaltungen, Projektdateien, Anheftungen, Prompts und Freigabe-Einträgen. Nur für den Inhaber.
-
idstring in path erforderlich - Projekt-ID oder Slug.
Antwort. 204. Fehler. 404 Project not found, 403 You don't have access to this project.
POST /project/:id/pin
/api/v1/project/:id/pin Heftet ein Projekt, das Sie sehen können, an oder löst die Anheftung wieder. Pro Benutzer sind höchstens 5 Projekte angeheftet.
-
idstring in path erforderlich - Projekt-ID oder Slug.
Antwort. 200 {"message": "Project pinned", "pinned": true} oder 200 {"message": "Project unpinned", "pinned": false}.
Fehler. 400 {"error": "Maximum 5 projects can be pinned"}, 404, 403.
PATCH /project/:id/share_with_workspace
/api/v1/project/:id/share_with_workspace Teilt das Projekt mit Ihrem gesamten Workspace oder hebt diese Freigabe auf. Nur für den Inhaber, und Sie müssen zu einem Workspace gehören. Flags, die Sie weglassen, behalten ihren aktuellen Wert.
-
idstring in path erforderlich - Projekt-ID oder Slug.
-
shareboolean optional trueteilt mit dem Workspace,falsehebt die Freigabe auf. Weggelassen: Es ändert sich nichts.-
prompt_managementboolean optional - Wird nur zusammen mit
share: trueangewendet. -
file_managementboolean optional - Wird nur zusammen mit
share: trueangewendet. -
project_managementboolean optional - Wird nur zusammen mit
share: trueangewendet.
Antwort. 200 {"message": "Project shared with workspace"}, auch beim Aufheben der Freigabe.
Fehler. 403 {"error": "You don't have access to this project's share settings"}, 400 {"error": "User is not in a workspace"}, 404.
PATCH /project/:id/share_with_user
/api/v1/project/:id/share_with_user Teilt das Projekt mit einzelnen Benutzern in Ihrem Workspace. Nur für den Inhaber.
-
idstring in path erforderlich - Projekt-ID oder Slug.
-
sharesarray erforderlich - Einträge der Form
{ "user_id", "share", "prompt_management", "file_management", "project_management" }.share: truegewährt Lesezugriff,share: falseentfernt die Freigabe für den Benutzer vollständig. Ohnesharewerden nur die angegebenen Flags geändert.
{
"shares": [
{ "user_id": 240, "share": true, "prompt_management": true, "file_management": true },
{ "user_id": 251, "share": false }
]
}
Die Einträge werden der Reihe nach angewendet, und der Request bricht beim ersten fehlerhaften Eintrag ab. Bereits angewendete Einträge bleiben bestehen.
Antwort. 200 {"message": "Project sharing with users updated"}.
Fehler. 404 {"error": "User not found"}, 400 {"error": "Target user is not in the same workspace"} sowie die oben genannten Fehler zu Inhaber und Workspace.
PATCH /project/:id/share_with_team
/api/v1/project/:id/share_with_team Wie share_with_user, nur verwenden die Einträge team_id. Das Team muss zu Ihrem Workspace gehören.
-
idstring in path erforderlich - Projekt-ID oder Slug.
-
sharesarray erforderlich - Einträge der Form
{ "team_id", "share", "prompt_management", "file_management", "project_management" }.
Antwort. 200 {"message": "Project sharing with teams updated"}.
Fehler. 404 {"error": "Team not found"}, 400 {"error": "Target team is not in the same workspace"}.
POST /project/:id/file
/api/v1/project/:id/file Lädt Dateien in ein Projekt hoch. Sie müssen der Inhaber sein oder file_management besitzen. Funktioniert wie POST /file: synchron, multipart/form-data, ohne Größenbeschränkung und ohne Liste zulässiger Endungen im API-Code. Bei jeder entstandenen Datei ist project_id gesetzt.
-
idstring in path erforderlich - Projekt-ID oder Slug.
-
upload[]file in form erforderlich - Ein Part pro Datei. Für mehrere Dateien wiederholen.
Antwort. 200 mit einem Array von Datei-Objekten.
Fehler. 404 Project not found, 403 {"error": "You don't have access to this project"}, 500 {"error": "could not upload files"}.
GET /project/:id/file
/api/v1/project/:id/file Listet die Dateien eines Projekts auf. Jede ist ein Datei-Objekt mit dem zusätzlichen Feld can_delete (true, wenn Sie Projektdateien verwalten dürfen oder die Datei hochgeladen haben). Gibt es keine Vorschau, enthält preview_path ersatzweise den Wert von path.
-
idstring in path erforderlich - Projekt-ID oder Slug.
[
{
"ID": 4820,
"name": "brand-guidelines.pdf",
"path": "https://<storage-host>/<bucket>/231/Hq3...pdf",
"preview_path": "https://<storage-host>/<bucket>/231/Hq3...pdf",
"project_id": 305,
"fileType": "file_search",
"partial": false,
"can_delete": true
}
]
DELETE /project/:id/file/:fileId
/api/v1/project/:id/file/:fileId Entfernt einen Dateieintrag aus dem Projekt. Sie brauchen Lesezugriff und außerdem entweder file_management (oder das Eigentum am Projekt), oder Sie müssen die Datei selbst hochgeladen haben.
-
idstring in path erforderlich - Projekt-ID oder Slug.
-
fileIdinteger in path erforderlich - Datei-ID.
Antwort. 200 {"message": "File deleted successfully"}.
Fehler. 400 Invalid file ID, 404 Project not found, 404 {"error": "File not found in project"}, 403 {"error": "You don't have access to delete this file"}.
Wissensdatenbanken
Eine Wissensdatenbank ist ein Ordnerbaum mit Dokumenten, die für die Suche in Abschnitte zerlegt und indexiert werden. Sie ist die API-Seite von Wissensdatenbanken. Um eine Wissensdatenbank in einer Unterhaltung oder Ausführung zu nutzen, übergeben Sie knowledge_base_ids, optional mit knowledge_base_limit_node_ids, um die Suche auf bestimmte Ordner oder Dateien zu beschränken, sowie world_knowledge. IDs von Wissensdatenbanken sind immer numerisch (keine Slugs).
Zugriffsstufen (current_user_permission und access_type einer Freigabe):
| Wert | Erlaubt |
|---|---|
kb_access | Die Wissensdatenbank lesen und in Chats verwenden. |
kb_upload | Wie oben, zusätzlich Dateien hochladen. |
kb_edit | Wie oben, zusätzlich die Wissensdatenbank umbenennen, Ordner verwalten und beliebige Dateien löschen. |
none | Kein Zugriff. |
Der Inhaber hat immer kb_edit. Nur der Inhaber kann die Wissensdatenbank löschen oder ihre Freigaben ändern. Wer eine Datei hochgeladen hat, kann sie immer selbst löschen.
Das Wissensdatenbank-Objekt
{
"ID": 44,
"CreatedAt": "2026-09-10T08:30:00Z",
"UpdatedAt": "2026-09-10T08:30:00Z",
"DeletedAt": null,
"user_id": 231,
"user": { "ID": 0, "email": "", "first_name": "", "...": "zero values" },
"name": "Northwind Help Center",
"description": "Policies, onboarding and FAQs",
"color": "#10B981",
"icon": "book-open",
"document_count": 18,
"member_count": 6,
"current_user_permission": "kb_edit",
"user_shares": [
{ "user_id": 240, "user": { "ID": 240, "first_name": "Dora", "...": "..." }, "access_type": "kb_upload", "added_at": "2026-09-11T09:00:00Z" }
],
"team_shares": [
{ "team_id": 12, "team": { "ID": 12, "name": "Customer Support", "...": "..." }, "access_type": "kb_access", "added_at": "2026-09-11T09:05:00Z" }
]
}
Das Inhaberobjekt user wird nie geladen und enthält immer Nullwerte: Verwenden Sie user_id. document_count zählt Dateien, keine Ordner. member_count liefern nur GET und PUT für eine einzelne Wissensdatenbank.
POST /knowledge-bases
/api/v1/knowledge-bases Legt eine Wissensdatenbank an.
-
namestring erforderlich - Name der Wissensdatenbank.
-
iconstring erforderlich - Einer der unter Projekte aufgeführten Icon-Namen.
-
descriptionstring optional - Freitext.
-
colorstring optional - Hex-Farbe (wird nicht validiert).
Antwort. 201 mit der Wissensdatenbank, document_count: 0, member_count: 0 und leeren Freigabelisten.
Fehler. 400 {"error": "Knowledge base name is required"}, 400 {"error": "Invalid knowledge base icon"}.
GET /knowledge-bases
/api/v1/knowledge-bases Listet jede Wissensdatenbank auf, die Ihnen gehört oder auf die Sie über eine Freigabe zugreifen können. Nicht paginiert. Jeder Eintrag enthält die Felder der Wissensdatenbank sowie document_count und current_user_permission (kein member_count und keine Freigabelisten).
GET /knowledge-bases/:id
/api/v1/knowledge-bases/:id Liefert die vollständige Wissensdatenbank. Erfordert mindestens kb_access.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
Fehler. 400 Invalid knowledge base ID, 404 Knowledge base not found, 403 {"error": "You don't have access to this knowledge base"}.
PUT /knowledge-bases/:id
/api/v1/knowledge-bases/:id Ersetzt name, description, color und icon, mit demselben Body und derselben Validierung wie bei POST. Eine weggelassene description wird geleert. Erfordert kb_edit.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
-
namestring erforderlich - Name der Wissensdatenbank.
-
iconstring erforderlich - Icon-Name.
-
descriptionstring optional - Wird geleert, wenn weggelassen.
-
colorstring optional - Hex-Farbe.
Antwort. 200 mit der vollständigen Wissensdatenbank.
Fehler. Wie bei POST, dazu 403 {"error": "You are not authorized to update this knowledge base"} und 404.
DELETE /knowledge-bases/:id
/api/v1/knowledge-bases/:id Löscht die Wissensdatenbank mit allen Ordnern, Dateien, gespeicherten Objekten und Indexdaten. Nur für den Inhaber.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
Antwort. 204. Fehler. 404 Knowledge base not found, 403 {"error": "You are not authorized to delete this knowledge base"}.
PATCH /knowledge-bases/:id/share_with_user
/api/v1/knowledge-bases/:id/share_with_user Teilt eine Wissensdatenbank mit Benutzern in Ihrem Workspace. Nur für den Inhaber, und Sie müssen zu einem Workspace gehören. Wird eine Freigabe entfernt, werden die Agenten, die diese Wissensdatenbank nutzen, erneut geprüft.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
-
sharesarray erforderlich - Einträge der Form
{ "user_id", "access_type" }.access_typeistkb_access,kb_uploadoderkb_edit, um eine Stufe zu setzen (die bisherige wird ersetzt), odernull,""bzw.none, um die Freigabe zu entfernen.
{
"shares": [
{ "user_id": 240, "access_type": "kb_upload" },
{ "user_id": 251, "access_type": null }
]
}
Die Einträge werden der Reihe nach angewendet, und die Verarbeitung bricht beim ersten fehlerhaften Eintrag ab.
Antwort. 200 {"message": "Knowledge base sharing with users updated"}.
Fehler. 400 {"error": "User is not in a workspace"}, 403 {"error": "You don't have access to this knowledge base's share settings"}, 404 User not found, 400 Target user is not in the same workspace, 400 {"error": "Invalid access_type"}.
PATCH /knowledge-bases/:id/share_with_team
/api/v1/knowledge-bases/:id/share_with_team Wie share_with_user, mit team_id statt user_id.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
-
sharesarray erforderlich - Einträge der Form
{ "team_id", "access_type" }.
Antwort. 200 {"message": "Knowledge base sharing with teams updated"}.
GET /knowledge-bases/:id/folders
/api/v1/knowledge-bases/:id/folders Listet die direkten Kinder einer Ebene des Baums auf, also Ordner und Dateien. Über diesen Endpunkt fragen Sie auch den Indexierungsstatus einer Datei ab.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
-
parent_idinteger in query optional - Knoten-ID des aufzulistenden Ordners. Für die oberste Ebene weglassen (oder einen nicht numerischen Wert übergeben).
{
"folders": [
{ "ID": 501, "name": "Policies", "parent_id": null, "size": 2483112,
"CreatedAt": "2026-09-10T08:31:00Z", "UpdatedAt": "2026-09-10T08:31:00Z" }
],
"files": [
{
"ID": 502,
"name": "Northwind Refund Policy.md",
"parent_id": null,
"file_data_id": 4830,
"file_data": { "ID": 4830, "name": "Northwind Refund Policy.md", "fileType": "file_search", "...": "..." },
"size": 912334,
"download_url": "https://<storage-host>/<bucket>/231/Zp8...md",
"preview_url": "https://<storage-host>/<bucket>/231/Zp8...md",
"status": "done",
"status_progress": 100,
"can_delete": true,
"CreatedAt": "2026-09-10T08:32:00Z",
"UpdatedAt": "2026-09-10T08:33:10Z"
}
]
}
POST /knowledge-bases/:id/folders
/api/v1/knowledge-bases/:id/folders Legt einen Ordner an. Erfordert kb_edit. Namen müssen unter Geschwistern eindeutig sein, wobei Ordner und Dateien denselben Namensraum teilen.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
-
namestring erforderlich - Ordnername.
-
parent_idinteger optional - Ein Ordner in derselben Wissensdatenbank. Für die oberste Ebene weglassen oder
nullübergeben.
Antwort. 201. Die aktuelle Implementierung liefert den Ordner mit Nullwerten ("ID": 0, leerer name), obwohl er angelegt wurde. Listen Sie die Ordner mit GET /knowledge-bases/:id/folders erneut auf, um die ID des neuen Ordners zu erhalten.
Fehler. 403 {"error": "You don't have access to create folders in this knowledge base"}, 400 {"error": "Folder name is required"}, 404 {"error": "Parent folder not found"}, 400 {"error": "Folder or document with this name already exists"}.
GET /knowledge-bases/:id/folders/:folderId
/api/v1/knowledge-bases/:id/folders/:folderId Liefert einen einzelnen Ordner: ID, name, parent_id, size, CreatedAt, UpdatedAt. Erfordert kb_access.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
-
folderIdinteger in path erforderlich - Knoten-ID des Ordners.
Fehler. 404 {"error": "Folder not found"}, 403.
PATCH /knowledge-bases/:id/folders/:folderId
/api/v1/knowledge-bases/:id/folders/:folderId Benennt einen Ordner um. Ordner lassen sich nicht verschieben. Erfordert kb_edit.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
-
folderIdinteger in path erforderlich - Knoten-ID des Ordners.
-
namestring erforderlich - Neuer Name. Ein leerer Name führt zu
400 {"error": "No fields provided for update"}.
Antwort. 200 mit dem geänderten Ordner. Fehler. 400 {"error": "Folder or document with this name already exists"}.
DELETE /knowledge-bases/:id/folders/:folderId
/api/v1/knowledge-bases/:id/folders/:folderId Löscht den Ordner und alles darunter, einschließlich der gespeicherten Dateien und Indexdaten. Erfordert kb_edit.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
-
folderIdinteger in path erforderlich - Knoten-ID des Ordners.
Antwort. 204.
POST /knowledge-bases/:id/files
/api/v1/knowledge-bases/:id/files Lädt pro Request ein Dokument hoch. Erfordert kb_upload oder höher, und das Kontingent wird zuerst geprüft. Der Dateiname muss im Zielordner eindeutig sein. Der API-Code erzwingt keine Größenbeschränkung.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
-
filefile in form erforderlich - Das Dokument. Der Feldname lautet
file, nichtupload[]. Zulässige Endungen (ohne Unterscheidung von Groß- und Kleinschreibung):.txt .md .markdown .pdf .docx .xlsx .csv .png .jpg .jpeg. -
folder_idstring in form optional - Knoten-ID des Zielordners. Für die oberste Ebene weglassen.
curl -X POST https://api.stickyprompts.com/api/v1/knowledge-bases/44/files \
-H "Authorization: Bearer $STICKY_API_KEY" \
-F "file=@Northwind Refund Policy.md" \
-F "folder_id=501"import os, time, requests
BASE = "https://api.stickyprompts.com/api/v1"
H = {"Authorization": f"Bearer {os.environ['STICKY_API_KEY']}"}
with open("Northwind Refund Policy.md", "rb") as f:
node = requests.post(f"{BASE}/knowledge-bases/44/files", headers=H,
files={"file": f}, data={"folder_id": "501"}).json()
# Wait until the document is indexed before relying on it
while True:
listing = requests.get(f"{BASE}/knowledge-bases/44/folders", headers=H,
params={"parent_id": 501}).json()
status = next(x["status"] for x in listing["files"] if x["ID"] == node["ID"])
if status in ("done", "error"):
print(status)
break
time.sleep(3)import { readFile } from "node:fs/promises";
const BASE = "https://api.stickyprompts.com/api/v1";
const headers = { Authorization: `Bearer ${process.env.STICKY_API_KEY}` };
const form = new FormData();
form.append("file", new Blob([await readFile("Northwind Refund Policy.md")]), "Northwind Refund Policy.md");
form.append("folder_id", "501");
const node = await fetch(`${BASE}/knowledge-bases/44/files`, { method: "POST", headers, body: form }).then((r) => r.json());
for (;;) {
const { files } = await fetch(`${BASE}/knowledge-bases/44/folders?parent_id=501`, { headers }).then((r) => r.json());
const { status } = files.find((x) => x.ID === node.ID);
if (status === "done" || status === "error") { console.log(status); break; }
await new Promise((r) => setTimeout(r, 3000));
}Antwort. 201 mit einem Dateiknoten (gleicher Aufbau wie die Einträge in files oben) mit status: "uploading" und status_progress: 0. Upload, Textextraktion und Indexierung laufen anschließend im Hintergrund:
status | status_progress |
|---|---|
uploading | Upload-Fortschritt in Prozent |
processing | 0 |
indexing | Indexierungsfortschritt in Prozent |
done | 100 |
error | Verarbeitung fehlgeschlagen |
Fragen Sie GET /knowledge-bases/:id/folders?parent_id=<folder_id> ab, bis die Datei done meldet, bevor Sie sich bei der Suche auf sie verlassen.
Fehler. 403 {"error": "You don't have access to upload files to this knowledge base"}, 429 bei erschöpftem Kontingent, 400 {"error": "File is required"}, 400 {"error": "Invalid folder ID"}, 404 {"error": "Parent folder not found"}, 400 {"error": "File extension not allowed. Allowed extensions: .txt, .md, ..."}, 400 {"error": "Folder or document with this name already exists"}.
DELETE /knowledge-bases/:id/files/:fileId
/api/v1/knowledge-bases/:id/files/:fileId Löscht einen Dokumentknoten, die zugehörige gespeicherte Datei und ihre Indexdaten. Erfordert kb_edit, oder Sie müssen die Datei selbst hochgeladen haben.
-
idinteger in path erforderlich - ID der Wissensdatenbank.
-
fileIdinteger in path erforderlich - Die Knoten-ID aus der Ordnerliste, nicht die Datei-ID.
Antwort. 204. Fehler. 404 {"error": "File not found"}, 403 {"error": "You don't have access to delete this file"}.
Teams
Teams gehören zu einem Workspace und dienen als Ziel für Freigaben von Projekten, Wissensdatenbanken und Unterhaltungen. Die Teamrollen sind owner und member. In Listen über den gesamten Workspace bedeutet none, dass Sie nicht Mitglied des Teams sind. Die Sicht für Admins beschreibt Benutzer und Teams.
| Aktion | Erlaubt für |
|---|---|
| Ein Team erstellen | Workspace-Inhaber oder -Admin |
| Alle Teams im Workspace auflisten | Workspace-Inhaber oder -Admin |
| Die Mitglieder eines Teams sehen | Teammitglieder, Workspace-Inhaber oder -Admin |
| Ein Team umbenennen oder löschen, Mitglieder hinzufügen oder entfernen | Team-Inhaber, Workspace-Inhaber oder -Admin |
Die Rolle eines Mitglieds ändern, ein Mitglied als owner hinzufügen, einen Inhaber entfernen | Workspace-Inhaber oder -Admin |
Das Team-Objekt
{
"ID": 12,
"CreatedAt": "2026-09-05T10:00:00Z",
"UpdatedAt": "2026-09-05T10:00:00Z",
"DeletedAt": null,
"workspace_id": 17,
"workspace": { "ID": 0, "name": "", "...": "zero values" },
"name": "Marketing",
"description": "Campaigns and content",
"color": "#F472B6",
"member_count": 0
}
workspace wird nie geladen und ist immer ein Objekt mit Nullwerten. member_count ist nur in den Listen-Endpunkten aussagekräftig.
Ein Teammitglied ist ein Benutzerobjekt (ID, email, first_name, last_name, status, workspace_id und weitere Felder), ergänzt um die role des Mitglieds auf oberster Ebene.
POST /teams
/api/v1/teams Erstellt ein Team und fügt Sie als dessen owner hinzu. Nur für Workspace-Inhaber oder -Admins.
-
namestring erforderlich - Teamname.
-
descriptionstring optional - Freitext.
-
colorstring optional - Hex-Farbe (wird nicht validiert).
Antwort. 201 mit dem Team-Objekt.
Fehler. 403 {"error": "You are not authorized to create a team"}, 400 {"error": "Team name is required"}.
GET /teams
/api/v1/teams Die Teams, denen Sie angehören, jeweils mit member_count und current_user_role. Nicht paginiert. Liefert null statt [], wenn Sie keinem Team angehören.
GET /teams/all
/api/v1/teams/all Alle Teams in Ihrem Workspace, mit member_count und current_user_role (none, wenn Sie nicht Mitglied sind). Nur für Workspace-Inhaber oder -Admins. Liefert null, wenn der Workspace keine Teams hat.
Fehler. 404 {"error": "User is not a member of a workspace"}, 403 {"error": "You are not authorized to view all teams in this workspace"}.
GET /teams/:id/members
/api/v1/teams/:id/members Listet die Mitglieder eines Teams auf. Nur für Teammitglieder sowie Workspace-Inhaber und -Admins.
-
idinteger in path erforderlich - Team-ID.
Antwort. 200 mit einem Array von Teammitgliedern.
Fehler. 400 Invalid team ID, 404 {"error": "Team not found"}, 403 {"error": "You are not authorized to view the members of this team"}.
PUT /teams/:id
/api/v1/teams/:id Ersetzt name, description und color eines Teams. Weggelassene Werte für description und color werden geleert. Für den Team-Inhaber sowie Workspace-Inhaber und -Admins.
-
idinteger in path erforderlich - Team-ID.
-
namestring erforderlich - Teamname.
-
descriptionstring optional - Wird geleert, wenn weggelassen.
-
colorstring optional - Wird geleert, wenn weggelassen.
Antwort. 200 mit dem geänderten Team.
Fehler. 403 {"error": "You are not authorized to update this team"}, 400 Team name is required, 404 Team not found.
DELETE /teams/:id
/api/v1/teams/:id Löscht ein Team mit höchstens einem Mitglied. Für den Team-Inhaber sowie Workspace-Inhaber und -Admins.
-
idinteger in path erforderlich - Team-ID.
Antwort. 204. Fehler. 409 {"error": "Cannot delete a team with other members"}, 403 {"error": "You are not authorized to delete this team"}.
POST /teams/:id/members
/api/v1/teams/:id/members Fügt ein Workspace-Mitglied zu einem Team hinzu. Für den Team-Inhaber sowie Workspace-Inhaber und -Admins. Wer jemanden als owner hinzufügen will, muss Workspace-Inhaber oder -Admin sein.
-
idinteger in path erforderlich - Team-ID.
-
user_idinteger erforderlich - Ein Benutzer in Ihrem Workspace.
-
rolestring erforderlich - Senden Sie immer
memberoderowner. Über die Prüfung auf Inhaberrechte hinaus wird der Wert nicht validiert.
Antwort. 201. Der Body enthält derzeit nur role, alle Benutzerfelder haben Nullwerte. Rufen Sie GET /teams/:id/members auf, um das Mitglied wieder auszulesen.
Fehler. 403 {"error": "You are not authorized to add a team member"}, 403 beim Hinzufügen eines Inhabers ohne Admin-Rechte im Workspace, 409 {"error": "User is already a member of this team"}, 404 {"error": "User not found"}, 403 {"error": "User is not a member of this workspace"}.
PATCH /teams/:id/members/:memberUserId
/api/v1/teams/:id/members/:memberUserId Ändert die Rolle eines Mitglieds. Um role zu ändern, müssen Sie Workspace-Inhaber oder -Admin sein.
-
idinteger in path erforderlich - Team-ID.
-
memberUserIdinteger in path erforderlich - Die Benutzer-ID des Mitglieds.
-
rolestring erforderlich ownerodermember.
Antwort. 200 mit dem Teammitglied und der neuen Rolle.
Fehler. 404 {"error": "Team member not found"}, 403 {"error": "You are not authorized to update this team member"}, 403 {"error": "Updating the role of this team member requires workspace admin permissions"}.
DELETE /teams/:id/members/:memberUserId
/api/v1/teams/:id/members/:memberUserId Entfernt ein Mitglied. Für den Team-Inhaber sowie Workspace-Inhaber und -Admins. Um einen owner zu entfernen, müssen Sie Workspace-Inhaber oder -Admin sein. Sich selbst können Sie nicht entfernen.
-
idinteger in path erforderlich - Team-ID.
-
memberUserIdinteger in path erforderlich - Die Benutzer-ID des Mitglieds.
Antwort. 204.
Fehler. 403 {"error": "You cannot remove yourself from a team"}, 403 {"error": "You are not authorized to remove this team member"}, 404 Team member not found, 403 {"error": "Removing an owner requires workspace admin permissions"}.
Verwandte Seiten
- Unterhaltungen und Nachrichten - Dateien und Wissensdatenbanken an eine Nachricht anhängen.
- Modelle und Medien - Tabellenverarbeitung für eine hochgeladene Datei.
- Tool-Referenz -
list_files,get_filesowie die Tools für Projekte, Wissensdatenbanken und Teams.