Pour les services informatiques

API d'ingestion : vos systèmes alimentent l'assistant

Vos systèmes (base de données, ERP, intranet, outil d'automatisation comme n8n ou Make) envoient eux-mêmes des contenus à la base de connaissances d'un assistant QuickAsk, et les mettent à jour ou les retirent quand ils changent. Chaque contenu est désigné par un identifiant que vous choisissez.

Sécurité : ce que vous devez savoir

  • C'est vous qui envoyez : QuickAsk ne se connecte jamais à votre réseau et ne détient aucun identifiant chez vous.
  • Aucune ouverture de pare-feu ni installation n'est nécessaire : un simple appel HTTPS sortant suffit.
  • Une clé ne vaut que pour un seul assistant. Il n'existe pas de clé de compte global.
  • La clé est affichée une seule fois à sa création. QuickAsk n'en conserve qu'une empreinte, comme un mot de passe : personne, chez nous non plus, ne peut la relire.
  • La clé sert uniquement à ajouter, mettre à jour, retirer et lister les contenus qu'elle a envoyés. Elle ne permet de lire ni le texte de la base, ni les conversations.
  • Les contenus envoyés passent les mêmes contrôles qu'un fichier ajouté à la main : vérification du format réel, lecture dans un environnement isolé, blocage des textes qui tentent de donner des instructions à l'assistant.
  • Le propriétaire de l'assistant peut révoquer une clé à tout moment ; il voit la date de dernière utilisation de chaque clé et un journal de l'activité récente (gardé 30 jours, sans adresse IP ni contenu).

Démarrer en 3 étapes

  1. Dans QuickAsk, le propriétaire de l'assistant ouvre l'assistant, onglet « Connaissances », section « Envoi automatique depuis vos logiciels », et clique sur « Créer une clé ».
  2. Il vous transmet la clé (qui commence par qak_) et l'identifiant de l'assistant affiché à côté. Rangez la clé dans votre coffre de secrets.
  3. Votre système envoie ses contenus avec l'en-tête « Authorization: Bearer » suivi de la clé, comme dans les exemples ci-dessous.

Points d'accès

Adresse de base : https://www.quick-ask.app/api/v1

PUT/bots/{bot_id}/knowledge/{external_id}Crée ou met à jour le contenu désigné par cet identifiant. Renvoyer exactement le même contenu ne coûte rien et ne change rien.
DELETE/bots/{bot_id}/knowledge/{external_id}Retire ce contenu de la base de l'assistant.
GET/bots/{bot_id}/knowledge?limit=1..500&cursor=…Liste les contenus envoyés par l'API (identifiant, titre, adresse, dates, taille), page par page.

L'identifiant externe est celui de votre système (« produit-123 », « faq:livraison »…) : 1 à 128 caractères, lettres, chiffres et . _ - : ~ @, en commençant par une lettre ou un chiffre.

Envoyer un contenu

ChampDescription
contentLe texte du contenu (JSON). Obligatoire si aucun fichier n'est envoyé.
fileOu un fichier, en multipart/form-data : PDF, Word, Excel, PowerPoint, CSV, texte ou Markdown.
titleFacultatif. Le titre affiché dans les connaissances de l'assistant (par défaut : le nom du fichier ou l'identifiant).
formatFacultatif : « text » (par défaut) ou « markdown », pour un découpage qui suit les titres.
source_urlFacultatif. L'adresse d'origine du contenu, montrée comme provenance. QuickAsk ne la visite jamais : une adresse d'intranet convient.
updated_atFacultatif. Date de dernière mise à jour chez vous (ISO 8601). Quand deux contenus se contredisent, l'assistant privilégie le plus récent.
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"

Réponses

  • created — 201 : le contenu n'existait pas, il est ajouté.
  • updated — 200 : le contenu a changé ; seules les parties modifiées sont recalculées.
  • unchanged — 200 : contenu identique au dernier envoi, rien n'est recalculé. Vous pouvez donc tout renvoyer à chaque synchronisation.
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"
}

Retirer et lister

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

