Connecteurs API
Plutôt que de copier vos données dans une base de connaissance, vous pouvez laisser l’IA interroger votre API en direct. Vous enregistrez une connexion (URL + authentification + opérations), et chaque opération en lecture devient un outil que le modèle peut appeler dans sa réflexion, comme la recherche web ou le RAG agentique.
1. Créer une connexion
Section intitulée « 1. Créer une connexion »Au portail (Intégrations → Connecteurs API) ou via l’API. Une connexion porte :
- un nom et une URL de base (
https://…) ; - une authentification :
none,api_key(header ou query),bearer, oubasic. Le secret est chiffré au repos (AES-256-GCM, une clé dédiée par connexion) ; - des headers statiques optionnels (
auth_config.headers), envoyés sur chaque requête — typiquement une version d’API imposée par le fournisseur, ex. Notion :"auth_config": { "headers": { "Notion-Version": "2022-06-28" } }. Jamais de secret ici : ces headers ne sont pas chiffrés (et voyagent dans l’export du connecteur) ; les headersAuthorizationetCookiey sont refusés, le secret passe parcredential; - une liste d’opérations définies à la main.
curl https://api.astrolabe.chat/v1/connections \ -H "Authorization: Bearer $ASTROLABE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Mon Airtable", "base_url": "https://api.airtable.com", "auth_type": "bearer", "credential": "patXXXX.XXXX", "operations": [ { "name": "list_records", "description": "Liste les enregistrements d une table.", "method": "GET", "path": "/v0/{base_id}/{table}", "params": [ { "name": "base_id", "in": "path", "type": "string", "required": true }, { "name": "table", "in": "path", "type": "string", "required": true }, { "name": "filterByFormula", "in": "query", "type": "string" } ], "access": "read" } ] }'La réponse renvoie le slug de la connexion (identifiant stable par compte) — c’est lui qui
sert à l’activer dans une requête de chat. Le secret n’est jamais renvoyé.
Anatomie d’une opération
Section intitulée « Anatomie d’une opération »| Champ | Rôle |
|---|---|
name | nom de l’opération → suffixe de l’outil exposé au modèle (<slug>__<opération>). |
description | (optionnel) contexte d’usage injecté dans la déf d’outil — aide fortement le modèle à savoir quand/comment l’appeler. |
method | GET, POST… (une lecture peut être un POST, ex. une requête de recherche). |
path | gabarit relatif ; les {param} sont substitués depuis les arguments. |
params | liste typée. in ∈ path | query | body ; type ∈ string | integer | number | boolean ; required. |
access | read (défaut) | write. Les deux sont exécutées ; write ajoute un marqueur « modifie des données » à la déf et permet de restreindre l’accès par clé. |
examples | (optionnel) tableau JSON d’exemples d’appel ([{…args…}]) → une « bibliothèque » que le modèle peut imiter. |
Au niveau de la connexion, un champ doc_url (optionnel) pointe vers la doc de l’API : il est
ajouté au contexte des outils, et l’IA peut le lire via web_fetch si la recherche web est active.
2. Utiliser la connexion dans le chat
Section intitulée « 2. Utiliser la connexion dans le chat »Activez-la avec tools_enabled, en référençant son slug préfixé par connection: :
curl https://api.astrolabe.chat/v1/chat/completions \ -H "Authorization: Bearer $ASTROLABE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "mistral-large", "messages": [{ "role": "user", "content": "Combien d enregistrements dans la table Clients ?" }], "tools_enabled": ["connection:mon-airtable"] }'Toutes les opérations de la connexion sont alors proposées au modèle, qui choisit
lesquelles appeler. Les connecteurs coexistent avec la recherche web et le RAG agentique dans
la même réflexion : tools_enabled: ["web_search", "connection:mon-airtable"] + knowledge_base.
Activer une opération précise (moins de tokens)
Section intitulée « Activer une opération précise (moins de tokens) »Pour n’exposer qu’une opération (au lieu de toutes), suffixez le slug par : + le nom de
l’opération : tools_enabled: ["connection:mon-airtable:list_records"]. Seule cette déf d’outil est
injectée — utile pour les automatisations (Make/n8n) qui savent ce qu’elles veulent, et pour
réduire le contexte (donc le coût) sur les connecteurs riches en opérations.
3. Permissions
Section intitulée « 3. Permissions »Deux niveaux :
- Scope de clé
connections: une clé API doit porter ce scope pour utiliser le moindre connecteur (choisi à la création/édition de la clé). Sans lui, les connecteurs ne sont pas proposés au modèle. - Accès par connexion : par défaut, toutes vos clés peuvent utiliser un nouveau connecteur (toutes ses opérations, lecture comme écriture). Au portail (bouton Accès), vous restreignez l’accès à des clés précises.
Gérer les connexions (API)
Section intitulée « Gérer les connexions (API) »| Méthode | Route | Rôle |
|---|---|---|
GET | /v1/connections | liste |
POST | /v1/connections | créer |
GET | /v1/connections/{slug} | détail |
PATCH | /v1/connections/{slug} | modifier (credential omis = inchangé) |
DELETE | /v1/connections/{slug} | supprimer |
POST | /v1/connections/{slug}/sync | déclencher une synchronisation → { ok, outcome } |
Toutes ces routes exigent le scope connections. Le POST .../sync lance la synchronisation
configurée (cf. section suivante) et facture l’embedding sur la clé de l’appel — c’est la parité
API du bouton « Synchroniser » du portail (en plus de la planification automatique).
Synchroniser une connexion vers une base de connaissance
Section intitulée « Synchroniser une connexion vers une base de connaissance »Pour rendre les données d’un connecteur cherchables, la voie recommandée est de les
synchroniser dans une base de connaissance : Astrolabe aspire les
enregistrements d’une opération de liste et les enregistre comme documents de la base
(un enregistrement = un document, clé d’upsert = external_id). La recherche reste alors
unifiée sur la base — même pertinence, mêmes facettes, et surtout la recherche
sémantique — pour n’importe quel connecteur, y compris ceux dont l’API n’offre aucune
recherche texte.
Dans la modale du connecteur, section Synchronisation :
-
Opération de liste : une opération
readqui liste les enregistrements (Astrolabe pagine automatiquement en suivant le curseur de l’opération). -
Paramètres fixes (optionnel) : arguments requis par l’opération en plus de la pagination. Cas typique — une base Airtable dont la table est un paramètre (
GET /{table}) : mettez{"table":"Entreprises"}. Une synchronisation cible une source ; pour plusieurs tables, créez une config (ou un connecteur) par table. -
Base cible : le
slugde la base de connaissance qui reçoit les documents. -
Correspondance des champs (
map) : comment transformer un enregistrement en document. Cliquez Détecter pour pré-remplir identifiant / titre / date / lien / version à partir d’un échantillon de l’opération (ajustez ensuite ; les facettes restent à définir car elles dépendent de votre base). Chaque champ est un nom de champ (top-level, chemin pointé, oufields.Xfaçon Airtable) ou un gabarit{champ}composant plusieurs champs.external_id(requis) — l’identifiant stable de l’enregistrement (clé d’upsert) ;title(requis) — le titre du document ;text(optionnel) — le contenu indexé ; par défaut, tous les champs de l’enregistrement sont sérialisés en lignes « Clé : valeur » (bon pour le sémantique) ;date(optionnel) — la date métier du document (doc_date) ;url(optionnel) — un lien vers l’enregistrement, ex.https://airtable.com/appXXX/{id};facets(optionnel) — une correspondanceclé de facette → champ, pour filtrer ensuite ;version(optionnel) — un champ de date de modification (ex.updated_at) : un document n’est ré-indexé que si cette valeur change → synchronisations incrémentales peu coûteuses, insensibles aux champs volatils (liens signés, etc.). Sinon, la détection se base sur le contenu.
-
Découpage :
simple(déterministe, gratuit — bon défaut pour des enregistrements courts, 1 fiche ≈ 1 document) ouai(un modèle re-segmente le document selon l’intention de la base et remplit les facettes — utile pour des documents longs ou quand la base a des facettes à extraire). En modeai, choisissez le modèle de découpage et la clé qui porte la consommation (par défaut : la clé du compte). L’embedding, lui, est toujours facturé sur cette clé. -
Fréquence :
manuelle(bouton uniquement) ou automatique — quotidienne, hebdomadaire ou mensuelle. Astrolabe resynchronise alors tout seul à cette cadence (vous pouvez toujours lancer une sync à la main entre deux).
Cliquez Synchroniser : Astrolabe reflète l’état de la source dans la base (vraie synchronisation miroir) :
- ajouts / modifications → (ré)indexés par
external_id. Un document n’est ré-embeddé que si son contenu a changé (empreinte) → les relances sont peu coûteuses ; - suppressions → les documents de ce connecteur disparus de la source sont supprimés de la base (réconciliation). Garde-fou : si la source ne renvoie aucun enregistrement (auth cassée, mauvaise config), rien n’est supprimé — le miroir n’est jamais vidé par erreur.
Seuls les documents issus de ce connecteur sont concernés : vos documents ajoutés à la main ou synchronisés depuis une autre source ne sont jamais touchés. La synchronisation est gratuite hormis l’embedding des documents (re)indexés (facturé sur la clé choisie).
// exemple de config `sync` (champ de la connexion, via l'API ou pré-rempli au portail){ "operation": "list_records", "args": { "table": "Entreprises" }, "target_kb": "crm-airtable", "map": { "external_id": "id", "title": "fields.Nom", "date": "fields.Créé le", "url": "https://airtable.com/appXXX/{id}", "facets": { "ville": "fields.Ville", "statut": "fields.Statut" } }, "chunking": "ai", // "simple" (défaut) ou "ai" "chunk_model": "mistral-large", // (mode ai) modèle de découpage "key": "<token de clé>", // (optionnel) clé portant la conso ; défaut = clé du compte "schedule": "daily" // "manual" (défaut) | "daily" | "weekly" | "monthly"}Fraîcheur : une synchronisation planifiée (
schedule) se rafraîchit une fois par jour / semaine / mois. Pour une donnée qui doit être à la seconde, préférez le connecteur comme outil de l’agent (interrogation en direct).
Exporter / importer une connexion
Section intitulée « Exporter / importer une connexion »Une configuration de connecteur est portable : vous pouvez l’exporter pour la partager (avec un collègue, entre deux comptes, ou pour la versionner) puis la réimporter ailleurs.
- Exporter : sur la carte d’un connecteur, le bouton Exporter télécharge un fichier
<slug>.connection.json. Il contient l’URL de base, le type d’auth, les opérations, la description, le schéma et la configuration de recherche, mais jamais le secret (clé/token). Côté API, un simpleGET /v1/connections/{slug}renvoie la même configuration (le secret n’est jamais exposé). - Importer : le bouton Importer (en haut de la section) lit un fichier
.jsonet pré-remplit la modale de création. Comme le secret n’est jamais inclus dans un export, vous ressaisissez votre clé avant de créer le connecteur. Côté API, postez le fichier surPOST /v1/connectionsen ajoutant le champcredential.
Le format tolère aussi une configuration écrite à la main : seul
base_urlest obligatoire.
À savoir
Section intitulée « À savoir »- Non-streaming : comme tout mode agentique, la réponse arrive en une fois (
stream: trueignoré). - Gratuit : l’appel à votre API n’est pas facturé en plus (seuls les tokens du modèle le sont).
- Sécurité : les réponses de votre API sont traitées comme des données, jamais comme des instructions. Les URL privées/loopback sont bloquées (garde SSRF) et les réponses sont bornées.
- Souveraineté : une connexion vers votre API hébergée en UE garde les données dans un pipeline européen. Router vers un modèle cloud reste soumis à l’opt-in habituel.