Skip to content

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 identifiant rec…. Introuvable n’est pas une erreur : found vaut 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 : resource vaut record

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 : resource vaut attachment

maxDownloadMb ​

Taille maximale par fichier (Mo)

  • Type : Nombre (number)
  • Requis : Non
  • Défaut : 10
  • Nombre entier, de 1 à 10
  • Affiché quand : resource vaut attachment et attachmentOperation vaut download

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 identifiants tbl…, fld…, viw….
    • list — Lister les bases : Celles auxquelles le jeton a accès, avec leur niveau de droit.
  • Affiché quand : resource vaut base

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 : resource vaut record ou resource vaut attachment ou (resource vaut base et baseOperation vaut schema)

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 : resource vaut record ou resource vaut attachment

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 : resource vaut record et recordOperation vaut search

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 : resource vaut record et recordOperation vaut search

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
    • operator — Opérateur
      • Type : Un choix (options)
      • Requis : Non
      • Défaut : equals
      • Options :
        • equals — est égal à
        • notEquals — est différent de
        • contains — contient
        • isEmpty — est vide
        • isNotEmpty — n’est pas vide
        • greaterThan — est supérieur à
        • lessThan — est inférieur à
        • before — est avant la date
        • after — est après la date
        • olderThanDays — date de plus de (jours)
        • newerThanDays — date de moins de (jours)
    • value — Valeur. Ignorée par « est vide » et « n’est pas vide ». Une date s’écrit 2026-09-22.
      • Type : Texte (string)
      • Requis : Non
      • Défaut : "" (vide)
      • 500 caractères au plus
  • Affiché quand : resource vaut record et recordOperation vaut search et filterMode vaut conditions

filterCombine ​

Combinaison

  • Type : Un choix (options)
  • Requis : Non
  • Défaut : all
  • Options :
    • all — Toutes les conditions
    • any — Au moins une condition
  • Affiché quand : resource vaut record et recordOperation vaut search et filterMode vaut conditions

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 : resource vaut record et recordOperation vaut search et filterMode vaut formula
  • 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 : resource vaut record et recordOperation vaut search

sortDirection ​

Sens du tri

  • Type : Un choix (options)
  • Requis : Non
  • Défaut : asc
  • Options :
    • asc — Croissant
    • desc — Décroissant
  • Affiché quand : resource vaut record et recordOperation vaut search

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 : resource vaut record et recordOperation vaut l’une de search, get
  • Expressions : {{ }} accepté

limit ​

Nombre maximum

  • Type : Nombre (number)
  • Requis : Non
  • Défaut : 50
  • Nombre entier, de 1 à 1000
  • Affiché quand : resource vaut record et recordOperation vaut search

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 : (resource vaut record et recordOperation vaut l’une de get, update, delete, comment) ou resource vaut attachment
  • 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 : resource vaut record et recordOperation vaut l’une de create, 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 : resource vaut record et recordOperation vaut l’une de create, 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 : resource vaut record et recordOperation vaut upsert

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 : resource vaut record et recordOperation vaut upsert
  • 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 : resource vaut record et recordOperation vaut l’une de create, 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 : resource vaut record et recordOperation vaut update

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 : resource vaut record et recordOperation vaut comment
  • 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 : resource vaut attachment

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 seulement
    • positions — Celles que je désigne : Par leur position, telle que « Lire les pièces jointes » la rend.
  • Affiché quand : resource vaut attachment et attachmentOperation vaut upload

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 : resource vaut attachment et attachmentOperation vaut upload et attachmentSelect vaut positions
  • 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 : resource vaut attachment et attachmentOperation vaut upload

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 donne found: 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. id est l’identifiant rec…, fields les valeurs des champs par nom de champ, telles qu’Airtable les rend (Airtable omet les valeurs vides).
  • {{ data.<step>.recordId }} — string. L’identifiant rec… 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’identifiant app… 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 avec fields (tableau de { id, name, type }) et views (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. origin vaut email (une pièce du mail déclencheur) ou added (un fichier ajouté par une étape précédente, dont l’identifiant de nœud est dans addedByNodeId).
  • {{ 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 }, reason valant too_large ou too_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 plus attachmentPosition (leur position dans les pièces jointes de l’exécution) et deduplicated.
  • {{ data.<step>.urlExpiresInMinutes }} — number. Lister celles d’un enregistrement seulement : la durée de validité des liens url, 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. » (avec summaryKey et summaryParams).

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 Combinaison filterCombine, toutes ou au moins une), Formule Airtable (formula, envoyée comme filterByFormula), 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. Appelle GET /v0/{base}/{table}, ou POST …/listRecords avec les mêmes paramètres quand la requête devient longue. Publie records, 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 : found vaut false et record vaut null. Publie found, record, recordId, fields.
  • Créer (create). Ajoute des lignes par POST /v0/{base}/{table}. Les valeurs viennent de Champs (values, nom du champ ou identifiant fld…, 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. Publie records, recordIds, recordId, count, warnings.
  • Créer ou mettre à jour (upsert). Envoie PATCH /v0/{base}/{table} avec performUpsert : Airtable cherche une ligne dont le Champ de rapprochement (mergeField, plus jusqu’à deux Champs de rapprochement en plus extraMergeFields) porte la même valeur, la met à jour si elle existe, la crée sinon. Mêmes saisies que Créer. Publie records, 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’id porté 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é. Publie records, recordIds, recordId, count, cleared, warnings.
  • Supprimer (delete). Envoie les enregistrements listés dans Enregistrement à la corbeille de la base (DELETE, par lots de 10). Publie deletedIds, count.
  • Commenter (comment). Publie Commentaire (commentText) sur l’enregistrement de Enregistrement. @[usrXXXXXXXXXXXXXX] mentionne et prévient un collaborateur. Publie commentId, 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 (Positions attachmentPositions, par exemple 1,3). Inclure les images intégrées (includeInline) est décoché par défaut. Les octets partent directement vers content.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. Publie recordId, 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. Publie found, 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. Publie found, 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). Publie baseId, tables, count.
  • Lister les bases (list). Liste les bases accessibles au jeton, avec leur niveau de droit (GET /v0/meta/bases). Publie bases, 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ée Email client ne se lit pas avec {{ data.<step>.fields.Email client }} : nommez sans espace ni accent les colonnes que vos workflows lisent, ou lisez l’objet fields entier.
  • Valeurs vides. Airtable omet les champs vides de ses réponses ("", [], false) : un champ peut donc manquer dans fields plutô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’url rendue 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é avec integration.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, simulated vaut true, aucun identifiant d’enregistrement n’est rendu, et Créer ou mettre à jour indique created: 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-After dans la limite de quatre tentatives, puis l’étape échoue avec integration.rate_limited et 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.