Français
Airtable
Cherche, crée, complète et commente les lignes d’une base Airtable, et y dépose les pièces jointes (du mail ou ajoutées par une étape).
Le nœud Airtable cherche, crée, complète et commente les lignes d’une base Airtable, et dépose des fichiers dans un champ « pièces jointes ». Servez-vous-en pour tenir un registre de dossiers au diapason de votre boîte mail : une ligne par demande, complétée au fil des mails, sans doublon.
Il travaille avec un jeton d’accès personnel enregistré une fois dans Connexions. Voir Airtable pour créer la connexion et choisir les droits. Pour démarrer un workflow quand une ligne change, utilisez le déclencheur Ligne Airtable modifiée. Pour des données qui ne vivent que dans Mankomail, les tables intégrées sont plus simples.
La base, la table, la vue et les champs se choisissent dans des listes chargées depuis votre compte Airtable. Le workflow enregistre leurs identifiants (app…, tbl…, fld…, viw…) : renommer une table ou une colonne dans Airtable ne le casse pas. Changer de base vide la table, et changer de table vide les champs qui en dépendent.
En bref
- Type :
airtable.api· version 1 - Catégorie : Données
- Nature : Étape — s’exécute pendant une exécution
- Effet : Écrit à l’extérieur (
external_write) — écrit hors de Mankomail ; décrit au lieu d’être fait pendant un essai - Exige un mail porteur : Non
- Connexion : Airtable
- Entrées :
main - Sorties :
main
Connexion
Ce nœud exige une connexion Airtable.
Paramètres
connection
Connexion Airtable — La connexion Airtable à employer. Elle se crée une fois dans Connexions ; sa clé n’apparaît jamais dans le workflow.
- Type : Connexion (
credential) - Requis : Oui
- Défaut :
""(vide)
resource
Ressource
- Type : Un choix (
options) - Requis : Oui
- Défaut :
record - Options :
record— Enregistrement : Une ligne d’une table : la chercher, la lire, la créer, la compléter, la commenter.attachment— Pièce jointe : Déposer une pièce jointe du mail dans un champ « pièces jointes », ou lister celles d’un enregistrement.base— Base : Les bases accessibles, et le schéma d’une base (tables, champs, vues).
recordOperation
Opération
- Type : Un choix (
options) - Requis : Oui
- Défaut :
search - Options :
search— Rechercher : Les lignes qui correspondent à un filtre, une vue, un tri.get— Lire un enregistrement : Par son identifiantrec…. Introuvable n’est pas une erreur :foundvaut faux.create— Créer : Ajoute une ligne. ⚠️ Une nouvelle tentative de l’étape en ajoute une seconde : préférez « Créer ou mettre à jour ».upsert— Créer ou mettre à jour : Rapproche sur un champ clé : met à jour si la ligne existe, la crée sinon. La façon propre de rendre un workflow sûr face aux nouvelles tentatives.update— Mettre à jour : Modifie une ligne connue par son identifiant.delete— Supprimer : Envoie la ligne à la corbeille de la base.comment— Commenter : Ajoute un commentaire sur la ligne.@[usrXXXX]mentionne un collaborateur.
- Affiché quand :
resourcevautrecord
attachmentOperation
Opération
- Type : Un choix (
options) - Requis : Oui
- Défaut :
upload - Options :
upload— Déposer les pièces jointes : Celles du mail et les fichiers ajoutés par une étape précédente. Les octets partent directement chez Airtable : le document n’est jamais exposé sur une URL publique.list— Lister celles d’un enregistrement : Nom, taille, type et lien de téléchargement. ⚠️ Les liens expirent au bout de deux heures.download— Récupérer celles d’un enregistrement en pièces jointes : Rapatrie les fichiers dans les pièces jointes de l’exécution : un « Composer un mail » peut ensuite les joindre par leur position.
- Affiché quand :
resourcevautattachment
maxDownloadMb
Taille maximale par fichier (Mo)
- Type : Nombre (
number) - Requis : Non
- Défaut :
10 - Nombre entier, de 1 à 10
- Affiché quand :
resourcevautattachmentetattachmentOperationvautdownload
baseOperation
Opération
- Type : Un choix (
options) - Requis : Oui
- Défaut :
schema - Options :
schema— Lire le schéma d’une base : Ses tables, leurs champs et leurs vues, avec les identifiantstbl…,fld…,viw….list— Lister les bases : Celles auxquelles le jeton a accès, avec leur niveau de droit.
- Affiché quand :
resourcevautbase
base
Base — La base Airtable. Le mode « URL » accepte une adresse airtable.com/appXXXX/….
- Type : Ressource distante (
resourceLocator) - Requis : Oui
- Façons de choisir : dans une liste, saisir un identifiant, coller une URL (
airtable.base) - Listé avec la connexion de :
connection - Affiché quand :
resourcevautrecordouresourcevautattachmentou (resourcevautbaseetbaseOperationvautschema)
table
Table
- Type : Ressource distante (
resourceLocator) - Requis : Oui
- Façons de choisir : dans une liste, saisir un identifiant, coller une URL (
airtable.table) - Listé à l’intérieur de :
base - Listé avec la connexion de :
connection - Affiché quand :
resourcevautrecordouresourcevautattachment
view
Vue — Facultative : restreint la recherche aux lignes visibles dans cette vue. ⚠️ Les champs masqués sont quand même renvoyés.
- Type : Ressource distante (
resourceLocator) - Requis : Non
- Façons de choisir : dans une liste, saisir un identifiant, coller une URL (
airtable.view) - Listé à l’intérieur de :
table - Listé avec la connexion de :
connection - Affiché quand :
resourcevautrecordetrecordOperationvautsearch
filterMode
Filtre
- Type : Un choix (
options) - Requis : Non
- Défaut :
conditions - Options :
conditions— Conditions : Assemblées en formule Airtable, avec l’échappement qui va bien.formula— Formule Airtable : Pour ce que les conditions n’expriment pas. À vous l’échappement des valeurs.none— Aucun : Toutes les lignes (de la vue choisie, le cas échéant).
- Affiché quand :
resourcevautrecordetrecordOperationvautsearch
conditions
Conditions — Le champ se désigne par son nom ou par son identifiant fld…. Les valeurs sont échappées : un objet de mail ne peut pas devenir une formule.
- Type : Liste d’éléments (
collection) - Requis : Non
- Au plus 10 éléments
- Chaque élément a :
field— Champ- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 200 caractères au plus
- Exemple :
Référence dossier
- Type : Texte (
operator— Opérateur- Type : Un choix (
options) - Requis : Non
- Défaut :
equals - Options :
equals— est égal ànotEquals— est différent decontains— contientisEmpty— est videisNotEmpty— n’est pas videgreaterThan— est supérieur àlessThan— est inférieur àbefore— est avant la dateafter— est après la dateolderThanDays— date de plus de (jours)newerThanDays— date de moins de (jours)
- Type : Un choix (
value— Valeur. Ignorée par « est vide » et « n’est pas vide ». Une date s’écrit2026-09-22.- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 500 caractères au plus
- Type : Texte (
- Affiché quand :
resourcevautrecordetrecordOperationvautsearchetfilterModevautconditions
filterCombine
Combinaison
- Type : Un choix (
options) - Requis : Non
- Défaut :
all - Options :
all— Toutes les conditionsany— Au moins une condition
- Affiché quand :
resourcevautrecordetrecordOperationvautsearchetfilterModevautconditions
formula
Formule Airtable — filterByFormula, tel qu’Airtable l’écrit. Échappez vous-même les valeurs venues d’un mail.
- Type : Texte long (
text) - Requis : Non
- Défaut :
""(vide) - 8000 caractères au plus
- Exemple :
{Référence} = "2026-0412" - Affiché quand :
resourcevautrecordetrecordOperationvautsearchetfilterModevautformula - Expressions :
{{ }}accepté
sortField
Trier par — Facultatif. Sans tri ni vue, l’ordre des lignes rendues par Airtable est arbitraire.
- Type : Ressource distante (
resourceLocator) - Requis : Non
- Façons de choisir : dans une liste, saisir un identifiant (
airtable.field) - Listé à l’intérieur de :
table - Listé avec la connexion de :
connection - Affiché quand :
resourcevautrecordetrecordOperationvautsearch
sortDirection
Sens du tri
- Type : Un choix (
options) - Requis : Non
- Défaut :
asc - Options :
asc— Croissantdesc— Décroissant
- Affiché quand :
resourcevautrecordetrecordOperationvautsearch
fields
Champs à renvoyer — Noms ou identifiants séparés par des virgules. Vide = tous. En nommer trois au lieu de quarante allège la sortie et les expressions qui la lisent.
- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 2000 caractères au plus
- Affiché quand :
resourcevautrecordetrecordOperationvaut l’une desearch,get - Expressions :
{{ }}accepté
limit
Nombre maximum
- Type : Nombre (
number) - Requis : Non
- Défaut :
50 - Nombre entier, de 1 à 1000
- Affiché quand :
resourcevautrecordetrecordOperationvautsearch
recordId
Enregistrement — L’identifiant rec…, tel qu’une recherche le rend dans data. Plusieurs identifiants séparés par des virgules sont acceptés pour la suppression et la mise à jour.
- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 2000 caractères au plus
- Exemple :
{{ data.api_1.recordId }} - Affiché quand : (
resourcevautrecordetrecordOperationvaut l’une deget,update,delete,comment) ouresourcevautattachment - Expressions :
{{ }}accepté
values
Champs — Le nom (ou l’identifiant fld…) du champ, et sa valeur. Les valeurs acceptent des expressions {{ }} : {{ email.subject }}.
- Type : Paires clé / valeur (
keyValue) - Requis : Non
- Affiché quand :
resourcevautrecordetrecordOperationvaut l’une decreate,update,upsert - Expressions :
{{ }}accepté
fieldsJson
Champs en JSON (avancé) — Pour les valeurs qui ne sont pas du texte : nombres, cases à cocher, listes, liens vers d’autres tables. Un objet = un enregistrement ; un tableau d’objets = plusieurs, envoyés par lots de 10. Fusionné par-dessus les champs ci-dessus.
- Type : Texte long (
text) - Requis : Non
- Défaut :
""(vide) - 20000 caractères au plus
- Exemple :
{ "Montant": 1200, "Urgent": true, "Dossier": ["rec123"] } - Affiché quand :
resourcevautrecordetrecordOperationvaut l’une decreate,update,upsert - Expressions :
{{ }}accepté
mergeField
Champ de rapprochement — La clé métier : référence de dossier, e-mail, Message-ID. ⚠️ Si plusieurs lignes portent la même valeur, Airtable refuse la requête — la clé doit être unique.
- Type : Ressource distante (
resourceLocator) - Requis : Oui
- Façons de choisir : dans une liste, saisir un identifiant (
airtable.mergeField) - Listé à l’intérieur de :
table - Listé avec la connexion de :
connection - Affiché quand :
resourcevautrecordetrecordOperationvautupsert
extraMergeFields
Champs de rapprochement en plus — Facultatif, deux au plus (Airtable en accepte trois en tout), séparés par des virgules.
- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 400 caractères au plus
- Affiché quand :
resourcevautrecordetrecordOperationvautupsert - Expressions :
{{ }}accepté
typecast
Convertir automatiquement les valeurs — ⚠️ Airtable crée alors les options de liste manquantes et les enregistrements liés absents. Indispensable pour mapper une sortie d’IA sur une liste de choix, dangereux sur une base bien tenue : une faute de frappe devient une nouvelle option.
- Type : Oui / non (
boolean) - Requis : Non
- Défaut :
false - Affiché quand :
resourcevautrecordetrecordOperationvaut l’une decreate,update,upsert
clearUnspecified
Vider les champs non fournis — ⚠️ Remplace l’enregistrement entier (PUT) : tout champ absent ci-dessus est vidé. Décoché, seuls les champs fournis changent (PATCH).
- Type : Oui / non (
boolean) - Requis : Non
- Défaut :
false - Affiché quand :
resourcevautrecordetrecordOperationvautupdate
commentText
Commentaire — Accepte des expressions {{ }}. @[usrXXXXXXXXXXXXXX] mentionne un collaborateur Airtable et le notifie.
- Type : Texte long (
text) - Requis : Non
- Défaut :
""(vide) - 10000 caractères au plus
- Affiché quand :
resourcevautrecordetrecordOperationvautcomment - Expressions :
{{ }}accepté
attachmentField
Champ « pièces jointes » — Seuls les champs de type « pièces jointes » sont proposés. Le dépôt ajoute : les pièces déjà présentes sont conservées.
- Type : Ressource distante (
resourceLocator) - Requis : Oui
- Façons de choisir : dans une liste, saisir un identifiant (
airtable.attachmentField) - Listé à l’intérieur de :
table - Listé avec la connexion de :
connection - Affiché quand :
resourcevautattachment
attachmentSelect
Pièces jointes à déposer
- Type : Un choix (
options) - Requis : Non
- Défaut :
all - Options :
all— Toutes : Celles du mail, puis les fichiers ajoutés par les étapes précédentes.first— La première seulementpositions— Celles que je désigne : Par leur position, telle que « Lire les pièces jointes » la rend.
- Affiché quand :
resourcevautattachmentetattachmentOperationvautupload
attachmentPositions
Positions — Séparées par des virgules : 1,3.
- Type : Texte (
string) - Requis : Non
- Défaut :
""(vide) - 200 caractères au plus
- Affiché quand :
resourcevautattachmentetattachmentOperationvautuploadetattachmentSelectvautpositions - Expressions :
{{ }}accepté
includeInline
Inclure les images intégrées — Décoché, les logos de signature et autres images cid: sont ignorés — c’est presque toujours ce qu’on veut.
- Type : Oui / non (
boolean) - Requis : Non
- Défaut :
false - Affiché quand :
resourcevautattachmentetattachmentOperationvautupload
Sorties
main— Empruntée une fois l’opération Airtable réussie. Une réponse d’erreur d’Airtable fait échouer l’étape à la place (sauf pour Lire un enregistrement et la liste ou la récupération des pièces jointes, où un enregistrement absent donnefound: false).
Données produites
Ce que ce nœud ajoute aux données de l’exécution, et comment le lire dans une expression. <step> désigne la clé de l’étape : le nom du nœud ramené à un identifiant (voir Données et expressions).
{{ data.<step>.records }}—array of { id, createdTime, fields }. Rechercher, Créer, Mettre à jour, Créer ou mettre à jour : les enregistrements rendus par Airtable.idest l’identifiantrec…,fieldsles valeurs des champs par nom de champ, telles qu’Airtable les rend (Airtable omet les valeurs vides).{{ data.<step>.recordId }}—string. L’identifiantrec…du premier enregistrement concerné : la première ligne trouvée (Rechercher), l’enregistrement lu (Lire), le premier enregistrement écrit (Créer, Mettre à jour, Créer ou mettre à jour), ou l’enregistrement visé (Commenter, opérations sur les pièces jointes). Vide s’il n’y en a pas.{{ data.<step>.fields }}—object. Rechercher, Lire un enregistrement, Créer ou mettre à jour : les champs du premier enregistrement, pour que{{ data.<step>.fields.Responsable }}fonctionne sans indexer de liste.{{ data.<step>.found }}—boolean. Rechercher : true quand au moins une ligne correspond. Lire un enregistrement et la liste ou la récupération des pièces jointes : true quand l’enregistrement a pu être lu.{{ data.<step>.count }}—number. Le nombre d’éléments concernés : lignes trouvées, enregistrements écrits ou supprimés, bases, tables, pièces déposées, listées ou récupérées.{{ data.<step>.truncated }}—boolean. Rechercher et Lister les bases : true quand il existait plus d’éléments que la borne ne le permettait.{{ data.<step>.record }}—{ id, createdTime, fields } or null. Lire un enregistrement seulement : l’enregistrement lu, null s’il n’a pas été trouvé.{{ data.<step>.recordIds }}—array of string. Créer et Mettre à jour : les identifiants des enregistrements écrits (pour Mettre à jour, ceux visés).{{ data.<step>.warnings }}—array of string. Créer, Mettre à jour, Créer ou mettre à jour : les raisons données par Airtable quand il n’a accepté l’écriture qu’en partie (par exemple des pièces jointes qu’il n’a pas pu récupérer). Vide dans le cas normal.{{ data.<step>.cleared }}—boolean. Mettre à jour seulement : true quand Vider les champs non fournis était coché, donc que l’enregistrement entier a été remplacé.{{ data.<step>.created }}—boolean. Créer ou mettre à jour seulement : true quand au moins un enregistrement a été créé plutôt que mis à jour. Toujours false en essai.{{ data.<step>.createdIds }}—array of string. Créer ou mettre à jour seulement : les identifiants des enregistrements créés.{{ data.<step>.updatedIds }}—array of string. Créer ou mettre à jour seulement : les identifiants des enregistrements existants mis à jour.{{ data.<step>.createdCount }}—number. Créer ou mettre à jour seulement : le nombre d’enregistrements créés.{{ data.<step>.updatedCount }}—number. Créer ou mettre à jour seulement : le nombre d’enregistrements mis à jour.{{ data.<step>.mergeFields }}—array of string. Créer ou mettre à jour seulement : les champs de rapprochement réellement employés (de 1 à 3).{{ data.<step>.deletedIds }}—array of string. Supprimer seulement : les identifiants des enregistrements supprimés (en essai, ceux qui l’auraient été).{{ data.<step>.commentId }}—string. Commenter seulement : l’identifiant du commentaire créé, vide en essai.{{ data.<step>.text }}—string. Commenter seulement : le texte du commentaire envoyé.{{ data.<step>.createdTime }}—string. Commenter seulement : l’heure de création du commentaire, vide en essai.{{ data.<step>.bases }}—array of { id, name, permissionLevel }. Lister les bases seulement : les bases accessibles au jeton.{{ data.<step>.baseId }}—string. Lire le schéma d’une base seulement : l’identifiantapp…de la base lue.{{ data.<step>.tables }}—array of { id, name, primaryFieldId, fields, views }. Lire le schéma d’une base seulement : les tables de la base, chacune avecfields(tableau de{ id, name, type }) etviews(tableau de{ id, name, type }).{{ data.<step>.field }}—string. Déposer les pièces jointes seulement : le champ « pièces jointes » alimenté.{{ data.<step>.uploaded }}—array of { filename, size, type, origin, addedByNodeId? }. Déposer les pièces jointes seulement : les fichiers envoyés.originvautemail(une pièce du mail déclencheur) ouadded(un fichier ajouté par une étape précédente, dont l’identifiant de nœud est dansaddedByNodeId).{{ data.<step>.skipped }}—array. Déposer les pièces jointes : les fichiers écartés parce qu’ils dépassent 5 Mo, sous la forme{ filename, size }. Récupérer les pièces jointes : les fichiers écartés, sous la forme{ field, id, filename, size, type, url, reason },reasonvalanttoo_largeoutoo_many.{{ data.<step>.skippedCount }}—number. Déposer les pièces jointes seulement : le nombre de fichiers écartés.{{ data.<step>.attachments }}—array of { field, id, filename, size, type, url }. Lister celles d’un enregistrement : les pièces jointes de l’enregistrement. Récupérer en pièces jointes : les fichiers récupérés, avec en plusattachmentPosition(leur position dans les pièces jointes de l’exécution) etdeduplicated.{{ data.<step>.urlExpiresInMinutes }}—number. Lister celles d’un enregistrement seulement : la durée de validité des liensurl, toujours 120.{{ data.<step>.positions }}—array of number. Récupérer en pièces jointes seulement : les positions des fichiers récupérés dans les pièces jointes de l’exécution, prêtes pour une étape Rédiger.{{ data.<step>.simulated }}—boolean. true quand une écriture a été décrite au lieu d’être faite (essai). Les lectures ne sont jamais simulées.{{ data.<step>.summary }}—string. Le résumé d’une ligne dans la langue du membre, par exemple « 1 créé, 0 mis à jour. » (avecsummaryKeyetsummaryParams).
Opérations
Le nœud demande d’abord une Ressource (resource), puis l’opération propre à cette ressource.
Enregistrement (resource: record, opération dans recordOperation)
- Rechercher (
search, le défaut). Liste les lignes de Table (table) qui passent le filtre, jusqu’au Nombre maximum (limit, de 1 à 1 000, 50 par défaut). Filtre (filterMode) vaut Conditions (conditions: jusqu’à 10 lignes champ, opérateur, valeur, combinées par CombinaisonfilterCombine, toutes ou au moins une), Formule Airtable (formula, envoyée commefilterByFormula), ou Aucun. Vue (view) restreint aux lignes visibles dans cette vue ; Trier par (sortField) et Sens du tri (sortDirection) ordonnent le résultat ; Champs à renvoyer (fields, séparés par des virgules) limite les colonnes. AppelleGET /v0/{base}/{table}, ouPOST …/listRecordsavec les mêmes paramètres quand la requête devient longue. Publierecords,count,found,recordId,fields,truncated. - Lire un enregistrement (
get). Lit l’enregistrement dont l’identifiant est dans Enregistrement (recordId, le premier s’il y en a plusieurs), avec Champs à renvoyer. Un enregistrement inconnu (Airtable répond 404) n’est pas une erreur :foundvaut false etrecordvaut null. Publiefound,record,recordId,fields. - Créer (
create). Ajoute des lignes parPOST /v0/{base}/{table}. Les valeurs viennent de Champs (values, nom du champ ou identifiantfld…, et valeur) et de Champs en JSON (avancé) (fieldsJson) : un objet JSON est un enregistrement, un tableau d’objets en fait plusieurs, envoyés par lots de 10. Convertir automatiquement les valeurs (typecast) laisse Airtable convertir du texte en options de liste et en enregistrements liés. Publierecords,recordIds,recordId,count,warnings. - Créer ou mettre à jour (
upsert). EnvoiePATCH /v0/{base}/{table}avecperformUpsert: Airtable cherche une ligne dont le Champ de rapprochement (mergeField, plus jusqu’à deux Champs de rapprochement en plusextraMergeFields) porte la même valeur, la met à jour si elle existe, la crée sinon. Mêmes saisies que Créer. Publierecords,recordId,fields,createdIds,updatedIds,createdCount,updatedCount,created,mergeFields,warnings. - Mettre à jour (
update). Modifie les enregistrements dont les identifiants sont dans Enregistrement (plusieurs identifiants séparés par des virgules acceptés), ou l’idporté par chaque objet du JSON. Par défaut, seuls les champs fournis changent (PATCH). Avec Vider les champs non fournis (clearUnspecified), l’enregistrement entier est remplacé (PUT) et tout champ absent est vidé. Publierecords,recordIds,recordId,count,cleared,warnings. - Supprimer (
delete). Envoie les enregistrements listés dans Enregistrement à la corbeille de la base (DELETE, par lots de 10). PubliedeletedIds,count. - Commenter (
comment). Publie Commentaire (commentText) sur l’enregistrement de Enregistrement.@[usrXXXXXXXXXXXXXX]mentionne et prévient un collaborateur. PubliecommentId,recordId,text,createdTime.
Pièce jointe (resource: attachment, opération dans attachmentOperation)
- Déposer les pièces jointes (
upload, le défaut). Envoie des fichiers de l’exécution dans le Champ « pièces jointes » (attachmentField) de l’enregistrement de Enregistrement. Pièces jointes à déposer (attachmentSelect) vaut Toutes (celles du mail, puis les fichiers ajoutés par les étapes précédentes), La première seulement, ou Celles que je désigne (PositionsattachmentPositions, par exemple1,3). Inclure les images intégrées (includeInline) est décoché par défaut. Les octets partent directement verscontent.airtable.com(POST …/uploadAttachment), jamais par une URL publique. Le dépôt ajoute : les fichiers déjà présents dans le champ sont conservés. PublierecordId,field,uploaded,count,skipped,skippedCount. - Lister celles d’un enregistrement (
list). Lit l’enregistrement et rend les pièces jointes du champ choisi avec leur lien de téléchargement. Publiefound,recordId,attachments,count,urlExpiresInMinutes. - Récupérer celles d’un enregistrement en pièces jointes (
download). Lit l’enregistrement, puis télécharge chaque pièce depuis le lien signé d’Airtable et l’ajoute aux pièces jointes de l’exécution : une étape Rédiger peut ensuite la joindre par sa position. 10 fichiers au plus par étape, et Taille maximale par fichier (Mo) (maxDownloadMb) chacun. Publiefound,recordId,attachments,positions,count,skipped.
Base (resource: base, opération dans baseOperation)
- Lire le schéma d’une base (
schema, le défaut). Lit les tables de Base, avec leurs champs, leurs vues et leurs identifiants (GET /v0/meta/bases/{base}/tables). PubliebaseId,tables,count. - Lister les bases (
list). Liste les bases accessibles au jeton, avec leur niveau de droit (GET /v0/meta/bases). Publiebases,count,truncated.
Chaque opération publie aussi simulated et summary.
Exemple
Chaque nouvelle demande client doit créer une ligne dans une table « Dossiers », et une seule, même si le mail est traité deux fois. Une étape Extraire nommée « Extraction » a déjà trouvé la référence du dossier dans ref_dossier. Le nœud Airtable s’appelle « Fiche dossier », ses données vivent donc sous fiche_dossier :
text
resource record
recordOperation upsert
base (mode liste) Dossiers du cabinet
table (mode liste) Dossiers
mergeField (mode liste) Ref_dossier
values Ref_dossier → {{ data.extraction.ref_dossier }}
Email_client → {{ email.from.email }}
Dernier_objet → {{ email.subject }}
typecast décochéPour une référence vue pour la première fois, les données de l’étape :
json
{
"records": [
{ "id": "recA1b2C3d4E5f6G7", "createdTime": "2026-10-04T08:12:40.000Z",
"fields": { "Ref_dossier": "2026-0412", "Email_client": "marie@exemple.fr", "Dernier_objet": "Nouvelle demande" } }
],
"recordId": "recA1b2C3d4E5f6G7",
"fields": { "Ref_dossier": "2026-0412", "Email_client": "marie@exemple.fr", "Dernier_objet": "Nouvelle demande" },
"createdIds": ["recA1b2C3d4E5f6G7"],
"updatedIds": [],
"createdCount": 1,
"updatedCount": 0,
"created": true,
"mergeFields": ["fld…"],
"warnings": [],
"simulated": false
}Quand le mail suivant sur le dossier 2026-0412 arrive, la même ligne est mise à jour : created vaut false et updatedIds porte son identifiant. Une Condition (Si) sur {{ data.fiche_dossier.created }} n’envoie l’accusé de réception que pour les nouveaux dossiers.
Conseils
- Préférez Créer ou mettre à jour à Créer. Créer n’est pas idempotent : si le moteur retente l’étape après un incident, une seconde ligne est ajoutée. Créer ou mettre à jour sur une clé métier (référence de dossier, adresse e-mail,
Message-ID) rend la même ligne à chaque nouvelle tentative. La clé doit être unique dans la table : si plusieurs lignes portent la valeur, Airtable refuse la requête. Supprimer et Commenter ne sont pas protégés non plus : un Commenter retenté publie le commentaire deux fois. - Noms de champs dans les expressions. Une expression n’atteint que des clés faites de lettres, de chiffres, de
_et de$. Une colonne nomméeEmail clientne se lit pas avec{{ data.<step>.fields.Email client }}: nommez sans espace ni accent les colonnes que vos workflows lisent, ou lisez l’objetfieldsentier. - Valeurs vides. Airtable omet les champs vides de ses réponses (
"",[],false) : un champ peut donc manquer dansfieldsplutôt qu’être vide. - Les conditions sont échappées. Les valeurs saisies dans Conditions sont échappées avant d’entrer dans la formule : un objet de mail ne peut pas modifier le filtre. Avec Formule Airtable, l’échappement des valeurs venues d’un mail vous revient. Une date s’écrit
2026-09-22; date de plus de (jours) et date de moins de (jours) comparent avec aujourd’hui. - Ordre arbitraire. Sans Trier par ni vue, l’ordre des lignes rendues par Airtable est arbitraire.
- Conversion automatique. Avec Convertir automatiquement les valeurs, Airtable crée les options de liste et les enregistrements liés manquants : utile pour verser une sortie d’IA dans une liste de choix, risqué sur une base bien tenue, où une faute de frappe devient une nouvelle option.
- Dépôts. Airtable accepte 5 Mo au plus par fichier déposé : les fichiers plus gros sont écartés et listés dans
skipped, les autres partent quand même. Rejouer un dépôt ajoute les fichiers une seconde fois. - Liens éphémères. L’
urlrendue par Lister celles d’un enregistrement expire au bout de deux heures : servez-vous-en tout de suite, ne la stockez jamais. Pour garder ou transmettre un fichier, utilisez plutôt Récupérer celles d’un enregistrement en pièces jointes. - Taille des téléchargements. La Taille maximale par fichier (Mo) va de 1 à 10, la limite réelle du serveur par fichier téléchargé. Un fichier au-delà fait échouer l’étape.
- Lire un enregistrement. Seul un enregistrement inconnu donne
found: false. Toute autre réponse d’erreur fait échouer l’étape avec son propre code : un jeton refusé avecintegration.unauthorized(reconnectez), un quota ou une panne avec une nouvelle tentative automatique. - Essais. En essai, Rechercher, Lire un enregistrement, le schéma, la liste et la récupération des pièces jointes partent pour de bon. Créer, Créer ou mettre à jour, Mettre à jour, Supprimer, Commenter et Déposer sont seulement décrits : rien n’est écrit,
simulatedvaut true, aucun identifiant d’enregistrement n’est rendu, et Créer ou mettre à jour indiquecreated: false. - Débit. Les requêtes sont cadencées à 4 par seconde et par connexion, sous la limite d’Airtable de 5 par seconde et par base. Après un 429, Airtable impose 30 secondes d’attente : le nœud respecte son
Retry-Afterdans la limite de quatre tentatives, puis l’étape échoue avecintegration.rate_limitedet le moteur la reprend plus tard. - Erreurs.
integration.unauthorized: le jeton est refusé, il lui manque un droit, ou il n’atteint plus la base ; vérifiez ses droits et ses bases sur airtable.com/create/tokens.integration.not_found: la base, la table ou l’enregistrement n’existe pas ou sort du périmètre du jeton.integration.rejected: Airtable a refusé la requête (champ inconnu, valeur du mauvais type, plusieurs lignes pour la clé de rapprochement).node_invalid_param: un choix obligatoire est vide, ou Champs en JSON n’est pas un JSON valide. Voir Gestion des erreurs.