Für IT-Abteilungen

Ingestion-API: Ihre Systeme befüllen den Assistenten

Ihre Systeme (Datenbank, ERP, Intranet, Automatisierungstool wie n8n oder Make) senden selbst Inhalte an die Wissensbasis eines QuickAsk-Assistenten und aktualisieren oder entfernen sie, wenn sie sich ändern. Jeder Inhalt wird über eine von Ihnen gewählte Kennung bezeichnet.

Sicherheit: was Sie wissen sollten

  • Sie senden: QuickAsk verbindet sich nie mit Ihrem Netzwerk und besitzt keinerlei Zugangsdaten bei Ihnen.
  • Keine Firewall-Freigabe und keine Installation nötig: Ein einfacher ausgehender HTTPS-Aufruf genügt.
  • Ein Schlüssel gilt nur für einen einzigen Assistenten. Einen kontoweiten Schlüssel gibt es nicht.
  • Der Schlüssel wird nur einmal bei seiner Erstellung angezeigt. QuickAsk speichert nur einen Fingerabdruck davon, wie bei einem Passwort: Niemand, auch wir nicht, kann ihn wieder auslesen.
  • Der Schlüssel dient ausschließlich dazu, die von ihm gesendeten Inhalte hinzuzufügen, zu aktualisieren, zu entfernen und aufzulisten. Er erlaubt weder das Lesen des Textes der Wissensbasis noch der Unterhaltungen.
  • Gesendete Inhalte durchlaufen dieselben Prüfungen wie eine von Hand hinzugefügte Datei: Prüfung des tatsächlichen Formats, Verarbeitung in einer isolierten Umgebung, Blockierung von Texten, die dem Assistenten Anweisungen zu geben versuchen.
  • Der Eigentümer des Assistenten kann einen Schlüssel jederzeit widerrufen; er sieht das Datum der letzten Verwendung jedes Schlüssels und ein Protokoll der letzten Aktivität (30 Tage aufbewahrt, ohne IP-Adresse und ohne Inhalt).

In 3 Schritten loslegen

  1. In QuickAsk öffnet der Eigentümer des Assistenten den Assistenten, Registerkarte „Wissen“, Abschnitt „Automatische Übermittlung aus Ihrer Software“, und klickt auf „Schlüssel erstellen“.
  2. Er übermittelt Ihnen den Schlüssel (der mit qak_ beginnt) und die daneben angezeigte Kennung des Assistenten. Bewahren Sie den Schlüssel in Ihrem Secrets-Tresor auf.
  3. Ihr System sendet seine Inhalte mit dem Header „Authorization: Bearer“, gefolgt vom Schlüssel, wie in den Beispielen unten.

Endpunkte

Basisadresse: https://www.quick-ask.app/api/v1

PUT/bots/{bot_id}/knowledge/{external_id}Erstellt oder aktualisiert den durch diese Kennung bezeichneten Inhalt. Exakt denselben Inhalt erneut zu senden, kostet nichts und ändert nichts.
DELETE/bots/{bot_id}/knowledge/{external_id}Entfernt diesen Inhalt aus der Wissensbasis des Assistenten.
GET/bots/{bot_id}/knowledge?limit=1..500&cursor=…Listet die über die API gesendeten Inhalte (Kennung, Titel, Adresse, Daten, Größe) seitenweise auf.

Die externe Kennung ist die Ihres Systems („produkt-123“, „faq:lieferung“…): 1 bis 128 Zeichen, Buchstaben, Ziffern und . _ - : ~ @, beginnend mit einem Buchstaben oder einer Ziffer.

Einen Inhalt senden

FeldBeschreibung
contentDer Text des Inhalts (JSON). Pflichtfeld, wenn keine Datei gesendet wird.
fileOder eine Datei, als multipart/form-data: PDF, Word, Excel, PowerPoint, CSV, Text oder Markdown.
titleOptional. Der im Wissen des Assistenten angezeigte Titel (standardmäßig: der Dateiname oder die Kennung).
formatOptional: „text“ (Standard) oder „markdown“, für eine Aufteilung entlang der Überschriften.
source_urlOptional. Die Ursprungsadresse des Inhalts, angezeigt als Herkunft. QuickAsk ruft sie nie auf: Eine Intranet-Adresse ist in Ordnung.
updated_atOptional. Datum der letzten Aktualisierung bei Ihnen (ISO 8601). Widersprechen sich zwei Inhalte, bevorzugt der Assistent den neueren.
curl -X PUT "https://www.quick-ask.app/api/v1/bots/$BOT_ID/knowledge/faq-delivery" \
  -H "Authorization: Bearer $QUICKASK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Delivery times",
    "format": "markdown",
    "content": "## Delivery\nOrders placed before 2 pm ship the same day.",
    "source_url": "https://intranet.example.com/faq/delivery",
    "updated_at": "2026-10-13T09:30:00Z"
  }'
