Référence de l'API REST

Tous les chemins d'accès sont relatifs à https://shopify.workflow-transactional-email.app. Chaque point de terminaison, à l'exception de l'index, nécessite l'ajout de Authorization: Bearer fak_... - voir Authentification et clés API.

Les réponses sont au format JSON. Les erreurs présentent toutes la même structure :

json
{ "error": "Invalid or missing API key" }

Index et identité

Méthode Chemin d'accès Niveau Objectif
OBTENIR /api/v1 aucun Index de l'API. Vérifie que l'API est opérationnelle et indique la version actuelle
OBTENIR /api/v1/me lire Vérifiez si une clé fonctionne et consultez son niveau d'accès

Cet index ne nécessitant aucune clé, il constitue un indicateur fiable sur lequel vous pouvez vous appuyer pour effectuer un contrôle de bon fonctionnement.

Mises en page des e-mails

Méthode Chemin d'accès Niveau Objectif
OBTENIR /api/v1/email-templates lire Liste des modèles d'e-mails. q permet d'effectuer une recherche par nom, objet et description ; category=transactional ou category=marketing répertorie un type d'e-mail
PUBLICATION /api/v1/email-templates écrire Créer une mise en page
OBTENIR /api/v1/email-templates/:id lire Une mise en page avec son design ou ses annexes, ses textes de pied de page et la liste de ses langues
PUT / PATCH /api/v1/email-templates/:id écrire Modifier une mise en page. Seuls les champs que vous envoyez sont modifiés
SUPPRIMER /api/v1/email-templates/:id écrire Supprimer une mise en page ainsi que ses traductions et ses versions
OBTENIR /api/v1/layout-schema lire Comment rédiger une mise en page : le format de conception, les paramètres par défaut de chaque bloc, le code Liquid que vous pouvez utiliser, les contraintes et un exemple

La liste accepte les paramètres suivants : page (valeur par défaut : 1), limit (valeur par défaut : 25, maximum : 100) et q, qui permet d'effectuer une recherche sur le nom, le sujet et la description. L'API ne propose pas de filtre par type ; veuillez plutôt consulter la page category pour chaque mise en page.

Une mise en page comporte les champs suivants :

Domaine Remarques
name, description Nom obligatoire, 200 caractères maximum ; description : 2 000 caractères maximum
bodyType visual (par défaut) ou text. Ne peut plus être modifié une fois créé
defaultLocale La langue du contenu propre à la mise en page, en, sauf indication contraire
category transactional (par défaut) ou marketing. Voir ci-dessous
subject, previewText Boissons autorisées. Matière obligatoire
bodyDesign Mises en page visuelles : { blocks, global?, header?, footer?, testVariables? }. Veuillez envoyer la mise en page complète lorsque vous la modifiez ; le code HTML body est généré à partir de celle-ci.
body Mise en page du texte : le corps HTML
attachments Mise en page du texte : [{ filename, fileKey, sendAsLink? }] pour les fichiers téléchargés (voir les fichiers ci-dessous) ou [{ filename, url }] pour un fichier récupéré via https lors de l'envoi de l'e-mail
marketingTexts Les textes de pied de page d'une mise en page marketing, ou null. Voir ci-dessous

Le texte « Liquid » dans le sujet, l'aperçu, le corps du texte et chaque bloc de texte doit être analysé, et chaque fileKey doit appartenir à votre boutique, faute de quoi l'écriture sera refusée avec un code d'erreur 400 indiquant le champ concerné. Veuillez consulter GET /api/v1/layout-schema avant de créer un design visuel : celui-ci est généré par le générateur lui-même, il ne peut donc pas diverger.

Chaque écriture effectuée via cette API est conservée dans l'historique des versions de la mise en page, exactement comme lors d'une sauvegarde dans l'application.

Mises en page transactionnelles et marketing