Limites

  • Taille : 2 Mo de texte au plus par contenu, 4 Mo par fichier.
  • Fichiers acceptés : pdf, docx, xlsx, pptx, csv, txt, md. Les images, l'audio, la vidéo et les PDF numérisés (sans texte) ne sont pas lus par l'API.
  • Débit : 60 appels par minute et par clé.
  • Volume de contenus nouveaux ou modifiés par assistant et par 24 h : 10 Mo (Business), 25 Mo (Pro), 50 Mo (Agency et sur mesure). Les contenus inchangés ne comptent pas.
  • L'espace de stockage de l'offre s'applique, comme pour un fichier ajouté à la main.
  • L'API est disponible à partir de l'offre Business.
  • Les contenus envoyés par l'API ne sont pas décomptés des demandes de l'offre.

Erreurs

Une erreur renvoie un code HTTP et un JSON dont le champ error contient un code et un message. Le code est stable : appuyez-vous dessus, pas sur le message. Quand réessayer a un sens, l'en-tête Retry-After indique le délai en secondes.

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." } }
HTTPCodeSignification
400invalid_requestRequête mal formée (paramètre de liste invalide, corps illisible).
400invalid_jsonLe corps n'est pas un JSON valide.
400invalid_external_idIdentifiant externe invalide.
400invalid_titleTitre vide ou trop long (200 caractères au plus).
400invalid_source_urlAdresse d'origine invalide (http ou https uniquement).
400invalid_updated_atDate invalide (format ISO 8601 attendu).
400invalid_formatLe format doit être « text » ou « markdown ».
400missing_contentNi texte ni fichier dans la requête.
401missing_keyClé absente de l'en-tête Authorization.
401invalid_keyClé inconnue.
401key_revokedClé révoquée : demandez-en une nouvelle au propriétaire de l'assistant.
403key_not_for_this_botCette clé appartient à un autre assistant.
403plan_requiredL'offre du compte ne comprend pas l'API.
403storage_quota_exceededL'espace de stockage de l'offre serait dépassé.
404not_foundAucun contenu avec cet identifiant.
409busyLe même identifiant est en cours d'envoi par une autre requête : réessayez dans quelques secondes.
413content_too_largeContenu ou fichier trop volumineux.
413too_many_pagesLe PDF dépasse le nombre de pages autorisé par l'offre.
415unsupported_media_typeFormat de fichier ou type de requête non pris en charge.
422no_textAucun texte lisible (PDF numérisé, fichier vide).
422unreadable_fileFichier illisible ou endommagé.
422protected_fileFichier protégé par mot de passe ou chiffré.
422type_mismatchLe contenu du fichier ne correspond pas à son extension.
422content_rejectedContenu bloqué par le contrôle de sécurité : il contient des instructions adressées à un assistant IA.
429rate_limitedTrop d'appels avec cette clé : attendez le délai indiqué.
429daily_volume_exceededVolume quotidien de contenus nouveaux ou modifiés atteint pour cet assistant.
500internal_errorErreur interne : réessayez plus tard.
503temporarily_unavailableService momentanément indisponible : réessayez après le délai indiqué.

Exemple avec n8n (ou Make)

  1. Créez un identifiant « Bearer Auth » contenant la clé QuickAsk.
  2. Après le nœud qui lit vos données (base, tableur, ERP…), ajoutez un nœud « HTTP Request » en méthode PUT, avec l'adresse ci-dessous et l'identifiant de chaque élément à la fin.
  3. Envoyez un corps JSON avec le titre, le texte et, si possible, l'adresse et la date de mise à jour de l'élément.
  4. Laissez environ une seconde entre deux appels (option « Batching ») pour rester sous la limite de débit. Avec Make, le module « HTTP — Make a request » se règle de la même façon.
{
  "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 } } }
}

Bonnes pratiques

  • Utilisez un identifiant stable (la clé primaire de votre base) : c'est lui qui permet la mise à jour plutôt qu'un doublon.
  • Envoyez la date de mise à jour : elle aide l'assistant à préférer l'information la plus récente.
  • Vous pouvez renvoyer tout votre catalogue à chaque synchronisation : un contenu inchangé ne coûte rien.
  • Pour retirer ce qui n'existe plus chez vous, comparez la liste (GET) à vos données et supprimez les identifiants disparus.
  • Gardez la clé côté serveur (jamais dans une page web ni une application mobile) et révoquez-la dès qu'elle n'est plus utilisée.