curl -X PUT "https://www.quick-ask.app/api/v1/bots/$BOT_ID/knowledge/hr-handbook" \
  -H "Authorization: Bearer $QUICKASK_API_KEY" \
  -F "[email protected]" \
  -F "title=Employee handbook" \
  -F "updated_at=2026-09-01"

Antworten

  • created — 201: Der Inhalt existierte nicht und wurde hinzugefügt.
  • updated — 200: Der Inhalt hat sich geändert; nur die geänderten Teile werden neu verarbeitet.
  • unchanged — 200: Inhalt identisch mit der letzten Übermittlung, nichts wird neu verarbeitet. Sie können also bei jeder Synchronisierung alles erneut senden.
HTTP/1.1 201 Created
{
  "external_id": "faq-delivery",
  "status": "created",          // "updated" or "unchanged" on the next calls
  "title": "Delivery times",
  "document_name": "[API] Delivery times",
  "chunks": 1,
  "indexed_bytes": 58,          // 0 when nothing changed
  "source_url": "https://intranet.example.com/faq/delivery",
  "updated_at": "2026-10-13T09:30:00.000Z"
}

Entfernen und auflisten

curl -X DELETE "https://www.quick-ask.app/api/v1/bots/$BOT_ID/knowledge/faq-delivery" \
  -H "Authorization: Bearer $QUICKASK_API_KEY"
curl "https://www.quick-ask.app/api/v1/bots/$BOT_ID/knowledge?limit=100" \
  -H "Authorization: Bearer $QUICKASK_API_KEY"
# → { "items": [ { "external_id": "faq-delivery", "title": "...", "updated_at": "...",
#                  "indexed_at": "...", "size_bytes": 58, "chunks": 1, ... } ],
#     "next_cursor": null }   // pass ?cursor=<next_cursor> to get the next page

Grenzen

  • Größe: höchstens 2 MB Text pro Inhalt, 4 MB pro Datei.
  • Akzeptierte Dateien: pdf, docx, xlsx, pptx, csv, txt, md. Bilder, Audio, Video und gescannte PDFs (ohne Text) werden von der API nicht gelesen.
  • Rate: 60 Aufrufe pro Minute und Schlüssel.
  • Volumen neuer oder geänderter Inhalte pro Assistent und 24 Std.: 10 MB (Business), 25 MB (Pro), 50 MB (Agency und individuell). Unveränderte Inhalte zählen nicht.
  • Es gilt der Speicherplatz des Tarifs, wie bei einer von Hand hinzugefügten Datei.
  • Die API ist ab dem Tarif Business verfügbar.
  • Über die API gesendete Inhalte werden nicht von den Anfragen des Tarifs abgezogen.

Fehler

Ein Fehler liefert einen HTTP-Statuscode und ein JSON, dessen Feld error einen Code und eine Meldung enthält. Der Code ist stabil: Verlassen Sie sich auf ihn, nicht auf die Meldung. Wenn ein erneuter Versuch sinnvoll ist, gibt der Header Retry-After die Wartezeit in Sekunden an.