category explique à quoi sert un modèle. Un modèle transactionnel est envoyé à chaque destinataire, sans modification. Un modèle marketing ignore les destinataires qui se sont désabonnés (une étape pour laquelle le message « Tous les destinataires du champ « À » se sont désabonnés » n’est pas envoyé et apparaît sous la forme SKIPPED dans l’historique), est envoyé sous la forme d’un message par destinataire du champ « À » avec son propre lien de désabonnement (20 au maximum par étape), et se termine par la phrase de désabonnement et les coordonnées de votre entreprise. {{ unsubscribe_url }} et {{ unsubscribe_link }} : veuillez insérer vous-même le lien ; dans les modèles transactionnels, ces deux champs sont vides. Les informations destinées aux marchands se trouvent à l’adresse E-mails marketing et désabonnements.

marketingTexts Le texte du pied de page est-il celui utilisé par une mise en page marketing à la place des textes communs à toute la boutique définis dans les Paramètres :

json
{
  "marketingTexts": {
    "unsubscribeText": "You get this because you shop with us. {{ unsubscribe_link }}",
    "unsubscribeLinkLabel": "Unsubscribe",
    "companyDetails": "Example GmbH, Musterstrasse 1, 10115 Berlin"
  }
}

Chaque champ est facultatif. Un champ renseigné remplace le texte « Paramètres » correspondant à ce champ ; les autres restent inchangés. null (valeur par défaut) signifie que les textes « Paramètres » correspondent à la langue de l’e-mail. Limites : unsubscribeText et companyDetails : 2 000 caractères ; unsubscribeLinkLabel : 100. Une adresse unsubscribeText doit contenir {{ unsubscribe_link }} ou {{ unsubscribe_url }}, faute de quoi l’écriture est refusée. Ce champ est enregistré pour tous les modèles, mais n’est envoyé qu’avec les modèles marketing.

La suppression d'une mise en page n'est jamais bloquée. Si certaines étapes dShopify Flows y font encore référence, la réponse contient un paramètre « warning indiquant leur nombre ; ces étapes échouent jusqu'à ce qu'elles utilisent une autre mise en page.

Traductions

Méthode Chemin d'accès Niveau Objectif
OBTENIR /api/v1/email-templates/:id/translations lire Chaque langue d'une mise en page avec son contenu
OBTENIR /api/v1/email-templates/:id/translations/:locale lire Une seule langue
PUT /api/v1/email-templates/:id/translations/:locale écrire Créer ou remplacer une langue
SUPPRIMER /api/v1/email-templates/:id/translations/:locale écrire Supprimer une langue. En cas de problème, le système revient à la mise en page par défaut.
PUBLICATION /api/v1/email-templates/:id/translations/:locale/promote écrire Définissez cette langue comme langue principale de la mise en page

:locale Il s'agit d'un code de langue tel que de, fr ou pt-br ; la casse et le séparateur n'ont pas d'importance. Jusqu'à 30 langues par mise en page. Le champ « Langue » de l'étape Shopify Flow en sélectionne une au moment de l'envoi : la locale exacte, puis la langue de base, puis une variante régionale, sinon la mise en page elle-même.

Un fichier PUT contient l'intégralité du contenu traduit : subject (obligatoire), previewText, ainsi que bodyDesign (visuel) ou body (texte). Veuillez ne pas modifier les balises Liquid ni les URL. Deux champs sont spécifiques à une traduction :

Domaine Mise en page du texte Signification
attachments oui Une liste (de même structure que celle de la mise en page) = les pièces jointes propres à cette langue, [] = aucune dans cette langue. null = envoyer les pièces jointes de la mise en page. Omis = conserver le choix actuel ; une nouvelle langue utilise celles de la mise en page. Les mises en page visuelles intègrent leurs pièces jointes sous forme de blocs dans le fichier bodyDesign de chaque langue et ignorent ce champ
marketingTexts n'importe quel Les textes de pied de page de cette langue s'affichent par-dessus ceux de la mise en page, champ par champ. null = ceux de la mise en page. « Omitted » = conserver le choix actuel