HTTP/1.1 429 Too Many Requests
Retry-After: 60
{ "error": { "code": "rate_limited", "message": "Too many requests: at most 60 per minute per key." } }
HTTP-StatusFehlercodeBedeutung
400invalid_requestFehlerhafte Anfrage (ungültiger Listenparameter, nicht lesbarer Body).
400invalid_jsonDer Body ist kein gültiges JSON.
400invalid_external_idUngültige externe Kennung.
400invalid_titleTitel leer oder zu lang (höchstens 200 Zeichen).
400invalid_source_urlUngültige Ursprungsadresse (nur http oder https).
400invalid_updated_atUngültiges Datum (Format ISO 8601 erwartet).
400invalid_formatDas Format muss „text“ oder „markdown“ sein.
400missing_contentWeder Text noch Datei in der Anfrage.
401missing_keySchlüssel fehlt im Header Authorization.
401invalid_keyUnbekannter Schlüssel.
401key_revokedSchlüssel widerrufen: Fordern Sie beim Eigentümer des Assistenten einen neuen an.
403key_not_for_this_botDieser Schlüssel gehört zu einem anderen Assistenten.
403plan_requiredDer Tarif des Kontos umfasst die API nicht.
403storage_quota_exceededDer Speicherplatz des Tarifs würde überschritten.
404not_foundKein Inhalt mit dieser Kennung.
409busyDieselbe Kennung wird gerade von einer anderen Anfrage gesendet: Versuchen Sie es in einigen Sekunden erneut.
413content_too_largeInhalt oder Datei zu groß.
413too_many_pagesDas PDF überschreitet die im Tarif erlaubte Seitenzahl.
415unsupported_media_typeDateiformat oder Anfragetyp nicht unterstützt.
422no_textKein lesbarer Text (gescanntes PDF, leere Datei).
422unreadable_fileDatei nicht lesbar oder beschädigt.
422protected_filePasswortgeschützte oder verschlüsselte Datei.
422type_mismatchDer Inhalt der Datei passt nicht zu ihrer Endung.
422content_rejectedInhalt durch die Sicherheitsprüfung blockiert: Er enthält Anweisungen an einen KI-Assistenten.
429rate_limitedZu viele Aufrufe mit diesem Schlüssel: Warten Sie die angegebene Zeit ab.
429daily_volume_exceededTagesvolumen neuer oder geänderter Inhalte für diesen Assistenten erreicht.
500internal_errorInterner Fehler: Versuchen Sie es später erneut.
503temporarily_unavailableDienst vorübergehend nicht verfügbar: Versuchen Sie es nach der angegebenen Wartezeit erneut.

Beispiel mit n8n (oder Make)

  1. Legen Sie eine Anmeldeinformation „Bearer Auth“ mit dem QuickAsk-Schlüssel an.
  2. Fügen Sie nach dem Knoten, der Ihre Daten liest (Datenbank, Tabelle, ERP…), einen Knoten „HTTP Request“ mit der Methode PUT hinzu, mit der Adresse unten und der Kennung jedes Elements am Ende.
  3. Senden Sie einen JSON-Body mit Titel, Text und, wenn möglich, Adresse und Aktualisierungsdatum des Elements.
  4. Lassen Sie etwa eine Sekunde zwischen zwei Aufrufen (Option „Batching“), um unter der Ratenbegrenzung zu bleiben. In Make wird das Modul „HTTP — Make a request“ genauso eingestellt.
{
  "method": "PUT",
  "url": "https://www.quick-ask.app/api/v1/bots/<BOT_ID>/knowledge/{{ $json.id }}",
  "authentication": "genericCredentialType",
  "genericAuthType": "httpBearerAuth",
  "sendBody": true,
  "contentType": "json",
  "specifyBody": "json",
  "jsonBody": "={{ { title: $json.name, content: $json.description, format: 'text', source_url: $json.url, updated_at: $json.updatedAt } }}",
  "options": { "batching": { "batch": { "batchSize": 1, "batchInterval": 1100 } } }
}

Empfehlungen

  • Verwenden Sie eine stabile Kennung (den Primärschlüssel Ihrer Datenbank): Nur so wird aktualisiert statt dupliziert.
  • Senden Sie das Aktualisierungsdatum: Es hilft dem Assistenten, die neueste Information zu bevorzugen.
  • Sie können bei jeder Synchronisierung Ihren gesamten Katalog erneut senden: Ein unveränderter Inhalt kostet nichts.
  • Um zu entfernen, was es bei Ihnen nicht mehr gibt, vergleichen Sie die Liste (GET) mit Ihren Daten und löschen Sie die verschwundenen Kennungen.
  • Bewahren Sie den Schlüssel serverseitig auf (nie in einer Webseite oder einer mobilen App) und widerrufen Sie ihn, sobald er nicht mehr verwendet wird.