Une traduction est renvoyée avec les deux mêmes champs : attachments correspond à null lorsqu'elle envoie la mise en page, et marketingTexts correspond à null lorsqu'elle utilise la mise en page.

promote permet d'échanger la mise en page et la traduction : la mise en page reprend le contenu et les paramètres régionaux de la traduction, tandis que le contenu qu'elle contenait devient la traduction de la langue dans laquelle elle se trouvait auparavant. Les pièces jointes et les textes de pied de page échangent également leurs places, de sorte que chaque langue continue d’envoyer ce qu’elle envoyait auparavant. La réponse indique promoted, previousMainLanguage et la mise en page. Il s’agit d’une seule version, ce qui permet de revenir en arrière.

Versions

Méthode Chemin d'accès Niveau Objectif
OBTENIR /api/v1/email-templates/:id/versions lire Versions enregistrées, classées par ordre chronologique décroissant. L'application conserve les 25 plus récentes
OBTENIR /api/v1/email-templates/:id/versions/:version lire L'instantané complet d'une version : mise en page et toutes les traductions
PUBLICATION /api/v1/email-templates/:id/versions/:version/restore écrire Remettez cette version en ligne. Enregistrée en tant que nouvelle version
OBTENIR /api/v1/email-templates/:id/versions/github?page= lire Toutes les versions conservées dans le dépôt GitHub associé, à raison de 20 par page
OBTENIR /api/v1/email-templates/:id/versions/github/:sha lire La mise en page telle qu'elle se présentait lors d'un commit
PUBLICATION /api/v1/email-templates/:id/versions/github/:sha/restore écrire Rétablir une version GitHub, comme lors d'une sauvegarde

Les points de terminaison GitHub renvoient un code d'erreur 409 lorsqu'aucun dépôt n'est associé à la page Développeur. Voir Historique des versions de la mise en page et Conservez un historique illimité des mises en page sur GitHub.

Expéditeurs d'e-mails

Méthode Chemin d'accès Niveau Objectif
OBTENIR /api/v1/smtp-configs lire Liste des expéditeurs SMTP
OBTENIR /api/v1/senders lire Répertorier les boîtes aux lettres connectées (Microsoft 365, Google)

Les expéditeurs SMTP indiquent hasUsername et hasPassword plutôt que les identifiants proprement dits : les deux parties sont masquées, car le nom d'utilisateur fait tout autant partie des identifiants que le mot de passe. Un expéditeur reste identifiable grâce à son nom, à son hôte et à son adresse d'origine. Les boîtes aux lettres connectées indiquent une adresse partiellement masquée, telle que so***@example.com, et ne divulguent jamais leurs jetons de connexion.

En lecture seule. Connectez-vous et modifiez les expéditeurs dans l'application.

Secrets

Méthode Chemin d'accès Niveau Objectif
OBTENIR /api/v1/secrets lire Énumérez les noms secrets et leurs descriptions

Renvoie hasValue, jamais la valeur elle-même. Il n'existe aucun point de terminaison permettant de récupérer un secret. Créez et mettez à jour les secrets dans l'application.

Fichiers téléchargés

Méthode Chemin d'accès Niveau Objectif
OBTENIR /api/v1/files lire Liste des logos, images et pièces jointes téléchargés
SUPPRIMER /api/v1/files écrire Supprimer l'un d'entre eux, par key dans le corps du texte

La liste accepte les formats page, limit (100 au maximum) et q pour effectuer une recherche par nom de fichier.

Ajoutez « ?usage=true » : chaque fichier renvoie également inUse, ainsi qu’un tableau usedBy répertoriant les mises en page et les préréglages qui y font référence. C’est ainsi que vous pouvez identifier tous les éléments que vous pouvez supprimer en toute sécurité en une seule requête. Cette fonctionnalité analyse vos mises en page et vos préréglages ; elle est donc activable manuellement et n’est pas activée par défaut.

La fonction de téléchargement n'est pas disponible ici : veuillez ajouter vos fichiers via la sélection de médias de l'application.

Requêtes HTTP

Méthode Chemin d'accès Niveau Objectif
OBTENIR /api/v1/http-requests lire Répertorier les requêtes HTTP
PUBLICATION /api/v1/http-requests écrire En créer un
OBTENIR /api/v1/http-requests/:id lire Achetez-en un
PUT / PATCH /api/v1/http-requests/:id écrire Première mise à jour
SUPPRIMER /api/v1/http-requests/:id écrire Supprimer l'un d'entre eux
PUBLICATION /api/v1/http-requests/:id/test exécuter Testez-le sur la cible réelle

La liste accepte les mêmes paramètres page, limit et q que les modèles d'e-mail.

L'urle cible doit être http:// ou https://. Les autres schémas sont rejetés lors de l'enregistrement.

Les identifiants littéraux inscrits dans l'en-tête ou le corps d'un message sont masqués dans chaque réponse. Les valeurs référencées sous la forme {{ secrets.KEY }} sont renvoyées telles quelles, car la référence elle-même n'est pas sensible.

Historique et statistiques

Cela concerne à la fois les envois d'e-mails et les requêtes HTTP.

Méthode Chemin d'accès Niveau Objectif
OBTENIR /api/v1/history lire Exécutions de listes
OBTENIR /api/v1/history/:id lire Obtenir une exécution avec les données de requête et de réponse
OBTENIR /api/v1/stats lire Totaux et taux de réussite

History accepte les valeurs suivantes : page, limit (max. 100), actionType, status (PENDING, SUCCESS, FAILED, SKIPPED) et actionConfigId pour filtrer selon une seule mise en page ou une seule requête.

SKIPPED Il s'agit d'un e-mail marketing dont tous les destinataires s'étaient désabonnés : rien n'a été envoyé, aucun quota n'a été utilisé et cela n'est pas pris en compte dans le taux de réussite.

actionType doit correspondre exactement à EMAIL ou HTTP_REQUEST. Une valeur non reconnue est ignorée plutôt que rejetée ; ainsi, une faute de frappe renvoie le contenu complet au lieu de générer une erreur.

Le paramètre « stats » accepte des valeurs comprises entre days (valeur par défaut : 30, valeur maximale : 365).

Codes d'état

Code Signification
200 Succès
201 Créé
400 Requête incorrecte ou validation échouée. L'errore indique le nom du champ, par exemple subject: required
401 Clé API manquante, incorrecte ou révoquée
403 La clé est valide, mais son niveau est trop faible pour ce point de terminaison
404 Introuvable, ou appartient à une autre boutique
405 Méthode incorrecte pour ce chemin d'accès
409 Opération refusée car l'enregistrement est encore utilisé (suppression de fichier) ou parce que GitHub n'est pas connecté (versions GitHub)
429 Limitation de débit - voir ci-dessous
502 La requête s'est exécutée, mais la cible tierce a échoué.

Une fiche appartenant à une autre boutique renvoie un code 404 au lieu d'un 403 ; l'API ne vérifie donc jamais si un identifiant existe déjà ailleurs.

Limites de débit

Deux budgets indépendants, tous deux par clé :

  • 300 requêtes par 60 secondes sur l'ensemble des points de terminaison.
  • En outre, 60 interventions par heure sont effectuées, notamment à l'adresse suivante : POST /api/v1/http-requests/:id/test.

Le dépassement de l’une ou l’autre de ces limites entraîne le retour du code d’erreur 429, accompagné d’une explication : error. Le budget d’exécution est délibérément restreint : une boucle incontrôlée envoyant des requêtes en temps réel à un prestataire de paiement constitue une défaillance bien plus grave qu’un script lent.

Les budgets sont attribués par clé, et non par boutique ; ainsi, une intégration ne peut pas épuiser le budget alloué à une autre.