# Documentation PDFMonkey > Générez des documents PDF à partir de modèles HTML via API --- # De zéro à la génération de votre premier document Source: https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md ## Créer un compte sur PDFMonkey Pour créer un compte, rendez-vous sur [la page d’inscription](https://dashboard.pdfmonkey.io/register) et renseignez votre adresse email et votre mot de passe. > [!NOTE] > Nous ne demandons pas de confirmation du mot de passe, mais vous pouvez afficher ou masquer celui-ci en cliquant sur _Show my password_. Une fois vos identifiants renseignés, nous vous enverrons un email d’activation. Cliquez sur le lien contenu dans cet email pour activer votre compte. **Vous ne pourrez pas vous connecter tant que votre compte n’aura pas été confirmé.** ## Se connecter Une fois votre compte confirmé, renseignez vos identifiants sur [la page de connexion](https://dashboard.pdfmonkey.io/login) pour accéder à votre tableau de bord. ## Créer votre premier modèle Pour créer un modèle, rendez-vous sur [la page des modèles](https://dashboard.pdfmonkey.io/templates) et cliquez sur **Create my first Template**. Donnez un nom à votre modèle, sélectionnez le mode d’édition **Code** et choisissez le _Base Template_ nommé **Blank**. L’éditeur de modèles s’ouvrira alors : c’est là que la magie de PDFMonkey opère. > [!NOTE] > Vous pouvez modifier le nom de votre modèle aussi souvent que vous le souhaitez, cela n’aura aucun impact sur vos applications clientes. ## Écrire votre premier modèle Dans l’onglet **HTML**, insérez le code suivant : ```liquid

Bonjour {{name}} !

``` Dans l’onglet **CSS**, insérez le code suivant : ```css p { color: #6D28D9; font-size: 24px; } ``` Et enfin dans l’onglet **Test data**, insérez ceci : ```json { "name": "Jean Dupont" } ``` Vous pouvez maintenant cliquer sur le bouton **Save**, et vous devriez voir le panneau d’aperçu à droite se mettre à jour pour refléter vos modifications. > [!NOTE] > **Aperçu PDF réel** > > L’aperçu PDF que vous voyez est en réalité une version 100 % fidèle du résultat final, car il s’agit d’un véritable PDF généré avec le même processus que celui utilisé pour générer vos documents. La dernière étape consiste à rendre votre modèle disponible pour la génération. Pour cela, cliquez sur le bouton **Publish**. Pour en savoir plus sur la syntaxe des modèles, consultez la section [Modèles Code](https://pdfmonkey.io/fr/docs/modeles-code). Découvrez comment [utiliser les données de test](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) pour prévisualiser vos modèles. ## Générer votre premier document Maintenant que votre modèle est prêt, rendez-vous sur [la page des documents](https://dashboard.pdfmonkey.io/documents). Une fois sur cette page, cliquez sur le bouton **Create my first Document**. Sur la page suivante, sélectionnez votre modèle dans la liste déroulante et cliquez sur **Create a draft**. L’éditeur de documents s’ouvrira alors, vous permettant de spécifier les données et métadonnées de votre document. Par défaut, une copie modifiable des données de test ajoutées à votre modèle vous sera présentée. Modifions-les comme suit : ```json { "name": "Spider-man" } ``` Rendez-vous ensuite dans l’onglet **Meta data** et insérez les informations suivantes pour [personnaliser le nom du fichier PDF](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) : ```json { "_filename": "bonjour-spider-man.pdf" } ``` Cliquez sur le bouton **Save**. L’aperçu se rafraîchira et vous montrera une version à jour du PDF. Enfin, cliquez sur **Generate**. Et voilà ! Vous venez de générer votre tout premier document avec PDFMonkey ! Si quelque chose ne fonctionne pas, consultez la section [Dépannage](https://pdfmonkey.io/fr/docs/depannage). --- # Visite guidée du tableau de bord Source: https://pdfmonkey.io/fr/docs/premiers-pas/visite-guidee-du-tableau-de-bord.md Cette page vous propose une visite rapide des principales sections du tableau de bord PDFMonkey. Chaque section renvoie vers une documentation plus détaillée pour approfondir le sujet quand vous le souhaitez. ## Modèles ![Page de la liste des modèles affichant les cartes de modèles et le sélecteur d’espace de travail](https://pdfmonkey.io/fr/docs/img/dashboard-templates-list.webp) La page des modèles est la première chose que vous voyez après vous être connecté. Elle liste tous les modèles de votre espace de travail actuel, affichés sous forme de cartes indiquant le nom du modèle, son statut (brouillon ou publié) et sa date de dernière modification. Depuis cette page, vous pouvez : - **Créer un nouveau modèle** en utilisant le bouton _Create Template_ en haut de la page. - **Dupliquer ou supprimer** un modèle depuis son menu contextuel. Pour apprendre à créer un modèle de A à Z, consultez [Votre premier modèle (Builder)](https://pdfmonkey.io/fr/docs/modeles-builder/votre-premier-modele.md) ou la section [Modèles Code](https://pdfmonkey.io/fr/docs/modeles-code). ## Éditeur de modèles ![Éditeur de modèles avec les onglets HTML, CSS et Test Data aux côtés du panneau d’aperçu en direct](https://pdfmonkey.io/fr/docs/img/dashboard-template-editor.webp) L’éditeur de modèles est l’endroit où vous concevez la mise en page de votre PDF et prévisualisez le résultat en temps réel. PDFMonkey propose deux modes d’édition : - **Éditeur de code :** écrivez directement du HTML, de la CSS et du Liquid. L’éditeur comporte trois onglets : _HTML_, _CSS_ et _Test Data_. Les modifications sont reflétées dans le panneau d’aperçu à droite après enregistrement. - **Builder :** une interface glisser-déposer qui vous permet d’assembler des pages à partir de blocs préconstruits sans écrire de code. Le panneau d’aperçu génère un véritable PDF avec le même moteur que celui qui produit vos documents finaux : ce que vous voyez est exactement ce que vos utilisateurs recevront. Lorsque votre modèle est prêt, cliquez sur **Publish** pour le rendre disponible à la génération de documents. Seuls les modèles publiés peuvent être utilisés pour créer des documents via l’API ou les intégrations. Pour un guide pratique pas à pas, consultez [De zéro à la génération de votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md). ## Documents ![Page des documents listant les documents générés avec indicateurs de statut et filtres](https://pdfmonkey.io/fr/docs/img/dashboard-documents.webp) La page des documents affiche tous les documents générés dans votre espace de travail. Chaque entrée indique le nom du document, le modèle à partir duquel il a été créé, son statut actuel et sa date de génération. Les documents passent par plusieurs statuts au cours de leur cycle de vie : - **Draft :** créé mais pas encore envoyé pour génération. - **Pending :** en file d’attente pour la génération. - **Generating :** en cours de rendu. - **Success :** génération terminée, le PDF est prêt à être téléchargé. - **Failure :** un problème est survenu lors de la génération. Vous pouvez filtrer la liste par modèle ou par statut pour trouver rapidement des documents spécifiques. Le bouton **Create Document** vous permet de générer un document manuellement en sélectionnant un modèle et en fournissant des données JSON. Pour une description détaillée de chaque statut, consultez [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md). ## Paramètres ![Page des paramètres affichant le nom et l’identifiant de l’espace de travail](https://pdfmonkey.io/fr/docs/img/dashboard-settings.webp) La page des paramètres vous permet de gérer l’identité de votre espace de travail. Depuis cette page, vous pouvez : - **Renommer votre espace de travail :** modifiez le nom de l’espace de travail et cliquez sur _Save_ pour appliquer le changement. - **Copier votre Workspace ID :** l’identifiant unique de votre espace de travail, utile pour contacter le support ou travailler avec l’API. ## FAQ **Quelles sont les sections principales du tableau de bord PDFMonkey ?** Le tableau de bord comporte quatre zones principales : Templates (listant tous les modèles de votre espace de travail), l’éditeur de modèles (pour concevoir les mises en page PDF avec du code ou le builder visuel), Documents (affichant les documents générés et leurs statuts) et Settings (pour gérer l’identité de l’espace de travail). **Quels statuts de documents existent dans PDFMonkey ?** Les documents passent par cinq statuts : Draft (créé mais pas mis en file d’attente), Pending (en file d’attente pour la génération), Generating (en cours de rendu), Success (PDF prêt à télécharger) et Failure (une erreur s’est produite pendant la génération). **L'éditeur de modèles PDFMonkey affiche-t-il un vrai aperçu ?** Oui. Le panneau d’aperçu affiche un vrai PDF en utilisant le même moteur que celui qui produit vos documents finaux : ce que vous voyez dans l’éditeur est exactement ce que vos utilisateurs recevront. --- # Essai Pro de 30 jours PDFMonkey : fonctionnalités, limites et suite Source: https://pdfmonkey.io/fr/docs/premiers-pas/essai-de-30-jours.md Chaque nouveau compte PDFMonkey démarre avec un **essai Pro de 30 jours** pour vous permettre d’explorer les fonctionnalités premium avant de choisir un plan. Pendant l’essai, vous avez accès aux mêmes capacités que le [plan Pro](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md#pro), sans carte bancaire requise. ## Ce que l’essai inclut {#what-the-trial-includes} | Fonctionnalité | Essai (Pro) | Plan Free (après l’essai) | |:---------------|:-----------:|:-------------------------:| | Générations de documents | 300/mois | 20/mois | | [Ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md) (images, polices, CSS, JS via URL) | Oui | Non | | Temps de génération max par document | 2 minutes | 30 secondes | | [Conservation des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) | 24 heures | 24 heures | > [!NOTE] > **Aucun paiement requis** > > L’essai s’active automatiquement lorsque vous [créez votre compte](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md). Vous n’êtes jamais facturé pendant l’essai et vous n’avez rien à annuler. ## Qu’est-ce qui change à la fin de l’essai ? {#what-changes-when-the-trial-ends} Lorsque l’essai de 30 jours expire, votre compte est **rétrogradé vers le plan Free** automatiquement. Vous n’êtes pas facturé. Les principales différences que vous remarquerez : - **Les ressources externes cessent de fonctionner.** Les images, CSS, JavaScript et polices chargées via URL sont restreintes sur le plan Free. Les documents qui les référencent échoueront à la génération. Consultez [Ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md) pour la définition complète de ce qui est concerné. - **Votre quota de génération passe à 20 documents par mois** au lieu de 300. - **Le temps de génération max passe à 30 secondes** au lieu de 2 minutes. > [!TIP] > **Passez à un plan payant avant la fin de l’essai** > > Si les fonctionnalités de l’essai correspondent à vos besoins, [passez à un plan payant](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) à tout moment pendant ou après l’essai. Le changement prend effet immédiatement et la facturation est calculée au prorata. Consultez [Nos plans](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) pour une comparaison complète. ## Ce que vous pouvez utiliser avec le plan Free {#what-can-i-use-on-the-free-plan} Après l’essai, les ressources suivantes continuent de fonctionner sur le plan Free car elles ne sont pas considérées comme des ressources externes : - **Les images** chargées via [data-uri ou SVG inline](https://pdfmonkey.io/fr/docs/modeles-code/images.md) - **La CSS** écrite directement dans l’onglet HTML ou CSS du modèle - **La CSS** envoyée dans les données dynamiques du document et intégrée dans le HTML via une variable - **Le JavaScript** écrit directement dans l’onglet HTML du modèle - **Le JavaScript** stocké dans les données dynamiques du document et intégré dans le HTML via une variable - **Les versions hébergées de Tailwind CSS** fournies par PDFMonkey (voir [Versions hébergées de Tailwind CSS](https://pdfmonkey.io/fr/docs/modeles-code/css-personnalise.md#hosted-tailwind-css-versions)) Pour plus de détails sur ce qui constitue une ressource externe et ce qui n’en est pas, consultez la page dédiée [Ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md). ## Questions fréquentes {#faq} **Peut-on prolonger l’essai ?** L’essai est une fenêtre unique de 30 jours par compte. Cela dit, nous comprenons que parfois vous avez pu manquer l’essai entièrement ou que vous avez besoin de plus de temps pour évaluer le produit. Si c’est votre cas, [contactez notre équipe support](https://pdfmonkey.io/fr/docs/premiers-pas/support.md) et nous verrons ce que nous pouvons faire. **Que deviennent mes documents à la fin de l’essai ?** Vos documents existants ne sont pas supprimés. Ils restent accessibles selon les [paramètres de conservation](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) de vos modèles. Seules les nouvelles demandes de génération sont affectées par les limites du plan Free. **Peut-on passer à un plan payant avant la fin de l’essai ?** Oui. Vous pouvez [passer à n’importe quel plan payant](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) à tout moment pendant l’essai. Le changement prend effet immédiatement. **Les documents non utilisés sont-ils reportés ?** Non. Votre quota mensuel est réinitialisé au début de chaque cycle de facturation. Les documents non utilisés ne sont pas cumulés. Consultez [Atteindre votre quota](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md#reaching-your-quota) pour plus de détails. ## Pages associées {#related-pages} - [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md) : commencez avec votre premier modèle et document - [Ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md) : ce qui constitue une ressource externe et les alternatives pour le plan Free - [Nos plans](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) : comparez tous les niveaux de plans côte à côte - [Changer de plan](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) : fonctionnement des upgrades, downgrades et de la proratisation - [Conservation et suppression des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) : paramètres TTL et limites de conservation par plan ## FAQ **Que comprend l’essai de 30 jours PDFMonkey ?** L’essai vous donne un accès Pro pendant 30 jours : 300 générations de documents par mois, les ressources externes (images, polices, CSS et JS via URL) et un temps de génération maximum de 2 minutes par document. **Que se passe-t-il à la fin de l’essai PDFMonkey ?** Votre compte est automatiquement rétrogradé vers le plan Free sans frais. Les ressources externes cessent de fonctionner, votre quota passe à 20 documents par mois et le temps de génération maximum passe à 30 secondes. **Faut-il une carte bancaire pour l’essai PDFMonkey ?** Non. L’essai s’active automatiquement lorsque vous créez votre compte. Vous n’êtes jamais facturé pendant l’essai et vous n’avez rien à annuler. **Peut-on passer à un plan payant pendant l’essai PDFMonkey ?** Oui. Vous pouvez passer à n’importe quel plan payant à tout moment pendant l’essai. Le changement prend effet immédiatement et la facturation est calculée au prorata. --- # Ressources externes dans PDFMonkey Source: https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md # Ressources externes Les templates PDFMonkey peuvent charger des ressources depuis des URL externes — images, feuilles de styles, scripts et polices. On les appelle **ressources externes**, et leur disponibilité dépend de votre offre. Cette page explique ce qui en fait partie, comment savoir si votre template en utilise, et quoi faire si vous êtes sur le plan Free. ## Qu’est-ce qu’une ressource externe ? {#what-counts-as-an-external-resource} Une ressource externe est tout fichier que votre template charge via une URL (`http://...` ou `https://...`). Cela inclut : * **Les images distantes** — chargées depuis un serveur ou un CDN (les [data-uri et SVG inline](https://pdfmonkey.io/fr/docs/modeles-code/images.md) fonctionnent sur toutes les offres) * **Les fichiers CSS** — feuilles de styles hébergées sur vos serveurs ou un CDN * **Les fichiers JavaScript** — scripts hébergés sur vos serveurs ou un CDN * **Les polices web** — comme Google Fonts ou Bunny Fonts * **Les polices de l’éditeur visuel** — toute police sélectionnée dans le sélecteur de polices du builder ### Comment savoir si votre template utilise des ressources externes {#how-to-tell} Cherchez les URL dans le code de votre template. Tout ce qui commence par `http://` ou `https://` est une ressource externe : ```html ``` ```css /* Également externe */ @import url("https://fonts.googleapis.com/css2?family=Inter&display=swap"); ``` Les ressources écrites directement dans votre template ne sont **pas** des ressources externes et fonctionnent sur toutes les offres : ```html ... ``` ## Disponibilité par offre {#plan-availability} Les ressources externes sont disponibles sur **toutes les offres payantes** et pendant l’**essai Pro de 30 jours**. Sur le plan Free, les documents qui référencent des ressources externes **échoueront lors de la génération**. Pour un comparatif complet de chaque offre, consultez [Nos offres](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md). Pour savoir ce que l’essai débloque, consultez [Essai Pro de 30 jours](https://pdfmonkey.io/fr/docs/premiers-pas/essai-de-30-jours.md). > [!TIP] > **Alternatives sur le plan Free** > > Vous pouvez toujours créer des templates complets sur le plan Free en utilisant la CSS inline, le JavaScript inline, les images en data-uri et le SVG inline. Consultez [Ce que vous pouvez utiliser avec le plan Free](https://pdfmonkey.io/fr/docs/premiers-pas/essai-de-30-jours.md#what-can-i-use-on-the-free-plan) pour la liste complète. ## Ressources hébergées par PDFMonkey {#pdfmonkey-hosted-resources} Les ressources hébergées sur les propres serveurs de PDFMonkey (`pdfmonkey-resources.s3-eu-west-3.amazonaws.com`) font exception : elles fonctionnent sur **toutes les offres**, y compris le plan Free. L’exemple le plus courant est les builds hébergés de Tailwind CSS. Consultez [Versions hébergées de Tailwind CSS](https://pdfmonkey.io/fr/docs/modeles-code/css-personnalise.md#hosted-tailwind-css-versions) pour la liste complète des versions disponibles. ## FAQ **Peut-on utiliser des polices web dans les templates PDFMonkey ?** Oui, mais uniquement sur les offres payantes (Starter et supérieures). Les polices web chargées via URL (ex. Google Fonts) sont considérées comme des ressources externes. Sur l’offre Free, utilisez des polices système ou intégrez les polices en Base64 data URI. **Qu’est-ce qu’une ressource externe dans PDFMonkey ?** Tout fichier que votre template charge via une URL (http:// ou https://) est une ressource externe. Cela inclut les images distantes, les fichiers CSS, les fichiers JavaScript, les polices web et les polices sélectionnées dans le sélecteur de polices du Builder. Le code en ligne et les data URI ne sont pas des ressources externes et fonctionnent sur toutes les offres. **Pourquoi mes images ou polices ne se chargent-elles pas dans PDFMonkey ?** Si vous êtes sur l’offre Free, les ressources externes (images distantes, polices web, CSS/JS externes) ne sont pas disponibles. Passez à l’offre Starter ou supérieure, ou utilisez des alternatives en ligne : data URI Base64 pour les images, SVG en ligne ou polices système. --- # Builder vs. modèles Code Source: https://pdfmonkey.io/fr/docs/premiers-pas/modeles-builder-vs-code.md PDFMonkey propose deux façons de créer des modèles : le **[Builder](https://pdfmonkey.io/fr/docs/modeles-builder)** visuel et les **[modèles Code](https://pdfmonkey.io/fr/docs/modeles-code)** rédigés en HTML, CSS et Liquid. Les deux produisent des PDF de même qualité. La différence réside dans la manière de les concevoir, et il vaut mieux choisir la bonne approche avant de commencer. ## Comparaison en un coup d’œil {#builder-vs-code-templates} | | Builder | Modèles Code | |---|---|---| | **Méthode de conception** | Glisser-déposer visuel | Écrire du HTML, CSS et Liquid | | **Données dynamiques** | Panneau Logic (conditions, répétition) | Balises Liquid (`{% if %}`, `{% for %}`) | | **Style** | Panneau Styles + éditeur Custom CSS | Contrôle CSS complet dans le modèle | | **JavaScript** | Éditeur Custom JS + External Assets | Balises ` ``` Vous pouvez ajouter autant de balises script que nécessaire, n’importe où dans votre HTML. ## Accéder aux données du Document Pour rendre JavaScript plus puissant dans vos templates, vous pouvez accéder au payload de votre Document en tant qu’objet JavaScript. Commencez par activer l’injection JavaScript pour votre template dans son onglet Paramètres : ![](https://pdfmonkey.io/fr/docs/img/template-settings-js-injection.webp) Une fois activé, un objet `$docPayload` devient disponible dans vos scripts. Par exemple, avec ce payload : ```json title="JSON" { "movie": { "title": "12 Monkeys", "year": 1995 } } ``` Vous pouvez accéder aux données comme ceci : ```html title="HTML"
``` > [!WARNING] > **Limitation d’accès aux données avec JavaScript** > > Lorsque vous accédez aux données avec JS, **vous ne pouvez pas les insérer** en utilisant la syntaxe `{{movieTitle}}`. Cette syntaxe est spécifique à [Liquid](https://pdfmonkey.io/fr/docs/modeles-code/la-syntaxe-liquid.md) et est exécutée avant que votre code JS ne s’exécute. > > Cela dit, vous pouvez générer du code JS en utilisant Liquid : > > ```html > <script> > const movieTitle = "{{movieTitle | upcase}}"; > </script> > ``` ## Bibliothèques externes > [!WARNING] > **Compte payant uniquement** > > L’inclusion de JavaScript basé sur une URL n’est possible que sur un compte payant. Les Documents incluant des fichiers JavaScript externes échoueront sur un compte gratuit. Consultez [Ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md) pour la liste complète. Si vous avez besoin d’une bibliothèque qui transforme du texte, applique des filtres aux images, ou [insère des graphiques](#including-charts) dans votre Document, vous pouvez l’importer comme vous le feriez dans une page HTML normale. Par exemple, pour afficher une chaîne Markdown issue de votre payload avec [marked.js](https://marked.js.org/) : ```html title="HTML"
``` Toute bibliothèque chargeable via CDN peut être utilisée dans vos templates de cette manière. ## Formater les dates et heures Le moteur de PDFMonkey fonctionne sur des serveurs AWS situés en Europe. Le fuseau horaire du serveur n’est peut-être pas celui dans lequel vous souhaitez afficher vos dates. > [!TIP] > **Utilisez Liquid en priorité** > > La plupart des besoins de formatage de dates sont couverts par les filtres Liquid seuls, sans JavaScript. Utilisez le filtre [in\_time\_zone](https://pdfmonkey.io/fr/docs/modeles-code/filtres.md#in_time_zone) pour définir un fuseau horaire et le filtre [date](https://pdfmonkey.io/fr/docs/modeles-code/filtres.md#date) pour formater une date. Si les filtres Liquid ne couvrent pas vos besoins, JavaScript offre des options supplémentaires. ### toLocaleString(locales, options) La méthode [toLocaleString](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString) retourne une chaîne avec une représentation de la date adaptée à la langue. Les arguments `locales` et `options` vous permettent de spécifier la langue dont les conventions de formatage doivent être utilisées et de personnaliser le comportement de la fonction. ```html title="HTML" ``` Vous pouvez en apprendre davantage sur la méthode toLocaleString dans sa [page de documentation MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString). ### Utiliser une bibliothèque > [!WARNING] > **Compte payant uniquement** > > L’utilisation d’une bibliothèque JS externe ne fonctionnera que sur un compte payant. Sur un compte gratuit, l’aperçu et la génération seront bloqués. Si vous avez besoin d’une bibliothèque plus puissante, vous pouvez charger celle dont vous avez besoin. La plus fréquemment utilisée est MomentJS mais nous recommandons [Luxon](https://moment.github.io/luxon/#/?id=luxon), une itération plus récente de la même idée par l’auteur même de MomentJS : ```html title="HTML" ``` ## Inclure des graphiques {#including-charts} > [!WARNING] > **Compte payant uniquement** > > L’inclusion de JavaScript basé sur une URL n’est possible que sur un compte payant. Les Documents incluant des fichiers JavaScript externes échoueront sur un compte gratuit. Consultez [Ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md) pour la liste complète. Vous pouvez utiliser la plupart des bibliothèques de graphiques pour générer des graphiques dans PDFMonkey. D’après notre expérience, [Chart.js](https://www.chartjs.org/) est l’option la plus fiable : il s’affiche correctement dans tous les lecteurs PDF et propose une grande variété de types de graphiques. Deux réglages sont essentiels pour les graphiques dans un PDF : - **`animation: false`** — Les animations ne sont pas jouées dans un PDF. Si elles restent activées, le graphique risque d’être capturé en cours de transition, produisant un rendu vide ou incomplet. - **`responsive: false`** — Désactiver cette option vous permet de contrôler la taille du graphique via les attributs `width` et `height` de l’élément `canvas`, évitant les surprises de mise en page. ### Exemple avec Chart.js {#chartjs-example} L’exemple ci-dessous charge Chart.js depuis un CDN et affiche un graphique en barres à partir des données du payload du Document. Il inclut les deux réglages essentiels mentionnés ci-dessus. Avec ce payload : ```json title="Payload" { "chart": { "labels": ["Jan", "Fév", "Mar", "Avr", "Mai"], "values": [120, 190, 150, 210, 175] } } ``` Ajoutez ceci dans le HTML de votre template : ```html title="HTML" ``` ![Exemple de graphique en barres généré avec Chart.js](https://pdfmonkey.io/fr/docs/img/chart-example.webp) Vous pouvez adapter cet exemple à n’importe quel [type de graphique Chart.js](https://www.chartjs.org/docs/latest/charts/) (courbes, camembert, anneau, radar, etc.) en changeant la valeur de `type` et en ajustant la structure de `data`. > [!WARNING] > **Compatibilité ApexCharts** > > [ApexCharts.js](https://apexcharts.com/) est connu pour produire des bordures noires autour des graphiques dans certains lecteurs PDF, notamment sous Windows et sur Android. Si vous utilisez ApexCharts, testez votre rendu sur plusieurs appareils avant de passer en production. ## Débogage Si votre JavaScript ne se comporte pas comme prévu, utilisez le bouton **Debug** en haut de l’éditeur de templates. Il ouvre la version HTML de votre template, générée à partir de vos données de test, directement dans votre navigateur. ![](https://pdfmonkey.io/fr/docs/img/template-debug-button.webp) Cela vous donne l’occasion d’inspecter les erreurs JS dans la console et devrait vous aider à comprendre ce qui ne fonctionne pas. ## Compatibilité navigateur Notre moteur PDF actuel (v5) est basé sur **Chrome 133**. Vous pouvez vérifier si une fonctionnalité JS spécifique est disponible en utilisant le [tableau de comparaison caniuse](https://caniuse.com/?compare=chrome+133&compareCats=JS,JS%20API). > [!NOTE] > Si vos templates utilisent une version de moteur plus ancienne, consultez [Nos moteurs](https://pdfmonkey.io/fr/docs/modeles-code/nos-moteurs.md) pour voir quelle version de Chrome s’applique à votre moteur. ## FAQ **Peut-on utiliser du JavaScript dans les modèles PDFMonkey ?** Oui. Ajoutez des balises script directement dans l’onglet HTML de l’éditeur de modèle. Activez l’injection JavaScript dans les paramètres du modèle pour accéder aux données du document via l’objet $docPayload. **Quelles bibliothèques JavaScript sont disponibles dans PDFMonkey ?** Chart.js pour les graphiques et Day.js pour le formatage des dates sont intégrés au moteur de rendu. Sur les forfaits payants, vous pouvez également charger des bibliothèques JavaScript externes depuis un CDN. **Comment accéder aux données du document depuis JavaScript dans PDFMonkey ?** Activez l’injection JavaScript dans les paramètres du modèle. Un objet $docPayload devient alors disponible dans vos scripts, contenant l’intégralité du payload JSON transmis lors de la création du document. --- # CSS personnalisée pour les modèles code Source: https://pdfmonkey.io/fr/docs/modeles-code/css-personnalise.md L’éditeur de templates fournit un onglet CSS dédié dans lequel vous pouvez écrire n’importe quel CSS standard. Vos styles s’appliquent aux éléments HTML que vous insérez dans l’onglet HTML lors du rendu. Si vous souhaitez savoir si une fonctionnalité CSS spécifique est disponible, vous pouvez consulter [cette liste de compatibilité pour Chrome 133](https://caniuse.com/?compare=chrome+133&compareCats=CSS), la version utilisée par notre moteur actuel (v5). Chrome 133 supporte la quasi-totalité des fonctionnalités CSS modernes, y compris **Flexbox**, **CSS Grid**, les **propriétés personnalisées**, les **container queries** et la **pseudo-classe `:has()`**. > [!NOTE] > Si vos templates utilisent une version de moteur plus ancienne, consultez [Nos moteurs](https://pdfmonkey.io/fr/docs/modeles-code/nos-moteurs.md) pour voir quelle version de Chrome s’applique à votre moteur. > [!TIP] > **Vous cherchez la mise en page ?** > > Pour la taille de page, les marges, les mises en page sur une seule page, les fonds pleine page et les sauts de page, consultez [Mise en page](https://pdfmonkey.io/fr/docs/modeles-code/mise-en-page.md). ## Bibliothèques CSS externes Écrire votre propre CSS est toujours possible, mais une bibliothèque CSS utilitaire peut accélérer considérablement le développement de templates. Les frameworks comme Bootstrap ont tendance à imposer des opinions marquées en matière de styles d’impression et peuvent perturber votre mise en page. Nous recommandons des outils plus légers comme [Tailwind CSS](https://tailwindcss.com/) ou [Tachyons](https://tachyons.io/). > [!WARNING] > **Compte payant uniquement (en général)** > > Le chargement de CSS via une URL nécessite un compte payant. Consultez [Ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md) pour la définition complète et la disponibilité par offre. > > Cela dit, **une exception est faite pour la CSS hébergée sur nos propres serveurs** — voir [Versions hébergées de Tailwind CSS](#hosted-tailwind-css-versions) ci-dessous. ## Versions hébergées de Tailwind CSS {#hosted-tailwind-css-versions} PDFMonkey fournit des Master Templates, et nous avons mis à disposition des versions hébergées des ressources utilisées pour les construire. Comme ces fichiers sont hébergés sur nos serveurs, ils fonctionnent sur les **comptes Free et payants** — aucune restriction de ressource externe ne s’applique. ### Tailwind CSS v4.x et v3.x (JIT) Ces versions fonctionnent exactement comme celle disponible via le [CDN Tailwind CSS](https://tailwindcss.com/docs/installation/play-cdn). Incluez le script dans votre onglet HTML, en remplaçant le lien CDN officiel par le nôtre : ```html title="HTML" ``` Versions disponibles : * [tailwindcss-4.js](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/js/tailwindcss-4.js) (dernière version, actuellement 4.1.17) * [tailwindcss-4.1.17.js](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/js/tailwindcss-4.1.17.js) * [tailwindcss-4.0.1.js](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/js/tailwindcss-4.0.1.js) * [tailwindcss-3.4.3.js](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/js/tailwindcss-3.4.3.js) * [tailwindcss-3.3.3.js](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/js/tailwindcss-3.3.3.js) * [tailwindcss-3.2.6.js](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/js/tailwindcss-3.2.6.js) * [tailwindcss-3.2.0.js](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/js/tailwindcss-3.2.0.js) * [tailwindcss-3.0.23.js](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/js/tailwindcss-3.0.23.js) Pour les versions v3.x, vous pouvez personnaliser la configuration comme vous le feriez avec le CDN officiel : ```html title="HTML" ``` ### Tailwind CSS v2.0.3 (historique) Nous fournissons une version allégée de Tailwind CSS v2.0.3, débarrassée de tout style qui n’a pas de sens dans un contexte d’impression, comme les animations ou les utilitaires responsive. Elle pèse 165 Ko. Vous pouvez l’importer depuis votre onglet CSS en utilisant : ```css title="CSS" @import url("https://pdfmonkey-resources.s3.eu-west-3.amazonaws.com/css/tailwind-light.min.css"); ``` Vous pouvez également l’importer depuis l’onglet HTML mais sachez que vos styles seront définis avant, et cela peut rendre plus difficile la surcharge des classes Tailwind. ## Styles par document {#the-css-custom-properties-technique} Le code que vous écrivez dans l’onglet CSS ne peut pas appeler les variables fournies dans le payload du Document. Cela dit, vous pouvez utiliser les propriétés personnalisées CSS (aussi appelées variables CSS) pour passer des valeurs dynamiques à votre CSS sur une base par document. Par exemple, si vous souhaitez passer une couleur dans vos données : ```json title="Payload JSON" { "color": "#db2777" } ``` Vous pouvez créer une propriété personnalisée qui prend sa valeur et la rend disponible pour votre CSS : ```html title="HTML" ``` ```css title="CSS" h1 { color: var(--color); } ``` Cette technique fonctionne pour toute valeur CSS : couleurs, tailles de police, espacements ou même familles de polices. ## FAQ **Peut-on utiliser Tailwind CSS dans les templates PDFMonkey ?** Oui. PDFMonkey héberge plusieurs versions de Tailwind CSS (v2 à v4) sur ses propres serveurs, elles fonctionnent donc sur les comptes Free et payants. Incluez la balise script dans votre onglet HTML en pointant vers la version hébergée. **Comment passer des valeurs CSS dynamiques dans PDFMonkey ?** Utilisez les propriétés personnalisées CSS. Définissez une variable dans une balise

Hello\nWorld!

" } } }' ``` La plupart des bibliothèques HTTP (Node.js `fetch`, Python `requests`, Ruby `net/http`) sérialisent les chaînes automatiquement — vous passez le HTML comme une chaîne normale et la bibliothèque gère l'échappement. Si vous construisez le JSON à la main, échappez : - les guillemets doubles → `\"` - les retours à la ligne → `\n` - les antislashs → `\\` Voir [Générer des PDFs avec l'API](https://pdfmonkey.io/fr/docs/generation-de-documents/generation-pdf-via-api.md) pour le flux de génération complet, y compris la récupération de l'URL de téléchargement. ## Combiner votre HTML avec du Liquid Le template passe toujours par Liquid, donc vous pouvez superposer de la logique PDFMonkey sur votre HTML. Par exemple, ce template ajoute un filigrane sans toucher à votre HTML : ```liquid {{htmlContent}} {% if watermark %}
{{watermark}}
{% endif %} ``` Envoyez `htmlContent` et `watermark` dans le payload. La balise `{% raw %}` est disponible si un champ de votre payload contient des caractères `{{` littéraux qui ne doivent pas être évalués. ## Assets, polices et encodage Quelques points à vérifier pour que votre HTML s'affiche correctement. **Les images et feuilles de style externes doivent utiliser des URL absolues.** Le moteur PDF n'a aucune notion de votre système de fichiers ou de votre serveur. Un chemin relatif comme `./img/logo.png` ou `/assets/style.css` ne sera pas résolu et l'asset sera ignoré silencieusement. Utilisez des URL complètes en `https://` à la place. **Les polices externes se chargent normalement si elles sont accessibles.** Un `` vers Google Fonts ou un CDN public fonctionne comme prévu — le moteur les récupère lors du rendu. Les polices hébergées derrière une authentification ou sur localhost ne se chargeront pas. **Déclarez votre encodage de caractères.** Incluez toujours `` dans le ``. Sans cela, les caractères non-ASCII (lettres accentuées, CJK, symboles) peuvent s'afficher sous forme de caractères corrompus selon la version du moteur. ## Compromis et limites | Compromis | Détails | |-----------|---------| | Pas de layout réutilisable | Les en-têtes, pieds de page et styles partagés doivent vivre dans votre propre pipeline HTML | | Payloads plus volumineux | Chaque document transporte la chaîne HTML complète ; les gros payloads comptent dans les [limites de stockage](https://pdfmonkey.io/fr/docs/compte-et-securite/stockage-et-conservation-des-donnees.md) | | Pas d'aperçu en direct | L'onglet Données de test peut contenir un exemple, mais les changements ne se prévisualisent pas comme avec un template classique | | Pas de logique Liquid intégrée | Conditions, boucles et filtres doivent être dans votre moteur, pas dans PDFMonkey | Si vous avez besoin de ces fonctionnalités, basculez sur un [Modèle Code](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) et laissez PDFMonkey gérer le rendu. ## Les Modèles Builder ne supportent pas ce schéma Les Modèles Builder rendent leurs bindings via Vue, qui **échappe le HTML par défaut** dans les expressions `{{ ... }}`. Du HTML brut envoyé via un binding Builder s'affiche comme du texte visible. Pour injecter du HTML déjà construit dans un Modèle Builder, déposez un [bloc HTML](https://pdfmonkey.io/fr/docs/modeles-builder/blocs-disponibles.md#html) sur le canvas et collez votre balisage directement dans son éditeur de code. Les blocs HTML sont statiques — ils font partie du template, pas du payload. ## Pages liées - [Générer des PDFs avec l'API](https://pdfmonkey.io/fr/docs/generation-de-documents/generation-pdf-via-api.md) — le flux de génération complet avec le suivi de statut et le téléchargement - [Utiliser les données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) — la façon standard de passer des données structurées à un template - [La syntaxe Liquid](https://pdfmonkey.io/fr/docs/modeles-code/la-syntaxe-liquid.md) — balises de sortie, logique et filtres dans les Modèles Code - [Blocs disponibles dans le Builder](https://pdfmonkey.io/fr/docs/modeles-builder/blocs-disponibles.md#html) — le bloc HTML pour les Modèles Builder ## FAQ **Puis-je utiliser PDFMonkey comme API HTML vers PDF ?** Oui. Créez un Modèle Code contenant uniquement {{htmlContent}}, puis envoyez votre HTML complet comme valeur de htmlContent dans le payload du document. Le moteur Liquid de PDFMonkey n'échappe pas le HTML, donc le balisage est rendu tel quel et le fichier généré est retourné. **Comment envoyer du HTML déjà construit à PDFMonkey pour obtenir un PDF ?** 1. Créez un Modèle Code avec une seule ligne : {{htmlContent}}. 2. Publiez le template. 3. Envoyez une requête POST à /api/v1/documents avec votre HTML comme chaîne dans le champ htmlContent du payload. PDFMonkey génère le PDF et retourne le document avec une URL de téléchargement. **Cette approche HTML vers PDF fonctionne-t-elle avec un Modèle Builder ?** Non. Les Modèles Builder utilisent Vue, qui échappe le contenu interpolé par défaut. Le HTML brut envoyé via un binding Builder s'affiche comme du texte visible, pas comme du balisage rendu. Utilisez plutôt un Modèle Code, ou déposez un bloc HTML sur le canvas du Builder. **Pourquoi faut-il quand même un template si j'envoie tout le HTML moi-même ?** PDFMonkey génère toujours les documents à partir d'un template. Ce dernier porte le format de page, les marges, la version du moteur et les contrôles d'accès — même lorsqu'il ne contient qu'un placeholder Liquid pour votre HTML. **Quel échappement est nécessaire pour envoyer du HTML dans un payload JSON ?** Les guillemets doubles doivent être échappés en \", les retours à la ligne en \n et les antislashs en \\. La plupart des bibliothèques HTTP et des sérialiseurs JSON gèrent cela automatiquement — l'échappement manuel n'est nécessaire que lorsque vous construisez des chaînes JSON brutes à la main. --- # Générer des PDF avec des intégrations no-code Source: https://pdfmonkey.io/fr/docs/generation-de-documents/utiliser-une-integration.md PDFMonkey s’intègre aux plateformes d’automatisation les plus populaires pour vous permettre de générer des documents sans écrire la moindre ligne de code. Connectez votre CRM, votre outil de formulaires, votre base de données ou toute autre application à PDFMonkey et produisez des PDF automatiquement. ## Quand utiliser une intégration Les intégrations no-code sont le bon choix lorsque : - Vous souhaitez **automatiser la génération de PDF** en réaction à des événements dans d’autres applications (nouvelle soumission de formulaire, nouveau deal CRM, ligne de tableur mise à jour, etc.) - Vous préférez un **workflow visuel en glisser-déposer** plutôt que d’écrire du code - Vous devez connecter PDFMonkey à des **applications sans backend** que vous contrôlez (Google Sheets, Airtable, Typeform, etc.) Si vous avez besoin d’un contrôle programmatique complet ou que vous développez une application sur mesure, utilisez plutôt l’[API REST](https://pdfmonkey.io/fr/docs/generation-de-documents/generation-pdf-via-api.md). ## Comment ça fonctionne Quelle que soit la plateforme choisie, le workflow général est le même : 1. **Créez un template** dans PDFMonkey — soit avec le [Builder visuel](https://pdfmonkey.io/fr/docs/modeles-builder/_index.md), soit avec du [code HTML/CSS](https://pdfmonkey.io/fr/docs/modeles-code/_index.md). 2. **Connectez votre compte PDFMonkey** dans la plateforme d’automatisation à l’aide de votre clé API secrète (disponible sur la page [Mon compte](https://dashboard.pdfmonkey.io/account)). 3. **Configurez un déclencheur** — l’événement qui lance la génération du PDF (par ex. une nouvelle ligne dans un tableur, une soumission de formulaire, un nouvel enregistrement dans un CRM). 4. **Associez vos données** aux variables du template. La plateforme d’automatisation transmet les valeurs du déclencheur vers les champs dynamiques de votre template. 5. **Générez et distribuez** — PDFMonkey crée le PDF et renvoie une URL de téléchargement. Vous pouvez ensuite l’envoyer par e-mail, le déposer sur un espace de stockage distant ou le transmettre à une autre étape de votre workflow. > [!TIP] > La plupart des intégrations renvoient une **URL de téléchargement** après la génération. Cette URL est temporaire (elle expire au bout d’une heure). Si vous avez besoin d’un lien permanent, utilisez un [lien de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md) ou déposez le PDF vers votre propre espace de stockage dans le cadre du workflow. ## Intégrations disponibles | Plateforme | Idéale pour | Détails | | ---------- | ----------- | ------- | | [Zapier](https://pdfmonkey.io/fr/docs/integrations/zapier.md) | Connecter 6 000+ applications avec un modèle simple déclencheur-action | Déclencheurs, actions et mapping de champs | | [Make](https://pdfmonkey.io/fr/docs/integrations/make.md) | Construire des scénarios visuels multi-étapes avec des embranchements | Module complet : générer, récupérer et télécharger | | [n8n](https://pdfmonkey.io/fr/docs/integrations/n8n.md) | Workflows auto-hébergés ou cloud avec un outil open-source | Noeud dédié avec toutes les opérations CRUD | | [Workato](https://pdfmonkey.io/fr/docs/integrations/workato.md) | Automatisation entreprise avec une orchestration avancée | Recettes pour générer, supprimer et réagir aux documents | | [Bubble](https://pdfmonkey.io/fr/docs/integrations/bubble.md) | Ajouter la génération de PDF à une application Bubble no-code | Plugin pour une intégration directe | | [Glide](https://pdfmonkey.io/fr/docs/integrations/glide.md) | Générer des documents depuis une application Glide | Intégration légère | Parcourez toutes les intégrations — dont le [SDK Ruby](https://pdfmonkey.io/fr/docs/integrations/sdk-ruby.md) — dans la section [Intégrations](https://pdfmonkey.io/fr/docs/integrations/_index.md). ## Intégrations personnalisées Pour les plateformes non listées ci-dessus, vous avez deux options : - **Webhooks** — Configurez un [endpoint webhook](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) dans PDFMonkey pour recevoir une notification (avec les données du document et l’URL de téléchargement) à chaque fois qu’un document est généré. Votre système peut ensuite traiter le PDF comme vous le souhaitez. - **Requêtes HTTP directes** — Toute plateforme prenant en charge les requêtes HTTP peut appeler l’[API REST PDFMonkey](https://pdfmonkey.io/fr/docs/generation-de-documents/generation-pdf-via-api.md) directement. Envoyez une requête POST avec l’identifiant de votre template et les données dynamiques pour créer un document. ## Prochaines étapes - Choisissez une plateforme et suivez son guide dédié dans la section [Intégrations](https://pdfmonkey.io/fr/docs/integrations/_index.md) - Vous débutez avec PDFMonkey ? Commencez par [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md) pour créer un template - Besoin de réagir aux documents générés ? Découvrez les [webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) ## FAQ **Peut-on générer des PDF sans coder avec PDFMonkey ?** Oui. PDFMonkey s’intègre avec Zapier, Make, n8n, Workato, Bubble et Glide. Vous concevez un template dans PDFMonkey, puis vous le connectez à votre plateforme d’automatisation pour générer des documents automatiquement lorsque des événements se produisent dans d’autres applications — aucun code requis. **Avec quelles plateformes no-code PDFMonkey s’intègre-t-il ?** PDFMonkey dispose d’intégrations officielles avec Zapier (plus de 6 000 connecteurs), Make (scénarios visuels multi-étapes), n8n (workflows open source), Workato (automatisation entreprise), Bubble (applications web no-code) et Glide (applications mobiles no-code). **Comment fonctionnent les intégrations no-code avec PDFMonkey ?** Le processus est le suivant : 1) Concevez un template dans PDFMonkey, 2) Connectez votre compte PDFMonkey dans la plateforme d’automatisation avec votre clé API, 3) Configurez un événement déclencheur, 4) Associez les champs de données aux variables du template, 5) PDFMonkey génère le document et retourne une URL de téléchargement. --- # Statuts des documents et cycle de vie Source: https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md Chaque document dans PDFMonkey passe par une série de statuts au fil de sa progression, de la création jusqu’au PDF final. Comprendre ce cycle de vie vous aide à construire des intégrations fiables et à résoudre les problèmes de génération. ## Vue d’ensemble des statuts | Statut | Signification | Ce que vous pouvez faire | |:---|:---|:---| | `draft` | Créé mais pas encore mis en file d’attente | Modifier le payload, prévisualiser, supprimer | | `pending` | En file d’attente, en attente d’un worker | Attendre — le traitement démarre automatiquement | | `generating` | Activement transformé en PDF | Attendre — le worker traite le document | | `success` | Le PDF est prêt | Télécharger, partager, intégrer une prévisualisation | | `failure` | Une erreur s’est produite pendant la génération | Examiner l’erreur, corriger le problème, réessayer | ```mermaid stateDiagram-v2 [*] --> draft: Création via API ou tableau de bord draft --> pending: Génération demandée pending --> generating: Pris en charge par un worker generating --> success: PDF prêt generating --> failure: Erreur survenue failure --> pending: Nouvelle tentative ``` ## Brouillon (Draft) {#draft} Un document commence au statut **draft** lorsque vous le créez, que ce soit via l’API ou le Dashboard. C’est le statut par défaut — si vous ne définissez pas `"status": "pending"` dans votre appel API, le document reste dans cet état. **Ce que vous pouvez faire :** - Modifier les données dynamiques (payload) du document - Prévisualiser le document via le champ `preview_url` (voir [Intégrer une prévisualisation de document](https://pdfmonkey.io/fr/docs/generation-de-documents/integrer-un-apercu.md)) - Supprimer le document **Transition sortante :** Demandez la génération en appelant l’API avec `"status": "pending"` ou en cliquant sur **Generate** dans le Dashboard. Le document passe au statut **pending**. > [!TIP] > Vous pouvez passer l’étape du brouillon. Définissez `"status": "pending"` dès la création du document pour lancer immédiatement la génération — c’est l’approche la plus courante pour les intégrations API. ## En attente (Pending) {#pending} Un document au statut **pending** est en file d’attente et attend d’être pris en charge par un worker de génération. **Ce que cela signifie :** La demande de génération a été acceptée mais le traitement n’a pas encore commencé. En conditions normales, les documents quittent ce statut en quelques secondes. **Transition sortante :** Un worker prend en charge le document et le fait passer au statut **generating**. Cela se produit automatiquement — aucune action n’est requise de votre côté. > [!NOTE] > Définir `"status": "pending"` déclenche une vérification du quota. Si votre compte a dépassé son quota mensuel de documents, l’API rejette la requête avec une erreur de validation. Consultez [Nos offres](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) pour les détails des quotas. ## En cours de génération (Generating) {#generating} Un document au statut **generating** est activement traité. Le template est rendu avec le payload du document puis converti en PDF (ou en image, selon le [format de sortie](https://pdfmonkey.io/fr/docs/generation-de-documents/format-de-sortie.md) du template). **Ce que cela signifie :** Le worker construit le document. Cela prend généralement quelques secondes, mais les templates complexes avec de nombreuses pages ou des ressources lourdes peuvent prendre plus de temps. **Transition sortante :** Le document passe au statut **success** ou **failure** selon le résultat. ## Succès (Success) {#success} Un document au statut **success** a été généré et son PDF est disponible au téléchargement. **Ce que vous pouvez faire :** - Télécharger le PDF via le champ `download_url` — il s’agit d’une URL signée temporaire valide pendant 1 heure, renouvelée à chaque appel API (voir [L’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md)) - Partager le document via son `public_share_link` si activé (voir [Liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md)) - Recevoir une notification [webhook](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) lorsque la génération est terminée > [!WARNING] > Le `download_url` expire après 1 heure. Récupérez le document à nouveau depuis l’API pour obtenir une URL fraîche. Consultez [L’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) pour plus de détails. ## Échec (Failure) {#failure} Un document au statut **failure** a rencontré une erreur pendant la génération. Le champ `failure_cause` dans la réponse de l’API contient une description lisible de l’erreur. Le champ `generation_logs` fournit des détails supplémentaires pour le débogage. **Causes fréquentes :** - Erreurs de syntaxe dans le template (Liquid, HTML ou la CSS) - Données dynamiques invalides ou manquantes - Échec du chargement de ressources (URLs d’images cassées, ressources externes inaccessibles) - Timeout dû à une complexité excessive du template **Ce que vous pouvez faire :** - Examiner les champs `failure_cause` et `generation_logs` pour comprendre l’erreur - Corriger le problème sous-jacent dans le template ou le payload - Relancer la génération en remettant le statut du document à `"pending"` via l’API **Transition sortante :** Lorsque vous demandez une nouvelle tentative, le document repasse au statut **pending** et traverse à nouveau le cycle de génération. ## Réagir aux changements de statut Vous n’avez pas besoin de faire des appels en boucle à l’API pour savoir quand un document est prêt. Configurez un [endpoint webhook](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) pour recevoir une notification lorsque la génération réussit ou échoue. C’est l’approche recommandée pour les intégrations en production. Si vous préférez un flux synchrone, utilisez l’endpoint `/api/v1/documents/sync` pour attendre le résultat en une seule requête. Consultez [Génération synchrone](https://pdfmonkey.io/fr/docs/api/documents.md#synchronous-generation) pour les détails et les limitations. ## Pages associées - [L’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) — fonctionnement des liens de téléchargement temporaires - [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) — recevoir des notifications lors des changements de statut - [Référence API Documents](https://pdfmonkey.io/fr/docs/api/documents.md) — documentation complète des endpoints et des champs - [Dépannage : l’URL de téléchargement est vide](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-est-vide.md) — raisons courantes pour lesquelles `download_url` est `null` - [Dépannage : l’URL de téléchargement retourne une erreur 403](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-renvoie-403.md) — comment gérer les URLs expirées ## FAQ **Quels sont les statuts possibles d’un document PDFMonkey ?** Les documents passent par cinq statuts : draft (créé mais non mis en file d’attente), pending (en attente de traitement), generating (en cours de rendu), success (le fichier est prêt à télécharger) et failure (une erreur s’est produite lors de la génération). **Peut-on ignorer le statut draft lors de la génération d’un document PDFMonkey ?** Oui. Définissez le statut sur pending lors de la création du document via l’API pour lancer immédiatement la génération. C’est le schéma le plus courant pour les intégrations API. **Que se passe-t-il quand un document PDFMonkey échoue ?** Le document passe au statut failure avec un champ failure_cause décrivant l’erreur. Vous pouvez inspecter l’erreur, corriger le modèle ou les données, puis relancer en remettant le statut sur pending. --- # URL de téléchargement Source: https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md Lorsqu’un document atteint le [statut](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) **success**, la réponse de l’API inclut un champ `download_url`. Il s’agit d’une URL signée temporaire pointant vers le PDF ou l’image généré et stocké sur S3. Elle déclenche un téléchargement de fichier (pas un affichage dans le navigateur) et expire après 1 heure. ```json title="Réponse d'un document généré avec succès (simplifiée)" { "document": { "id": "a5e86d72-f5b7-43d4-a04e-8b7e08e6741c", "status": "success", "download_url": "https://pdfmonkey-production.s3.eu-west-1.amazonaws.com/...", "preview_url": "https://preview.pdfmonkey.io/...", "public_share_link": null } } ``` ## Quand l’URL de téléchargement apparaît Le champ `download_url` n’est renseigné que lorsque le statut du document est `success`. Pour tous les autres statuts (`draft`, `pending`, `generating`, `failure`), le champ renvoie `null`. Si vous venez de créer un document et que l’URL est null, la raison la plus probable est que la génération n’est pas encore terminée. Consultez [L’URL de téléchargement est vide](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-est-vide.md) pour un diagnostic complet. ## Expiration de l’URL (1 heure) > [!WARNING] > **Les URL de téléchargement expirent après 1 heure** > > Chaque URL de téléchargement est valide pendant **1 heure**. Passé ce délai, le lien renvoie une erreur **403 Forbidden**. C’est un comportement normal : l’URL est conçue pour être éphémère pour des raisons de sécurité. Consultez [L’URL de téléchargement renvoie une erreur 403](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-renvoie-403.md) si vous rencontrez ce problème. Chaque fois que vous récupérez les détails du document (via l’API ou une intégration), vous recevez une **URL fraîche** avec une nouvelle fenêtre d’une heure. Vous n’avez jamais besoin de régénérer le document lui-même pour obtenir un lien fonctionnel. Si vous avez besoin d’une URL permanente qui n’expire jamais, utilisez plutôt les [Liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md). ## Renouveler une URL de téléchargement expirée Si une URL de téléchargement a expiré, récupérez le document à nouveau pour en obtenir une nouvelle : - **Via l’API :** `GET /api/v1/document_cards/:id` — voir la [Référence API Documents](https://pdfmonkey.io/fr/docs/api/documents.md) - **Via une intégration :** Utilisez une action « Get Document » ou « Find Document » dans [Zapier](https://pdfmonkey.io/fr/docs/integrations/zapier.md), [Make](https://pdfmonkey.io/fr/docs/integrations/make.md) ou une autre plateforme - **Via le tableau de bord :** Ouvrez la page de détail du document — le lien de téléchargement est toujours à jour Vous n’avez **pas** besoin de régénérer le document. Le fichier reste sur S3 jusqu’à sa [suppression](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) — seule l’URL signée expire. ## URL de téléchargement vs. autres champs d’URL | Champ | Utilisation | Expiration | |:------|:-----------|:-----------| | `download_url` | URL signée temporaire qui télécharge le fichier généré. Renseignée uniquement au statut `success`. | 1 heure | | `preview_url` | Affiche un aperçu du document dans le navigateur. Fonctionne même pour les brouillons. **Ce n’est pas un lien de téléchargement** — ne l’utilisez pas pour récupérer le fichier final. Voir [Intégrer une prévisualisation](https://pdfmonkey.io/fr/docs/generation-de-documents/integrer-un-apercu.md). | N’expire pas | | `public_share_link` | URL publique permanente pour consulter et télécharger le fichier. Disponible uniquement sur les plans Pro+ et Premium. Voir [Liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md). | N’expire pas | ## Bonnes pratiques - **Téléchargez rapidement.** Lorsque vous recevez une notification [webhook](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) ou que vous interrogez l’API pour vérifier que le document est prêt, téléchargez le fichier immédiatement. - **Stockez le fichier, pas l’URL.** Si vous avez besoin du fichier plus tard, enregistrez-le dans votre propre stockage (S3, Google Drive, etc.) plutôt que de compter sur l’URL de téléchargement temporaire. - **Récupérez à nouveau si nécessaire.** Si vous avez besoin de l’URL plus tard, appelez l’API à nouveau pour en obtenir une nouvelle — cela ne prend qu’une seule requête GET. - **Utilisez les liens de partage pour la diffusion.** Si vous avez besoin d’une URL stable pour l’intégrer dans des e-mails ou des pages web, utilisez `public_share_link` à la place (nécessite un plan Pro+ ou Premium). Voir [Liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md). ## Dépannage - [L’URL de téléchargement est vide](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-est-vide.md) — raisons courantes pour lesquelles l’URL est `null` - [L’URL de téléchargement renvoie une erreur 403](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-renvoie-403.md) — comment gérer les URL expirées ## Pages associées - [Statuts des documents et cycle de vie](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) — comprendre quand `download_url` devient disponible - [Générer des PDF avec l’API](https://pdfmonkey.io/fr/docs/generation-de-documents/generation-pdf-via-api.md) — flux de génération de bout en bout - [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) — être notifié lorsqu’un document est prêt à télécharger - [Suppression automatique (TTL)](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) — durée de stockage des fichiers avant nettoyage - [Référence API Documents](https://pdfmonkey.io/fr/docs/api/documents.md) — documentation complète des champs ## FAQ **Combien de temps une URL de téléchargement PDFMonkey est-elle valide ?** Chaque URL de téléchargement est un lien signé temporaire valide pendant 1 heure. Passé ce délai, elle renvoie une erreur 403 Forbidden. Récupérez le document à nouveau via l’API pour obtenir une URL fraîche — pas besoin de régénérer le document. **Pourquoi le champ download_url est-il null ?** Le champ download_url n’est renseigné que lorsque le statut du document est "success". Si le document est en statut draft, pending, generating ou failure, le champ renvoie null. Assurez-vous de définir le statut sur "pending" lors de la création du document et attendez la fin de la génération. **Comment obtenir une nouvelle URL de téléchargement après expiration ?** Récupérez le document à nouveau via l’API (GET /api/v1/document_cards/:id) ou via une intégration. Chaque appel renvoie une URL fraîche avec une nouvelle fenêtre d’une heure. Pas besoin de régénérer le document. --- # Définir un nom de fichier personnalisé pour les documents générés Source: https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md Par défaut, PDFMonkey nomme les fichiers générés avec un identifiant interne. Vous pouvez remplacer ce comportement en passant une clé `_filename` dans les **métadonnées** du document — cela fonctionne aussi bien pour les PDF que pour les images. ## Définir le nom de fichier via l’API Incluez la clé `_filename` dans l’objet `meta` lorsque vous [créez](https://pdfmonkey.io/fr/docs/api/documents.md#create-a-document) ou [mettez à jour](https://pdfmonkey.io/fr/docs/api/documents.md#update-a-document) un document : ```bash curl https://api.pdfmonkey.io/api/v1/documents \ -X POST \ -H 'Authorization: Bearer YOUR_SECRET_KEY' \ -H 'Content-Type: application/json' \ -d '{ "document": { "document_template_id": "YOUR_TEMPLATE_ID", "status": "pending", "payload": { "name": "Jane Doe" }, "meta": { "_filename": "facture-2050-03.pdf" } } }' ``` Le champ `meta` accepte un objet JSON. Vous pouvez inclure d’autres clés de métadonnées en plus de `_filename` — consultez la [référence API Documents](https://pdfmonkey.io/fr/docs/api/documents.md#create-a-document) pour tous les détails. ## Définir le nom de fichier depuis le tableau de bord 1. Ouvrez un document dans l’éditeur de document. 2. Passez à l’onglet **Meta data**. 3. Saisissez la clé `_filename` et le nom souhaité : ```json { "_filename": "facture-2050-03.pdf" } ``` 4. Cliquez sur **Save**, puis sur **Generate**. Pour un guide complet, consultez [Générer des documents depuis le tableau de bord](https://pdfmonkey.io/fr/docs/generation-de-documents/utiliser-le-tableau-de-bord.md). ## Gestion de l’extension de fichier PDFMonkey gère automatiquement l’extension en fonction du format de sortie (PDF, PNG, WebP ou JPG) : - **Si vous incluez l’extension correspondante** (par ex. `facture.pdf` pour un modèle PDF), PDFMonkey la retire et la ré-ajoute pour garder le nom propre. - **Si vous omettez l’extension**, PDFMonkey ajoute automatiquement la bonne. - **Si vous incluez une extension incorrecte** (par ex. `.png` sur un document PDF), elle est traitée comme faisant partie du nom et l’extension correcte est quand même ajoutée. > [!TIP] > Inutile de vous soucier de l’extension. Fournissez simplement le nom souhaité et laissez PDFMonkey faire le reste. ## Assainissement du nom de fichier PDFMonkey assainit la valeur de `_filename` pour garantir sa compatibilité avec tous les systèmes de fichiers : | Règle | Exemple | |:------|:--------| | Les caractères accentués sont translittérés en ASCII | `cafe-resume` devient `cafe-resume` | | Les caractères autres que lettres, chiffres, tirets, underscores et espaces sont remplacés par un tiret | `report@2050/03` devient `report-2050-03` | | Les tirets consécutifs sont fusionnés | `report---final` devient `report-final` | | Les tirets en début et fin de chaîne sont supprimés | `-my-file-` devient `my-file` | | Les espaces en début et fin de chaîne sont supprimés | `" invoice "` devient `"invoice"` | Par exemple, une valeur `"Facture n 2050/03"` pour un modèle PDF produit le nom de fichier `Facture n-2050-03.pdf`. ## Fonctionne aussi avec les images La clé `_filename` fonctionne de la même manière pour les [formats d’image](https://pdfmonkey.io/fr/docs/generation-de-documents/format-de-sortie.md). L’extension est ajustée en fonction du type d’image (`.webp`, `.png` ou `.jpg`) : ```json { "meta": { "_filename": "social-card-march", "_type": "png" } } ``` Cela produit un fichier nommé `social-card-march.png`. ## Questions fréquentes **Que se passe-t-il si je ne définis pas de nom de fichier personnalisé ?** PDFMonkey utilise un nom par défaut interne. Si vous avez besoin de noms de fichiers prévisibles pour l’archivage ou des systèmes en aval, définissez toujours `_filename`. **Puis-je utiliser des données dynamiques dans le nom de fichier ?** Pas directement dans la valeur `_filename`. Cependant, dans la plupart des plateformes d’intégration (Zapier, Make, n8n), vous pouvez utiliser des champs dynamiques ou des expressions pour construire la chaîne du nom de fichier avant de la transmettre à PDFMonkey. **Y a-t-il une longueur maximale pour le nom de fichier ?** Il n’y a pas de limite explicite imposée par PDFMonkey, mais gardez des noms de fichiers raisonnables (moins de 200 caractères) pour éviter les problèmes avec les systèmes de fichiers et les navigateurs. ## Pages associées - [Référence API Documents](https://pdfmonkey.io/fr/docs/api/documents.md) — documentation complète des paramètres `meta` et autres champs - [Générer des PDF via l’API](https://pdfmonkey.io/fr/docs/generation-de-documents/generation-pdf-via-api.md) — workflow complet de génération - [Générer des documents depuis le tableau de bord](https://pdfmonkey.io/fr/docs/generation-de-documents/utiliser-le-tableau-de-bord.md) — utilisation de l’onglet Métadonnées - [Formats de sortie](https://pdfmonkey.io/fr/docs/generation-de-documents/format-de-sortie.md) — génération d’images et clés meta comme `_type` - [URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) — comment récupérer le fichier généré ## FAQ **Comment définir un nom de fichier personnalisé pour un document PDFMonkey ?** Passez une clé "_filename" dans le champ meta du document. Via l’API, incluez-la dans l’objet meta lors de la création ou de la mise à jour d’un document : "meta": { "_filename": "facture-2050.pdf" }. Dans le tableau de bord, saisissez-la dans l’onglet Métadonnées de l’éditeur de document. **PDFMonkey ajoute-t-il l’extension de fichier automatiquement ?** Oui. Si vous incluez la bonne extension (.pdf, .png, .webp, .jpg), PDFMonkey la retire et la ré-ajoute pour garder le nom propre. Si vous l’omettez, PDFMonkey l’ajoute automatiquement en fonction du format de sortie. **Quels caractères sont autorisés dans le nom de fichier personnalisé ?** PDFMonkey assainit le nom de fichier : les caractères accentués sont translittérés en ASCII, tout caractère qui n’est pas une lettre, un chiffre, un tiret, un underscore ou un espace est remplacé par un tiret, et les tirets consécutifs ou en début/fin de chaîne sont supprimés. --- # Protéger les PDF générés par mot de passe Source: https://pdfmonkey.io/fr/docs/generation-de-documents/protection-par-mot-de-passe.md Vous pouvez générer des PDF protégés par mot de passe en passant une clé `_password` dans les **métadonnées** du document. Le fichier généré est chiffré en AES-256 et nécessite le mot de passe pour être ouvert. Si vous omettez `_password`, les documents se génèrent sans chiffrement comme d'habitude. ## Définir le mot de passe via l'API Incluez la clé `_password` dans l'objet `meta` lorsque vous [créez](https://pdfmonkey.io/fr/docs/api/documents.md#create-a-document) un document : ```bash curl https://api.pdfmonkey.io/api/v1/documents \ -X POST \ -H 'Authorization: Bearer YOUR_SECRET_KEY' \ -H 'Content-Type: application/json' \ -d '{ "document": { "document_template_id": "YOUR_TEMPLATE_ID", "status": "pending", "payload": { "name": "Jane Doe" }, "meta": { "_password": "s3cur3-p@ss!" } } }' ``` Vous pouvez combiner `_password` avec d'autres clés meta comme [`_filename`](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) : ```json { "meta": { "_filename": "contrat-jane-doe.pdf", "_password": "s3cur3-p@ss!" } } ``` ## Définir le mot de passe depuis le tableau de bord 1. Ouvrez un document dans l'éditeur de document. 2. Passez à l'onglet **Meta data**. 3. Saisissez la clé `_password` et le mot de passe souhaité : ```json { "_password": "s3cur3-p@ss!" } ``` 4. Cliquez sur **Save**, puis sur **Generate**. Pour un guide complet, consultez [Générer des documents depuis le tableau de bord](https://pdfmonkey.io/fr/docs/generation-de-documents/utiliser-le-tableau-de-bord.md). ## Fonctionnement Quand `_password` est présent dans le meta, PDFMonkey chiffre le PDF généré en **AES-256** après le rendu. Le destinataire a besoin du mot de passe exact pour ouvrir le document. Sans lui, le contenu reste inaccessible. - **Tous les templates fonctionnent.** Éditeur Code, Builder, templates existants — la protection par mot de passe marche avec tout. - **Aucune configuration nécessaire.** Pas besoin d'activer quoi que ce soit sur le template ou votre compte. - **Compatible avec toutes les intégrations.** Zapier, Make, Workato, n8n, Bubble, Glide, API directe — partout où vous pouvez définir le champ `meta`. - **Contrôle par document.** Un document peut être protégé pendant que le suivant ne l'est pas. - **Disponible sur tous les plans.** Plan gratuit inclus. ## Questions fréquentes **Que se passe-t-il si je ne définis pas de mot de passe ?** Les documents se génèrent sans chiffrement, exactement comme avant. La protection par mot de passe est optionnelle. **Puis-je utiliser des données dynamiques dans le mot de passe ?** Pas directement dans la valeur `_password`. Cependant, dans la plupart des plateformes d'intégration (Zapier, Make, n8n), vous pouvez utiliser des champs dynamiques ou des expressions pour construire la chaîne du mot de passe avant de la transmettre à PDFMonkey. **La protection par mot de passe fonctionne-t-elle avec les formats d'image ?** Non. La protection par mot de passe s'applique uniquement à la sortie PDF. Les formats d'image (PNG, WebP, JPG) ne prennent pas en charge le chiffrement. ## Pages associées - [Nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) — une autre clé meta qui contrôle le comportement de la génération - [Référence API Documents](https://pdfmonkey.io/fr/docs/api/documents.md) — documentation complète des paramètres `meta` et autres champs - [Générer des PDF via l'API](https://pdfmonkey.io/fr/docs/generation-de-documents/generation-pdf-via-api.md) — workflow complet de génération - [Générer des documents depuis le tableau de bord](https://pdfmonkey.io/fr/docs/generation-de-documents/utiliser-le-tableau-de-bord.md) — utilisation de l'onglet Métadonnées ## FAQ **Comment protéger un PDF par mot de passe avec PDFMonkey ?** Passez une clé "_password" dans le champ meta du document. Via l'API, incluez-la dans l'objet meta lors de la création d'un document : "meta": { "_password": "votre-mot-de-passe" }. Le PDF généré sera chiffré en AES-256 et nécessitera le mot de passe pour être ouvert. **Quel chiffrement PDFMonkey utilise-t-il pour les PDF protégés ?** PDFMonkey utilise le chiffrement AES-256. Le PDF est chiffré après la génération, et le destinataire a besoin du mot de passe exact que vous avez spécifié pour ouvrir le document. **Est-ce que je peux générer des PDF sans mot de passe ?** Oui. Si vous n'incluez pas le champ _password dans le meta, les PDF se génèrent exactement comme avant : pas de chiffrement, pas de mot de passe. La protection par mot de passe est entièrement optionnelle, document par document. --- # Générer des images au lieu de PDF Source: https://pdfmonkey.io/fr/docs/generation-de-documents/format-de-sortie.md PDFMonkey génère des PDF par défaut, mais les modèles avec le type de sortie **Image** produisent des **images WebP, PNG ou JPG** à la place. Le flux API est identique ; seul le type de modèle et quelques options meta diffèrent. ## Créer un modèle image Pour générer des images, vous avez besoin d’un modèle configuré pour la sortie image. Sélectionnez **Image** comme type de sortie lors de la création de votre modèle : > [!TIP] > **Astuce** > > Vous pouvez également dupliquer un modèle existant et changer son type de sortie en **Image**. > [!NOTE] > **Pourquoi des types de modèles distincts ?** > > Les PDF et les images ont des capacités fondamentalement différentes. Les documents PDF prennent en charge les en-têtes, pieds de page et différents formats de papier. Les modèles images prennent en charge les arrière-plans transparents et des dimensions en pixels à la place. Une fois le modèle créé, ouvrez ses paramètres pour configurer : - **Largeur et hauteur** : en pixels (500 x 500 par défaut) - **Arrière-plan transparent** : pris en charge par WebP et PNG ## Générer une image via l’API Générez une image de la même manière que vous générez un PDF : envoyez une requête `POST` à `/api/v1/documents` (ou `/api/v1/documents/sync` pour la [génération synchrone](https://pdfmonkey.io/fr/docs/api/documents.md#synchronous-generation)). Tant que le `document_template_id` pointe vers un modèle image, PDFMonkey produit une image au lieu d’un PDF. ```bash curl https://api.pdfmonkey.io/api/v1/documents \ -X POST \ -H 'Authorization: Bearer YOUR_SECRET_KEY' \ -H 'Content-Type: application/json' \ -d '{ "document": { "document_template_id": "YOUR_IMAGE_TEMPLATE_ID", "status": "pending", "payload": { "title": "Hello World" } } }' ``` Par défaut, une image **WebP** est créée. Le WebP offre une bonne qualité pour une taille de fichier raisonnable et prend en charge les arrière-plans transparents. ## Options meta à la génération Vous pouvez remplacer les valeurs par défaut du modèle à la génération en passant des clés spéciales dans le champ `meta` du document. Ces options ne s’appliquent qu’aux modèles images ; elles sont ignorées pour les modèles PDF. | Clé | Type | Description | Défaut | |:---|:---|:---|:---| | `_type` | string | Format d’image : `webp`, `png` ou `jpg` | `webp` | | `_width` | integer | Largeur de l’image en pixels | Paramètre du modèle (500) | | `_height` | integer | Hauteur de l’image en pixels | Paramètre du modèle (500) | | `_quality` | integer | Qualité de compression de 1 à 100 (WebP uniquement) | `100` | ```json5 title="Corps de la requête avec options meta" { "document": { "document_template_id": "YOUR_IMAGE_TEMPLATE_ID", "payload": { "title": "Hello World" }, "status": "pending", "meta": { "_type": "png", "_width": 1200, "_height": 630 } } } ``` > [!WARNING] > L’option `_quality` ne s’applique qu’aux images WebP. Le PNG est toujours sans perte, et le JPG utilise un réglage de qualité fixe. > [!TIP] > Pour les cartes de réseaux sociaux et les images Open Graph, `1200x630` est la taille la plus couramment recommandée. Passez `"_type": "png"` pour une compatibilité maximale. ## Arrière-plans transparents La transparence est contrôlée dans les **paramètres du modèle**, pas à la génération. Activez-la lorsque vous avez besoin d’images sans arrière-plan (utile pour les logos, filigranes et éléments superposés). Les arrière-plans transparents sont pris en charge par **WebP** et **PNG**. Le JPG ne prend pas en charge la transparence : les zones transparentes sont rendues en blanc. ## Noms de fichiers personnalisés pour les images La clé meta `_filename` fonctionne de la même manière pour les images que pour les PDF (voir [Nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md)). PDFMonkey ajoute automatiquement la bonne extension (`.webp`, `.png` ou `.jpg`) : ```json { "meta": { "_filename": "social-card-march", "_type": "png" } } ``` Cela produit un fichier nommé `social-card-march.png`. ## Questions fréquentes **Que se passe-t-il si j’utilise les options meta image sur un modèle PDF ?** Elles sont ignorées. Les clés meta `_type`, `_width`, `_height` et `_quality` n’affectent que les modèles images. **Peut-on changer le format de sortie d’un modèle existant ?** Oui. Ouvrez les paramètres du modèle dans le Dashboard et changez le type de sortie. Les documents existants générés à partir du modèle ne sont pas affectés ; seuls les nouveaux documents utilisent le paramètre mis à jour. **Y a-t-il une taille d’image maximale ?** Il n’y a pas de limite stricte en pixels, mais les images très grandes (au-delà de 4000 x 4000 px) augmentent le temps de génération et la consommation mémoire. Gardez des dimensions raisonnables pour votre cas d’usage. **Les webhooks fonctionnent-ils avec la génération d’images ?** Oui. Les [webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) se déclenchent sur `documents.generation.success` et `documents.generation.failure` quel que soit le type de sortie. ## Pages associées - [Générer des PDF avec l’API](https://pdfmonkey.io/fr/docs/generation-de-documents/generation-pdf-via-api.md) : flux de génération de bout en bout - [Nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) : contrôler le nom du fichier généré - [Référence API Documents](https://pdfmonkey.io/fr/docs/api/documents.md) : documentation complète des paramètres `meta` et autres champs - [Statuts et cycle de vie des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) : comprendre le cycle de vie de la génération - [L’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) : comment récupérer le fichier généré ## FAQ **PDFMonkey peut-il générer des images au lieu de PDF ?** Oui. PDFMonkey prend en charge la génération d’images WebP, PNG et JPG en plus des PDF. Créez un modèle avec le type de sortie Image, puis utilisez les mêmes endpoints API pour générer des images. **Quel est le format d’image par défaut dans PDFMonkey ?** Le WebP est le format par défaut pour les modèles images. Il offre une bonne qualité pour une taille de fichier réduite et prend en charge les arrière-plans transparents. Vous pouvez le modifier en passant _type: png ou _type: jpg dans les métadonnées du document. **Comment définir les dimensions d’une image générée ?** Définissez les dimensions par défaut dans les paramètres du modèle (largeur et hauteur en pixels, 500x500 par défaut). Vous pouvez les modifier à la génération en passant _width et _height dans les métadonnées du document. --- # Liens de partage permanents pour les documents générés Source: https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md Chaque document généré avec succès sur un plan **Pro+** ou **Premium** inclut un champ `public_share_link` : une URL publique permanente qui n’expire jamais et ne nécessite aucune authentification. Utilisez-la pour partager des fichiers générés par email, les intégrer dans des pages web ou les distribuer à des destinataires externes. ```json title="Réponse pour un document généré avec succès (extrait)" { "document": { "id": "a5e86d72-f5b7-43d4-a04e-8b7e08e6741c", "status": "success", "download_url": "https://pdfmonkey-production.s3.eu-west-1.amazonaws.com/...", "public_share_link": "https://files.pdfmonkey.io/share/72BE2293-D130-4C19-9E11-C82B5CEA8C37/invoice-2050-03.pdf" } } ``` > [!WARNING] > **Plans Pro+ et Premium uniquement** > > Les liens de partage ne sont disponibles que sur les plans Pro+ et Premium. Sur les autres plans, `public_share_link` retourne `null`. Consultez [Nos plans](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) pour un comparatif des fonctionnalités. ## Quand le lien de partage apparaît Le champ `public_share_link` est renseigné lorsque **les deux conditions** suivantes sont réunies : 1. Le [statut](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) du document est `success`. 2. Le compte est sur un plan **Pro+** ou **Premium**. Pour tout autre statut (`draft`, `pending`, `generating`, `failure`) ou sur un plan inférieur, le champ retourne `null`. ## Format de l’URL Les liens de partage suivent ce schéma : ``` https://files.pdfmonkey.io/share/{share_token}/{filename} ``` - **`share_token`** est un UUID attribué à chaque document lors de sa création. Il ne change pas. - **`filename`** est le nom du fichier du document, extension comprise (`.pdf`, `.png`, `.webp` ou `.jpg`). Si vous définissez un [nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md), il apparaît ici. ## Affichage en ligne ou téléchargement Par défaut, un lien de partage déclenche un **téléchargement du fichier**. Pour afficher le fichier directement dans le navigateur, ajoutez le paramètre `disposition` : ``` https://files.pdfmonkey.io/share/{share_token}/{filename}?disposition=inline ``` | Valeur | Comportement | |:-------|:-------------| | `attachment` (par défaut) | Le navigateur télécharge le fichier | | `inline` | Le navigateur affiche le fichier (les PDF s’ouvrent dans la visionneuse intégrée ; les images s’affichent directement) | > [!TIP] > Utilisez `?disposition=inline` lorsque vous intégrez des liens de partage dans des pages web et souhaitez que l’utilisateur visualise le document avant de le télécharger. ## Liens de partage vs URL de téléchargement | | `public_share_link` | `download_url` | |:---|:---|:---| | **Expiration** | N’expire jamais | Expire après 1 heure | | **Authentification** | Aucune requise | Aucune requise | | **Disponibilité** | Plans Pro+ et Premium uniquement | Tous les plans | | **Affichage en ligne** | Via `?disposition=inline` | Non (téléchargement systématique) | | **Quand renseigné** | Statut `success` sur un plan éligible | Statut `success` | Si vous avez besoin d’une URL valide indéfiniment, utilisez `public_share_link`. Si vous n’avez besoin que d’un lien de téléchargement éphémère (par exemple, pour enregistrer le fichier sur votre propre stockage juste après la génération), `download_url` suffit. Consultez [L’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) pour plus de détails. ## Changement de plan et liens de partage Les liens de partage sont liés au plan de votre compte, pas aux documents individuels : - **Passage à un plan Pro+ ou Premium :** tous les documents générés avec succès par le passé obtiennent rétroactivement un lien de partage fonctionnel. Aucune régénération n’est nécessaire. - **Passage à un plan inférieur au Pro+ :** les liens de partage existants cessent de fonctionner immédiatement. Le champ `public_share_link` retourne `null` dans les réponses de l’API. De plus, les documents qui dépassent la [durée de rétention](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) du nouveau plan sont définitivement supprimés. - **Remise à niveau ultérieure :** les liens de partage se réactivent automatiquement pour les documents encore existants. En revanche, les documents supprimés durant le passage à un plan inférieur en raison d’une rétention plus courte sont perdus définitivement et ne peuvent pas être récupérés. Consultez [Changer de plan](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) pour plus de détails sur l’impact des changements de plan. ## Fonctionne aussi avec les images Les liens de partage fonctionnent pour tous les [formats de sortie](https://pdfmonkey.io/fr/docs/generation-de-documents/format-de-sortie.md), pas seulement les PDF. Si votre template produit une image WebP, PNG ou JPG, le lien de partage pointe vers le fichier image avec l’extension correspondante. ## Questions fréquentes **Pourquoi `public_share_link` est-il `null` alors que mon document est en `success` ?** Votre compte est probablement sur un plan qui n’inclut pas les liens de partage (Free, Starter ou Pro). Passez au plan Pro+ ou Premium pour activer cette fonctionnalité. Consultez [Nos plans](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md). **Peut-on révoquer un lien de partage pour un document spécifique ?** La suppression du document retire définitivement le lien de partage. Il n’existe pas de moyen de désactiver un lien de partage sans supprimer le document. **Les liens de partage survivent-ils à la suppression du document ?** Non. Une fois le document [supprimé](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) (manuellement ou via le TTL), le lien de partage retourne une erreur 404. **Le lien de partage est-il inclus dans les payloads des webhooks ?** Oui. Le champ `public_share_link` fait partie du payload du document envoyé à votre [endpoint de webhook](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) lors d’une génération réussie. ## Pages liées - [L’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) — liens temporaires signés et comparaison avec les liens de partage - [Statuts et cycle de vie des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) — quand `public_share_link` devient disponible - [Nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) — contrôler le nom de fichier dans le lien de partage - [Suppression automatique (TTL)](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) — impact de la suppression sur les liens de partage - [Nos plans](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) — quels plans incluent les liens de partage - [Changer de plan](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) — que deviennent les liens de partage lors d’un changement de plan - [Référence API Documents](https://pdfmonkey.io/fr/docs/api/documents.md) — documentation complète des champs, dont `public_share_link` ## FAQ **Qu’est-ce qu’un lien de partage PDFMonkey ?** Un lien de partage est une URL publique permanente pour un document généré. Il n’expire jamais, ne nécessite aucune authentification et peut être intégré dans des emails, des pages web ou partagé directement. Disponible sur les plans Pro+ et Premium. **Quelle différence entre un lien de partage et une URL de téléchargement ?** Les URL de téléchargement sont temporaires (1 heure) et déclenchent toujours un téléchargement. Les liens de partage sont permanents. Par défaut, ils déclenchent un téléchargement, mais vous pouvez ajouter ?disposition=inline pour afficher le fichier dans le navigateur. **Les liens de partage fonctionnent-ils encore si je passe à un plan inférieur ?** Non. Les liens de partage cessent de fonctionner lors d’un passage à un plan inférieur au Pro+. Les documents qui dépassent la durée de rétention du nouveau plan sont définitivement supprimés. Si vous repassez sur un plan éligible, les liens de partage se réactivent pour les documents encore existants. --- # Rétention des documents et suppression automatique (TTL) Source: https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md Chaque document généré est stocké sur les serveurs de PDFMonkey jusqu’à son expiration ou sa suppression. Vous contrôlez la durée de vie des documents en définissant un **TTL (Time To Live)** sur chaque modèle. Lorsque le TTL d’un document expire, PDFMonkey le supprime automatiquement ainsi que son fichier généré. ## Fonctionnement du TTL Le TTL est un paramètre par modèle exprimé en secondes. Lorsqu’un document termine sa génération avec succès, PDFMonkey calcule son heure d’expiration en ajoutant le TTL au timestamp de génération. Une tâche de fond s’exécute chaque minute pour supprimer tous les documents dont l’expiration est passée. Le décompte commence lorsque le document atteint le [statut](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) `success`, et non lorsqu’il est créé ou mis en file d’attente. > [!NOTE] > **La suppression peut prendre jusqu’à une minute** > > La tâche de suppression automatique s’exécute chaque minute. En pratique, un document peut persister jusqu’à une minute après son heure d’expiration. ## Configurer le TTL dans le tableau de bord Ouvrez l’onglet **Settings** de votre modèle et repérez le menu déroulant **Deletion**. Sélectionnez la durée de rétention qui correspond à vos besoins : ![Le menu déroulant Deletion dans les paramètres du modèle, avec des options de 5 minutes à 1 semaine, plus Jamais](https://pdfmonkey.io/fr/docs/img/auto-deletion-settings.webp) Les options disponibles dépendent de votre [forfait](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md). Si vous sélectionnez une valeur non prise en charge par votre forfait, PDFMonkey la plafonne au maximum autorisé. ## Valeurs TTL disponibles par forfait | Option TTL | Secondes | Free | Starter | Pro | Pro+ | Premium | |:-----------|--------:|:----:|:-------:|:---:|:----:|:-------:| | 5 minutes | 300 | Oui | Oui | Oui | Oui | Oui | | 20 minutes | 1 200 | Oui | Oui | Oui | Oui | Oui | | 1 heure | 3 600 | Oui | Oui | Oui | Oui | Oui | | 1 jour | 86 400 | Oui | Oui | Oui | Oui | Oui | | 1 semaine | 604 800 | Non | Non | Oui | Oui | Oui | | 1 mois | 2 592 000 | Non | Non | Non | Oui | Oui | | 1 an | 31 536 000 | Non | Non | Non | Oui | Oui | | Jamais (illimité) | 0 | Non | Non | Non | Oui | Oui | > [!WARNING] > **Limites par forfait** > > Chaque forfait a un TTL maximum. Si vous définissez un TTL supérieur à ce que votre forfait autorise (par exemple, « 1 semaine » sur un forfait Starter), PDFMonkey utilise automatiquement la valeur la plus élevée disponible. ## Définir le TTL via l’API Lors de la création ou de la mise à jour d’un modèle via l’[API Templates](https://pdfmonkey.io/fr/docs/api/templates.md), incluez le champ `ttl` avec une valeur en secondes : ```json title="Définir le TTL lors de la création d'un modèle" { "document_template": { "identifier": "invoice-template", "ttl": 3600 } } ``` Le même plafonnement par forfait s’applique : si vous demandez un TTL qui dépasse le maximum de votre forfait, l’API utilise silencieusement la valeur la plus élevée autorisée au lieu de renvoyer une erreur. ## Ce qui est supprimé Lorsqu’un document est supprimé (que ce soit par expiration du TTL, suppression manuelle dans le tableau de bord ou via un [appel API](https://pdfmonkey.io/fr/docs/api/documents.md#delete-a-document)), PDFMonkey supprime : - **Le fichier généré** (PDF, PNG, WebP ou JPG) du stockage - **Le payload** (les données dynamiques envoyées pour générer le document) - **Les données meta** associées au document Le document n’apparaît plus dans les réponses de l’API ni dans le tableau de bord. Tout [lien de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md) pointant vers le document renvoie une erreur 404. > [!CAUTION] > **La suppression est définitive** > > Il n’existe aucun moyen de récupérer un document supprimé, son fichier généré ou son payload. Si vous devez conserver des fichiers à long terme, téléchargez-les vers votre propre stockage avant l’expiration du TTL. Consultez [L’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) pour plus de détails. ## Changements de forfait et rétention Lorsque vous changez de forfait, PDFMonkey ajuste les paramètres TTL pour correspondre aux limites du nouveau forfait : - **Passage à un forfait supérieur :** les modèles conservent leur TTL actuel. Si vous aviez défini un TTL inférieur en raison de restrictions de forfait, vous pouvez désormais l’augmenter jusqu’au maximum de votre nouveau forfait. - **Passage à un forfait inférieur :** tout modèle dont le TTL dépasse le maximum du nouveau forfait est automatiquement plafonné. Les documents existants de ces modèles voient leurs dates d’expiration recalculées, ce qui peut entraîner une expiration plus rapide que prévu initialement. Consultez [Changer de forfait](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) pour un aperçu plus large de l’impact des changements de forfait sur votre compte. ## Suppression manuelle Si vous préférez supprimer des documents selon votre propre calendrier plutôt que de compter sur le TTL, vous avez deux options : 1. **Tableau de bord :** ouvrez le document et cliquez sur le bouton de suppression. 2. **API :** envoyez une requête `DELETE` à `/api/v1/documents/:id`. Consultez la [référence API](https://pdfmonkey.io/fr/docs/api/documents.md#delete-a-document) pour plus de détails. La suppression manuelle retire les mêmes données que la suppression automatique par TTL. ## Questions fréquentes **Pourquoi mon document a-t-il été supprimé avant le TTL que j’avais défini ?** Si vous avez récemment rétrogradé votre forfait, PDFMonkey a peut-être recalculé les dates d’expiration des documents existants. Un modèle configuré sur « 1 semaine » avec un forfait Pro rétrogradé en Starter (maximum 1 jour) voit le TTL de ses documents raccourci en conséquence. **Puis-je définir des valeurs TTL différentes pour différents modèles ?** Oui. Le TTL est un paramètre par modèle. Chaque modèle de votre compte peut avoir sa propre durée de rétention, dans les limites de votre forfait. **Le TTL s’applique-t-il aux documents en échec ?** Non. Seuls les documents avec un [statut](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) `success` reçoivent une date d’expiration. Les documents en échec ne sont pas supprimés automatiquement par le système TTL. **Existe-t-il une API pour vérifier quand un document expire ?** L’objet document n’expose pas directement le champ `expires_at`. Cependant, vous pouvez le calculer à partir de la valeur `ttl` du modèle et du timestamp `updated_at` du document. ## Pages liées - [Statuts et cycle de vie des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) — comprendre quand les documents deviennent éligibles à la suppression automatique - [L’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) — sauvegarder vos fichiers avant leur expiration - [Liens de partage permanents](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md) — impact de la suppression sur les liens de partage - [Nos forfaits](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) — limites de rétention par forfait en un coup d’œil - [Changer de forfait](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) — impact des changements de forfait sur les paramètres TTL - [Stockage des données et rétention](https://pdfmonkey.io/fr/docs/compte-et-securite/stockage-et-conservation-des-donnees.md) — aperçu général de ce que PDFMonkey stocke - [API : Templates](https://pdfmonkey.io/fr/docs/api/templates.md) — définir le TTL lors de la création ou mise à jour d’un modèle - [API : Documents](https://pdfmonkey.io/fr/docs/api/documents.md#delete-a-document) — supprimer des documents par programmation ## FAQ **Combien de temps PDFMonkey conserve-t-il mes documents générés ?** Cela dépend de votre forfait et du réglage TTL. Les forfaits Free et Starter conservent les documents jusqu’à 1 jour. Le forfait Pro permet jusqu’à 7 jours. Les forfaits Pro+ et Premium offrent une rétention illimitée. Dans ces limites, vous définissez le TTL exact par modèle. **Quelles données sont supprimées à l’expiration d’un document ?** Lorsqu’un document est supprimé (manuellement ou via TTL), PDFMonkey supprime le fichier généré du stockage et efface les données payload et meta. Le document n’apparaît plus dans l’API ni dans le tableau de bord. **Puis-je supprimer des documents manuellement au lieu d’utiliser le TTL ?** Oui. Vous pouvez supprimer des documents depuis le tableau de bord PDFMonkey ou en appelant l’endpoint DELETE /api/v1/documents/:id. La suppression manuelle retire les mêmes données que la suppression automatique par TTL. **Que se passe-t-il pour mes paramètres TTL si je rétrograde mon forfait ?** Lors d’une rétrogradation, tout modèle dont le TTL dépasse le maximum du nouveau forfait est automatiquement plafonné à ce maximum. Les dates d’expiration des documents existants de ces modèles sont recalculées en conséquence. --- # Webhooks : notifications de génération de documents en temps réel Source: https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md Les webhooks vous permettent de recevoir une notification HTTP dès qu’un document est généré, pour réagir immédiatement sans interroger l’API en boucle. PDFMonkey utilise [Svix](https://www.svix.com/) pour envoyer les webhooks avec des tentatives automatiques et la vérification des signatures. Cette page couvre les [types d’événements](#event-types), le [format du payload](#webhook-payload), la [configuration du routage](#set-up-a-workspace-wide-webhook) (par workspace, par modèle ou par channel personnalisé) et la [vérification des signatures](#verify-webhook-signatures). ## Types d’événements {#event-types} PDFMonkey déclenche deux types d’événements webhook : | Événement | Quand il se déclenche | |:----------|:----------------------| | `documents.generation.success` | Un document a été généré avec succès. Le champ `download_url` est disponible. | | `documents.generation.failure` | La génération d’un document a échoué. Le champ `failure_cause` décrit l’erreur. | Abonnez-vous à l’un ou aux deux selon vos besoins. La plupart des intégrations s’abonnent au minimum à `documents.generation.success`. ## Payload du webhook {#webhook-payload} Chaque webhook envoie un objet [DocumentCard](https://pdfmonkey.io/fr/docs/api/documents.md#the-documentcard-object) encapsulé dans une clé `document` : ```json title="Payload du webhook" { "document": { "id": "a5e86d72-f5b7-43d4-a04e-8b7e08e6741c", "app_id": "d6b4e8f2-7a3c-4d1e-9f5b-2c8a1d3e6f90", "created_at": "2050-03-13T12:34:56.181+02:00", "document_template_id": "2903f5b4-623b-4e10-b2e3-dc7e2e67ea39", "document_template_identifier": "My Invoice Template", "download_url": "https://pdfmonkey.s3.eu-west-1.amazonaws.com/...", "failure_cause": null, "filename": "2050-03-14 Peter Parker.pdf", "meta": { "_filename": "2050-03-14 Peter Parker.pdf", "clientRef": "spidey-616" }, "output_type": "pdf", "preview_url": "https://preview.pdfmonkey.io/...", "public_share_link": null, "status": "success", "updated_at": "2050-03-13T12:34:59.412+02:00" } } ``` > [!NOTE] > **DocumentCard, pas Document** > > Le payload du webhook est un **DocumentCard**, pas un Document complet. Il ne contient pas les champs `payload` (données dynamiques), `generation_logs` ni `checksum`. Si vous devez transmettre des données à votre gestionnaire de webhooks, utilisez le champ `meta` lors de la création du document. Consultez [l’objet DocumentCard](https://pdfmonkey.io/fr/docs/api/documents.md#the-documentcard-object) pour la référence complète des attributs. ## Définir un webhook pour tout le workspace {#set-up-a-workspace-wide-webhook} Pour recevoir des notifications pour chaque document généré dans un workspace : 1. Cliquez sur le lien **Webhooks** dans la navigation principale. 2. Cliquez sur le bouton **+ Add Endpoint**. 3. Saisissez l’URL de votre endpoint. 4. Sélectionnez le(s) type(s) d’événement souhaité(s) (`documents.generation.success`, `documents.generation.failure` ou les deux). Votre endpoint est désormais appelé chaque fois qu’un document du workspace est généré. ## Définir un webhook spécifique à un modèle {#set-up-a-template-specific-webhook} Dans de nombreux cas (notamment avec les plateformes no-code comme [Zapier](https://pdfmonkey.io/fr/docs/integrations/zapier.md), [Make](https://pdfmonkey.io/fr/docs/integrations/make.md) ou [n8n](https://pdfmonkey.io/fr/docs/integrations/n8n.md)), vous aurez besoin d’un webhook qui ne se déclenche que pour un modèle précis. 1. Copiez l’**identifiant** du modèle que vous souhaitez cibler. 2. Cliquez sur le lien **Webhooks** dans la navigation principale. 3. Cliquez sur le bouton **+ Add Endpoint**. 4. Saisissez l’URL de votre endpoint et sélectionnez le(s) type(s) d’événement. 5. Dans le champ **channels**, ajoutez `template-VOTRE_ID_DE_MODELE`. ``` title="Exemple de channel" template-07C63E0B-620F-44A9-AF9F-4CA0DA025A0A ``` Votre endpoint est désormais appelé uniquement lorsqu’un document est généré à partir de ce modèle. > [!WARNING] > **Les channels sont sensibles à la casse** > > Lorsque vous ajoutez un identifiant de modèle ou de dossier dans la liste des channels, collez-le toujours en **majuscules**. Un identifiant en minuscules ne sera pas reconnu et votre endpoint ne sera jamais appelé. ### Cibler plusieurs modèles ou un dossier Si vous avez besoin du même endpoint webhook pour plusieurs modèles (mais pas tous), vous pouvez ajouter jusqu’à **3 channels** à un seul endpoint. Si 3 channels ne suffisent pas, regroupez les modèles dans un dossier et utilisez l’identifiant du dossier comme channel. Ainsi, tout modèle de ce dossier déclenchera le webhook. Suivez les mêmes étapes que ci-dessus, mais ajoutez `folder-VOTRE_ID_DE_DOSSIER` dans la liste des channels : ``` title="Exemple de channel" folder-440DA20B-C5A0-A0A9-C62F-4070FAF963EA ``` ### Channels personnalisés via meta Vous pouvez router les webhooks dynamiquement pour chaque document en définissant la clé `_webhook_channel` dans le champ `meta` du document. Cela ajoute un channel supplémentaire à la notification webhook de ce document. ```json title="Définir un channel webhook personnalisé via l'API" { "document": { "document_template_id": "2903f5b4-623b-4e10-b2e3-dc7e2e67ea39", "payload": "{}", "status": "pending", "meta": "{\"_webhook_channel\": \"order-42\"}" } } ``` Configurez ensuite un endpoint webhook avec `order-42` comme channel. Seuls les documents incluant cette valeur dans leur `meta` déclencheront cet endpoint. > [!TIP] > **Combinaison avec les channels de modèle** > > La notification webhook d’un document inclut toujours le channel de son modèle (et celui du dossier, le cas échéant) en plus de tout channel personnalisé défini dans `meta`. Un même événement webhook peut donc correspondre à plusieurs endpoints. ## Vérifier les signatures des webhooks {#verify-webhook-signatures} Les webhooks étant des requêtes HTTP envoyées à une URL publique, un attaquant pourrait usurper l’identité de PDFMonkey en envoyant une fausse requête à votre endpoint. Pour éviter cela, Svix signe chaque webhook avec une clé secrète unique par endpoint. Vous devez vérifier la signature de chaque webhook entrant avant de le traiter. Svix propose des bibliothèques pour les langages courants qui gèrent la vérification en quelques lignes de code. Découvrez comment vérifier les signatures dans la [documentation de vérification de Svix](https://docs.svix.com/receiving/verifying-payloads/how). > [!CAUTION] > **Vérifiez toujours en production** > > Ignorer la vérification des signatures expose votre endpoint à des requêtes falsifiées. Vérifiez toujours la signature du webhook avant d’agir sur les données reçues. ## Questions fréquentes **Les webhooks fonctionnent-ils avec la génération d’images ?** Oui. Les webhooks se déclenchent pour tous les [formats de sortie](https://pdfmonkey.io/fr/docs/generation-de-documents/format-de-sortie.md) (PDF, PNG, JPG, WebP). Les types d’événements sont identiques quel que soit le format. **Le `download_url` du payload est-il permanent ?** Non. Le `download_url` est un lien signé temporaire valable 1 heure. Téléchargez le fichier dès réception du webhook, ou récupérez une URL fraîche ultérieurement via l’API. Consultez [l’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) pour plus de détails. **Le webhook contient-il les données dynamiques (payload) d’origine ?** Non. Le webhook envoie un [DocumentCard](https://pdfmonkey.io/fr/docs/api/documents.md#the-documentcard-object) qui ne contient pas le champ `payload`. Stockez les données nécessaires dans le champ `meta` lors de la création du document ; `meta` est inclus dans le webhook. **Que se passe-t-il si mon endpoint est indisponible ?** Svix retente automatiquement les envois échoués avec un backoff exponentiel sur plusieurs heures. Vous pouvez surveiller les tentatives et rejouer manuellement les messages échoués depuis la section **Webhooks** du tableau de bord PDFMonkey. **Comment tester les webhooks en développement ?** Utilisez un service de tunnel comme [ngrok](https://ngrok.com/) ou [localtunnel](https://theboringtech.io/localtunnel/) pour exposer votre serveur local sur Internet. Pointez votre endpoint webhook vers l’URL du tunnel, puis générez un document de test depuis le [tableau de bord](https://pdfmonkey.io/fr/docs/generation-de-documents/utiliser-le-tableau-de-bord.md). **Puis-je utiliser l’endpoint synchrone à la place des webhooks ?** Oui. L’endpoint `/api/v1/documents/sync` attend la fin de la génération et retourne le résultat en une seule requête. C’est pratique pour le prototypage mais limité à 6 minutes. Pour la production, les webhooks sont plus fiables et scalables. Voir [Génération synchrone](https://pdfmonkey.io/fr/docs/api/documents.md#synchronous-generation). ## Pages associées - [Statuts et cycle de vie des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) : comprendre quand les webhooks se déclenchent dans le cycle de vie d’un document - [L’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) : fonctionnement des liens temporaires et comment les rafraîchir - [Référence API Documents](https://pdfmonkey.io/fr/docs/api/documents.md) : documentation complète des endpoints et des champs - [L’objet DocumentCard](https://pdfmonkey.io/fr/docs/api/documents.md#the-documentcard-object) : référence complète des attributs du payload webhook - [Nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) : utiliser le champ `meta` pour définir des noms de fichiers et transmettre des données aux webhooks - [Générer des documents via l’API](https://pdfmonkey.io/fr/docs/generation-de-documents/generation-pdf-via-api.md) : workflow complet de génération asynchrone - [Générer des documents via une intégration](https://pdfmonkey.io/fr/docs/generation-de-documents/utiliser-une-integration.md) : utiliser les webhooks avec Zapier, Make ou n8n ## FAQ **Quelles données PDFMonkey envoie-t-il dans un webhook ?** PDFMonkey envoie un objet DocumentCard encapsulé dans une clé "document". Il contient l’identifiant du document, son statut, l’URL de téléchargement, le nom de fichier, les métadonnées (meta), le type de sortie, l’identifiant du modèle, etc. Le payload d’origine n’est pas inclus : utilisez le champ meta pour transmettre les données dont vous avez besoin. **Comment vérifier qu’un webhook provient bien de PDFMonkey ?** PDFMonkey utilise Svix pour envoyer les webhooks. Chaque webhook est signé avec une clé unique par endpoint. Vous pouvez vérifier la signature avec les bibliothèques officielles Svix pour Node.js, Python, Ruby, Go et d’autres langages. **Peut-on recevoir des webhooks uniquement pour certains modèles ?** Oui. Lors de la création d’un endpoint webhook, ajoutez un channel au format template-VOTRE_ID_DE_MODELE pour filtrer les notifications. Vous pouvez aussi utiliser folder-VOTRE_ID_DE_DOSSIER pour recevoir les webhooks de tous les modèles d’un dossier. **PDFMonkey envoie-t-il des webhooks pour les documents en échec ?** Oui. PDFMonkey déclenche deux types d’événements : documents.generation.success lorsqu’un document est généré avec succès, et documents.generation.failure en cas d’échec. Abonnez-vous aux deux pour gérer les erreurs dans votre intégration. **Que se passe-t-il si mon endpoint webhook est indisponible ?** Svix retente automatiquement les envois échoués avec un backoff exponentiel sur plusieurs heures. Vous pouvez surveiller les tentatives et rejouer manuellement les messages échoués depuis la section Webhooks du tableau de bord PDFMonkey. --- # Authentification API Source: https://pdfmonkey.io/fr/docs/api/authentication.mdChaque requête envoyée à l’API PDFMonkey doit inclure votre clé API secrète. Cette page explique comment trouver votre clé, l’envoyer avec vos requêtes et vérifier que l’authentification fonctionne. ## Trouver votre clé API secrète Votre clé API secrète est disponible sur la page dédiée Clé API du Dashboard PDFMonkey, accessible directement depuis la barre latérale. > [!WARNING] > **Gardez votre clé secrète** > > Votre clé API secrète dispose des mêmes privilèges que votre compte. Ne la partagez pas publiquement et ne la versionnez pas dans votre dépôt de code. Si vous pensez que votre clé a été compromise, régénérez-la depuis la page Clé API. ## Envoyer votre clé avec les requêtes Transmettez votre clé dans l’en-tête HTTP `Authorization`, préfixée par `Bearer` : ```http Authorization: Bearer VOTRE_CLE_SECRETE ``` ## Effectuer un appel API de test Pour vérifier que l’authentification fonctionne, appelez l’endpoint `current_user` : ```http GET https://api.pdfmonkey.io/api/v1/current_user Authorization: Bearer VOTRE_CLE_SECRETE ``` Avec curl, la requête ressemble à ceci : ```bash curl https://api.pdfmonkey.io/api/v1/current_user \ -H "Authorization: Bearer VOTRE_CLE_SECRETE" ``` Une réponse réussie renvoie les informations de votre compte : ```json { "current_user": { "id": "12345678-90ab-cdef-1234-567890abcdef", "auth_token": "1234567890ABCDEF1234", "available_documents": 300, "created_at": "2022-01-01T12:34:56.123+00:00", "current_plan": "free", "current_plan_interval": "month", "desired_name": "Marie Dupont", "email": "marie.dupont@example.com", "lang": "fr", "paying_customer": false, "trial_ends_on": "2022-01-15", "updated_at": "2022-01-01T12:34:56.123+00:00", "block_resources": true, "share_links": false } } ``` ### Erreurs d’authentification Si la clé est manquante ou invalide, l’API renvoie une réponse `401 Unauthorized` : ```json { "errors": [ { "status": "401", "title": "Unauthorized", "detail": "We were unable to authenticate you based on the provided API key. Please verify that you provided the intended key." } ] } ``` ## Étapes suivantes Maintenant que vous pouvez vous authentifier, vous pouvez : - [Générer votre premier document](https://pdfmonkey.io/fr/docs/api/documents.md#create-a-document) avec l’API Documents - [Générer un PDF via l’API](https://pdfmonkey.io/fr/docs/generation-de-documents/generation-pdf-via-api.md) avec des exemples pas à pas dans plusieurs langages - [Configurer les webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) pour être notifié lorsque vos documents sont prêts ## FAQ **Comment s’authentifier avec l’API PDFMonkey ?** Passez votre clé API secrète dans l’en-tête HTTP Authorization sous forme de token Bearer. Le format est : Authorization: Bearer VOTRE_CLÉ_SECRÈTE. Chaque requête à l’API PDFMonkey nécessite cet en-tête. **Où trouver ma clé API PDFMonkey ?** Votre clé API secrète est disponible sur la page Clé API du tableau de bord PDFMonkey, accessible directement depuis la barre latérale. **Que faire si ma clé API PDFMonkey est compromise ?** Régénérez-la immédiatement depuis la page Clé API du Dashboard. L’ancienne clé cessera de fonctionner et une nouvelle sera émise. --- # API Documents : créer, lister et gérer les documents générés Source: https://pdfmonkey.io/fr/docs/api/documents.mdRéférence complète de l’API pour créer, récupérer, mettre à jour et supprimer des documents dans PDFMonkey. ## Démarrage rapide {#quick-start} La génération est asynchrone : vous créez un document, puis vous vérifiez son statut jusqu’à ce qu’il soit prêt. ```bash # 1. Créer un document et le mettre en file d’attente pour génération curl https://api.pdfmonkey.io/api/v1/documents \ -X POST \ -H 'Authorization: Bearer YOUR_SECRET_KEY' \ -H 'Content-Type: application/json' \ -d '{ "document": { "document_template_id": "YOUR_TEMPLATE_ID", "status": "pending", "payload": { "name": "Jane Doe" } } }' # Retourne un document avec "status": "pending" et "download_url": null # 2. Vérifier le statut du document jusqu’à ce qu’il atteigne "success" curl -H 'Authorization: Bearer YOUR_SECRET_KEY' \ https://api.pdfmonkey.io/api/v1/document_cards/DOCUMENT_ID # Lorsque le statut est "success", lire la download_url dans la réponse ``` Passer `"status": "pending"` met le document en file d’attente pour une génération immédiate. Le fichier n’est pas encore prêt à ce stade — vous devez interroger le document ou configurer un [webhook](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) pour savoir quand il est terminé. Lorsque le statut atteint `success`, le champ `download_url` contient un lien signé vers le fichier généré. Lisez la suite pour tous les détails, y compris l’[endpoint synchrone](#synchronous-generation) qui attend le résultat en une seule requête. ## Authentification {#authentication} Toutes les requêtes nécessitent un token Bearer dans l’en-tête `Authorization` : ``` Authorization: Bearer YOUR_SECRET_KEY ``` Consultez [Authentification](https://pdfmonkey.io/fr/docs/api/authentication.md) pour savoir comment trouver votre clé API et gérer vos tokens d’accès. ## Créer un document {#create-a-document} **`POST /api/v1/documents`** Crée un nouveau document. Passez `status` à `"pending"` pour lancer la génération immédiatement, ou omettez-le (valeur par défaut : `"draft"`) pour générer plus tard. ### Paramètres {#parameters} Tous les paramètres sont imbriqués sous une clé `document`. | Nom | Type | Requis | Description | |:--- |:--- |:--- |:--- | | `document_template_id` | String (UUID) | **Oui** | ID du modèle à utiliser pour la génération. | | `payload` | Object ou String | Non | Les [données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) utilisées pour construire le document. Doit être un objet JSON (pas un tableau). Peut être transmis en tant qu’objet JSON ou chaîne JSON. | | `meta` | Object ou String | Non | Métadonnées à attacher au document. Supporte des [clés spéciales](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) comme `_filename`. Doit être un objet JSON. 200 Ko maximum. | | `status` | String | Non | `"draft"` (par défaut) ou `"pending"`. Passez à `"pending"` pour déclencher la génération à la création. | > [!TIP] > Passez `"status": "pending"` dans votre requête de création pour générer le document en une seule étape. Sans cela, le document est créé en brouillon et vous devrez le [mettre à jour ultérieurement](#update-a-document) pour déclencher la génération. ### Requête {#request} **curl** ```bash curl https://api.pdfmonkey.io/api/v1/documents \ -X POST \ -H 'Authorization: Bearer YOUR_SECRET_KEY' \ -H 'Content-Type: application/json' \ -d '{ "document": { "document_template_id": "2903f5b4-623b-4e10-b2e3-dc7e2e67ea39", "status": "pending", "payload": { "clientName": "Peter Parker", "orderDate": "2050-03-14", "products": [ { "name": "Spider silk", "quantity": 12, "unitPrice": 123.50 }, { "name": "Spandex fabric", "quantity": 2, "unitPrice": 28.90 } ] }, "meta": { "_filename": "2050-03-14 Peter Parker.pdf", "clientRef": "spidey-616" } } }' ``` **Ruby** ```ruby document = Pdfmonkey::Document.generate( document_template_id: '2903f5b4-623b-4e10-b2e3-dc7e2e67ea39', payload: { clientName: 'Peter Parker', orderDate: '2050-03-14', products: [ { name: 'Spider silk', quantity: 12, unitPrice: 123.50 }, { name: 'Spandex fabric', quantity: 2, unitPrice: 28.90 } ] }, meta: { _filename: '2050-03-14 Peter Parker.pdf', clientRef: 'spidey-616' } ) document.status # => 'pending' ``` **Node.js** ```javascript const response = await fetch('https://api.pdfmonkey.io/api/v1/documents', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_SECRET_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({ document: { document_template_id: '2903f5b4-623b-4e10-b2e3-dc7e2e67ea39', status: 'pending', payload: { clientName: 'Peter Parker', orderDate: '2050-03-14', products: [ { name: 'Spider silk', quantity: 12, unitPrice: 123.50 }, { name: 'Spandex fabric', quantity: 2, unitPrice: 28.90 }, ], }, meta: { _filename: '2050-03-14 Peter Parker.pdf', clientRef: 'spidey-616', }, }, }), }); const data = await response.json(); console.log(data); ``` **Python** ```python import requests response = requests.post( 'https://api.pdfmonkey.io/api/v1/documents', headers={ 'Authorization': 'Bearer YOUR_SECRET_KEY', }, json={ 'document': { 'document_template_id': '2903f5b4-623b-4e10-b2e3-dc7e2e67ea39', 'status': 'pending', 'payload': { 'clientName': 'Peter Parker', 'orderDate': '2050-03-14', 'products': [ {'name': 'Spider silk', 'quantity': 12, 'unitPrice': 123.50}, {'name': 'Spandex fabric', 'quantity': 2, 'unitPrice': 28.90}, ], }, 'meta': { '_filename': '2050-03-14 Peter Parker.pdf', 'clientRef': 'spidey-616', }, }, }, ) print(response.json()) ``` **PHP** ```php <?php $ch = curl_init('https://api.pdfmonkey.io/api/v1/documents'); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer YOUR_SECRET_KEY', 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'document' => [ 'document_template_id' => '2903f5b4-623b-4e10-b2e3-dc7e2e67ea39', 'status' => 'pending', 'payload' => [ 'clientName' => 'Peter Parker', 'orderDate' => '2050-03-14', 'products' => [ ['name' => 'Spider silk', 'quantity' => 12, 'unitPrice' => 123.50], ['name' => 'Spandex fabric', 'quantity' => 2, 'unitPrice' => 28.90], ], ], 'meta' => [ '_filename' => '2050-03-14 Peter Parker.pdf', 'clientRef' => 'spidey-616', ], ], ]), ]); $response = curl_exec($ch); curl_close($ch); echo $response; ``` ### Réponse {#response} ```json title="201 Created" { "document": { "id": "a5e86d72-f5b7-43d4-a04e-8b7e08e6741c", "app_id": "d6b4e8f2-7a3c-4d1e-9f5b-2c8a1d3e6f90", "checksum": "c230530f6f0aa32900af0924cf228e5c", "created_at": "2050-03-13T12:34:56.181+02:00", "document_template_id": "2903f5b4-623b-4e10-b2e3-dc7e2e67ea39", "download_url": null, "failure_cause": null, "filename": null, "generation_logs": [], "meta": { "_filename": "2050-03-14 Peter Parker.pdf", "clientRef": "spidey-616" }, "output_type": "pdf", "payload": { "clientName": "Peter Parker", "orderDate": "2050-03-14", "products": [ { "name": "Spider silk", "quantity": 12, "unitPrice": 123.50 }, { "name": "Spandex fabric", "quantity": 2, "unitPrice": 28.90 } ] }, "preview_url": "https://preview.pdfmonkey.io/pdf/web/viewer.html?file=...", "public_share_link": null, "status": "pending", "updated_at": "2050-03-13T12:34:56.181+02:00" } } ``` ### Erreurs de validation {#validation-errors} Si des champs requis sont manquants ou invalides, l’API retourne une erreur `422 Unprocessable Entity` : ```json title="422 Unprocessable Entity" { "errors": { "document_template_id": ["can’t be blank"] } } ``` ## Génération synchrone {#synchronous-generation} **`POST /api/v1/documents/sync`** Un raccourci qui crée un document et attend la fin de la génération côté serveur, pour obtenir le résultat en une seule requête. La réponse est un [DocumentCard](#the-documentcard-object) (pas un Document). Pour un guide pas-à-pas, consultez [Générer des documents avec l’API](https://pdfmonkey.io/fr/docs/generation-de-documents/generation-pdf-via-api.md). Cet endpoint accepte les mêmes paramètres que [Créer un document](#create-a-document). Vous devez passer `"status": "pending"` pour que la génération démarre. ### Quand utiliser sync vs async {#when-to-use-sync-vs-async} | | Async | Sync | |:--- |:--- |:--- | | **Réponse** | Retourne immédiatement | Attend la fin de la génération | | **Obtenir le résultat** | Polling ou [webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) | Inclus dans la réponse | | **Objet retourné** | [Document](#the-document-object) | [DocumentCard](#the-documentcard-object) | | **Adapté au volume** | Oui | Non — une requête ouverte par document | | **Timeout** | Aucun | 6 minutes | | **Idéal pour** | Pipelines de production, génération par lots | Faible volume ou cas d’usage interactifs | > [!WARNING] > L’endpoint sync attend jusqu’à 6 minutes la fin de la génération. Pour les pipelines de production ou la génération par lots, préférez la génération asynchrone avec les [webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md). ### Requête {#request-1} **curl** ```bash curl https://api.pdfmonkey.io/api/v1/documents/sync \ -X POST \ -H 'Authorization: Bearer YOUR_SECRET_KEY' \ -H 'Content-Type: application/json' \ -d '{ "document": { "document_template_id": "2903f5b4-623b-4e10-b2e3-dc7e2e67ea39", "status": "pending", "payload": { "clientName": "Peter Parker", "orderDate": "2050-03-14", "products": [ { "name": "Spider silk", "quantity": 12, "unitPrice": 123.50 }, { "name": "Spandex fabric", "quantity": 2, "unitPrice": 28.90 } ] }, "meta": { "_filename": "2050-03-14 Peter Parker.pdf", "clientRef": "spidey-616" } } }' ``` **Ruby** ```ruby document = Pdfmonkey::Document.generate!( document_template_id: '2903f5b4-623b-4e10-b2e3-dc7e2e67ea39', payload: { clientName: 'Peter Parker', orderDate: '2050-03-14', products: [ { name: 'Spider silk', quantity: 12, unitPrice: 123.50 }, { name: 'Spandex fabric', quantity: 2, unitPrice: 28.90 } ] }, meta: { _filename: '2050-03-14 Peter Parker.pdf', clientRef: 'spidey-616' } ) document.status # => 'success' document.download_url # => 'https://…' ``` **Node.js** ```javascript const response = await fetch('https://api.pdfmonkey.io/api/v1/documents/sync', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_SECRET_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({ document: { document_template_id: '2903f5b4-623b-4e10-b2e3-dc7e2e67ea39', status: 'pending', payload: { clientName: 'Peter Parker', orderDate: '2050-03-14', products: [ { name: 'Spider silk', quantity: 12, unitPrice: 123.50 }, { name: 'Spandex fabric', quantity: 2, unitPrice: 28.90 }, ], }, meta: { _filename: '2050-03-14 Peter Parker.pdf', clientRef: 'spidey-616', }, }, }), }); const data = await response.json(); console.log(data.document_card.download_url); ``` **Python** ```python import requests response = requests.post( 'https://api.pdfmonkey.io/api/v1/documents/sync', headers={ 'Authorization': 'Bearer YOUR_SECRET_KEY', }, json={ 'document': { 'document_template_id': '2903f5b4-623b-4e10-b2e3-dc7e2e67ea39', 'status': 'pending', 'payload': { 'clientName': 'Peter Parker', 'orderDate': '2050-03-14', 'products': [ {'name': 'Spider silk', 'quantity': 12, 'unitPrice': 123.50}, {'name': 'Spandex fabric', 'quantity': 2, 'unitPrice': 28.90}, ], }, 'meta': { '_filename': '2050-03-14 Peter Parker.pdf', 'clientRef': 'spidey-616', }, }, }, timeout=400, ) data = response.json() print(data['document_card']['download_url']) ``` **PHP** ```php <?php $ch = curl_init('https://api.pdfmonkey.io/api/v1/documents/sync'); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_TIMEOUT => 400, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer YOUR_SECRET_KEY', 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'document' => [ 'document_template_id' => '2903f5b4-623b-4e10-b2e3-dc7e2e67ea39', 'status' => 'pending', 'payload' => [ 'clientName' => 'Peter Parker', 'orderDate' => '2050-03-14', 'products' => [ ['name' => 'Spider silk', 'quantity' => 12, 'unitPrice' => 123.50], ['name' => 'Spandex fabric', 'quantity' => 2, 'unitPrice' => 28.90], ], ], 'meta' => [ '_filename' => '2050-03-14 Peter Parker.pdf', 'clientRef' => 'spidey-616', ], ], ]), ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); echo $data['document_card']['download_url']; ``` ### Réponse {#response-1} > [!NOTE] > L’endpoint sync retourne un **DocumentCard**, pas un Document. Le résultat est imbriqué sous `document_card` et n’inclut ni `payload` ni `generation_logs`. ```json title="200 OK" { "document_card": { "app_id": "d6b4e8f2-7a3c-4d1e-9f5b-2c8a1d3e6f90", "created_at": "2050-03-13T12:34:56.181+02:00", "document_template_id": "2903f5b4-623b-4e10-b2e3-dc7e2e67ea39", "document_template_identifier": "My Invoice Template", "download_url": "https://pdfmonkey.s3.eu-west-1.amazonaws.com/production/backend/document/a5e86d72-f5b7-43d4-a04e-8b7e08e6741c/2050-03-14-peter-parker.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&...", "failure_cause": null, "filename": "2050-03-14 Peter Parker.pdf", "id": "a5e86d72-f5b7-43d4-a04e-8b7e08e6741c", "meta": { "_filename": "2050-03-14 Peter Parker.pdf", "clientRef": "spidey-616" }, "output_type": "pdf", "preview_url": "https://preview.pdfmonkey.io/pdf/web/viewer.html?file=...", "public_share_link": null, "status": "success", "updated_at": "2050-03-13T12:34:59.412+02:00" } } ``` ## L’objet Document {#the-document-object} L’objet Document est la représentation complète d’un document généré, incluant son payload et ses logs de génération. ```json title="Document" { "id": "a5e86d72-f5b7-43d4-a04e-8b7e08e6741c", "app_id": "d6b4e8f2-7a3c-4d1e-9f5b-2c8a1d3e6f90", "checksum": "c230530f6f0aa32900af0924cf228e5c", "created_at": "2050-03-13T12:34:56.181+02:00", "document_template_id": "2903f5b4-623b-4e10-b2e3-dc7e2e67ea39", "download_url": "https://pdfmonkey.s3.eu-west-1.amazonaws.com/production/backend/document/a5e86d72-f5b7-43d4-a04e-8b7e08e6741c/2050-03-14-peter-parker.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&...", "failure_cause": null, "filename": "2050-03-14 Peter Parker.pdf", "generation_logs": [ { "type": "info", "message": "Starting PDF generation.", "timestamp": "Thu, 13 Mar 2050 10:34:57 GMT" }, { "type": "info", "message": "Generation took 1617ms to load and render.", "timestamp": "Thu, 13 Mar 2050 10:34:58 GMT" }, { "type": "info", "message": "Content size is 96302.", "timestamp": "Thu, 13 Mar 2050 10:34:59 GMT" } ], "meta": { "_filename": "2050-03-14 Peter Parker.pdf", "clientRef": "spidey-616" }, "output_type": "pdf", "payload": { "clientName": "Peter Parker", "orderDate": "2050-03-14", "products": [ { "name": "Spider silk", "quantity": 12, "unitPrice": 123.50 }, { "name": "Spandex fabric", "quantity": 2, "unitPrice": 28.90 } ] }, "preview_url": "https://preview.pdfmonkey.io/pdf/web/viewer.html?file=...", "public_share_link": "https://files.pdfmonkey.io/share/72BE2293-D130-4C19-9E11-C82B5CEA8C37/2050-03-14-peter-parker.pdf", "status": "success", "updated_at": "2050-03-13T12:34:59.412+02:00" } ``` ### Attributs {#attributes} | Nom | Type | Description | |:--- |:--- |:--- | | `id` | String (UUID) | Identifiant unique du document. | | `app_id` | String (UUID) | Identifiant unique du workspace du document. | | `checksum` | String | Checksum interne utilisé pour le rendu de l’aperçu. | | `created_at` | String (ISO 8601) | Date de création du document. | | `document_template_id` | String (UUID) | ID du modèle utilisé pour générer ce document. | | `download_url` | String (URL) ou `null` | URL signée temporaire pour télécharger le fichier généré. `null` tant que la génération n’a pas réussi. Valide pendant **1 heure** (voir [URLs de téléchargement](#download-urls)). | | `failure_cause` | String ou `null` | Raison de l’échec de la génération. `null` sauf si le statut est `failure`. | | `filename` | String ou `null` | Nom du fichier généré. `null` tant que la génération n’a pas réussi. Configurable via la clé meta `_filename`. | | `generation_logs` | Array | Logs collectés pendant la génération. Chaque entrée contient `type` (`"info"` ou `"error"`), `message` et `timestamp`. Tableau vide avant le début de la génération. | | `meta` | Object ou `null` | Métadonnées arbitraires attachées au document. Supporte des [clés spéciales](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) comme `_filename`. Également accessible dans les intégrations no-code (Zapier, Make) où `payload` n’est pas disponible. | | `output_type` | String | Format de sortie : `"pdf"` ou `"image"`. Hérité du modèle. | | `payload` | Object ou `null` | Les [données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) utilisées pour générer le document. | | `preview_url` | String (URL) | URL pour intégrer un aperçu visuel du document. Destinée à être utilisée dans une ` Avant de commencer, assurez-vous d’avoir un compte PDFMonkey et un modèle publié. Consultez [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md) pour les instructions de configuration. ### Écrire votre premier modèle Dans l’onglet **HTML** de votre modèle, insérez le code suivant : ```liquid title="HTML"

Hello {{name}}!

Your favorite number is {{favoriteNumber}}.

``` Dans l’onglet **CSS**, insérez le code suivant : ```css .greeting { color: #6D28D9; font-size: 24px; } ``` Et enfin dans l’onglet **Test data**, insérez ceci : ```json { "name": "Peter Parker", "favoriteNumber": 8 } ``` Cliquez sur **Save** pour voir l’aperçu se mettre à jour, puis cliquez sur **Publish** pour rendre le modèle disponible pour la génération. > [!WARNING] > **Publiez toujours votre modèle !** > > Oublier de publier votre modèle est une erreur fréquente, surtout lorsque vous alternez entre Zapier et PDFMonkey. Si les documents générés ne correspondent pas à votre modèle, vérifiez toujours que vous l’avez bien publié. ### Générer votre premier document Maintenant que votre modèle est terminé, rendez-vous sur Zapier. Pour ce guide, nous allons définir un Zap déclenché par la soumission d’un formulaire [Tally](https://tally.so/), générer un document avec PDFMonkey puis l’envoyer par email. #### Le formulaire Tally Nous utiliserons le formulaire Tally suivant comme source d’information dans notre Zap : ![Formulaire Tally utilisé comme trigger du Zap](https://pdfmonkey.io/fr/docs/img/zapier-guide-select-pdfmonkey.webp) #### Configurer votre Zap Commencez par créer un nouveau Zap. Comme trigger, nous utiliserons l’événement **New Response** de Tally : ![Création d’un nouveau Zap avec un trigger Tally](https://pdfmonkey.io/fr/docs/img/zapier-guide-create-document.webp) Nous procédons ensuite au remplissage du formulaire et vérifions qu’il est correctement connecté dans Zapier : ![Sélection du modèle PDFMonkey](https://pdfmonkey.io/fr/docs/img/zapier-guide-select-template.webp) ![Connexion de votre compte PDFMonkey](https://pdfmonkey.io/fr/docs/img/zapier-guide-connect-account.webp) #### Appeler PDFMonkey Maintenant que nous avons des données avec lesquelles travailler, nous allons configurer notre action PDFMonkey. Sélectionnez l’application PDFMonkey et choisissez l’action **Generate Document**. ![Mapping des champs dans l’action PDFMonkey](https://pdfmonkey.io/fr/docs/img/zapier-guide-map-fields.webp) Vous pouvez ensuite associer les données du formulaire aux variables de votre document. Assurez-vous d’utiliser les mêmes noms que ceux utilisés lors de l’écriture du modèle. ![Test de l’action PDFMonkey](https://pdfmonkey.io/fr/docs/img/zapier-guide-test-action.webp) > [!NOTE] > **Nommage des variables** > > Si vous vous demandez comment écrire des noms corrects pour qu’ils fonctionnent dans PDFMonkey, nous fournissons [une liste de formats de noms de variables corrects/incorrects](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md#naming-your-variables). Nous sommes maintenant prêts à tester la génération du document. ![Document créé avec succès](https://pdfmonkey.io/fr/docs/img/zapier-guide-document-created.webp) ![Téléchargement du document généré](https://pdfmonkey.io/fr/docs/img/zapier-guide-download-pdf.webp) #### Envoyer le document par email Maintenant que notre document est généré, envoyons-le par email. Ajoutez une nouvelle action et sélectionnez l’application Email by Zapier, puis choisissez l’action **Send Outbound Email**. ![Configuration de l’action d’envoi d’email](https://pdfmonkey.io/fr/docs/img/zapier-guide-send-email.webp) Nous pouvons maintenant utiliser l’**URL de téléchargement** de notre document comme pièce jointe de l’email. Zapier télécharge automatiquement le fichier et le joint. ![Le Zap complet du trigger à l’email](https://pdfmonkey.io/fr/docs/img/zapier-guide-final-zap.webp) Vous pouvez maintenant tester cette dernière action et vous devriez recevoir un email avec le document en pièce jointe. Félicitations ! Vous avez généré votre tout premier document PDFMonkey avec Zapier ! ## Générer un document {#generate-a-document} L’action **Generate Document** crée un document à partir de l’un de vos modèles PDFMonkey. Vous sélectionnez un modèle, associez vos champs de données, et PDFMonkey génère le document. L’action renvoie une [URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) utilisable dans les étapes suivantes du Zap. Pour un guide pas à pas de votre premier Zap, consultez la section [Premiers pas](#getting-started) ci-dessus. ### Payload JSON avancé {#advanced-json} > [!WARNING] > **Attention !** > > Un grand pouvoir implique parfois de grands problèmes. Ne passez au JSON avancé que si vous savez ce que vous faites et savez comment échapper correctement vos données. > > Consultez la section [Résolution de problèmes](#troubleshooting) pour plus d’informations. Par défaut, l’intégration fournit un champ de mapping simple pour définir ce qui est envoyé à PDFMonkey. Dans la plupart des cas, le mapping simple est suffisant, mais il existe des situations où vous devez structurer vos données différemment. L’option **Use a custom JSON structure** bascule du mapping simple vers une zone de texte où vous pouvez insérer votre propre JSON avec des propriétés imbriquées : ![Option de payload JSON personnalisé dans l’action PDFMonkey Zapier](https://pdfmonkey.io/fr/docs/img/zapier-custom-json-payload.webp) ### Nom de fichier personnalisé {#custom-filename} Vous pouvez spécifier un nom personnalisé pour le fichier généré. Cela est utile si vous prévoyez de stocker le document dans un service comme Drive ou Dropbox. Vous pouvez utiliser des parties dynamiques pour construire le nom de fichier, mais gardez ces restrictions à l’esprit : - Le nom de fichier ne doit contenir aucun slash `/` ni backslash `\` - Les caractères non latins doivent être évités car ils peuvent être corrompus lors de l’enregistrement du fichier Les noms courts basés sur des dates ou des identifiants fonctionnent généralement le mieux. > [!TIP] > Pour plus de détails sur les options de nom de fichier (y compris la définition via l’API), consultez [Nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md). ### Métadonnées {#metadata} Lorsque vous générez un document, vous pouvez y joindre des métadonnées. Les métadonnées ne sont pas disponibles dans le modèle et ne peuvent pas influencer le contenu du document ; elles y sont simplement attachées. Un cas d’utilisation courant est la réception du document via un [webhook](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) et l’utilisation de ses métadonnées pour le router ou le traiter différemment. ![Champs de métadonnées dans l’action PDFMonkey Zapier](https://pdfmonkey.io/fr/docs/img/zapier-metadata-fields.webp) ### Lignes de détail {#line-items} Si vous générez une facture ou un devis, vous devrez probablement gérer des lignes de détail. Zapier offre un moyen d’accéder à ces éléments si le trigger que vous utilisez les prend en charge. Prenons l’exemple d’une facture Stripe. Les éléments de la facture sont disponibles via une collection Line Items. Pour envoyer ces éléments de manière compréhensible pour PDFMonkey, définissez **Add Line Items** sur **Yes**. Cela ouvre une section où vous spécifiez à quoi ressemble un **seul élément**. Par exemple, considérons une facture Stripe avec ces éléments : ``` Délicieuse gaufre 3.50€ x12 = 42.00€ Donut parfaitement rond 4.99€ x5 = 24.95€ TOTAL 66.95€ ``` Le `TOTAL` doit être envoyé comme donnée de base du document, tandis que le nom, le prix unitaire, la quantité et le montant total de chaque élément doivent être envoyés comme lignes de détail depuis Zapier : ![Mapping des lignes de détail dans l’action PDFMonkey Zapier](https://pdfmonkey.io/fr/docs/img/zapier-line-items-mapping.webp) > [!TIP] > **Mapping ou JSON** > > Le champ pour définir les données d’une ligne de détail utilise le même formulaire que les données principales. Si vous utilisez le [JSON avancé](#advanced-json) pour les données principales, le payload de la ligne de détail est également défini en JSON avancé. #### Utiliser les lignes de détail dans votre modèle Lorsque Zapier envoie les lignes de détail à PDFMonkey, elles sont accessibles via une variable spéciale `lineItems`. Dans l’exemple ci-dessus, le payload ressemblerait à ceci : ```json title="JSON" { "lineItems": [ { "product": "Delicious waffle", "quantity": "12", "unitPrice": "3.50", "totalAmount": "42.00" }, { "product": "Perfectly round donut", "quantity": "5", "unitPrice": "4.99", "totalAmount": "24.95" } ] } ``` > [!NOTE] > **Uniquement des chaînes de caractères** > > Si vous observez attentivement le payload ci-dessus, seules des chaînes de caractères sont envoyées. Zapier ne différencie pas le texte et les nombres. > > Heureusement, Liquid (le langage de template que nous utilisons) est suffisamment intelligent pour convertir ces valeurs en nombres lorsque vous effectuez des calculs. Gardez simplement cela à l’esprit si vous rencontrez des problèmes avec les nombres. Consultez [Comment faire des calculs](https://pdfmonkey.io/fr/docs/modeles-code/comment-faire-des-calculs.md) pour des astuces arithmétiques. Vous pouvez parcourir le tableau `lineItems` pour afficher le contenu de chaque élément individuellement : ```liquid title="HTML" {% for item in lineItems %}

{{item.product}} at {{item.unitPrice}}€ x{{item.quantity}} = {{item.totalAmount}}€

{% endfor %} ``` Ce qui produit le HTML suivant : ```html title="HTML"

Delicious waffle at 3.50€ x12 = 42.00€

Perfectly round donut at 4.99€ x5 = 24.95€

``` Vous voudrez probablement construire une ligne de tableau pour chaque élément, mais cela vous donne une bonne idée de la marche à suivre. Consultez [Conditions et boucles](https://pdfmonkey.io/fr/docs/modeles-code/conditions-et-boucles.md) pour d’autres techniques de boucles Liquid. ## Trigger Document Generated {#document-generated-trigger} Le trigger **Document Generated** déclenche votre Zap chaque fois qu’un document termine sa génération (atteint le [statut](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) `success`). Cela est utile pour automatiser les tâches post-génération comme le stockage du fichier dans Dropbox, l’envoi par email ou l’enregistrement dans une feuille de calcul. ![Sélection de l’événement Document Generated dans Zapier](https://pdfmonkey.io/fr/docs/img/zapier-trigger-select-event.webp) Vous pouvez choisir de déclencher votre Zap pour : - N’importe quel modèle de votre workspace - Un seul modèle - Plusieurs modèles spécifiques ![Connexion de votre compte PDFMonkey dans le trigger](https://pdfmonkey.io/fr/docs/img/zapier-trigger-connect-account.webp) Assurez-vous d’avoir au moins un document généré avant de tester votre trigger dans Zapier. ![Sélection du modèle sur lequel déclencher](https://pdfmonkey.io/fr/docs/img/zapier-trigger-select-template.webp) Vous pouvez ensuite utiliser le fichier généré pour le stocker, l’envoyer par email ou être notifié d’une manière ou d’une autre. > [!NOTE] > **Exploiter les métadonnées** > > Le document exposé par le trigger ne contient pas votre payload. Si vous avez besoin d’informations dans les actions suivantes, nous recommandons de [joindre des métadonnées](#metadata) au document. > > C’est ce que nous avons fait avec les informations Tally dans cet exemple. ![Résultat du test montrant la sortie du trigger](https://pdfmonkey.io/fr/docs/img/zapier-trigger-test-result.webp) ## Récupérer et supprimer des documents {#retrieve-and-delete} ### Récupérer un document L’action **Retrieve Document** récupère un document précédemment généré par son identifiant. Utilisez-la lorsque vous devez accéder aux détails d’un document ou à son [URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) dans une étape ultérieure de votre Zap ; par exemple, après un délai ou dans un workflow séparé de celui qui l’a généré. ### Supprimer un document L’action **Delete Document** supprime un seul document de PDFMonkey. Utilisez-la pour nettoyer les documents après les avoir traités ; par exemple, après avoir téléchargé et stocké le fichier ailleurs. Consultez [Rétention et suppression](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) pour en savoir plus sur la gestion du cycle de vie des documents. ## Résolution de problèmes {#troubleshooting} ### URL de téléchargement expirée {#download-url-expired} Si vous obtenez une erreur d’URL de téléchargement expirée lors de la construction de votre Zap, rechargez l’enregistrement d’exemple dans votre trigger. L’[URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) n’est valide que pendant 1 heure. Vous devez actualiser les documents dans Zapier pour obtenir une nouvelle URL. Cliquez sur le bouton **Load More** dans la section Test de votre trigger : ![Actualisation des champs du trigger pour obtenir une nouvelle URL de téléchargement](https://pdfmonkey.io/fr/docs/img/zapier-refresh-trigger-fields.webp) > [!NOTE] > **Sortie de génération** > > Cette astuce ne s’applique qu’au trigger. Pour la sortie d’une action Generate Document, vous devez générer un nouveau document pour obtenir des données fraîches et une URL de téléchargement valide. > [!TIP] > Si vos Zaps échouent parce que l’URL a expiré avant qu’une étape ultérieure ne s’exécute, consultez [L’URL de téléchargement renvoie une erreur 403](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-renvoie-403.md) pour des solutions. ### Réponses 422 {#422-responses} Cette erreur survient généralement lorsque vous utilisez l’option JSON personnalisé et que des valeurs nécessitent un échappement avant d’être envoyées à PDFMonkey. #### Valeurs contenant des guillemets doubles Considérons le JSON personnalisé suivant : ```json5 title="Custom JSON" { "user": { "name": "(Dynamic Field From Zapier)" } } ``` Si la valeur dans `Dynamic Field From Zapier` contient des guillemets, le JSON résultant est cassé. Prenons `Peter "Spiderman" Parker` comme exemple : ```json title="JSON invalide" { "user": { "name": "Peter "Spiderman" Parker" } } ``` Ce n’est pas du JSON valide. Ce dont vous avez besoin, c’est d’_échapper_ les guillemets doubles : ```json title="JSON valide" { "user": { "name": "Peter \"Spiderman\" Parker" } } ``` > [!NOTE] > **Attributs HTML** > > Si vous envoyez du HTML, cela arrive fréquemment car les attributs utilisent presque toujours des guillemets doubles (par ex., `<div class="test">`). #### Valeurs contenant des sauts de ligne Le JSON ne prend pas en charge les valeurs contenant des sauts de ligne bruts : ```json title="JSON invalide" { "userBio": "Once upon a time, They lived happily ever after." } ``` Échappez les sauts de ligne en les remplaçant par une balise `
` ou en utilisant la représentation textuelle `\n` : ```json title="JSON valide" { "userBio": "Once upon a time,\nThey lived happily ever after." } ``` #### Solution {#escaping-solution} > [!NOTE] > **Avez-vous vraiment besoin du JSON personnalisé ?** > > La première question à vous poser est de savoir si vous avez vraiment besoin du JSON personnalisé. Dans la plupart des cas, l’approche par mapping simple est suffisante et gère l’échappement automatiquement. Si vous ne pouvez pas échapper les valeurs avant qu’elles n’arrivent dans Zapier, ajoutez une action **Code by Zapier** avant d’appeler PDFMonkey. Supposons que vos données contiennent à la fois des sauts de ligne et des guillemets doubles : | Élément | Valeur | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Trigger App User Bio** |

This is the bio of the user.

It’s a free form text that the user can edit so it can contain line breaks.


It could even be split in a few paragraphs... why not?

| | **Trigger App User Name** | Peter Parker | | **Trigger App User Full Name** | Peter "Spiderman" Parker | Vous devez échapper les valeurs pour `Trigger App User Bio` et `Trigger App User Full Name`. Commencez par ajouter une action **Code by Zapier** à votre Zap et sélectionnez **Run Javascript** : ![Ajout d’une action Code by Zapier avec les données brutes en entrée](https://pdfmonkey.io/fr/docs/img/zapier-error-422-raw-body.webp) Donnez à vos champs des noms qui permettent de les identifier facilement dans les étapes suivantes : ![Nommage des champs d’entrée dans Code by Zapier](https://pdfmonkey.io/fr/docs/img/zapier-error-422-json-format.webp) Ajoutez maintenant le code qui échappe les valeurs : ```javascript title="Code by Zapier" let data = Object.assign({}, inputData); for (let key in data) { if (typeof(data[key]) === "string" && data[key].length > 0) { data[key] = data[key].replace(/\r?\n/g, '
').replace(/\t/g, " ").replace(/"/g, '\\\"'); } } output = [data]; ``` Cela vous donne les mêmes champs en sortie mais avec leurs valeurs correctement échappées : ![La sortie échappée de Code by Zapier](https://pdfmonkey.io/fr/docs/img/zapier-error-422-custom-request.webp) Vous pouvez maintenant utiliser ces valeurs lors de la construction de votre payload PDFMonkey : ![Utilisation des valeurs échappées dans l’action PDFMonkey](https://pdfmonkey.io/fr/docs/img/zapier-error-422-fixed-payload.webp) Notez que nous avons utilisé les champs de l’étape Code by Zapier, et non ceux du trigger directement. ## Étapes suivantes {#next-steps} - [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md) : créer votre compte PDFMonkey et votre premier modèle - [Définir les données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) : structurer le payload JSON pour vos modèles - [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) : comprendre le cycle de vie d’un document généré - [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) : recevoir des notifications en temps réel à la fin de la génération - Découvrir d’autres intégrations : [Make](https://pdfmonkey.io/fr/docs/integrations/make.md), [n8n](https://pdfmonkey.io/fr/docs/integrations/n8n.md), [Workato](https://pdfmonkey.io/fr/docs/integrations/workato.md) --- # Intégration Make : automatiser la génération de documents Source: https://pdfmonkey.io/fr/docs/integrations/make.md Le module PDFMonkey pour [Make](https://www.make.com/) vous permet de générer des documents dans le cadre de vos scénarios automatisés. Combinez-le avec des déclencheurs provenant de constructeurs de formulaires, de CRM ou de bases de données pour produire et envoyer des fichiers sans écrire de code. ## Configuration {#setup} Avant de commencer, assurez-vous de disposer des éléments suivants : - Un compte PDFMonkey ([inscription ici](https://dashboard.pdfmonkey.io/register)) - Un compte [Make](https://www.make.com/) - Un modèle publié dans PDFMonkey Pour la création de compte et la configuration d’un modèle, consultez [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md). Pour connecter PDFMonkey à Make, ajoutez le module PDFMonkey à votre scénario et cliquez sur **Create a connection**. Saisissez votre clé secrète API depuis la page [Mon compte](https://dashboard.pdfmonkey.io/account). ## Générer un document {#generate-a-document} Ajoutez le module PDFMonkey **Generate a Document** à votre scénario. Sélectionnez votre Workspace et votre Template, puis associez les champs des modules précédents aux variables définies dans votre modèle. ![Mapping des champs PDFMonkey dans Make](https://pdfmonkey.io/fr/docs/img/make-pdfmonkey-field-mapping.webp) > [!NOTE] > **Nommage des variables** > > Les noms de variables dans votre modèle doivent suivre des règles de formatage spécifiques. Consultez la référence sur le [nommage des variables](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md#naming-your-variables) pour les formats corrects et incorrects. Après l’exécution du module, celui-ci retourne les données du document généré, incluant l’[URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) et le nom du fichier. ![Résultat de la génération de document dans Make](https://pdfmonkey.io/fr/docs/img/make-document-generated.webp) ## Utiliser le fichier généré {#working-with-the-generated-file} ### Télécharger le fichier {#downloading-the-file} Pour utiliser le fichier généré dans les modules suivants, téléchargez-le d’abord. Ajoutez le module HTTP **Get a File** et passez-lui l’**URL de téléchargement** retournée par le module PDFMonkey. ![Configuration du module HTTP Get a File](https://pdfmonkey.io/fr/docs/img/make-http-get-file.webp) > [!TIP] > L’URL de téléchargement expire après 1 heure. Si vous prévoyez de l’utiliser plus tard, téléchargez le fichier immédiatement ou envoyez-le vers un stockage permanent. Consultez [URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) pour plus de détails. ### Envoyer par e-mail {#sending-by-email} Ajoutez le module de votre fournisseur d’e-mail (ou le module intégré **Send an email** de Make) et joignez le fichier téléchargé. Personnalisez le champ **File name** pour éviter le nom par défaut `file.pdf` ; le module PDFMonkey retourne un nom de fichier que vous pouvez utiliser directement. ![Configuration de la pièce jointe e-mail avec nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/img/make-email-attachment.webp) > [!TIP] > Vous pouvez aussi définir un [nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) dans PDFMonkey pour qu’il arrive avec un nom pertinent dans chaque scénario. ## Exemple : formulaire Tally vers document {#example-tally-form} Cet exemple montre un scénario complet qui reçoit une soumission de formulaire [Tally](https://tally.so/), génère un document et l’envoie par e-mail. ### Le formulaire Tally {#the-tally-form} Le scénario utilise un formulaire Tally comme source de données : ![Formulaire Tally utilisé comme trigger du scénario](https://pdfmonkey.io/fr/docs/img/make-tally-form.webp) ### Configuration du trigger {#setting-up-the-trigger} Créez un nouveau scénario avec le trigger **Watch New Responses** de Tally. Make crée une URL de webhook et l’associe automatiquement à votre formulaire Tally. ![Configuration du webhook Tally dans Make](https://pdfmonkey.io/fr/docs/img/make-tally-webhook-setup.webp) Envoyez une réponse de test et cliquez sur **Run once** pour vérifier la connexion : ![Bouton Run once dans le scénario Make](https://pdfmonkey.io/fr/docs/img/make-run-once-trigger.webp) ![Données du trigger reçues depuis Tally](https://pdfmonkey.io/fr/docs/img/make-trigger-data-received.webp) ### Association des champs et génération {#mapping-fields-and-generating} Avec les données du trigger disponibles, configurez le module PDFMonkey pour associer les champs Tally aux variables de votre modèle, puis ajoutez les modules HTTP et e-mail comme décrit dans [Utiliser le fichier généré](#working-with-the-generated-file). > [!WARNING] > **Publiez toujours votre modèle** > > Si les documents générés ne correspondent pas à votre modèle, vérifiez que vous l’avez bien publié. Oublier de publier après des modifications est une erreur courante, surtout lorsque vous alternez entre Make et PDFMonkey. ## Résolution de problèmes {#troubleshooting} ### Échappement JSON {#json-escaping} Le module Make envoie les données au format JSON. Si vos données contiennent des guillemets doubles ou des sauts de ligne, le JSON devient invalide. Par exemple, un nom comme `Peter "Spider-Man" Parker` casse la structure JSON. Remplacez `"` par `\"` dans les valeurs pour échapper les guillemets doubles : ![Configuration de l’échappement JSON dans Make](https://pdfmonkey.io/fr/docs/img/make-json-escaping.webp) Les sauts de ligne (`\n`) nécessitent le même traitement : remplacez `\n` par `\\n` pour garder le JSON valide. ### Modèle non publié {#template-not-published} Si les documents générés ne reflètent pas vos dernières modifications du modèle, la cause la plus probable est un modèle non publié. Ouvrez votre modèle dans PDFMonkey et cliquez sur **Publish** avant de relancer le scénario. ### URL de téléchargement expirée {#download-url-expired} L’[URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) est valide pendant 1 heure. Si un module situé plus loin dans votre scénario échoue parce que l’URL a expiré, rapprochez l’étape HTTP **Get a File** du module PDFMonkey pour que le téléchargement se fasse immédiatement. Pour plus de détails, consultez [L’URL de téléchargement retourne une erreur 403](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-renvoie-403.md). ## Prochaines étapes {#next-steps} - [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md) : créez votre compte PDFMonkey et votre premier modèle - [Définir les données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) : apprenez à structurer le payload JSON de vos modèles - [Nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) : contrôlez le nom des fichiers générés - [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) : comprenez le cycle de vie d’un document généré - [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) : recevez des notifications en temps réel lorsque des documents sont générés - Explorez d’autres intégrations : [Zapier](https://pdfmonkey.io/fr/docs/integrations/zapier.md), [n8n](https://pdfmonkey.io/fr/docs/integrations/n8n.md), [Workato](https://pdfmonkey.io/fr/docs/integrations/workato.md) --- # Intégration n8n : automatiser la génération de documents Source: https://pdfmonkey.io/fr/docs/integrations/n8n.md Le nœud PDFMonkey pour n8n vous permet de générer, récupérer, télécharger et supprimer des documents directement depuis vos workflows n8n. Si vous configurez PDFMonkey avec n8n pour la première fois, commencez par la section [Premiers pas](#getting-started) ci-dessous. ## Premiers pas {#getting-started} n8n est une plateforme d’automatisation de workflows qui connecte différentes applications et services entre eux. C’est une alternative open-source à des outils comme [Zapier](zapier.md) et [Make](make.md), proposant des options cloud et auto-hébergées. Avant de commencer, assurez-vous d’avoir : - Un compte PDFMonkey ([inscrivez-vous ici](https://dashboard.pdfmonkey.io/register)) - Un compte ou une instance n8n ([inscrivez-vous sur n8n.io](https://n8n.io) ou [auto-hébergez](https://docs.n8n.io/hosting/)) - Votre clé API PDFMonkey - Un modèle publié dans PDFMonkey Pour le guide complet de création de compte et de configuration d’un modèle, consultez [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md). ### Configuration des identifiants {#setting-up-credentials} Avant d’utiliser le nœud PDFMonkey, vous devez configurer vos identifiants API : 1. Dans votre workflow n8n, ajoutez un nœud PDFMonkey 2. Cliquez sur **Create New Credentials** 3. Saisissez votre clé API PDFMonkey (disponible dans [votre tableau de bord PDFMonkey](https://dashboard.pdfmonkey.io/account)) 4. Cliquez sur **Save** > [!TIP] > **Où trouver votre clé API** > > Votre clé API est disponible dans votre tableau de bord PDFMonkey sous **Account** puis **API**. Consultez [Authentification](https://pdfmonkey.io/fr/docs/api/authentication.md) pour plus de détails. ### Votre premier workflow {#your-first-workflow} Créons un workflow simple qui génère un document lorsqu’il est déclenché manuellement. Utilisez le modèle que vous avez créé dans [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md), ou créez un modèle simple avec une variable de salutation. #### Étape 1 : ajouter un Manual Trigger 1. Créez un nouveau workflow dans n8n 2. Le nœud **Manual Trigger** devrait déjà être présent 3. Cela vous permettra de tester votre workflow manuellement #### Étape 2 : ajouter le nœud PDFMonkey 1. Cliquez sur le bouton **+** pour ajouter un nouveau nœud 2. Recherchez **PDFMonkey** 3. Sélectionnez le nœud **PDFMonkey** 4. Choisissez **Generate Document** comme opération #### Étape 3 : configurer l’opération Generate Document Dans la configuration du nœud PDFMonkey : 1. Sélectionnez vos identifiants PDFMonkey (ou créez-les si ce n’est pas déjà fait) 2. Définissez l’identifiant de votre modèle PDFMonkey 3. Réglez la **Payload Input Method** sur **Key-Value Pairs** 4. Ajoutez les champs suivants : - Key : `name` → Value : `Peter Parker` - Key : `favoriteNumber` → Value : `8` > [!NOTE] > **Méthodes de payload** > > Vous pouvez choisir entre **Key-Value Pairs** (simple) ou **JSON** (pour les structures de données complexes). La méthode JSON est détaillée dans la section [Générer un document](#generate-a-document) ci-dessous. > [!NOTE] > **Nommage des variables** > > Les noms de variables dans votre modèle doivent respecter des règles de formatage spécifiques. Consultez la référence sur le [nommage des variables](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md#naming-your-variables) pour les formats corrects et incorrects. #### Étape 4 : tester votre workflow 1. Cliquez sur **Execute Workflow** (le bouton play en bas) 2. Attendez quelques secondes que le document se génère 3. Vous devriez voir les détails du document dans la sortie 4. Le fichier est maintenant disponible à l’adresse `download_url` fournie #### Étape 5 : télécharger le fichier (optionnel) Si vous souhaitez télécharger le fichier généré en tant que données binaires dans n8n : 1. Activez **Download File** dans les options du nœud PDFMonkey 2. Le fichier sera disponible en tant que données binaires dans les nœuds suivants ### Exemple : webhook vers document puis email {#example-webhook-to-document-to-email} Créons un workflow plus pratique qui : 1. Reçoit des données depuis un webhook 2. Génère un document avec PDFMonkey 3. Envoie le document par email #### Structure du workflow 1. Nœud **Webhook** : reçoit les données du formulaire 2. Nœud **PDFMonkey** : génère le document 3. Nœud **Send Email** : envoie le fichier en pièce jointe #### Configuration **Nœud Webhook :** - Méthode : POST - Chemin : `/generate-document` **Nœud PDFMonkey :** - Opération : Generate Document - Sélectionnez votre modèle - Associez les données du webhook aux variables du modèle : - `name` → `{{ $json.name }}` - `favoriteNumber` → `{{ $json.favoriteNumber }}` - Activez l’option **Download File** **Nœud Send Email :** - Utilisez Gmail, SendGrid ou tout service SMTP - Dans les pièces jointes, référencez les données binaires PDFMonkey : - Property Name : `data` - File Name : `document.pdf` > [!TIP] > **Tester les webhooks** > > Utilisez l’**URL de test** fournie par n8n pour envoyer des requêtes POST avec des données JSON comme : > ```json > { > "name": "John Doe", > "favoriteNumber": 42 > } > ``` Vous avez configuré avec succès votre premier workflow PDFMonkey dans n8n. ## Générer un document {#generate-a-document} L’opération Generate Document crée un document à partir de l’un de vos modèles PDFMonkey. Vous fournissez un modèle et un [payload de données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md), et PDFMonkey génère le fichier. ### Méthodes d’entrée du payload {#payload-input-methods} Le nœud PDFMonkey propose deux façons d’envoyer des données à votre modèle. **Key-Value Pairs (mode simple)** est la méthode la plus facile pour envoyer des structures de données simples. Vous ajoutez les champs un par un, chacun avec une clé (le nom de la variable dans votre modèle) et une valeur (statique ou dynamique provenant des nœuds précédents). **JSON Format (mode avancé)** gère les structures de données complexes, les objets imbriqués ou les tableaux. Utilisez le JSON lorsque votre modèle attend des données structurées : ```json title="Payload JSON" { "customer": { "name": "Acme Inc.", "email": "contact@acme.com", "address": { "street": "123 Main St", "city": "New York", "zip": "10001" } }, "items": [ { "product": "Widget", "quantity": 5, "price": 10.99 }, { "product": "Gadget", "quantity": 2, "price": 24.99 } ], "total": 104.93 } ``` Dans votre modèle, accédez aux données imbriquées avec la notation par points : ```liquid title="HTML"

Invoice for {{customer.name}}

{{customer.address.street}}, {{customer.address.city}}

{% for item in items %}

{{item.product}} x{{item.quantity}} = {{item.price}}

{% endfor %} ``` Pour en savoir plus sur la structuration de vos données dynamiques, consultez [Définir les données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md). ### Utilisation des expressions {#using-expressions} Les expressions n8n vous permettent de référencer dynamiquement les données des nœuds précédents : ```javascript {{ $json.customerName }} // Champ simple {{ $node["Webhook"].json["email"] }} // Depuis un nœud spécifique {{ $json.items.length }} // Longueur du tableau {{ new Date().toISOString() }} // Date actuelle ``` Vous pouvez utiliser les expressions dans les valeurs des paires Key-Value, les payloads JSON (comme valeurs de chaîne), le champ de nom de fichier personnalisé et les champs de métadonnées. ### Nom de fichier personnalisé {#custom-filename} Vous pouvez spécifier un nom personnalisé pour le fichier généré. Cela est utile lorsque vous stockez des fichiers dans Google Drive, Dropbox ou d’autres services de stockage. Dans les options du nœud PDFMonkey : 1. Développez **Additional Options** 2. Définissez **Custom Filename** 3. Utilisez un nom statique ou des expressions n8n : ``` Invoice-{{ $json.invoiceNumber }}.pdf Report-{{ $now.format('YYYY-MM-DD') }}.pdf {{ $json.customerName }}-Contract.pdf ``` > [!WARNING] > **Restrictions sur le nom de fichier** > > - N’utilisez pas de slashs `/` ni de backslashs `\` > - Évitez les caractères spéciaux qui pourraient causer des problèmes sur différents systèmes d’exploitation > - Les caractères non latins peuvent être échappés ou remplacés Pour plus de détails sur les options de nom de fichier, consultez [Nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md). ### Métadonnées {#metadata} Les métadonnées sont des informations supplémentaires attachées à un document qui n’apparaissent pas dans le fichier généré. Elles sont utiles pour suivre l’origine du document, stocker des identifiants de référence et filtrer dans les [webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md). Pour ajouter des métadonnées : 1. Développez **Additional Options** dans le nœud PDFMonkey 2. Réglez **Metadata** sur **Key-Value Pairs** ou **JSON** 3. Ajoutez vos champs de métadonnées : ```json { "orderId": "ORD-12345", "customerEmail": "john@example.com", "environment": "production" } ``` Vous pouvez récupérer les métadonnées ultérieurement en utilisant l’opération Get Document ou dans les [triggers par webhook](#pdfmonkey-trigger). > [!NOTE] > **Métadonnées vs Payload** > > - **Payload (données dynamiques) :** Données utilisées pour générer le contenu du document > - **Metadata :** Informations attachées au document mais non visibles dans la sortie ; incluses dans les notifications webhook ### Attendre le document {#wait-for-document} Par défaut, l’opération Generate Document attend que le document soit entièrement généré avant de continuer. > [!NOTE] > **Temps de génération du document** > > La plupart des documents se génèrent en quelques secondes. Les documents complexes avec de nombreuses pages, images ou du JavaScript peuvent prendre plus de temps. Consultez [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) pour le cycle de vie complet de la génération. Si vous devez désactiver l’attente et gérer la complétion de manière asynchrone, vous pouvez utiliser le [trigger PDFMonkey](#pdfmonkey-trigger) ou le [polling](#polling-for-completion) à la place. ### Tableaux et données complexes {#arrays-and-complex-data} n8n facilite le travail avec les tableaux provenant des nœuds précédents. Voici un exemple utilisant des données Google Sheets. **Sortie du nœud Google Sheets :** ```json [ { "product": "Widget", "qty": 5, "price": 10 }, { "product": "Gadget", "qty": 2, "price": 25 } ] ``` **Dans le nœud PDFMonkey (mode JSON) :** ```json { "customerName": "{{ $json.customerName }}", "items": {{ $node["Google Sheets"].json }} } ``` Le tableau est transmis directement à votre modèle où vous pouvez le parcourir : ```liquid {% for item in items %} {{item.product}} {{item.qty}} {{item.price}} {% endfor %} ``` Pour en savoir plus sur les boucles et le rendu conditionnel, consultez [Conditions et boucles](https://pdfmonkey.io/fr/docs/modeles-code/conditions-et-boucles.md). ### Traitement d’éléments multiples {#handling-multiple-items} Si votre workflow traite plusieurs éléments (comme plusieurs clients ou commandes), utilisez le nœud **Split In Batches** de n8n : ``` 1. Get Data (retourne 100 éléments) 2. Split In Batches (taille du lot : 1) 3. PDFMonkey - Generate Document (s’exécute 100 fois) 4. Stocker les fichiers ``` Ou utilisez le nœud **Loop Over Items** pour plus de contrôle. > [!WARNING] > **Limites de débit** > > Soyez attentif aux limites de votre plan PDFMonkey lorsque vous générez plusieurs documents. Envisagez d’ajouter des nœuds **Wait** entre les lots si vous générez de nombreux documents. Consultez [Limitation de débit](#rate-limiting) pour plus de détails, et [Nos offres](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) pour les informations de quota. ### Gestion des erreurs {#error-handling} Utilisez les fonctionnalités de gestion d’erreurs de n8n pour gérer les échecs : 1. Cliquez sur le nœud PDFMonkey 2. Allez dans l’onglet **Settings** 3. Configurez **On Error** : - **Stop Workflow** (par défaut) - **Continue With Last Successful Item** - **Continue Execution** Pour une gestion d’erreurs plus robuste, ajoutez un nœud **IF** après PDFMonkey pour vérifier le [statut du document](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) : ``` IF: {{ $json.status }} equals "success" -> TRUE : Continuer avec le fichier -> FALSE : Envoyer une notification d’erreur ``` ## Trigger PDFMonkey {#pdfmonkey-trigger} Le trigger PDFMonkey est un trigger basé sur les webhooks qui écoute les événements de génération de documents. Lorsqu’un document est terminé, PDFMonkey envoie une notification à votre workflow n8n. Cela est utile pour automatiser les actions post-génération comme le stockage de fichiers, l’envoi de notifications ou la mise à jour de bases de données. Pour des informations de fond sur le fonctionnement des webhooks PDFMonkey (types d’événements, format du payload et vérification des signatures), consultez [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md). ### Configuration {#trigger-setup} 1. Dans votre workflow n8n, cliquez sur **+** pour ajouter un nouveau nœud 2. Recherchez **PDFMonkey Trigger** et sélectionnez-le comme point de départ de votre workflow 3. Sélectionnez vos identifiants API PDFMonkey 4. Choisissez les modèles à écouter : - **Any Template :** déclencher pour tous les documents de votre workspace - **Specific Template :** déclencher pour un seul modèle - **Multiple Templates :** déclencher pour plusieurs modèles sélectionnés 5. Copiez l’**URL de webhook** affichée par le nœud trigger 6. Dans votre [tableau de bord PDFMonkey](https://dashboard.pdfmonkey.io), allez dans la section **Webhooks** 7. Créez un nouvel endpoint avec l’URL de webhook n8n 8. Cochez les événements de succès et d’échec, puis cliquez sur **Create** 9. De retour dans n8n, activez le toggle **Activate** pour activer votre workflow > [!NOTE] > **Webhooks de production vs de test** > > n8n fournit deux URLs : > - **URL de test :** Pour tester dans l’éditeur n8n > - **URL de production :** Pour les workflows activés/publiés > > Assurez-vous de mettre à jour l’URL de webhook dans PDFMonkey lors de l’activation de votre workflow. ### Données du trigger {#trigger-data} Lorsqu’un document est terminé, le trigger reçoit un objet [DocumentCard](https://pdfmonkey.io/fr/docs/api/documents.md#the-documentcard-object). Celui-ci inclut les métadonnées du document, le statut et l’URL de téléchargement, mais n’inclut pas les données dynamiques originales que vous avez envoyées : ```json { "document": { "id": "a5e86d72-f5b7-43d4-a04e-8b7e08e6741c", "app_id": "d6b4e8f2-7a3c-4d1e-9f5b-2c8a1d3e6f90", "created_at": "2050-03-13T12:34:56.181+02:00", "document_template_id": "2903f5b4-623b-4e10-b2e3-dc7e2e67ea39", "document_template_identifier": "My Invoice Template", "download_url": "https://pdfmonkey.s3.eu-west-1.amazonaws.com/...", "failure_cause": null, "filename": "2050-03-14 Peter Parker.pdf", "meta": { "_filename": "2050-03-14 Peter Parker.pdf", "clientRef": "spidey-616" }, "output_type": "pdf", "preview_url": "https://preview.pdfmonkey.io/...", "public_share_link": null, "status": "success", "updated_at": "2050-03-13T12:34:59.412+02:00" } } ``` > [!WARNING] > **Les données dynamiques ne sont pas incluses** > > Le payload du webhook n’inclut pas les données dynamiques (payload) originales que vous avez envoyées pour générer le document. Si vous avez besoin de ces informations dans votre workflow, stockez-les dans le champ [métadonnées](#metadata) lors de la génération du document. Les métadonnées sont incluses dans chaque notification webhook. ### Téléchargement automatique {#auto-download} Le trigger PDFMonkey dispose d’une option **Download File** qui télécharge automatiquement le fichier généré lorsque le trigger se déclenche. Lorsqu’elle est activée : - Le fichier est téléchargé en tant que données binaires - Il est disponible immédiatement dans les nœuds suivants - Pas besoin d’une opération Download File séparée Pour l’activer : 1. Ouvrez les paramètres du nœud trigger 2. Développez **Additional Options** 3. Basculez **Download File** sur ON Les données binaires sont disponibles avec la clé `data`. ### Cas d’utilisation {#trigger-use-cases} **Stocker des fichiers dans Google Drive :** ``` 1. PDFMonkey Trigger (Download File : activé) 2. Google Drive - Upload File - File : {{ $binary.data }} - Folder : /Invoices/ - Filename : {{ $json.filename }} ``` **Envoyer une notification sur Slack :** ``` 1. PDFMonkey Trigger 2. Slack - Send Message - Channel : #notifications - Message : "New document generated: {{ $json.filename }}" - Attachment : {{ $json.download_url }} ``` **Mettre à jour un enregistrement en base de données :** ``` 1. PDFMonkey Trigger 2. Postgres - Update - Table : orders - Where : id = {{ $json.metadata.orderId }} - Set : pdf_url = {{ $json.download_url }}, status = 'completed' ``` **Envoyer le document par email au client :** ``` 1. PDFMonkey Trigger (Download File : activé) 2. Gmail - Send Email - To : {{ $json.metadata.customerEmail }} - Subject : Your invoice is ready - Attachments : {{ $binary.data }} ``` ### Métadonnées pour le routage {#metadata-for-routing} Les métadonnées permettent des workflows conditionnels. Lors de la génération d’un document, attachez des informations de routage : ```json { "metadata": { "documentType": "invoice", "customerId": "12345", "sendEmail": true } } ``` Puis dans votre workflow déclenché, utilisez un nœud **IF** ou **Switch** pour router en fonction des métadonnées : ``` 1. PDFMonkey Trigger 2. Nœud Switch - Case 1 : {{ $json.metadata.documentType }} = "invoice" -> Stocker en comptabilité - Case 2 : {{ $json.metadata.documentType }} = "report" -> Partager sur Slack - Case 3 : {{ $json.metadata.documentType }} = "contract" -> Stocker dans DocuSign ``` ### Test {#trigger-testing} **Méthode 1 : Générer un document de test.** Utilisez un autre workflow ou l’API pour générer un document, attendez que le webhook se déclenche, et vérifiez l’exécution du nœud trigger dans n8n. **Méthode 2 : Utiliser le webhook de test.** 1. Cliquez sur **Listen for event** dans le nœud trigger 2. Générez un document depuis votre modèle PDFMonkey 3. Le trigger capture l’événement et affiche les données 4. Cliquez sur **Use test event** pour utiliser ces données lors de la construction de votre workflow > [!TIP] > **Déclencher depuis le tableau de bord** > > Vous pouvez déclencher manuellement une génération de test depuis l’éditeur de modèle PDFMonkey en cliquant sur le bouton **Generate**. Cela déclenche le webhook immédiatement. Vous pouvez également avoir plusieurs workflows n8n à l’écoute du même modèle. Chaque webhook reçoit la notification indépendamment, ce qui est utile pour séparer les environnements ou avoir différents workflows pour différents types de documents. ### Garanties de livraison {#delivery-guarantees} PDFMonkey utilise [Svix](https://www.svix.com/) pour livrer les webhooks. Les livraisons suivent ces garanties : - **Livraison au moins une fois :** vous pourriez recevoir le même événement plusieurs fois - **Ordre au mieux :** les événements sont généralement dans l’ordre mais ce n’est pas garanti - **Réessais automatiques :** les livraisons échouées sont réessayées avec un backoff exponentiel - **Vérification de signature :** chaque webhook est signé pour que vous puissiez vérifier son authenticité > [!NOTE] > **Rendez votre workflow idempotent** > > Comme les webhooks peuvent être livrés plusieurs fois, concevez votre workflow pour gérer les événements dupliqués correctement. Utilisez les identifiants de documents pour vérifier si vous avez déjà traité un événement. Pour tous les détails sur la configuration des webhooks (routage par canal et vérification de signature), consultez [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md). ## Autres opérations {#other-operations} Au-delà de la génération de documents et de la réaction aux triggers, le nœud PDFMonkey prend en charge plusieurs opérations de gestion de documents. ### Récupérer un document {#get-document} L’opération Get Document récupère les informations d’un document précédemment généré. Utilisez-la pour vérifier le [statut d’un document](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md), récupérer son [URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md), accéder aux métadonnées attachées ou vérifier qu’un document existe avant traitement. **Champ requis :** Document ID ``` Document ID : {{ $json.documentId }} ``` L’opération retourne les informations complètes du document incluant le statut, l’URL de téléchargement, l’URL de prévisualisation, les métadonnées et les horodatages. **Valeurs de statut du document :** - `draft` — le document est créé mais pas encore en file d’attente pour la génération - `pending` — le document est en file d’attente pour la génération - `generating` — le document est en cours de rendu - `success` — le document a été généré avec succès - `failure` — la génération a échoué (vérifiez `failure_cause` pour les détails) Pour le cycle de vie complet des statuts, consultez [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md). ### Télécharger un fichier {#download-file} L’opération Download File télécharge un fichier généré en tant que données binaires. Utilisez-la pour télécharger un fichier généré précédemment, obtenir des données binaires séparément de la génération ou re-télécharger un document pour traitement. **Champ requis :** Document ID **Champ optionnel :** Binary Property Name (par défaut : `data`) ``` Document ID : {{ $json.documentId }} Binary Property Name : pdfFile ``` Le fichier est stocké en tant que données binaires et peut être utilisé dans les pièces jointes d’email, les nœuds de stockage de fichiers (Google Drive, Dropbox, etc.), les uploads FTP ou d’autres nœuds de traitement. > [!NOTE] > **Generate Document inclut le téléchargement** > > Si vous générez et téléchargez immédiatement, utilisez l’option **Download File** dans l’opération Generate Document plutôt qu’un nœud Download File séparé. ### Supprimer un document {#delete-document} L’opération Delete Document supprime définitivement un document de PDFMonkey. Utilisez-la pour nettoyer après l’envoi d’un document, supprimer des documents contenant des données sensibles, gérer les quotas de stockage ou implémenter des politiques de rétention de documents. **Champ requis :** Document ID ``` Document ID : {{ $json.documentId }} ``` > [!WARNING] > **La suppression est définitive** > > Une fois supprimés, les documents ne peuvent pas être récupérés. L’URL de téléchargement ne fonctionnera plus. Assurez-vous d’avoir sauvegardé le fichier ailleurs si vous en avez besoin. > [!NOTE] > **Le TTL comme alternative** > > Envisagez d’utiliser la [suppression automatique (TTL)](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) plutôt que de supprimer manuellement les documents. Vous pouvez configurer la suppression automatique des documents après une période configurable lors de la génération. ### Polling de complétion {#polling-for-completion} Si vous avez généré un document avec **Wait for Document** désactivé, vous pouvez utiliser le polling pour vérifier sa complétion au lieu d’un trigger webhook : ``` 1. PDFMonkey - Generate Document (Wait : désactivé) 2. Wait (10 secondes) 3. PDFMonkey - Get Document - Document ID : {{ $node["PDFMonkey"].json.id }} 4. Nœud IF - {{ $json.status }} = "success" - TRUE : Continuer avec le fichier - FALSE : Retourner à l’étape 2 ``` > [!NOTE] > **Meilleure approche : utiliser le trigger** > > Au lieu du polling, envisagez d’utiliser le [trigger PDFMonkey](#pdfmonkey-trigger) pour être notifié lorsque les documents sont prêts. Les triggers sont plus efficaces et répondent plus rapidement. ### Combiner les opérations {#combining-operations} **Générer, stocker et nettoyer :** ``` 1. Manual Trigger 2. PDFMonkey - Generate Document (Download : activé) 3. Google Drive - Upload File - File : {{ $binary.data }} - Folder : /Invoices/ 4. Postgres - Insert - Table : documents - Data : { drive_url : {{ $node["Google Drive"].json.webViewLink }}, pdfmonkey_id : {{ $node["PDFMonkey"].json.id }} } 5. PDFMonkey - Delete Document - Document ID : {{ $node["PDFMonkey"].json.id }} ``` **Téléchargement conditionnel basé sur le statut :** ``` 1. Webhook (reçoit l’identifiant du document) 2. PDFMonkey - Get Document - Document ID : {{ $json.documentId }} 3. Nœud IF - Condition : {{ $json.status }} = "success" - TRUE : 4a. PDFMonkey - Download File 5a. Envoyer au client - FALSE : 4b. Envoyer une notification d’erreur 5b. PDFMonkey - Delete Document (nettoyage de la tentative échouée) ``` **Re-générer et remplacer :** ``` 1. Webhook (reçoit la mise à jour de commande) 2. PDFMonkey - Delete Document - Document ID : {{ $json.oldDocumentId }} 3. PDFMonkey - Generate Document - Template : Invoice - Payload : {{ $json.updatedData }} 4. Mettre à jour la base de données avec le nouvel identifiant de document ``` ## Résolution de problèmes {#troubleshooting} ### Erreurs d’authentification {#authentication-errors} **Clé API invalide :** ``` 401 Unauthorized - Invalid API key ``` 1. Allez dans votre [tableau de bord PDFMonkey](https://dashboard.pdfmonkey.io/account) 2. Naviguez vers **Account** puis **API** 3. Copiez votre clé API 4. Dans n8n, mettez à jour vos identifiants PDFMonkey avec la bonne clé 5. Testez la connexion Pour en savoir plus sur l’authentification API, consultez [Authentification](https://pdfmonkey.io/fr/docs/api/authentication.md). > [!NOTE] > **Workspaces multiples** > > Si vous avez plusieurs workspaces PDFMonkey, assurez-vous d’utiliser la clé API du bon workspace. Si vos identifiants cessent soudainement de fonctionner, supprimez les anciens identifiants dans n8n, créez-en de nouveaux avec une clé API fraîche, et mettez à jour tous les nœuds utilisant ces identifiants. ### Modèle introuvable {#template-not-found} ``` 404 Not Found - Template does not exist ``` **Causes :** le modèle a été supprimé, le mauvais workspace ou la mauvaise clé API est utilisé, ou l’identifiant du modèle est incorrect. **Solution :** Vérifiez que le modèle existe dans votre tableau de bord PDFMonkey, vérifiez que vous utilisez la bonne clé API, et re-sélectionnez le modèle depuis le menu déroulant dans n8n. **Modèle non publié :** ``` 422 Unprocessable Entity - Template is not published ``` Allez dans votre modèle dans PDFMonkey et assurez-vous qu’il est publié en cliquant sur le bouton **Publish**, puis réessayez la génération. > [!WARNING] > **Erreur courante** > > C’est l’une des erreurs les plus fréquentes. Pensez toujours à publier votre modèle après avoir effectué des modifications. ### Payload invalide {#invalid-payload} ``` 422 Unprocessable Entity - Invalid payload ``` **Causes :** syntaxe JSON invalide (en mode JSON), mauvais types de données ou champs requis manquants. Problèmes courants de syntaxe JSON : **Guillemets manquants :** ```json // Incorrect { name: "John" } // Correct { "name": "John" } ``` **Virgules en fin de ligne :** ```json // Incorrect { "name": "John", "age": 30, } // Correct { "name": "John", "age": 30 } ``` **Guillemets doubles non échappés dans les valeurs :** ```json // Incorrect - les guillemets imbriqués cassent le JSON { "name": "Peter "Spider-Man" Parker" } // Correct - échapper les guillemets internes avec un backslash { "name": "Peter \"Spider-Man\" Parker" } ``` **Utilisation des expressions n8n dans le JSON :** Lorsque vous utilisez des expressions, assurez-vous de sérialiser les objets : ```json // Incorrect - Créera un JSON invalide { "items": {{ $json.items }} } // Correct - Sérialiser correctement { "items": {{ JSON.stringify($json.items) }} } ``` > [!TIP] > **Utilisez le mode Key-Value Pairs** > > Si vous avez des difficultés avec la syntaxe JSON, passez en mode **Key-Value Pairs**. n8n gère automatiquement tout l’échappement et le formatage. ### Erreurs de téléchargement {#download-errors} **URL de téléchargement expirée :** ``` 403 Forbidden - Download URL has expired ``` Les [URLs de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) expirent après 1 heure pour des raisons de sécurité. **Option 1 :** Utilisez Get Document pour obtenir une URL fraîche, puis téléchargez depuis la nouvelle URL avec un nœud HTTP Request. **Option 2 :** Activez l’option **Download File** dans le nœud Generate Document pour télécharger immédiatement après la génération. **Option 3 :** Stockez les données binaires dans un service de stockage (Google Drive, S3, etc.) plutôt que de dépendre des URLs PDFMonkey. Pour plus de détails, consultez [L’URL de téléchargement renvoie une erreur 403](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-renvoie-403.md). **Données binaires non disponibles :** Si aucune donnée binaire n’est disponible pour la pièce jointe ou le stockage, assurez-vous que **Download File** est activé : - Dans l’opération **Generate Document** : Additional Options puis Download File - Dans le **PDFMonkey Trigger** : Additional Options puis Download File - Ou utilisez explicitement une opération **Download File** ### Problèmes de webhook {#webhook-issues} **Le webhook ne reçoit pas d’événements :** 1. Le workflow est **activé** (pas seulement sauvegardé) 2. L’URL du webhook est correcte dans PDFMonkey 3. Utilisation de l’**URL de production** et non l’URL de test 4. Le modèle est publié 5. Le pare-feu ne bloque pas les requêtes **Pour déboguer :** vérifiez l’onglet **Executions** dans n8n pour les erreurs, allez dans les paramètres du modèle dans le tableau de bord PDFMonkey et vérifiez les journaux de livraison des webhooks, et essayez de générer manuellement un document de test. Consultez [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) pour les détails de configuration des webhooks. **Réception d’événements webhook en double :** c’est un comportement attendu. Les webhooks PDFMonkey utilisent une livraison au moins une fois. Rendez votre workflow idempotent en vérifiant si vous avez déjà traité un document : ``` 1. PDFMonkey Trigger 2. Postgres - Vérifier si l’identifiant du document existe 3. Nœud IF - Déjà traité : Arrêter - Nouveau document : Continuer le traitement ``` **Mauvaise URL de webhook :** Après l’activation de votre workflow, l’URL du webhook passe de Test à Production. Copiez l’**URL de production** depuis le nœud trigger et mettez à jour l’URL du webhook dans vos paramètres PDFMonkey. ### Erreurs d’expression {#expression-errors} **Cannot read property of undefined :** ``` Cannot read property 'field' of undefined ``` Cela se produit lorsque vous essayez d’accéder à des données qui n’existent pas depuis un nœud précédent. **Vérifiez le nom du nœud :** ```javascript // Mauvais nom de nœud {{ $node["PDFmonkey"].json.id }} // Bon nom de nœud (M majuscule) {{ $node["PDFMonkey"].json.id }} ``` **Vérifiez que les données existent :** ```javascript // Suppose que le champ existe {{ $json.customer.email }} // Utilisez le chaînage optionnel (n8n 1.0+) {{ $json.customer?.email }} // Ou fournissez une valeur par défaut {{ $json.customer?.email || 'no-email@example.com' }} ``` Utilisez l’éditeur d’expressions dans n8n (cliquez sur le bouton **Expression**) et utilisez l’autocomplétion pour vous assurer de référencer les bons champs. ### Timeout du workflow {#workflow-timeout} ``` Workflow execution timed out ``` **Causes :** document prenant trop de temps à se générer, problèmes réseau ou téléchargement de fichiers volumineux. **Option 1 :** Augmentez le timeout dans les paramètres du workflow (Execution Timeout). **Option 2 :** Désactivez « Wait for Document » et utilisez un [trigger webhook](#pdfmonkey-trigger) dans un workflow séparé. **Option 3 :** Découpez en plusieurs workflows et utilisez des webhooks pour les chaîner. ### Erreurs de mémoire {#memory-errors} ``` JavaScript heap out of memory ``` Cela se produit lors du traitement de fichiers ou de données très volumineux dans n8n. **Solutions :** 1. Traitez les éléments par lots plus petits (utilisez le nœud Split In Batches) 2. Utilisez le streaming lorsque c’est possible 3. Augmentez l’allocation mémoire de n8n (auto-hébergé uniquement) 4. Stockez les fichiers volumineux en externe plutôt que de les faire transiter par le workflow ### Limitation de débit {#rate-limiting} ``` 429 Too Many Requests - Rate limit exceeded ``` Ajoutez des nœuds **Wait** entre les opérations lors du traitement de plusieurs documents : ``` 1. Récupérer les éléments à traiter 2. Split In Batches (taille : 10) 3. Wait (5 secondes) 4. PDFMonkey - Generate Document 5. Boucle ``` Ou utilisez le nœud **Code** pour ajouter des délais : ```javascript // Attendre 1 seconde par élément await new Promise(resolve => setTimeout(resolve, 1000)); return items; ``` ### Formatage JSON {#json-formatting} **Sauts de ligne dans le JSON :** le JSON ne prend pas en charge les sauts de ligne bruts dans les chaînes : ```json // Incorrect { "description": "Line 1 Line 2" } // Correct { "description": "Line 1\nLine 2" } ``` Ou utilisez un nœud **Code** pour échapper : ```javascript items[0].json.description = items[0].json.description.replace(/\n/g, '\\n'); return items; ``` **Caractères spéciaux :** échappez les guillemets doubles dans les valeurs de chaîne : ```json // Incorrect - les guillemets non échappés cassent le JSON { "html": "
Hello
" } // Correct - guillemets internes échappés { "html": "
Hello
" } ``` Ou utilisez le mode **Key-Value Pairs** qui gère l’échappement automatiquement. ## Prochaines étapes {#next-steps} - [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md) : configurez votre compte PDFMonkey et créez votre premier modèle - [Définir les données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) : apprenez à structurer le payload JSON pour vos modèles - [Nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) : contrôlez le nom des fichiers générés - [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) : comprenez le cycle de vie d’un document généré - [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) : recevez des notifications en temps réel lorsque les documents sont générés - [URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) : fonctionnement des liens de téléchargement temporaires et leur actualisation - [Rétention et suppression](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) : configurez le nettoyage automatique des documents avec le TTL - Explorez d’autres intégrations : [Zapier](zapier.md), [Make](make.md), [Workato](workato.md) ## Besoin d’aide supplémentaire ? {#need-more-help} Si vous rencontrez toujours des problèmes : 1. **Documentation n8n :** [docs.n8n.io](https://docs.n8n.io) 2. **Statut PDFMonkey :** [status.pdfmonkey.io](https://status.pdfmonkey.io) 3. **Communauté n8n :** [community.n8n.io](https://community.n8n.io) 4. **Support PDFMonkey :** support@pdfmonkey.io > [!NOTE] > **Incluez les détails dans vos demandes de support** > > Lorsque vous demandez de l’aide, incluez le message d’erreur complet, votre version de n8n, une capture d’écran du workflow et les étapes pour reproduire le problème. --- # Intégration Workato : automatiser la génération de documents Source: https://pdfmonkey.io/fr/docs/integrations/workato.md Le connecteur PDFMonkey pour [Workato](https://www.workato.com/) vous permet de générer, surveiller et nettoyer des documents dans le cadre de vos recettes automatisées. Combinez-le avec des déclencheurs provenant de CRM, de constructeurs de formulaires ou de bases de données pour produire et envoyer des fichiers sans écrire de code. ## Configuration {#setup} Avant de commencer, assurez-vous de disposer des éléments suivants : - Un compte PDFMonkey ([inscription ici](https://dashboard.pdfmonkey.io/register)) - Un compte [Workato](https://www.workato.com/) - Un modèle publié dans PDFMonkey Pour la création de compte et la configuration d’un modèle, consultez [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md). Pour connecter PDFMonkey à Workato : 1. Ajoutez le connecteur **PDFMonkey** à votre recette. 2. Créez une nouvelle connexion et saisissez votre clé secrète API, disponible sur la page [Mon compte](https://dashboard.pdfmonkey.io/account). Une fois connecté, les actions et triggers PDFMonkey sont disponibles dans les étapes de votre recette. ## Générer un document {#generate-a-document} Utilisez l’action **Generate Document** pour créer un document à partir de l’un de vos modèles. 1. Sélectionnez le modèle à utiliser pour la génération. 2. Fournissez les [données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) sous forme de payload JSON. Ces données alimentent les variables définies dans votre modèle. 3. Vous pouvez optionnellement joindre des [métadonnées](#metadata) (comme un nom de fichier personnalisé ou un identifiant de référence pour le traitement en aval). > [!NOTE] > **Nommage des variables** > > Les noms de variables dans votre modèle doivent suivre des règles de formatage spécifiques. Consultez la référence sur le [nommage des variables](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md#naming-your-variables) pour les formats corrects et incorrects. La génération de document est asynchrone : l’action envoie la demande de génération et retourne immédiatement. Utilisez le [trigger Document Generated](#document-generated-trigger) ci-dessous pour réagir lorsque le fichier est prêt. ### Nom de fichier personnalisé {#custom-filename} Vous pouvez spécifier un nom personnalisé pour le fichier généré. C’est utile lorsque vous stockez des documents dans des services comme Google Drive, Dropbox ou une autre plateforme de stockage cloud. Gardez ces restrictions à l’esprit : - Le nom de fichier ne doit contenir ni barre oblique `/` ni barre oblique inversée `\` - Les caractères non latins sont à éviter car ils peuvent être corrompus lors de l’enregistrement du fichier Les noms courts basés sur des dates ou des identifiants fonctionnent généralement le mieux. > [!TIP] > Pour plus de détails sur les options de nommage (y compris la définition du nom de fichier via l’API), consultez [Nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md). ### Métadonnées {#metadata} Lorsque vous générez un document, vous pouvez y attacher des métadonnées. Les métadonnées ne sont pas disponibles dans le modèle et n’influencent pas le contenu du document ; elles sont simplement attachées au document pour une utilisation ultérieure. Un cas d’usage courant consiste à recevoir le document via un [webhook](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) et à utiliser ses métadonnées pour le router ou le traiter différemment dans votre automatisation. ## Trigger Document Generated {#document-generated-trigger} Utilisez le trigger **Document Generated** pour démarrer une recette lorsqu’un document termine sa génération. C’est la méthode recommandée pour gérer le flux de génération asynchrone. Le trigger fournit les données du document terminé, notamment : - **Download URL :** un lien temporaire vers le fichier généré (valide pendant 1 heure). Consultez [URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) pour plus de détails. - **Filename :** le nom du fichier généré - **Metadata :** les métadonnées jointes lors de la génération - **Status :** le résultat de la génération (`success` ou `failure`). Consultez [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) pour le cycle de vie complet. Vous pouvez filtrer par modèle pour vous assurer que la recette ne s’exécute que pour les documents d’un modèle spécifique. > [!WARNING] > **Les données dynamiques ne sont pas incluses** > > Le trigger n’inclut pas les données dynamiques (payload) d’origine envoyées pour générer le document. Si vous avez besoin de ces informations dans les étapes suivantes de la recette, stockez-les dans le champ [métadonnées](#metadata) lors de la génération du document. ## Supprimer un document {#delete-a-document} Utilisez l’action **Delete Document** pour supprimer un document précédemment généré de votre compte PDFMonkey. Cela est utile pour nettoyer les documents après qu’ils ont été téléchargés, envoyés par e-mail ou stockés ailleurs dans votre flux. > [!TIP] > **Nettoyage automatique** > > Plutôt que de supprimer manuellement les documents, envisagez d’utiliser la [suppression automatique (TTL)](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) pour que les documents soient nettoyés après une période configurable. ## Exemples de recettes {#example-recipes} ### Soumission de formulaire vers document puis e-mail {#form-to-email} 1. Déclenchez sur une soumission de formulaire (depuis une application connectée). 2. Utilisez **Generate Document** pour créer le document avec les données du formulaire. 3. Utilisez **Document Generated** pour attendre le fichier. 4. Téléchargez le fichier et envoyez-le en pièce jointe d’un e-mail. ### Enregistrement CRM vers document puis stockage cloud {#crm-to-storage} 1. Déclenchez sur un enregistrement CRM nouveau ou mis à jour. 2. Utilisez **Generate Document** pour créer un contrat, une facture ou un rapport. 3. Utilisez **Document Generated** pour obtenir l’[URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md). 4. Importez le fichier vers Google Drive, Dropbox ou un autre service de stockage. ### Générer, stocker et nettoyer {#generate-store-cleanup} 1. Déclenchez sur un événement dans votre application (nouvelle commande, contrat approuvé, etc.). 2. Utilisez **Generate Document** pour créer le fichier. 3. Utilisez **Document Generated** pour obtenir l’URL de téléchargement. 4. Importez le fichier vers un stockage permanent (S3, Google Drive, Sharepoint). 5. Utilisez **Delete Document** pour supprimer le fichier de PDFMonkey. ## Résolution de problèmes {#troubleshooting} ### URL de téléchargement expirée {#download-url-expired} L’[URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) est valide pendant 1 heure. Si une étape ultérieure de votre recette échoue parce que l’URL a expiré, restructurez votre recette pour que le téléchargement se fasse immédiatement après le déclenchement du trigger **Document Generated**. Pour plus de détails, consultez [L’URL de téléchargement renvoie une erreur 403](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-renvoie-403.md). ### Modèle non publié {#template-not-published} Si les documents générés ne reflètent pas vos dernières modifications de modèle, la cause la plus probable est un modèle non publié. Ouvrez votre modèle dans PDFMonkey et cliquez sur **Publish** avant de relancer la recette. > [!WARNING] > **Erreur fréquente** > > Oublier de publier votre modèle est une erreur courante, surtout lorsque vous alternez entre Workato et PDFMonkey. Pensez toujours à publier après avoir effectué des modifications. ## Étapes suivantes {#next-steps} - [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md) : créez votre compte PDFMonkey et votre premier modèle - [Définir les données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) : apprenez à structurer le payload JSON pour vos modèles - [Nom de fichier personnalisé](https://pdfmonkey.io/fr/docs/generation-de-documents/nom-de-fichier-personnalise.md) : contrôlez le nom des fichiers générés - [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) : comprenez le cycle de vie d’un document généré - [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) : recevez des notifications en temps réel lorsque les documents sont générés - [Rétention et suppression](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) : configurez le nettoyage automatique des documents avec le TTL - Explorez d’autres intégrations : [Zapier](https://pdfmonkey.io/fr/docs/integrations/zapier.md), [Make](https://pdfmonkey.io/fr/docs/integrations/make.md), [n8n](https://pdfmonkey.io/fr/docs/integrations/n8n.md) ## FAQ **Comment générer des documents avec PDFMonkey et Workato ?** Ajoutez le connecteur PDFMonkey à votre recette Workato, saisissez votre clé secrète API pour vous connecter, puis utilisez l’action Generate Document pour créer un document à partir d’un modèle avec votre payload de données dynamiques. **Comment savoir quand un document PDFMonkey est prêt dans Workato ?** Utilisez le trigger Document Generated pour démarrer une étape de recette quand un document finit d’être généré. Il fournit l’URL de téléchargement, le nom de fichier, les métadonnées et le statut. Vous pouvez filtrer par modèle pour que la recette ne s’exécute que pour des documents spécifiques. **Peut-on supprimer automatiquement des documents après traitement dans Workato ?** Oui. Utilisez l’action Delete Document dans une étape ultérieure de la recette pour supprimer le document de PDFMonkey après l’avoir téléchargé, envoyé par email ou stocké. Vous pouvez aussi configurer la suppression automatique (TTL) dans PDFMonkey pour nettoyer les documents après une durée définie. --- # Intégration Bubble : générer des documents dans votre application Bubble Source: https://pdfmonkey.io/fr/docs/integrations/bubble.md Le plugin officiel PDFMonkey pour [Bubble](https://bubble.io/) vous permet de générer des documents directement depuis vos workflows Bubble, sans écrire de code backend. Installez-le depuis le marketplace Bubble, ajoutez une seule action à votre workflow et récupérez une URL de téléchargement dès que le document est prêt. Il existe deux façons de connecter PDFMonkey à Bubble : - **[Plugin PDFMonkey](#pdfmonkey-plugin)** (recommandé) : installez-le depuis le marketplace pour une intégration sans code avec polling intégré. - **[API Connector](#api-connector)** : appelez l’API REST PDFMonkey directement pour un contrôle total sur les requêtes et les réponses. ## Prérequis {#prerequisites} Avant de commencer, assurez-vous de disposer des éléments suivants : - Un compte PDFMonkey ([inscription ici](https://dashboard.pdfmonkey.io/register)) - Un compte [Bubble](https://bubble.io/) avec une application - Un modèle publié dans PDFMonkey Pour la création de compte et la configuration d’un modèle, consultez [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md). Vous avez également besoin de votre **clé secrète API**, disponible sur la page [Mon compte](https://dashboard.pdfmonkey.io/account). Consultez [Authentification](https://pdfmonkey.io/fr/docs/api/authentication.md) pour plus de détails. ## Plugin PDFMonkey {#pdfmonkey-plugin} Le plugin officiel PDFMonkey est le moyen le plus rapide de générer des documents depuis Bubble. Il gère automatiquement l’authentification, la création de documents et le polling : vous ajoutez une seule action à votre workflow et elle renvoie le document finalisé. ### Installer le plugin {#installing-the-plugin} 1. Ouvrez l’éditeur de votre application Bubble. 2. Accédez à **Plugins** et cliquez sur **Add plugins**. 3. Recherchez **PDFMonkey** et installez le plugin [PDFMonkey](https://bubble.io/plugin/pdfmonkey-uploader-1674229694738x439725903180202000). 4. Dans les paramètres du plugin, collez votre **clé secrète API** depuis la page [Mon compte](https://dashboard.pdfmonkey.io/account). C’est tout ce qu’il faut pour l’authentification. Le plugin transmet votre clé via l’en-tête `Authorization` à chaque requête. ### Action « Generate a Document » {#generate-a-document-action} Le plugin fournit une action serveur appelée **PDFMonkey - Generate a Document**. Ajoutez-la à n’importe quel workflow Bubble pour créer et générer un document à partir de l’un de vos modèles. #### Champs d’entrée {#input-fields} | Champ | Type | Requis | Description | | --- | --- | --- | --- | | **Template ID** | Valeur dynamique | Oui | L’identifiant de votre modèle PDFMonkey (disponible dans les paramètres du modèle) | | **Document data** | Paires clé/valeur | Oui | Les données dynamiques pour votre modèle ; les clés doivent correspondre aux noms de variables définis dans votre modèle | | **Document meta-data** | Paires clé/valeur | Non | Métadonnées attachées au document (non accessibles dans le modèle) | | **Filename** | Valeur dynamique | Non | Un nom de fichier personnalisé pour le fichier généré | > [!NOTE] > **Nommage des variables** > > Les clés de **Document data** doivent correspondre exactement aux noms de variables de votre modèle. Consultez la référence sur le [nommage des variables](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md#naming-your-variables) pour les règles de formatage. #### Valeurs renvoyées {#returned-values} Une fois l’action terminée, les valeurs suivantes sont disponibles dans les étapes suivantes du workflow (via **Result of step X**) : | Champ | Type | Description | | --- | --- | --- | | **id** | texte | L’identifiant unique du document généré | | **Download URL** | fichier | Une URL temporaire pour télécharger le fichier (valide 1 heure) | | **Public Share Link** | texte | Un lien de partage permanent (disponible sur les plans Premium) | | **Filename** | texte | Le nom du fichier généré | | **Document meta-data** | texte | Les métadonnées attachées au document | | **Status** | texte | Le statut du document (`success` ou `failure`) | | **Failure cause** | texte | Le message d’erreur en cas d’échec de la génération | | **Creation Date** | date | Date de création du document | | **Generation Date** | date | Date de fin de génération du document | | **Workspace ID** | texte | L’identifiant du workspace contenant le modèle | | **Template ID** | texte | L’identifiant du modèle utilisé | | **Template name** | texte | Le nom (identifiant) du modèle utilisé | ### Fonctionnement de l’action {#how-the-action-works} Lorsque l’action s’exécute, elle : 1. Crée un document via l’API PDFMonkey avec le statut `pending`, ce qui déclenche immédiatement la génération. 2. Interroge automatiquement l’API (polling) jusqu’à ce que le document atteigne le statut `success` ou `failure`. 3. Renvoie le résultat à votre workflow. L’action **bloque donc jusqu’à ce que le document soit prêt**. Vous n’avez pas besoin de configurer de polling, de webhooks ou de traitement asynchrone. Lorsque l’étape suivante de votre workflow s’exécute, le document est déjà généré et l’URL de téléchargement est disponible. > [!TIP] > Comme l’action gère le polling pour vous, elle peut prendre quelques secondes selon la complexité de votre modèle. C’est un comportement normal ; Bubble attend le résultat avant de passer à l’étape suivante. ### Exemple de workflow {#workflow-example} Voici un workflow typique qui génère une facture et l’envoie par e-mail au client : 1. L’utilisateur clique sur un bouton **Générer la facture**. 2. Dans le workflow, ajoutez l’action **PDFMonkey - Generate a Document**. 3. Définissez **Template ID** avec l’identifiant de votre modèle de facture (vous pouvez le coder en dur ou le récupérer dynamiquement depuis votre base de données). 4. Associez vos données Bubble aux clés de **Document data**. Par exemple : - `customerName` → Current User’s Name - `invoiceNumber` → Current Invoice’s Number - `lineItems` → Current Invoice’s Items (formaté en JSON) 5. L’action attend que le document soit prêt. 6. À l’étape suivante, ajoutez une action **Send Email** et utilisez **Result of step X’s Download URL** comme pièce jointe. > [!WARNING] > **Publiez votre modèle au préalable** > > Si vos documents générés ne reflètent pas vos dernières modifications, vérifiez que vous avez publié le modèle dans PDFMonkey. Oublier de publier après une modification est une erreur fréquente. ### Source de données « List Workspaces » {#list-workspaces} Le plugin expose également une source de données **List Workspaces** qui renvoie les workspaces disponibles dans votre compte PDFMonkey. Vous pouvez l’utiliser pour construire des menus déroulants dynamiques ou permettre aux utilisateurs de sélectionner un workspace avant de générer un document. ## API Connector {#api-connector} Si vous avez besoin de plus de contrôle sur les requêtes (en-têtes personnalisés, endpoints spécifiques ou accès direct à la réponse complète de l’API), vous pouvez appeler l’API REST PDFMonkey via le plugin API Connector intégré à Bubble. > [!NOTE] > **Quand utiliser l’API Connector** > > Pour la plupart des cas d’usage, le [plugin PDFMonkey](#pdfmonkey-plugin) est plus simple et suffisant. Envisagez l’API Connector si vous avez besoin d’appeler des endpoints non couverts par le plugin (comme lister ou supprimer des documents), ou si vous souhaitez gérer le polling ou les webhooks vous-même. ### Configurer l’API Connector {#setting-up-the-api-connector} 1. Dans l’éditeur de votre application Bubble, accédez à **Plugins** et installez le plugin **API Connector** (s’il n’est pas déjà installé). 2. Cliquez sur **Add another API** et nommez-la `PDFMonkey`. 3. Définissez **Authentication** sur **Private key in header** et configurez : - **Key name :** `Authorization` - **Key value :** `Bearer VOTRE_CLÉ_SECRÈTE_API` 4. Ajoutez un nouvel appel API avec les paramètres suivants : | Paramètre | Valeur | | --------- | ------ | | **Name** | Create Document | | **Use as** | Action | | **Method** | POST | | **URL** | `https://api.pdfmonkey.io/api/v1/documents` | | **Headers** | `Content-Type`: `application/json` | 5. Dans le **Body**, collez le JSON suivant : ```json { "document": { "document_template_id": "", "status": "pending", "payload": { "name": "" } } } ``` Remplacez `` par l’identifiant de votre modèle (disponible dans votre tableau de bord PDFMonkey) et ajustez les clés du `payload` pour correspondre aux [données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) de votre modèle. 6. Cliquez sur **Initialize call** pour tester la connexion. En cas de succès, Bubble détecte automatiquement les champs de la réponse. > [!WARNING] > **Définissez le statut sur pending** > > Vous devez inclure `"status": "pending"` pour que PDFMonkey commence immédiatement la génération du document. Si vous l’omettez ou le définissez sur `"draft"`, le document est créé mais pas généré. Consultez [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) pour plus de détails. ### Utiliser des valeurs dynamiques {#using-dynamic-values} Pour transmettre des données dynamiques depuis votre application Bubble, encadrez les paramètres de chevrons (``) dans le body de l’API Connector. Bubble les transforme en champs que vous pouvez associer à des valeurs dynamiques dans vos workflows. Par exemple, pour générer une facture, votre body pourrait ressembler à ceci : ```json { "document": { "document_template_id": "", "status": "pending", "payload": { "customerName": "", "invoiceNumber": "", "totalAmount": "" } } } ``` Chaque `` devient un champ dans l’action du workflow, que vous pouvez remplir avec les données de votre application Bubble. > [!NOTE] > **Nommage des variables** > > Les noms de variables dans votre payload doivent correspondre à ceux utilisés dans votre modèle. Consultez la référence sur le [nommage des variables](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md#naming-your-variables) pour les règles de formatage. ### Récupérer le fichier généré {#retrieving-the-generated-file} La génération de documents est asynchrone. Une fois l’appel Create Document effectué, le document n’est pas encore prêt. Vous avez deux options pour récupérer le fichier finalisé : - **Polling** : ajoutez un second appel API (`GET https://api.pdfmonkey.io/api/v1/documents/`) et vérifiez le champ `status` jusqu’à ce qu’il atteigne `success`. La réponse inclut alors une `download_url`. - **Webhook** : configurez un [webhook](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) dans PDFMonkey pour notifier votre application Bubble lorsque le document est prêt. Cette approche évite le polling et convient mieux en production. > [!TIP] > L’[URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) expire après 1 heure. Si vous avez besoin d’un lien permanent, utilisez un [lien de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md) ou stockez le fichier dans votre propre espace de stockage. ## Dépannage {#troubleshooting} ### Échec de la génération {#document-generation-fails} Si l’action du plugin renvoie un statut `failure`, consultez le champ **Failure cause** (ou `failureCause` dans la réponse API) pour connaître le message d’erreur. Les causes fréquentes incluent des erreurs de syntaxe dans votre modèle ou des données dynamiques invalides. ### JSON invalide dans l’API Connector {#invalid-json} Si vous obtenez une erreur `422` en utilisant l’API Connector, votre body JSON est probablement mal formé. Causes fréquentes : - **Guillemets doubles non échappés** dans les valeurs dynamiques : si une valeur saisie par l’utilisateur contient `"`, elle casse la structure JSON. Nettoyez les données avant de les transmettre. - **Sauts de ligne** dans les valeurs : les sauts de ligne bruts sont invalides en JSON. Remplacez-les par `\n` ou `
` avant l’envoi. Pour en savoir plus sur l’échappement JSON, consultez la section [Réponses 422](https://pdfmonkey.io/fr/docs/integrations/zapier.md#422-responses) du guide Zapier (les mêmes principes s’appliquent). ### Document bloqué en brouillon {#document-stuck-in-draft} Si votre document est créé mais ne se génère jamais (API Connector uniquement), vérifiez que `"status": "pending"` est bien inclus dans le body de la requête. Sans cela, PDFMonkey crée le document en tant que brouillon et attend que vous déclenchiez la génération. Consultez [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md). > [!TIP] > Ce problème ne concerne pas le plugin PDFMonkey, qui définit toujours automatiquement le statut sur `pending`. ### URL de téléchargement expirée {#download-url-expired} L’[URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) est valide pendant 1 heure. Si votre workflow met plus de temps à traiter le fichier, téléchargez-le immédiatement après la génération ou utilisez un [lien de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md) pour un accès permanent. Pour plus de détails, consultez [L’URL de téléchargement renvoie une erreur 403](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-renvoie-403.md). ## Étapes suivantes {#next-steps} - [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md) : configurez votre compte PDFMonkey et créez votre premier modèle - [Définir les données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) : apprenez à structurer le payload JSON pour vos modèles - [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) : comprenez le cycle de vie d’un document généré - [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) : recevez des notifications en temps réel lorsque les documents sont générés - [URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) : fonctionnement des URL de téléchargement et leur expiration - Découvrez les autres intégrations : [Zapier](https://pdfmonkey.io/fr/docs/integrations/zapier.md), [Make](https://pdfmonkey.io/fr/docs/integrations/make.md), [n8n](https://pdfmonkey.io/fr/docs/integrations/n8n.md) --- # Intégration Glide : générer des documents depuis votre application no-code Source: https://pdfmonkey.io/fr/docs/integrations/glide.md > [!WARNING] > **Aidez-nous à contacter l’équipe Glide** > > Nous avons contacté l’équipe Glide à plusieurs reprises pour améliorer cette intégration — notamment pour ajouter la prise en charge des tableaux et des lignes de détail — mais n’avons jamais reçu de réponse. Si vous avez un contact direct chez Glide ou un moyen de faire avancer les choses, nous vous en serions très reconnaissants. Une meilleure intégration profiterait à tous ceux qui génèrent des factures, devis et autres documents avec des lignes de détail depuis Glide. L’intégration PDFMonkey pour [Glide](https://www.glideapps.com/) vous permet de générer des documents directement depuis votre application no-code. Ajoutez une action **Generate PDF file** à un bouton, un formulaire ou un workflow, associez vos données à un modèle PDFMonkey et récupérez un lien de téléchargement dès que le document est prêt. ## Prérequis {#prerequisites} Avant de commencer, assurez-vous de disposer des éléments suivants : - Un compte PDFMonkey ([inscription ici](https://dashboard.pdfmonkey.io/register)) - Un compte [Glide](https://www.glideapps.com/) sur un plan payant (l’intégration n’est pas disponible sur les plans gratuits) - Un modèle publié dans PDFMonkey Pour la création de compte et la configuration d’un modèle, consultez [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md). Vous avez également besoin de votre **clé secrète API**, disponible sur la page [Mon compte](https://dashboard.pdfmonkey.io/account). Consultez [Authentification](https://pdfmonkey.io/fr/docs/api/authentication.md) pour plus de détails. ## Configurer l’intégration {#setting-up-the-integration} 1. Dans votre application Glide, accédez à **Settings**. 2. Ouvrez la section **Integrations** et trouvez **PDFMonkey**. 3. Cliquez sur **Add to app**. 4. Collez votre **clé secrète API** PDFMonkey et enregistrez. Une fois la connexion établie, l’action **Generate PDF file** est disponible dans les actions et workflows de votre application. ## Action « Generate PDF file » {#generate-pdf-file-action} L’action **Generate PDF file** crée un document à partir de l’un de vos modèles PDFMonkey et renvoie un lien vers le fichier finalisé. Vous pouvez la déclencher depuis : - Un **bouton** ou tout autre composant interactif - La soumission d’un **formulaire** - Le **Workflow Editor** ### Champs de l’action {#action-fields} | Champ | Requis | Description | | --- | --- | --- | | **Template ID** | Oui | L’identifiant de votre modèle PDFMonkey. Copiez-le depuis les paramètres du modèle dans votre tableau de bord PDFMonkey. | | **Filename** | Oui | Le nom du fichier généré. Vous pouvez utiliser des valeurs dynamiques issues de vos données Glide. | | **File output** | Oui | La colonne où le lien de téléchargement sera enregistré une fois le document prêt. Utilisez une colonne de type **text** (pas une colonne URL). | | **Dynamic values** | Non | Paires clé/valeur qui remplacent les variables de votre modèle. Cliquez sur **+Add value** pour associer les colonnes Glide aux variables du modèle. | > [!NOTE] > **Nommage des variables** > > Les clés ajoutées dans la section des valeurs dynamiques doivent correspondre exactement aux noms de variables de votre modèle PDFMonkey. Consultez la référence sur le [nommage des variables](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md#naming-your-variables) pour les règles de formatage. ### Fonctionnement de l’action {#how-the-action-works} Lorsque l’action s’exécute, elle envoie l’identifiant du modèle et vos valeurs dynamiques à l’API PDFMonkey. PDFMonkey génère le document et renvoie un lien de téléchargement, que Glide enregistre dans la colonne spécifiée comme **File output**. > [!WARNING] > **Publiez votre modèle au préalable** > > Si les documents générés ne reflètent pas vos dernières modifications, vérifiez que vous avez publié le modèle dans PDFMonkey. Oublier de publier après une modification est une erreur fréquente. ### Exemple de workflow {#workflow-example} Voici un flux typique qui génère un certificat lorsqu’un utilisateur termine une formation : 1. L’utilisateur appuie sur un bouton **Télécharger le certificat** dans votre application Glide. 2. Le bouton déclenche l’action **Generate PDF file**. 3. Définissez **Template ID** avec l’identifiant de votre modèle de certificat. 4. Définissez **Filename** avec un nom descriptif, par exemple le nom de l’utilisateur combiné au titre de la formation. 5. Associez vos valeurs dynamiques : - `recipientName` → la colonne contenant le nom de l’utilisateur - `courseName` → la colonne contenant le titre de la formation - `completionDate` → la colonne contenant la date de fin 6. Définissez **File output** vers une colonne de type text dans votre source de données. 7. Une fois la génération terminée, le lien de téléchargement apparaît dans la colonne de sortie. Vous pouvez l’afficher comme un lien ou l’utiliser dans une action suivante (par exemple, envoyer un e-mail). ## Gérer les lignes de détail {#working-with-line-items} L’intégration Glide transmet les données à PDFMonkey sous forme de paires clé/valeur simples. Elle ne prend pas en charge nativement les tableaux ou le JSON imbriqué, ce qui signifie que vous ne pouvez pas envoyer une liste de lignes de détail (comme les lignes d’une facture) de la même manière qu’avec [Zapier](https://pdfmonkey.io/fr/docs/integrations/zapier.md#line-items) ou [Make](https://pdfmonkey.io/fr/docs/integrations/make.md). Il s’agit d’une limitation côté Glide, pas côté PDFMonkey. Les modèles PDFMonkey prennent en charge les tableaux et les boucles, mais l’intégration Glide ne peut pas envoyer de données structurées sous forme de tableau. Les solutions ci-dessous contournent cette limitation selon que vous utilisez des modèles Code ou des modèles Builder. ### Modèles Code : chaîne JSON avec parse_json {#workaround-json-string} L’approche la plus propre pour les [modèles Code](https://pdfmonkey.io/fr/docs/modeles-code) consiste à transmettre vos lignes de détail sous forme de chaîne JSON, puis à l’analyser dans le modèle avec le filtre [`parse_json`](https://pdfmonkey.io/fr/docs/modeles-code/filtres.md#parse_json). **Dans Glide :** 1. **Créez une colonne template** dans votre table d’éléments qui formate chaque ligne comme un objet JSON. Par exemple : `{"product":"Waffle","qty":12,"unitPrice":"3.50","total":"42.00"}` 2. **Créez une colonne Joined List** dans la table parente qui joint toutes les lignes avec des virgules. 3. **Créez une autre colonne template** qui entoure la liste jointe de crochets pour former un tableau JSON valide : `[]` 4. **Transmettez cette chaîne** comme valeur dynamique dans l’action Generate PDF file, par exemple sous le nom `lineItemsJson`. **Dans votre modèle PDFMonkey**, analysez la chaîne et parcourez le tableau obtenu : ```liquid title="HTML" {% assign items = lineItemsJson | parse_json %} {% for item in items %} {% endfor %}
Produit Qté Prix unitaire Total
{{ item.product }} {{ item.qty }} {{ item.unitPrice }} {{ item.total }}
``` Vous obtenez un vrai tableau sur lequel itérer, avec un accès complet à chaque champ — exactement comme si les données avaient été envoyées en JSON structuré. > [!TIP] > Si la chaîne JSON est vide ou invalide, `parse_json` renvoie `nil`. Vous pouvez fournir une valeur de repli : `lineItemsJson | parse_json: "[]"`. Consultez la référence complète de [parse_json](https://pdfmonkey.io/fr/docs/modeles-code/filtres.md#parse_json). ### Modèles Builder : Custom JS avec JSON.parse {#workaround-builder-json-parse} Pour les [modèles Builder](https://pdfmonkey.io/fr/docs/modeles-builder), l’approche est similaire : transmettez une chaîne JSON depuis Glide, puis analysez-la dans l’éditeur [Custom JS](https://pdfmonkey.io/fr/docs/modeles-builder/js-personnalise.md) pour utiliser le tableau obtenu dans les bindings de votre modèle. **Dans Glide**, construisez la chaîne JSON de la même manière que [ci-dessus](#workaround-json-string). **Dans l’éditeur Custom JS** de votre modèle Builder, analysez la chaîne et assignez le résultat à `window` : ```javascript window.lineItems = JSON.parse($docPayload.lineItemsJson || '[]'); ``` Vous pouvez ensuite utiliser `lineItems` dans les fonctionnalités de boucle et de binding du builder pour itérer sur le tableau et afficher chaque élément. ### Alternative : HTML pré-construit {#workaround-pre-built-html} Si vous préférez gérer le formatage entièrement dans Glide, vous pouvez construire les lignes de détail sous forme de chaîne HTML et transmettre le résultat comme une seule variable : 1. **Créez une colonne template** dans votre table d’éléments qui formate chaque ligne en tant que ligne de tableau HTML. Par exemple : ```html Nom du produit 2 15,00 € 30,00 € ``` Utilisez les références de colonnes Glide pour insérer les valeurs réelles. 2. **Créez une colonne Joined List** dans la table parente qui concatène toutes les lignes formatées en une seule chaîne. 3. **Transmettez le HTML assemblé** comme valeur dynamique dans l’action Generate PDF file. Par exemple, associez-le à une variable nommée `lineItemsHtml`. 4. **Dans votre modèle PDFMonkey**, affichez la variable pour que le HTML soit rendu correctement : ```liquid title="HTML" {{ lineItemsHtml }}
Produit Qté Prix unitaire Total
``` > [!NOTE] > Cette approche est plus simple à mettre en place mais moins flexible : vous ne pouvez pas réutiliser les données individuelles de chaque élément pour des calculs ou de la logique conditionnelle dans le modèle. Si vous en avez besoin, utilisez plutôt l’[approche par chaîne JSON](#workaround-json-string) ou l’[approche Builder](#workaround-builder-json-parse). ### Alternative : utiliser une plateforme d’automatisation {#alternative-automation-platform} Si vous avez besoin de données structurées sous forme de tableau sans contournement, envisagez de passer par une plateforme d’automatisation comme [Make](https://pdfmonkey.io/fr/docs/integrations/make.md) ou [Zapier](https://pdfmonkey.io/fr/docs/integrations/zapier.md). Ces plateformes prennent en charge les lignes de détail nativement et peuvent recevoir un déclencheur depuis Glide via webhook, puis appeler l’API PDFMonkey avec un payload JSON correctement structuré. ## Dépannage {#troubleshooting} ### Documents vides {#blank-documents} Si le lien de téléchargement est généré mais que le document est vide : - **Vérifiez les noms de vos variables.** Les noms de colonnes contenant des espaces ne fonctionnent pas comme clés de variables. Utilisez le `camelCase` ou le `snake_case` à la place. Par exemple, utilisez `customerName` et non `Customer Name`. - **Vérifiez vos données de test dans PDFMonkey.** Ouvrez votre modèle, accédez à l’onglet **Test data** et vérifiez que le document s’affiche correctement avec un JSON d’exemple. Si cela fonctionne dans PDFMonkey mais pas depuis Glide, le problème vient de l’association des données. - **Consultez l’historique PDFMonkey.** Ouvrez votre tableau de bord PDFMonkey et examinez le document dans l’onglet **History**. Le payload montre exactement les données envoyées par Glide, ce qui permet de repérer facilement les variables manquantes ou mal nommées. ### Type de la colonne File output {#file-output-column-type} Le champ **File output** doit pointer vers une colonne de type **text** dans votre source de données Glide. L’utilisation d’une colonne URL ou d’un autre type peut empêcher l’enregistrement correct du lien. ### Échec de la génération {#document-generation-fails} Si aucun lien n’apparaît dans la colonne de sortie : - Vérifiez que votre **clé secrète API** est correcte dans les paramètres de l’intégration. - Confirmez que votre **Template ID** est valide et que le modèle est publié. - Consultez le tableau de bord PDFMonkey pour obtenir les détails de l’erreur sur le document en échec. ### URL de téléchargement expirée {#download-url-expired} L’[URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) est valide pendant 1 heure. Si le lien ne fonctionne plus après ce délai, l’URL a expiré. Vous pouvez : - Générer un nouveau document pour obtenir un lien valide. - Utiliser un [lien de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md) pour un accès permanent (disponible sur les plans Premium). Pour plus de détails, consultez [L’URL de téléchargement renvoie une erreur 403](https://pdfmonkey.io/fr/docs/depannage/l-url-de-telechargement-renvoie-403.md). ### Consommation d’updates Glide {#glide-updates-consumption} Chaque exécution réussie de l’action Generate PDF file consomme des updates Glide. Le nombre exact est affiché lors de la configuration de l’action. Les actions en échec ne consomment pas d’updates. Consultez la [documentation de facturation Glide](https://www.glideapps.com/docs/billing) pour plus de détails sur les coûts et les quotas d’updates. ## Étapes suivantes {#next-steps} - [De zéro à votre premier document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md) : configurez votre compte PDFMonkey et créez votre premier modèle - [Définir les données dynamiques](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md) : apprenez à structurer le payload JSON pour vos modèles - [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) : comprenez le cycle de vie d’un document généré - [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) : recevez des notifications en temps réel lorsque les documents sont générés - [URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) : fonctionnement des URL de téléchargement et leur expiration - Découvrez les autres intégrations : [Zapier](https://pdfmonkey.io/fr/docs/integrations/zapier.md), [Make](https://pdfmonkey.io/fr/docs/integrations/make.md), [n8n](https://pdfmonkey.io/fr/docs/integrations/n8n.md), [Workato](https://pdfmonkey.io/fr/docs/integrations/workato.md), [Bubble](https://pdfmonkey.io/fr/docs/integrations/bubble.md) ## FAQ **Comment générer des PDF depuis une application Glide avec PDFMonkey ?** Dans les Settings de votre application Glide, ajoutez l’intégration PDFMonkey avec votre clé secrète API. Puis utilisez l’action Generate PDF file dans un bouton, un formulaire ou un workflow, en fournissant votre Template ID, un nom de fichier, des valeurs dynamiques et une colonne texte pour le lien de sortie. **Peut-on envoyer des lignes de détail ou des tableaux depuis Glide vers PDFMonkey ?** Pas directement. Glide transmet des paires clé/valeur plates et ne peut donc pas envoyer de tableaux nativement. La solution consiste à construire une chaîne JSON dans Glide avec des colonnes template et une colonne Joined List, puis à l’analyser dans votre modèle PDFMonkey avec parse_json (modèles Code) ou JSON.parse dans Custom JS (modèles Builder). **Pourquoi mes documents PDFMonkey générés depuis Glide sont-ils vides ?** La cause la plus fréquente est une différence de noms de variables. Les noms de colonnes avec des espaces ne fonctionnent pas comme clés de variables — utilisez plutôt le camelCase ou le snake_case. Vérifiez le payload du document dans l’onglet History de PDFMonkey pour voir exactement quelles données Glide a envoyées. --- # InvoiceBerry (via Zapier) Source: https://pdfmonkey.io/fr/docs/integrations/invoiceberry.md ![](https://pdfmonkey.io/fr/docs/img/invoiceberry-logo.png) ## Qu’est-ce qu’InvoiceBerry ? InvoiceBerry est un outil de facturation en ligne principalement utilisé par les propriétaires de petites entreprises. Il permet de créer et personnaliser des factures selon les besoins de l’entreprise, de créer et envoyer des devis aux clients, de configurer des factures récurrentes, d’envoyer des rappels et de suivre les dépenses. InvoiceBerry offre un environnement convivial et pratique pour centraliser la gestion financière et comptable de votre entreprise. ## Comment InvoiceBerry fonctionne-t-il avec PDFMonkey ? InvoiceBerry est un logiciel de facturation en ligne conçu pour simplifier vos processus de facturation et PDFMonkey est un moyen simple de générer des documents PDF. L’intégration de ces deux applications permet de générer automatiquement des documents PDF et de retrouver des documents en réponse à la création de nouveaux clients, factures, dépenses InvoiceBerry et plus encore. Il existe actuellement [14 intégrations Zapier possibles entre PDFMonkey et InvoiceBerry](https://www.zapier.com/apps/pdfmonkey/integrations/invoiceberry). ## Que pouvez-vous faire avec InvoiceBerry et PDFMonkey ? * Générer un PDF à partir d’une facture InvoiceBerry nouvellement créée * Créer un client dans InvoiceBerry lorsqu’un nouveau document est généré dans PDFMonkey * Rechercher un document dans PDFMonkey à partir d’un nouveau client créé dans InvoiceBerry * Rechercher un document dans PDFMonkey en réponse à une nouvelle facture InvoiceBerry ## FAQ **Comment InvoiceBerry s'intègre-t-il avec PDFMonkey ?** InvoiceBerry se connecte à PDFMonkey via Zapier. Vous pouvez configurer des workflows automatisés qui génèrent des documents PDF personnalisés chaque fois qu’une nouvelle facture, un nouveau client ou une nouvelle dépense est créé dans InvoiceBerry. **Que peut-on automatiser entre InvoiceBerry et PDFMonkey ?** Vous pouvez générer des PDF à partir de factures nouvellement créées, créer des clients InvoiceBerry quand des documents sont générés, et rechercher des documents en réponse à de nouveaux clients ou factures. Il existe 14 intégrations Zapier possibles entre les deux applications. --- # Ruby SDK Source: https://pdfmonkey.io/fr/docs/integrations/sdk-ruby.md Nous fournissons un [SDK Ruby](https://github.com/pdfmonkey/pdfmonkey-ruby) pour se connecter à PDFMonkey. Ce gem est le moyen le plus rapide d’utiliser notre API avec Ruby. GitHub : [https://github.com/pdfmonkey/pdfmonkey-ruby](https://github.com/pdfmonkey/pdfmonkey-ruby) ## Installation Ajoutez cette ligne au Gemfile de votre application : ```ruby title="Gemfile" gem 'pdfmonkey' ``` Puis exécutez : ```bash $ bundle ``` Ou installez-le directement : ```bash $ gem install pdfmonkey ``` ## Utilisation ### Configuration de l’authentification #### Utilisation de la variable d’environnement par défaut PDFMonkey recherche la variable d’environnement `PDFMONKEY_PRIVATE_KEY`. Cette variable doit contenir votre clé privée obtenue sur https://dashboard.pdfmonkey.io/account. ```bash PDFMONKEY_PRIVATE_KEY=j39ckj4… ``` #### Configuration manuelle des identifiants Vous pouvez configurer vos identifiants explicitement dans votre application : ```ruby Pdfmonkey.configure do |config| config.private_key = 'j39ckj4…' end ``` #### Identifiants par requête La configuration est globale. Si vous avez besoin d’identifiants par requête (par ex. en multi-tenant), utilisez `with_adapter` : ```ruby config = Pdfmonkey::Configuration.new config.private_key = 'tenant-specific-key' adapter = Pdfmonkey::Adapter.new(config: config) Pdfmonkey.with_adapter(adapter) do Pdfmonkey::Document.generate!( document_template_id: 'b13ebd75-…', payload: { name: 'John Doe' } ) end ``` Toutes les opérations à l’intérieur du bloc utilisent l’adapter fourni. Les appels en dehors du bloc continuent d’utiliser la configuration globale. ### Documents #### Génération synchrone Si vous souhaitez attendre la fin de la génération d’un document avant de poursuivre votre flux de travail, utilisez la méthode `generate!`. Elle envoie une demande de génération et attend le succès ou l’échec avant de vous donner une réponse. ```ruby document = Pdfmonkey::Document.generate!( document_template_id: 'b13ebd75-d290-409b-9cac-8f597ae3e785', payload: { name: 'John Doe' } ) document.status # => 'success' document.download_url # => 'https://…' ``` > [!WARNING] > **L’URL de téléchargement est temporaire** > > L’URL de téléchargement d’un document n’est valide que **pendant 1 heure**. Passé ce délai, rechargez le document pour en obtenir une nouvelle : > > ```ruby > document.reload! > ``` #### Génération asynchrone PDFMonkey a été conçu avec un flux de travail asynchrone en tête. Il fournit des [webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) pour vous informer du succès ou de l’échec de la génération d’un document. Pour tirer parti de ce comportement et continuer à travailler pendant la génération de votre document, utilisez la méthode `generate` : ```ruby document = Pdfmonkey::Document.generate( document_template_id: 'b13ebd75-d290-409b-9cac-8f597ae3e785', payload: { name: 'John Doe' } ) document.status # => 'pending' document.download_url # => nil ``` Si vous avez configuré une URL de webhook, elle sera appelée avec votre document une fois la génération terminée. Vous pouvez la simuler pour vos tests avec la commande cURL suivante : ```bash curl \ -X POST \ -H 'Content-Type: application/json' \ -d '{ "document": { "id": "76bebeb9-9eb1-481a-bc3c-faf43dc3ac81", "app_id": "d9ec8249-65ae-4d50-8aee-7c12c1f9683a", "created_at": "2020-01-02T03:04:05.000+01:00", "document_template_id": "f7fbe2b4-a57c-46ee-8422-5ae8cc37daac", "meta": "{\"_filename\":\"my-doc.pdf\"}", "output_type": "pdf", "status": "success", "updated_at": "2020-01-02T03:04:15.000+01:00", "xml_data": null, "payload": "{\"name\": \"John Doe\"}", "download_url": "https://example.com/76bebeb9-9eb1-481a-bc3c-faf43dc3ac81.pdf", "checksum": "ac0c2b6bcc77e2b01dc6ca6a9f656b2d", "failure_cause": null, "filename": "my-doc.pdf", "generation_logs": [], "preview_url": "https://preview.pdfmonkey.io/pdf/web/viewer.html?file=…", "public_share_link": "https://example.com/76bebeb9-9eb1-481a-bc3c-faf43dc3ac81.pdf" } }' ``` #### Documents brouillons Vous pouvez créer un document brouillon qui ne sera pas mis en file d’attente pour la génération. > [!TIP] > C’est utile pour intégrer un aperçu via `preview_url` avant de déclencher la génération. C’est ce que nous faisons dans le tableau de bord PDFMonkey pour vous montrer un aperçu de votre document avant de le générer, en utilisant une `iframe`. ```ruby draft = Pdfmonkey::Document.create_draft( document_template_id: 'b13ebd75-d290-409b-9cac-8f597ae3e785', payload: { name: 'John Doe' } ) draft.status # => 'draft' draft.preview_url # => 'https://…' # Quand vous êtes prêt, déclenchez la génération et attendez la fin : draft.generate! draft.status # => 'success' draft.download_url # => 'https://…' # Ou déclenchez la génération sans attendre : draft.generate draft.status # => 'pending' ``` #### Joindre des métadonnées En plus du payload du document, vous pouvez ajouter des métadonnées lors de la génération. Passez l’argument `meta:` aux méthodes `generate!` et `generate` : ```ruby meta = { _filename: 'john-doe-contract.pdf', client_id: '123xxx123' } document = Pdfmonkey::Document.generate!( document_template_id: template_id, payload: payload, meta: meta ) document.meta # => '{"_filename":"john-doe-contract.pdf","client_id":"123xxx123"}' document = Pdfmonkey::Document.generate( document_template_id: template_id, payload: payload, meta: meta ) document.meta # => '{"_filename":"john-doe-contract.pdf","client_id":"123xxx123"}' ``` #### Génération d’images La génération d’images suit le même flux API que la génération de PDF. L’attribut `output_type` du template indique s’il produit une sortie `'pdf'` ou `'image'`. Les options spécifiques aux images sont passées via le paramètre `meta` : ```ruby doc = Pdfmonkey::Document.generate!( document_template_id: template_id, payload: payload, meta: { _type: 'png', # webp (défaut), png ou jpg _width: 800, # pixels _height: 600, # pixels _quality: 80 # webp uniquement, défaut 100 } ) doc.download_url # => URL vers l’image générée ``` #### Mettre à jour un document ```ruby document.update!(status: 'pending') ``` #### Lister les documents ```ruby cards = Pdfmonkey::Document.list_cards(page: 1, status: 'success') cards.each do |card| puts card.id puts card.status end cards.current_page # => 1 cards.total_pages # => 5 # Naviguer entre les pages next_cards = cards.next_page prev_cards = cards.prev_page ``` Vous pouvez filtrer par `document_template_id:`, `status:`, `workspace_id:` et `updated_since:`. #### Récupérer un document > [!CAUTION] > **Préférez `fetch_card` à `fetch`** > > Récupérer un document complet inclut son payload, ce qui peut représenter un volume important selon les données fournies. Nous recommandons **fortement** d’utiliser uniquement `fetch_card` sauf si vous avez une raison spécifique de récupérer le document complet. Vous pouvez récupérer un document existant avec `.fetch` (ou son alias explicite `.fetch_full`) : ```ruby document = Pdfmonkey::Document.fetch('76bebeb9-9eb1-481a-bc3c-faf43dc3ac81') ``` Pour récupérer uniquement la représentation légère (recommandé) : ```ruby card = Pdfmonkey::Document.fetch_card('76bebeb9-9eb1-481a-bc3c-faf43dc3ac81') ``` #### Supprimer un document Vous pouvez supprimer un document existant avec la méthode `.delete` : ```ruby Pdfmonkey::Document.delete('76bebeb9-9eb1-481a-bc3c-faf43dc3ac81') #=> true ``` Vous pouvez également appeler la méthode `#delete!` sur une instance de document : ```ruby document.delete! #=> true ``` ### Gestion des erreurs Les erreurs API et les erreurs réseau lèvent des exceptions : ```ruby begin document = Pdfmonkey::Document.generate( document_template_id: template_id, payload: data ) rescue Pdfmonkey::ApiError => e e.message # => "Document template must exist" e.errors # => ["Document template must exist"] e.status_code # => 422 rescue Pdfmonkey::ConnectionError => e e.message # => "Failed to open TCP connection to api.pdfmonkey.io:443 ..." end ``` Lors de l’utilisation de `generate!`, une exception supplémentaire peut être levée si le statut du document est `'error'` ou `'failure'` : ```ruby begin document = Pdfmonkey::Document.generate!( document_template_id: template_id, payload: data ) rescue Pdfmonkey::GenerationError => e e.message # => "Document generation failed: Template error" e.document # => # (le document en échec) end ``` Toutes les classes d’exception héritent de `Pdfmonkey::Error`, ce qui permet de les intercepter de manière générale : ```ruby begin document = Pdfmonkey::Document.generate!( document_template_id: template_id, payload: data ) rescue Pdfmonkey::Error => e puts "Une erreur est survenue : #{e.message}" end ``` ### Templates #### Récupérer un template > [!CAUTION] > **Les templates complets peuvent être volumineux** > > Récupérer un template complet inclut son body et ses paramètres, qui peuvent être volumineux. Utilisez `list_cards` quand vous n’avez besoin que des métadonnées. ```ruby template = Pdfmonkey::Template.fetch('b13ebd75-d290-409b-9cac-8f597ae3e785') template.identifier # => 'my-invoice' template.body # => '

Invoice

…' (version publiée) template.body_draft # => '

Invoice v2

…' (version brouillon) ``` Vous pouvez aussi utiliser l’alias explicite `.fetch_full` : ```ruby template = Pdfmonkey::Template.fetch_full('b13ebd75-d290-409b-9cac-8f597ae3e785') ``` #### Créer un template Lors de la création d’un template, les attributs comme `body`, `scss_style`, `settings`, `sample_data` et `pdf_engine_id` sont automatiquement écrits dans leurs équivalents brouillons (`body_draft`, `scss_style_draft`, etc.) : ```ruby template = Pdfmonkey::Template.create( identifier: 'my-invoice', body: '

Invoice

' ) template.body_draft # => '

Invoice

' ``` #### Mettre à jour un template Comme `create`, `update!` écrit dans les champs brouillons : ```ruby template.update!(body: '

Updated Invoice

') template.body_draft # => '

Updated Invoice

' ``` #### Publier un template Une fois satisfait du brouillon, publiez-le pour copier tous les champs brouillons vers leurs équivalents publiés : ```ruby template.publish! template.body # => '

Updated Invoice

' ``` #### Lister les templates ```ruby cards = Pdfmonkey::Template.list_cards(workspace_id: 'f4ab650c-…') ``` #### Supprimer un template ```ruby Pdfmonkey::Template.delete('b13ebd75-…') # ou template.delete! ``` ### Template Folders ```ruby # Lister les dossiers folders = Pdfmonkey::TemplateFolder.list # Créer un dossier folder = Pdfmonkey::TemplateFolder.create(identifier: 'invoices') # Récupérer un dossier folder = Pdfmonkey::TemplateFolder.fetch('folder-id') # Mettre à jour un dossier folder.update!(identifier: 'receipts') # Supprimer un dossier Pdfmonkey::TemplateFolder.delete('folder-id') # ou folder.delete! ``` Pour créer un template dans un dossier spécifique, passez le `template_folder_id` : ```ruby folder = Pdfmonkey::TemplateFolder.create(identifier: 'invoices') template = Pdfmonkey::Template.create( identifier: 'monthly-invoice', body: '

Invoice

', template_folder_id: folder.id ) ``` ### Snippets Les snippets sont des composants HTML réutilisables qui peuvent être inclus dans les templates. ```ruby # Lister les snippets snippets = Pdfmonkey::Snippet.list # Créer un snippet snippet = Pdfmonkey::Snippet.create( identifier: 'header', code: '
', workspace_id: 'f4ab650c-…' ) # Récupérer un snippet snippet = Pdfmonkey::Snippet.fetch('snippet-id') # Mettre à jour un snippet snippet.update!(code: '
Updated
') # Supprimer un snippet Pdfmonkey::Snippet.delete('snippet-id') # ou snippet.delete! ``` ### Workspaces Les workspaces sont des ressources en lecture seule. Ils peuvent être listés et récupérés, mais pas créés, mis à jour ou supprimés via l’API. ```ruby # Lister les workspaces workspaces = Pdfmonkey::Workspace.list_cards workspaces.each do |workspace| puts workspace.identifier end # Récupérer un workspace workspace = Pdfmonkey::Workspace.fetch('workspace-id') workspace.identifier # => 'my-app' ``` ### Webhooks Les webhooks vous permettent de recevoir des notifications lorsque des documents sont générés. ```ruby # Créer un webhook pour tous les templates d’un workspace webhook = Pdfmonkey::Webhook.create( url: 'https://example.com/webhooks/pdfmonkey', event: 'document.generation.completed', workspace_id: 'f4ab650c-…' ) # Restreindre optionnellement à certains templates webhook = Pdfmonkey::Webhook.create( url: 'https://example.com/webhooks/pdfmonkey', event: 'document.generation.completed', workspace_id: 'f4ab650c-…', document_template_ids: ['tpl-1', 'tpl-2'] ) # Vous pouvez aussi spécifier un canal personnalisé pour le routage webhook = Pdfmonkey::Webhook.create( url: 'https://example.com/webhooks/pdfmonkey', event: 'document.generation.completed', workspace_id: 'f4ab650c-…', custom_channel: 'invoices' ) # Supprimer un webhook Pdfmonkey::Webhook.delete('webhook-id') # ou webhook.delete! ``` ### Engines Lister les moteurs de rendu PDF disponibles : ```ruby engines = Pdfmonkey::Engine.list engines.each do |engine| puts "#{engine.name} (déprécié : #{engine.deprecated_on || 'non'})" end ``` Vous pouvez utiliser un moteur lors de la création d’un template : ```ruby engines = Pdfmonkey::Engine.list v4 = engines.find { |e| e.name == 'v4' } template = Pdfmonkey::Template.create( identifier: 'my-template', body: '

Hello

', pdf_engine_id: v4.id ) ``` ### Utilisateur courant Récupérer les informations de l’utilisateur authentifié : ```ruby user = Pdfmonkey::CurrentUser.fetch user.email # => 'user@example.com' user.current_plan # => 'pro' user.available_documents # => 1000 ``` ### Pagination Toutes les méthodes de liste retournent des objets `Pdfmonkey::Collection` qui supportent la pagination : ```ruby collection = Pdfmonkey::Document.list_cards(page: 1) collection.current_page # => 1 collection.total_pages # => 5 collection.next_page_number # => 2 collection.prev_page_number # => nil # Naviguer vers la page suivante/précédente next_page = collection.next_page # => Collection ou nil prev_page = collection.prev_page # => Collection ou nil ``` > [!NOTE] > Les collections sont `Enumerable`. Les méthodes comme `.each`, `.map` et `.select` opèrent sur les éléments **de la page courante uniquement** — elles ne récupèrent pas automatiquement les pages suivantes. ```ruby # Toutes ces méthodes agissent sur les éléments de la page courante collection.each { |item| puts item.id } collection.map(&:status) collection.select { |item| item.status == 'success' } # Pour traiter toutes les pages, naviguez manuellement page = Pdfmonkey::Template.list_cards(page: 1) while page page.each { |item| process(item) } page = page.next_page end ``` ### Sérialisation Toutes les ressources supportent `to_json` et `to_h` : ```ruby document.to_json # => '{"document":{"id":"…","status":"success",…}}' document.to_h # => {id: "…", status: "success", errors: nil, …} ``` > [!TIP] > `to_json` encapsule les attributs sous la clé membre API de la ressource, omet les valeurs `nil` et supprime l’attribut `errors` (destiné aux requêtes API). Utilisez `to_h` quand vous avez besoin du hash complet des attributs pour le logging ou la mise en cache. ## FAQ **Comment installer le SDK Ruby PDFMonkey ?** Ajoutez gem 'pdfmonkey' à votre Gemfile et exécutez bundle install, ou exécutez directement gem install pdfmonkey. Définissez votre clé API via la variable d’environnement PDFMONKEY_PRIVATE_KEY ou configurez-la dans un initializer. **Quelle est la différence entre generate! et generate dans le gem Ruby PDFMonkey ?** generate! est synchrone — il bloque jusqu’à ce que le document atteigne le statut success ou failure, puis renvoie le document avec une URL de téléchargement. generate est asynchrone — il renvoie immédiatement avec un statut pending, et vous gérez le résultat via des webhooks. **Peut-on utiliser des clés API par requête avec le SDK Ruby PDFMonkey ?** Oui. Créez une Pdfmonkey::Configuration avec une clé spécifique au tenant, encapsulez-la dans un Adapter et passez-la à Pdfmonkey.with_adapter. Toutes les opérations à l’intérieur du bloc utilisent cet adapter tandis que les appels en dehors continuent d’utiliser la configuration globale. **Comment gérer les erreurs dans le SDK Ruby PDFMonkey ?** Interceptez Pdfmonkey::ApiError pour les erreurs API (inclut status_code et errors), Pdfmonkey::ConnectionError pour les problèmes réseau, ou Pdfmonkey::GenerationError lors de l’utilisation de generate! quand le document échoue. Toutes héritent de Pdfmonkey::Error pour une interception globale. --- # Comment supprimer votre compte PDFMonkey Source: https://pdfmonkey.io/fr/docs/compte-et-securite/suppression-de-compte.md Vous pouvez supprimer votre compte PDFMonkey à tout moment depuis la page [Mon compte](https://dashboard.pdfmonkey.io/account) du tableau de bord. Le processus se fait en deux clics si votre compte ne présente aucun problème, mais il peut être nécessaire de résoudre des questions de propriété d’espace de travail ou de facturation au préalable. ## Lancer le processus de suppression {#starting-the-deletion-process} 1. Rendez-vous sur la page [Mon compte](https://dashboard.pdfmonkey.io/account). 2. Faites défiler jusqu’à la section **Account deletion** en bas de page. 3. Cliquez sur **Delete my account**. PDFMonkey effectue alors une vérification préalable et affiche les résultats. Selon l’état de votre compte, un ou plusieurs points peuvent nécessiter votre attention avant de poursuivre. ## Vérifications préalables {#pre-deletion-checks} Lorsque vous cliquez sur le bouton de suppression, PDFMonkey vérifie trois éléments : | Vérification | Signification | Comment résoudre | |:-------------|:--------------|:-----------------| | **Propriété d’espaces de travail partagés** | Vous êtes propriétaire d’un ou plusieurs espaces de travail ayant des collaborateurs. | Transférez la propriété de chaque espace de travail partagé à un autre membre avant de supprimer votre compte. Rendez-vous dans les paramètres de l’espace de travail pour réattribuer la propriété. | | **Factures en attente** | Vous avez des factures en état « en attente » ou « en erreur ». | [Contactez-nous](https://pdfmonkey.io/contact) pour résoudre le problème de facturation avant de continuer. | | **Factures existantes** | Vous avez des factures passées (déjà réglées). | Cochez la case de confirmation pour attester que vous avez téléchargé toutes les factures dont vous avez besoin. Une fois votre compte supprimé, les factures ne seront plus accessibles. | Si vous n’avez aucun espace de travail partagé et aucune facture en attente, le processus passe directement à l’étape de confirmation. > [!WARNING] > **Résolvez les blocages d’abord** > > Vous ne pouvez pas supprimer votre compte tant que vous êtes propriétaire d’espaces de travail partagés ou que vous avez des factures en attente. Ces deux points doivent être résolus pour que le bouton de confirmation finale devienne actif. ## Confirmer la suppression {#confirming-the-deletion} Une fois toutes les vérifications validées (coches vertes), cliquez sur **I am sure, delete my account** pour confirmer. PDFMonkey procède immédiatement aux actions suivantes : - Annulation de votre abonnement et archivage de votre enregistrement client Stripe - Suppression de votre compte utilisateur et de toutes les données associées - Déconnexion du tableau de bord > [!CAUTION] > **La suppression est définitive** > > Il n’est pas possible d’annuler la suppression d’un compte. Tous vos modèles, documents, fichiers générés et paramètres de compte sont définitivement supprimés. Assurez-vous d’avoir téléchargé tous les fichiers et factures dont vous avez besoin avant de confirmer. ## Ce qui est supprimé {#what-gets-deleted} Lors de la suppression de votre compte, PDFMonkey supprime : - **Votre profil utilisateur** (adresse e-mail, nom, informations sur l’entreprise) - **Tous les espaces de travail dont vous êtes propriétaire** (ainsi que leurs modèles et documents) - **Tous les fichiers générés** (PDF, images) stockés sur les serveurs de PDFMonkey - **Votre abonnement et votre enregistrement client Stripe** Les ressources partagées telles que les snippets et suggestions communautaires auxquels vous avez contribué sont réattribuées à un compte de remplacement plutôt que supprimées. > [!NOTE] > Les espaces de travail où vous êtes collaborateur (et non propriétaire) ne sont pas affectés. Seuls les espaces de travail dont vous êtes propriétaire sont supprimés avec votre compte. ## Avant de partir {#before-you-go} > [!TIP] > **Aidez-nous à nous améliorer** > > Si vous partez parce que PDFMonkey ne répondait pas à vos besoins, nous apprécierions sincèrement de connaître vos raisons. [Envoyez-nous un message](https://pdfmonkey.io/contact) avec vos retours. Nous lisons chaque réponse et l’utilisons pour améliorer le produit. ## Pages associées {#related-pages} - [Stockage des données et conservation](https://pdfmonkey.io/fr/docs/compte-et-securite/stockage-et-conservation-des-donnees.md) — quelles données PDFMonkey conserve et pendant combien de temps - [Mesures de sécurité](https://pdfmonkey.io/fr/docs/compte-et-securite/mesures-de-securite.md) — comment vos données sont protégées tant que votre compte est actif - [Conservation et suppression automatique des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) — nettoyage des documents basé sur le TTL - [Nos offres](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) — détails des abonnements et comparaison des offres --- # Comment réinitialiser ou changer votre mot de passe PDFMonkey Source: https://pdfmonkey.io/fr/docs/compte-et-securite/changement-de-mot-de-passe.md PDFMonkey ne propose pas d’option de changement de mot de passe dans le Dashboard. Pour changer ou réinitialiser votre mot de passe, utilisez le processus de réinitialisation depuis la [page de connexion](https://dashboard.pdfmonkey.io/login). ## Comment réinitialiser votre mot de passe 1. Rendez-vous sur la [page de connexion](https://dashboard.pdfmonkey.io/login). 2. Cliquez sur **Forgot your password?** sous le bouton de connexion. 3. Saisissez l’adresse e-mail associée à votre compte et validez le formulaire. 4. Consultez votre boîte de réception : un e-mail de PDFMonkey contient un lien de réinitialisation. 5. Cliquez sur le lien dans l’e-mail. Une page s’ouvre pour définir un nouveau mot de passe. 6. Saisissez votre nouveau mot de passe et validez. Vous êtes redirigé vers la page de connexion. 7. Connectez-vous avec votre nouveau mot de passe. > [!WARNING] > **Expiration du lien** > > Le lien de réinitialisation expire au bout de **6 heures**. S’il a expiré, reprenez à l’étape 1 pour en demander un nouveau. ## Exigences relatives au mot de passe Votre nouveau mot de passe doit comporter entre **6 et 128 caractères**. Il n’y a pas d’exigence de complexité supplémentaire (majuscules, symboles, etc.). ## Comptes avec connexion sociale Si vous vous êtes inscrit via **Google**, **GitHub** ou **Microsoft**, vous n’avez pas de mot de passe PDFMonkey. Vous vous connectez via votre fournisseur d’identité. Le processus de réinitialisation ne s’applique pas aux comptes avec connexion sociale. Si vous souhaitez ajouter un mot de passe à un compte avec connexion sociale, [contactez le support](https://pdfmonkey.io/fr/docs/premiers-pas/support.md) pour obtenir de l’aide. ## Dépannage ### Je n’ai pas reçu l’e-mail de réinitialisation - Vérifiez votre dossier spam ou courrier indésirable. - Assurez-vous d’avoir saisi l’adresse e-mail exacte utilisée lors de l’inscription. - Si vous vous êtes inscrit via Google, GitHub ou Microsoft, vous n’avez pas de compte basé sur un mot de passe (voir [Comptes avec connexion sociale](#comptes-avec-connexion-sociale) ci-dessus). - Si vous ne trouvez toujours pas l’e-mail, [contactez le support](https://pdfmonkey.io/fr/docs/premiers-pas/support.md). ### Le lien de réinitialisation ne fonctionne pas - Le lien a peut-être expiré. Les liens de réinitialisation sont valides pendant 6 heures. Demandez-en un nouveau depuis la [page de connexion](https://dashboard.pdfmonkey.io/login). - Assurez-vous de cliquer sur le lien le plus récent. Si vous avez demandé plusieurs réinitialisations, seul le dernier lien est valide. ## Pages associées - [Suppression de compte](https://pdfmonkey.io/fr/docs/compte-et-securite/suppression-de-compte.md) — comment supprimer définitivement votre compte PDFMonkey - [Mesures de sécurité](https://pdfmonkey.io/fr/docs/compte-et-securite/mesures-de-securite.md) — comment vos données sont protégées - [Support](https://pdfmonkey.io/fr/docs/premiers-pas/support.md) — comment contacter l’équipe PDFMonkey --- # Sécurité PDFMonkey : comment vos données sont protégées Source: https://pdfmonkey.io/fr/docs/compte-et-securite/mesures-de-securite.md PDFMonkey est conçu pour protéger vos données à chaque étape : lors de l’envoi, pendant le stockage et lorsqu’elles ne sont plus nécessaires. Cette page décrit les mesures en place pour protéger vos Templates, Documents et données dynamiques. ## Chiffrement en transit Toutes les communications avec PDFMonkey sont chiffrées via HTTPS (TLS). L’API impose le SSL sur chaque requête ; les connexions HTTP non sécurisées sont automatiquement redirigées vers HTTPS. Cela s’applique aux : - Requêtes et réponses de l’API - Sessions du Dashboard et du Builder - Livraisons de webhooks vers votre serveur - URL de téléchargement des fichiers générés ## Chiffrement au repos Les données dynamiques que vous envoyez pour générer un Document (les champs `payload` et `meta`) sont stockées dans une colonne de base de données chiffrée. Elles sont déchiffrées à la volée uniquement lorsque nécessaire pour la génération du Document, et ne sont jamais stockées en clair. Les fichiers générés (PDF et images) sont stockés dans des buckets S3 privés. L’accès est contrôlé via des URL présignées à durée limitée qui expirent après une heure. ## Isolation des données et contrôle d’accès PDFMonkey traite vos données avec des limites strictes : | Principe | Détails | |:---------|:--------| | **Limitation de finalité** | Vos données sont utilisées exclusivement pour générer le Document demandé. Elles ne sont jamais partagées avec des partenaires, vendues ou utilisées à des fins d’analyse. | | **Aucune analyse tierce** | Vos données ne sont analysées ni par PDFMonkey ni par un service externe. | | **Isolation des comptes** | Les Templates, Documents et fichiers générés de chaque compte sont isolés. Vous ne pouvez accéder qu’aux ressources appartenant à vos propres Workspaces. | | **Authentification API** | Chaque requête API nécessite une clé API secrète envoyée sous forme de [Bearer token](https://pdfmonkey.io/fr/docs/api/authentication.md). Les clés sont limitées à votre compte. | > [!WARNING] > **Gardez votre clé API secrète** > > Votre clé API secrète possède les mêmes privilèges que votre compte. Ne la partagez jamais publiquement et ne la versionnez jamais dans un dépôt de code. Si votre clé est compromise, régénérez-la depuis la page Clé API du Dashboard. ## Hébergement européen L’infrastructure de PDFMonkey est hébergée sur Amazon Web Services (AWS) dans la région **UE (Paris)**. Cela inclut : - Les serveurs applicatifs - La base de données (avec colonnes chiffrées) - Les buckets S3 stockant les fichiers générés et les payloads volumineux ## Suppression des données Vos données sont supprimées lorsque vous n’en avez plus besoin : - **Suppression manuelle** : supprimer un Document via le Dashboard ou l’API supprime définitivement son payload, ses métadonnées et son fichier généré. - **Suppression automatique (TTL)** : chaque Template dispose d’une période de rétention configurable. Lorsque le TTL d’un Document expire, il est automatiquement supprimé. Consultez [Rétention et suppression automatique](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) pour plus de détails. - **Suppression de compte** : supprimer votre compte supprime définitivement tous les Workspaces, Templates, Documents et fichiers générés. Consultez [Suppression de compte](https://pdfmonkey.io/fr/docs/compte-et-securite/suppression-de-compte.md). Les pages HTML temporaires générées pendant le processus de rendu sont supprimées immédiatement après la génération. ## Sécurité des webhooks Lorsque PDFMonkey envoie des notifications webhook vers votre serveur, le payload est transmis via HTTPS. Vous pouvez vérifier l’authenticité des livraisons webhook grâce à la vérification de signature. Consultez [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) pour le guide complet de configuration. ## Pages associées - [Authentification API](https://pdfmonkey.io/fr/docs/api/authentication.md) : comment les requêtes API sont authentifiées - [Stockage des données et rétention](https://pdfmonkey.io/fr/docs/compte-et-securite/stockage-et-conservation-des-donnees.md) : quelles données PDFMonkey stocke et pendant combien de temps - [Rétention et suppression automatique](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) : nettoyage automatique des documents par TTL - [Conformité et DPA](https://pdfmonkey.io/fr/docs/compte-et-securite/conformite-et-dpa.md) : conformité RGPD, accords de traitement des données et liste des sous-traitants - [Webhooks](https://pdfmonkey.io/fr/docs/generation-de-documents/webhooks.md) : configuration des webhooks et vérification de signature ## FAQ **PDFMonkey est-il sécurisé ?** Oui. PDFMonkey chiffre toutes les données en transit via HTTPS (TLS) et au repos avec des colonnes de base de données chiffrées. Les fichiers générés sont stockés dans des buckets S3 privés avec des URL présignées qui expirent après une heure. Toute l’infrastructure est hébergée sur AWS dans la région UE (Paris). **Où sont hébergées les données PDFMonkey ?** Toute l’infrastructure PDFMonkey est hébergée sur Amazon Web Services (AWS) dans la région UE (Paris), y compris les serveurs applicatifs, la base de données et les buckets S3 qui stockent les fichiers générés. **PDFMonkey partage-t-il ou analyse-t-il mes données ?** Non. Vos données sont utilisées exclusivement pour générer le document demandé. Elles ne sont jamais partagées, vendues ou analysées par PDFMonkey ou un service tiers. --- # Stockage des données et politique de rétention de PDFMonkey Source: https://pdfmonkey.io/fr/docs/compte-et-securite/stockage-et-conservation-des-donnees.md PDFMonkey ne stocke que les données nécessaires à la génération de vos documents et à la distribution des fichiers produits. Cette page explique ce qui est stocké, où ces données résident et quand elles sont supprimées. ## Quelles données PDFMonkey stocke-t-il ? Trois catégories de données interviennent dans la génération de documents : | Données | Description | Emplacement | Durée de vie | |:--------|:------------|:------------|:-------------| | **Données dynamiques** | Les champs `payload` et `meta` envoyés lors de la création d’un Document | Base de données | Jusqu’à la suppression du Document | | **Page HTML temporaire** | Le HTML rendu utilisé pour produire le fichier final | S3 (temporaire) | Supprimée après la génération | | **Fichier généré** | Le fichier de sortie (PDF, PNG, WebP ou JPG) | S3 (bucket privé) | Jusqu’à la suppression du Document | ### Données dynamiques (payload et meta) Lorsque vous créez un Document, vous envoyez un `payload` JSON contenant les données de votre Template, ainsi que des champs `meta` optionnels. PDFMonkey stocke ces données pour que vous puissiez les consulter ultérieurement dans le Dashboard ou les récupérer via l’API. Ces données sont supprimées lors de la suppression du Document, que celle-ci soit manuelle ou déclenchée par l’expiration automatique du TTL. > [!NOTE] > **Payloads volumineux** > > Si un payload dépasse la taille limite de la colonne en base de données, PDFMonkey le stocke dans un bucket S3 privé. Il reste accessible via l’API de la même manière et suit les mêmes règles de suppression. ### Page HTML temporaire Pendant la génération, PDFMonkey effectue le rendu de votre Template avec le payload fourni dans une page HTML complète. Cette page est envoyée vers un emplacement S3 temporaire puis transmise au moteur de rendu. Une fois la génération terminée (que le Document réussisse ou échoue), la référence à cette page HTML est supprimée. Le fichier HTML lui-même est nettoyé par une politique de cycle de vie S3. La page HTML temporaire n’est jamais accessible via l’API ni le Dashboard. ### Fichier généré Le fichier de sortie (PDF ou image) est stocké dans un bucket S3 privé. Il n’est accessible que par des URL présignées à durée limitée qui expirent après une heure. Chaque fois que vous demandez une URL de téléchargement, PDFMonkey génère une nouvelle URL présignée. Consultez [L’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) pour les détails sur l’accès à vos fichiers générés. ## Où les données sont hébergées Toute l’infrastructure de PDFMonkey fonctionne sur Amazon Web Services (AWS) dans la région **UE (Paris)**. Cela inclut : - Les serveurs applicatifs - La base de données - Les buckets S3 stockant les fichiers générés, les payloads volumineux et les pages HTML temporaires Pour plus de détails sur le chiffrement et les contrôles d’accès, consultez [Mesures de sécurité](https://pdfmonkey.io/fr/docs/compte-et-securite/mesures-de-securite.md). ## Quand les données sont supprimées Vos données sont supprimées de trois manières : ### Suppression manuelle Vous pouvez supprimer un Document à tout moment via le [Dashboard](https://dashboard.pdfmonkey.io) ou l’[API](https://pdfmonkey.io/fr/docs/api/documents.md#delete-a-document). Supprimer un Document supprime définitivement ses données dynamiques (`payload` et `meta`) ainsi que son fichier généré. ### Suppression automatique (TTL) Chaque Template dispose d’un **TTL (Time To Live)** configurable qui détermine combien de temps ses Documents sont conservés après une génération réussie. Lorsque le TTL d’un Document expire, PDFMonkey le supprime automatiquement. Les valeurs de TTL disponibles vont de 5 minutes à illimité, selon votre plan. Consultez [Rétention et suppression automatique des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) pour la référence complète des TTL, les valeurs par plan et l’impact des changements de plan sur la rétention. ### Suppression de compte Supprimer votre compte PDFMonkey supprime définitivement tous les Workspaces, Templates, Documents et fichiers générés associés à votre compte. Consultez [Suppression de compte](https://pdfmonkey.io/fr/docs/compte-et-securite/suppression-de-compte.md) pour la procédure complète. > [!CAUTION] > **La suppression est définitive** > > Il n’est pas possible de récupérer des Documents, fichiers générés ou données dynamiques supprimés. Si vous devez conserver des fichiers à long terme, téléchargez-les vers votre propre stockage avant que la suppression n’intervienne. ## Questions fréquentes **Mes données sont-elles partagées avec des tiers ?** Non. Vos données sont utilisées exclusivement pour générer les Documents que vous demandez. Elles ne sont jamais partagées avec des partenaires, vendues ou utilisées à des fins d’analyse. Consultez [Mesures de sécurité](https://pdfmonkey.io/fr/docs/compte-et-securite/mesures-de-securite.md) pour la politique complète d’isolation des données. **Où trouver l’accord de traitement des données (DPA) de PDFMonkey ?** PDFMonkey fournit un DPA et un accord de sous-traitement des données pour les organisations qui en ont besoin. Consultez [Conformité et DPA](https://pdfmonkey.io/fr/docs/compte-et-securite/conformite-et-dpa.md) pour les liens de téléchargement et les coordonnées de contact. **Comment savoir quand un Document sera automatiquement supprimé ?** L’objet Document n’expose pas directement le champ `expires_at`. Vous pouvez le calculer à partir de la valeur `ttl` du Template et de l’horodatage `updated_at` du Document. Consultez [Rétention et suppression automatique des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md#how-ttl-works) pour les détails. ## Pages associées - [Mesures de sécurité](https://pdfmonkey.io/fr/docs/compte-et-securite/mesures-de-securite.md) : chiffrement, contrôles d’accès et isolation des données - [Rétention et suppression automatique des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) : configuration du TTL et limites par plan - [L’URL de téléchargement](https://pdfmonkey.io/fr/docs/generation-de-documents/url-de-telechargement.md) : accéder aux fichiers générés avant leur expiration - [Suppression de compte](https://pdfmonkey.io/fr/docs/compte-et-securite/suppression-de-compte.md) : ce qui se passe lorsque vous supprimez votre compte - [Conformité et DPA](https://pdfmonkey.io/fr/docs/compte-et-securite/conformite-et-dpa.md) : accords de traitement des données - [Nos plans](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) : comparatif des plans avec les limites de rétention ## FAQ **Quelles données PDFMonkey stocke-t-il ?** PDFMonkey stocke trois types de données : les données dynamiques que vous envoyez (payload et meta), une page HTML temporaire utilisée lors du rendu, et le fichier généré (PDF ou image). Les données dynamiques et le fichier généré persistent jusqu’à la suppression du document ; la page HTML est supprimée après la génération. **Où les données PDFMonkey sont-elles hébergées ?** Toute l’infrastructure de PDFMonkey est hébergée sur Amazon Web Services (AWS) dans la région UE (Paris), y compris les serveurs applicatifs, la base de données et les buckets de stockage S3. **Combien de temps PDFMonkey conserve-t-il mes documents ?** Chaque template dispose d’un TTL (Time To Live) configurable. Lorsque le TTL d’un document expire, PDFMonkey le supprime automatiquement avec son fichier généré et ses données dynamiques. Vous pouvez aussi supprimer des documents manuellement à tout moment. Les options de TTL vont de 5 minutes à illimité selon votre plan. **Puis-je supprimer mes données de PDFMonkey ?** Oui. Vous pouvez supprimer des documents individuels via le Dashboard ou l’API, configurer la suppression automatique par TTL, ou supprimer votre compte entier pour effacer définitivement toutes vos données. --- # Conformité RGPD de PDFMonkey et accord de traitement des données (DPA) Source: https://pdfmonkey.io/fr/docs/compte-et-securite/conformite-et-dpa.md PDFMonkey aligne ses pratiques de traitement des données sur les exigences du RGPD. Cette page couvre la posture de conformité de l’entreprise, les accords juridiques disponibles et les engagements clés en matière de confidentialité intégrés à la plateforme. ## Posture de conformité PDFMonkey ne détient pas de certification de conformité formelle (telle que SOC 2 ou ISO 27001). En tant que petite entreprise spécialisée, poursuivre ces certifications n’est pas envisageable actuellement. En revanche, PDFMonkey met en place des [mesures de sécurité](https://pdfmonkey.io/fr/docs/compte-et-securite/mesures-de-securite.md) concrètes qui protègent vos données à chaque étape : chiffrement en transit et au repos, hébergement exclusivement européen, contrôles d’accès stricts et rétention des données configurable. > [!NOTE] > **L’absence de certification ne signifie pas l’absence de sécurité** > > L’absence d’un badge de certification ne reflète pas l’absence de pratiques de sécurité. Les mesures techniques et organisationnelles de PDFMonkey sont documentées dans la page [Mesures de sécurité](https://pdfmonkey.io/fr/docs/compte-et-securite/mesures-de-securite.md) et formalisées dans le DPA ci-dessous. ## Rôles RGPD Lorsque vous utilisez PDFMonkey, les rôles RGPD sont définis comme suit : | Rôle | Partie | Responsabilité | |:-----|:-------|:---------------| | **Responsable de traitement** | Vous (l’Utilisateur) | Vous déterminez quelles données personnelles sont envoyées à PDFMonkey et dans quel but. | | **Sous-traitant** | PDFMonkey | PDFMonkey traite vos données exclusivement pour générer les Documents que vous demandez, selon vos instructions. | PDFMonkey traite vos données uniquement aux fins de la fourniture du service. Elles ne sont jamais analysées, partagées avec des partenaires, vendues ou utilisées à d’autres fins. Si vous êtes vous-même sous-traitant agissant pour le compte d’un responsable de traitement (par exemple, en générant des documents pour vos propres clients), PDFMonkey fournit un **accord de sous-traitance des données** (DsPA) distinct qui formalise la chaîne Responsable de traitement-Sous-traitant-Sous-traitant ultérieur. ## Accord de traitement des données (DPA) PDFMonkey fournit deux accords standard couvrant les obligations de traitement des données au titre du RGPD : | Document | Cas d’utilisation | Lien | |:---------|:------------------|:-----| | **Accord de traitement des données (DPA)** | Vous êtes le responsable de traitement ; PDFMonkey est votre sous-traitant | [Télécharger le DPA (PDF)](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/documents/2023-03-01%20PDFMonkey%20DPA.pdf) | | **Accord de sous-traitance des données (DsPA)** | Vous êtes sous-traitant ; PDFMonkey est sous-traitant ultérieur agissant pour le compte de votre responsable de traitement | [Télécharger le DsPA (PDF)](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/documents/2023-03-01%20PDFMonkey%20DsPA.pdf) | Les deux accords sont datés du 1er mars 2023 et couvrent : - Les définitions alignées sur la terminologie du RGPD - Les obligations de traitement des données et les instructions - Les mesures de sécurité et la confidentialité - Les droits d’audit (une fois par an, préavis de 30 jours) - Les procédures de notification de violation de données - Les garanties relatives aux transferts internationaux de données - La liste des sous-traitants approuvés - La suppression des données à la fin du contrat > [!TIP] > **Besoin d’un accord personnalisé ?** > > Si votre organisation a besoin que PDFMonkey examine et signe un accord de confidentialité des données personnalisé, [contactez-nous](https://pdfmonkey.io/contact). Les demandes relatives au DPA peuvent également être envoyées directement à tinymonkey@pdfmonkey.io. ## Engagements clés au titre du RGPD Les engagements suivants sont formalisés dans le DPA et reflétés dans l’implémentation technique de PDFMonkey : ### Hébergement exclusivement européen Toute l’infrastructure fonctionne sur AWS dans la région **UE (Paris)**. Vos données ne quittent pas l’EEE sauf si un sous-traitant l’exige ; dans ce cas, le transfert est protégé par des garanties conformes au RGPD (décisions d’adéquation ou clauses contractuelles types). Consultez [Mesures de sécurité : hébergement européen](https://pdfmonkey.io/fr/docs/compte-et-securite/mesures-de-securite.md#hebergement-europeen) pour plus de détails. ### Limitation de finalité PDFMonkey traite vos données exclusivement pour générer les Documents que vous demandez. Elles ne sont jamais analysées par PDFMonkey ou un service externe, jamais partagées avec des tiers et jamais utilisées à des fins de profilage ou d’analyse. ### Minimisation des données et rétention Vous contrôlez la durée de stockage de vos données. Chaque Template dispose d’un [TTL (Time To Live)](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) configurable qui supprime automatiquement les Documents après l’expiration de la période de rétention. Vous pouvez également [supprimer des Documents manuellement](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md#manual-deletion) à tout moment. Consultez [Stockage des données et rétention](https://pdfmonkey.io/fr/docs/compte-et-securite/stockage-et-conservation-des-donnees.md) pour une vue complète de ce qui est stocké et quand les données sont supprimées. ### Notification de violation de données Si PDFMonkey prend connaissance d’une violation de données personnelles affectant vos données, il vous en informe sans délai. La notification inclut la nature et l’étendue de la violation, un point de contact, les conséquences probables et les mesures correctives prises ou proposées. ### Suppression des données à la fin du contrat Lorsque vous [supprimez votre compte](https://pdfmonkey.io/fr/docs/compte-et-securite/suppression-de-compte.md), PDFMonkey cesse tout traitement et détruit définitivement toutes vos données, y compris les Templates, Documents, fichiers générés et données dynamiques. ## Sous-traitants approuvés PDFMonkey utilise un nombre limité de sous-traitants. Le DPA exige que PDFMonkey vous informe par écrit avant d’ajouter ou de remplacer un sous-traitant, en vous laissant le temps de vous opposer. | Sous-traitant | Finalité | |:--------------|:---------| | **Amazon Web Services** | Hébergement et stockage | | **Heroku** | Hébergement | | **SendGrid** | Envoi d’e-mails | | **Dropbox** | Stockage des factures | | **Svix** | Livraison de webhooks | | **Zapier** | Plateforme d’intégration | | **Rollbar** | Journalisation des erreurs | | **Sentry** | Journalisation des erreurs | | **Cloudflare** | Services DNS et réseau | Pour les coordonnées complètes et les liens de conformité de chaque sous-traitant, consultez la section 5 du [DPA](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/documents/2023-03-01%20PDFMonkey%20DPA.pdf) ou du [DsPA](https://pdfmonkey-resources.s3-eu-west-3.amazonaws.com/documents/2023-03-01%20PDFMonkey%20DsPA.pdf). ## Questions fréquentes **PDFMonkey possède-t-il une certification SOC 2 ou ISO 27001 ?** Non. PDFMonkey est une petite entreprise et ne détient pas actuellement de certification de conformité formelle. La page [Mesures de sécurité](https://pdfmonkey.io/fr/docs/compte-et-securite/mesures-de-securite.md) décrit les mesures techniques et organisationnelles en place. **Puis-je auditer PDFMonkey ?** Oui. Le DPA vous accorde le droit d’auditer les pratiques de traitement des données de PDFMonkey une fois par an, pendant les heures ouvrables, avec un préavis écrit d’au moins 30 jours. Les frais d’audit sont à votre charge, sauf si l’audit révèle un manquement de la part de PDFMonkey. **Que deviennent mes données si j’annule mon abonnement ?** Lorsque vous [supprimez votre compte](https://pdfmonkey.io/fr/docs/compte-et-securite/suppression-de-compte.md), PDFMonkey supprime définitivement tous vos Workspaces, Templates, Documents et fichiers générés. Consultez [Suppression de compte](https://pdfmonkey.io/fr/docs/compte-et-securite/suppression-de-compte.md) pour le processus complet. **Mes données sont-elles transférées hors de l’UE ?** PDFMonkey s’engage à traiter les données au sein de l’EEE. Si un sous-traitant nécessite un transfert hors de l’EEE, des garanties conformes au RGPD (décisions d’adéquation ou clauses contractuelles types) sont en place. ## Pages associées - [Mesures de sécurité](https://pdfmonkey.io/fr/docs/compte-et-securite/mesures-de-securite.md) : chiffrement, contrôles d’accès et isolation des données - [Stockage des données et rétention](https://pdfmonkey.io/fr/docs/compte-et-securite/stockage-et-conservation-des-donnees.md) : quelles données PDFMonkey stocke et pendant combien de temps - [Rétention et suppression automatique](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) : configuration du TTL et limites par forfait - [Suppression de compte](https://pdfmonkey.io/fr/docs/compte-et-securite/suppression-de-compte.md) : ce qui se passe lorsque vous supprimez votre compte - [Support](https://pdfmonkey.io/fr/docs/premiers-pas/support.md) : comment contacter l’équipe PDFMonkey ## FAQ **PDFMonkey est-il conforme au RGPD ?** PDFMonkey applique les principes du RGPD : les données sont traitées exclusivement dans l’UE (région AWS Paris), chiffrées en transit et au repos, jamais partagées avec des tiers, et supprimées lorsqu’elles ne sont plus nécessaires. PDFMonkey agit en tant que sous-traitant (Processor) pour votre compte. **PDFMonkey fournit-il un accord de traitement des données (DPA) ?** Oui. PDFMonkey fournit un DPA standard et un accord de sous-traitance des données (DsPA), tous deux disponibles en téléchargement. Si votre organisation nécessite un accord personnalisé, vous pouvez contacter PDFMonkey pour organiser une revue et une signature. **Où sont hébergées les données de PDFMonkey ?** Toute l’infrastructure de PDFMonkey est hébergée sur Amazon Web Services (AWS) dans la région UE (Paris). Cela inclut les serveurs applicatifs, la base de données et le stockage S3. Les données sont traitées exclusivement au sein de l’EEE. **Quels sous-traitants PDFMonkey utilise-t-il ?** PDFMonkey utilise un nombre limité de sous-traitants : AWS (hébergement et stockage), Heroku (hébergement), SendGrid (e-mail), Dropbox (stockage des factures), Svix et Zapier (intégrations), Rollbar et Sentry (journalisation des erreurs), et Cloudflare (DNS). La liste complète est détaillée dans le DPA. --- # Offres et tarifs PDFMonkey : Free, Starter, Pro, Pro+ et Premium Source: https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md PDFMonkey propose cinq offres adaptées à différents volumes de génération de documents. Chaque nouveau compte bénéficie d’un [essai Pro de 30 jours](https://pdfmonkey.io/fr/docs/premiers-pas/essai-de-30-jours.md) pour tester les fonctionnalités premium avant de choisir une offre. Rendez-vous sur [pdfmonkey.io/pricing](https://pdfmonkey.io/pricing) pour consulter les tarifs en vigueur. ## Comparaison des fonctionnalités {#feature-comparison} | Fonctionnalité | Free | Starter | Pro | Pro+ | Premium | |:---------------|:----:|:-------:|:---:|:----:|:-------:| | Documents par mois | 20 | 300 | 3 000 | 5 000 | 60 000 | | [Rétention des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) | 1 jour | 1 jour | 7 jours | Illimitée | Illimitée | | [Ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md) | Non | Oui | Oui | Oui | Oui | | Membres d’équipe | 1 | 1 | 2 | Illimité | Illimité | | [Liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md) | Non | Non | Non | Oui | Oui | | Temps de génération max | 30 sec | 30 sec | 2 min | 3 min | 5 min | | [Paiement à l’usage](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/paiement-a-l-usage.md) | Non | Non | Non | Oui | Oui | > [!TIP] > **Vous ne savez pas quelle offre choisir ?** > > Commencez avec l’offre Free et passez à une offre supérieure à tout moment. Les changements d’offre prennent effet immédiatement et la facturation est calculée au prorata. Consultez [Changer d’offre](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md). ## Détail des offres {#plan-details} ### Free L’offre Free vous donne 20 documents par mois avec une limite de génération de 30 secondes. C’est une bonne option pour tester PDFMonkey avant de souscrire à une offre payante. Les [ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md) (polices web, images distantes) ne sont pas disponibles sur cette offre. ### Starter L’offre Starter porte votre quota à 300 documents par mois et débloque les [ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md). Si vous générez un faible volume de documents et n’avez pas besoin de collaboration en équipe, Starter couvre l’essentiel. ### Pro L’offre Pro prend en charge jusqu’à 3 000 documents par mois avec une [rétention de 7 jours](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) et une limite de génération de 2 minutes. Vous pouvez inviter un membre d’équipe supplémentaire, portant le total à deux places. ### Pro+ L’offre Pro+ fournit 5 000 documents par mois avec une rétention illimitée, un nombre illimité de membres d’équipe, des [liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md) et une limite de génération de 3 minutes. ### Premium L’offre Premium gère jusqu’à 60 000 documents par mois avec toutes les fonctionnalités de Pro+, plus une limite de génération de 5 minutes. ## Facturation annuelle {#annual-billing} Toutes les offres payantes bénéficient d’une réduction de 10 % avec la facturation annuelle. Vous pouvez passer de la facturation mensuelle à annuelle (et inversement) à tout moment depuis le Dashboard. Consultez [pdfmonkey.io/pricing](https://pdfmonkey.io/pricing) pour les tarifs annuels exacts. ## Atteindre votre quota {#reaching-your-quota} Lorsque vous atteignez 80 % de votre quota mensuel, PDFMonkey vous envoie un e-mail d’avertissement. À 100 %, les nouvelles demandes de génération sont bloquées et les documents passent au [statut](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) **draft**. Vous n’êtes pas facturé pour les générations bloquées. Votre quota se réinitialise automatiquement au début de chaque cycle de facturation. Si vous avez besoin de plus de documents avant la réinitialisation, vous avez trois options : - **Passer à une offre supérieure :** passez à un niveau supérieur pour un quota mensuel plus important. Consultez [Changer d’offre](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md). - **Acheter un Boost Pack :** achetez un bloc unique de crédits de génération supplémentaires. Consultez [Boost Packs](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/boost-packs.md). - **Activer le paiement à l’usage :** soyez facturé automatiquement pour chaque document au-delà de votre quota (tous les forfaits payants). Consultez [Paiement à l’usage](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/paiement-a-l-usage.md). ## Offres personnalisées {#custom-plans} Si vous avez besoin de plus de 60 000 documents par mois, [contactez-nous](https://pdfmonkey.io/contact) pour discuter d’une offre personnalisée adaptée à votre volume. ## Questions fréquentes {#faq} **Que deviennent mes documents si je passe à une offre inférieure ?** Les documents situés dans la [fenêtre de rétention](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) de la nouvelle offre sont conservés. Les documents en dehors sont définitivement supprimés. Les fonctionnalités réservées aux offres supérieures (comme les [liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md)) cessent de fonctionner jusqu’à un éventuel retour à une offre éligible. **Puis-je générer des images en plus des PDF ?** Oui. Toutes les offres prennent en charge les formats PDF, PNG, WebP et JPG. Consultez [Générer des images au lieu de PDF](https://pdfmonkey.io/fr/docs/generation-de-documents/format-de-sortie.md) pour plus de détails. **Les documents non utilisés sont-ils reportés au mois suivant ?** Non. Votre quota mensuel est remis à zéro au début de chaque cycle de facturation. Les documents non utilisés ne s’accumulent pas. **Y a-t-il un essai gratuit ?** Oui. Chaque nouveau compte bénéficie d’un [essai Pro de 30 jours](https://pdfmonkey.io/fr/docs/premiers-pas/essai-de-30-jours.md) avec 300 documents, les ressources externes et une limite de génération de 2 minutes. À la fin de l’essai, votre compte passe automatiquement à l’offre Free. ## Pages associées {#related-pages} - [Boost Packs](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/boost-packs.md) — crédits de documents supplémentaires ponctuels - [Paiement à l’usage](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/paiement-a-l-usage.md) — facturation automatique par document au-delà du quota - [Changer d’offre](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) — fonctionnement des montées en gamme, rétrogradations et prorata - [Essai Pro de 30 jours](https://pdfmonkey.io/fr/docs/premiers-pas/essai-de-30-jours.md) — contenu de l’essai et ce qui se passe à son expiration - [Rétention et suppression des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) — paramètres TTL et limites de rétention par offre - [Liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md) — URL publiques permanentes pour les documents générés - [Ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md) — polices web, images distantes, CSS et JS externes ## FAQ **Combien coûte PDFMonkey ?** PDFMonkey propose cinq forfaits : Gratuit (20 documents/mois), Starter (300/mois), Pro (3 000/mois), Pro+ (5 000/mois) et Premium (60 000/mois). Tous les forfaits payants offrent une réduction de 10 % sur la facturation annuelle. Chaque nouveau compte bénéficie d’un essai Pro de 30 jours. Consultez pdfmonkey.io/pricing pour les tarifs actuels. **Que se passe-t-il quand j’atteins mon quota de documents PDFMonkey ?** À 80 % de votre quota mensuel, PDFMonkey vous envoie un e-mail d’avertissement. À 100 %, les nouvelles demandes de génération sont bloquées. Vous pouvez passer au forfait supérieur, acheter un Boost Pack ponctuel ou activer le paiement à l’usage. **Les documents PDFMonkey non utilisés sont-ils reportés au mois suivant ?** Non. Votre quota mensuel est remis à zéro au début de chaque cycle de facturation. Les documents non utilisés ne s’accumulent pas. **PDFMonkey propose-t-il un forfait gratuit ?** Oui. Le forfait Gratuit vous donne 20 documents par mois avec un temps de génération limité à 30 secondes. Les ressources externes (polices web, images distantes) ne sont pas disponibles sur ce forfait. --- # Boost Packs : acheter des crédits de génération supplémentaires Source: https://pdfmonkey.io/fr/docs/tarifs-et-facturation/boost-packs.md Les Boost Packs sont des achats ponctuels de crédits de génération de documents supplémentaires. Chaque Boost Pack ajoute 1 000 documents à votre quota pour **5 EUR** (HT). Les crédits sont disponibles immédiatement et restent valables jusqu’à la fin de votre cycle de facturation en cours. > [!TIP] > **En bref** > > Le quota du forfait est consommé en premier, puis les crédits Boost Pack. Les crédits Boost Pack non utilisés expirent au renouvellement de votre abonnement. ## Tarifs et disponibilité {#pricing} | Détail | | |:-------|:--| | **Prix** | 5 EUR par Boost Pack (HT) | | **Crédits par pack** | 1 000 documents | | **Achat minimum** | 1 pack (1 000 documents) | | **Achat maximum** | 1 000 packs (1 000 000 documents) par transaction | | **Disponible sur** | Tous les forfaits payants (Starter, Pro, Pro+, Premium) | | **Remboursement** | Non remboursable | > [!WARNING] > **Les Boost Packs sont réservés aux clients payants. Si vous êtes sur le [forfait Free](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md#plan-details), vous devez d’abord passer à un forfait payant.** > > Rendez-vous sur [pdfmonkey.io/pricing](https://pdfmonkey.io/pricing) pour les derniers tarifs. ## Boost Packs vs. paiement à l’usage {#boost-packs-vs-payg} PDFMonkey propose deux façons de gérer le dépassement de quota. Elles sont mutuellement exclusives : vous devez choisir l’une ou l’autre. | | Boost Packs | [Paiement à l’usage](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/paiement-a-l-usage.md) | |---|---|---| | **Facturation** | Ponctuelle, payée à l’avance | Automatique, par document | | **Tarif** | 5 EUR pour 1 000 documents (0,005 EUR/doc) | 0,005–0,006 EUR par document | | **Achat minimum** | 1 000 documents (1 pack) | Aucun (facturé par document utilisé) | | **Disponibilité** | Tous les forfaits payants | Tous les forfaits payants | | **Action requise** | Achat manuel dans le Dashboard | Aucune (automatique une fois activé) | | **Idéal pour** | Dépassement prévisible avec budget fixe | Volume imprévisible sans engagement initial | > [!NOTE] > **Si vous êtes sur un forfait annuel, le dépassement par paiement à l’usage est tout de même facturé mensuellement.** > > ## Ordre de consommation des crédits {#consumption-order} Lorsque vous générez un document, PDFMonkey puise dans vos crédits selon cet ordre : 1. Le **quota mensuel du forfait** est consommé en premier. 2. Les **crédits Boost Pack** sont consommés ensuite, une fois le quota du forfait entièrement épuisé. Tant qu’il reste des crédits dans votre quota de forfait, votre solde Boost Pack reste intact. Les Boost Packs et le [paiement à l’usage](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/paiement-a-l-usage.md) sont mutuellement exclusifs : vous ne pouvez pas activer les deux en même temps. ## Comment acheter des Boost Packs {#how-to-buy} 1. Ouvrez votre Dashboard et rendez-vous dans la section **Billing**. 2. Faites défiler la page jusqu’à la zone **Boost Packs**. 3. Utilisez les boutons **+** et **-** pour sélectionner le nombre de packs souhaité (chaque pack correspond à 1 000 documents). 4. Cochez la case de consentement pour confirmer le montant et les conditions. 5. Cliquez sur **Give me a Boost Pack** (ou **Give me X Boost Packs** pour plusieurs). L’achat est débité immédiatement sur votre moyen de paiement par défaut. Les crédits sont ajoutés à votre compte dès que le paiement est validé. > [!NOTE] > **Si une erreur survient lors de l’achat, vérifiez que votre moyen de paiement est à jour dans la section Billing. Contactez le support via le chat intégré si le problème persiste.** > > ## Expiration {#expiry} Les crédits Boost Pack **expirent à la fin de votre cycle de facturation en cours**. Au renouvellement de votre abonnement, les crédits Boost Pack non utilisés sont remis à zéro et votre quota revient à l’allocation de base de votre forfait. Si vous avez besoin de crédits qui persistent d’un cycle à l’autre, envisagez plutôt de passer à un [forfait supérieur](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md). ## Questions fréquentes {#faq} **Puis-je acheter des Boost Packs avec le forfait Free ?** Non. Les Boost Packs nécessitent un abonnement payant actif (Starter, Pro, Pro+ ou Premium). [Changez de forfait](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) au préalable. **Les crédits Boost Pack non utilisés sont-ils reportés au cycle suivant ?** Non. Les crédits non utilisés sont remis à zéro au renouvellement de votre abonnement. N’achetez des Boost Packs que lorsque vous en avez besoin dans le cycle en cours. **Puis-je obtenir un remboursement pour des crédits Boost Pack non utilisés ?** Non. Les Boost Packs ne sont pas remboursables. **Les crédits Boost Pack sont-ils partagés entre les Workspaces ?** Les crédits Boost Pack sont liés aux Workspaces que vous possédez et augmentent le quota de documents de ces Workspaces. Ils ne s’appliquent pas aux Workspaces d’autres comptes auxquels vous avez été invité. **Que se passe-t-il si mon moyen de paiement est refusé ?** L’achat n’est pas finalisé et aucun crédit n’est ajouté. Mettez à jour votre moyen de paiement dans la section Billing du Dashboard, puis réessayez. ## Pages associées {#related-pages} - [Nos forfaits](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) — comparer les forfaits et les quotas mensuels - [Paiement à l’usage](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/paiement-a-l-usage.md) — facturation automatique par document au-delà de votre quota - [Changer de forfait](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) — fonctionnement des mises à niveau, rétrogradations et prorations - [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) — comprendre ce qui se passe lorsque votre quota est épuisé ## FAQ **Que sont les Boost Packs PDFMonkey ?** Les Boost Packs sont des achats ponctuels de crédits de génération de documents supplémentaires. Chaque Boost Pack ajoute 1 000 documents à votre quota pour 5 EUR (HT). Les crédits sont disponibles immédiatement et restent valables jusqu’à la fin de votre cycle de facturation en cours. **Puis-je acheter des Boost Packs avec le forfait Free ?** Non. Les Boost Packs nécessitent un abonnement payant actif (Starter, Pro, Pro+ ou Premium). Vous devez d’abord passer à un forfait payant. **Les crédits Boost Pack non utilisés sont-ils reportés ?** Non. Les crédits non utilisés sont remis à zéro au renouvellement de votre abonnement. N’achetez des Boost Packs que lorsque vous en avez besoin dans le cycle en cours. **Combien coûtent les Boost Packs ?** Chaque Boost Pack coûte 5 EUR (HT) et inclut 1 000 crédits de génération de documents. Vous pouvez acheter entre 1 et 1 000 packs par transaction. --- # Paiement à l’usage : facturation automatique par document sur PDFMonkey Source: https://pdfmonkey.io/fr/docs/tarifs-et-facturation/paiement-a-l-usage.md Le paiement à l’usage (PAYG) est un mode de facturation automatique qui vous facture pour chaque document généré après l’épuisement de votre quota mensuel. Au lieu d’être bloqué lorsque votre quota est atteint, vous continuez à générer des documents et payez un petit montant par document. > [!TIP] > **En bref** > > Le PAYG n’impose aucun minimum d’achat ni engagement initial. Vous ne payez que les documents générés au-delà de votre quota mensuel, facturés automatiquement au tarif par document de votre offre. ## Tarifs par document {#per-document-rates} | Offre | Tarif par document | |:------|:-------------------| | Pro+ | 0,006 EUR | | Premium | 0,005 EUR | Ces tarifs s’appliquent à chaque document généré au-delà de votre quota mensuel, qu’il produise un PDF ou une [image](https://pdfmonkey.io/fr/docs/generation-de-documents/format-de-sortie.md). Rendez-vous sur [pdfmonkey.io/pricing](https://pdfmonkey.io/pricing) pour les derniers tarifs. ## Disponibilité {#availability} Le paiement à l’usage est disponible sur tous les forfaits payants : **Starter**, **Pro**, **Pro+** et **Premium**. Il n’est pas disponible sur l’offre Free. Consultez [Nos forfaits](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md#feature-comparison) pour une comparaison complète des fonctionnalités. ## Fonctionnement {#how-it-works} 1. Votre **quota mensuel** est consommé en premier. 2. Une fois votre quota épuisé, chaque document supplémentaire est facturé au tarif par document de votre offre. 3. Les frais de dépassement sont calculés en fin de période de facturation et ajoutés à votre prochaine facture. Le PAYG s’applique à tous les Workspaces **que vous possédez**. Il ne s’applique pas aux Workspaces d’autres comptes auxquels vous avez été invité. > [!NOTE] > **Si vous êtes sur un forfait annuel, le dépassement PAYG est tout de même facturé mensuellement.** > > ## Activer le paiement à l’usage {#enabling} Pour activer ou désactiver le PAYG sur votre compte, ouvrez la section **Billing** de votre Dashboard et recherchez l’option de paiement à l’usage. Si vous ne la voyez pas, contactez le support via le chat intégré. Une fois activé, le PAYG se déclenche automatiquement chaque fois que votre quota mensuel est épuisé. Aucune action manuelle n’est nécessaire à chaque dépassement. ## Paiement à l’usage vs Boost Packs {#payg-vs-boost-packs} PDFMonkey propose deux façons de gérer le dépassement au-delà de votre quota mensuel. Elles sont **mutuellement exclusives** : vous devez choisir l’une ou l’autre. | | Paiement à l’usage | [Boost Packs](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/boost-packs.md) | |---|---|---| | **Facturation** | Automatique, par document | Ponctuelle, payée à l’avance | | **Tarif** | 0,005–0,006 EUR par document | 5 EUR pour 1 000 documents (0,005 EUR/doc) | | **Achat minimum** | Aucun (facturé par document utilisé) | 1 000 documents (1 pack) | | **Disponibilité** | Tous les forfaits payants | Tous les forfaits payants | | **Action requise** | Aucune (automatique une fois activé) | Achat manuel dans le Dashboard | | **Expiration** | Sans objet (facturé à l’utilisation) | Fin du cycle de facturation en cours | | **Idéal pour** | Volume imprévisible sans engagement initial | Dépassement prévisible avec budget fixe | > [!WARNING] > **Vous ne pouvez pas avoir le PAYG et les Boost Packs actifs en même temps. Si vous souhaitez passer d’une méthode de dépassement à l’autre, désactivez d’abord celle en cours.** > > ## Questions fréquentes {#faq} **Y a-t-il un nombre minimum de documents pour le PAYG ?** Non. Le PAYG n’impose aucun minimum d’achat. Vous n’êtes facturé que pour les documents effectivement générés au-delà de votre quota, même s’il ne s’agit que d’un seul document. **Le PAYG s’applique-t-il à tous mes Workspaces ?** Le PAYG s’applique aux Workspaces que vous possédez. Si vous avez été invité à des Workspaces appartenant à d’autres comptes, votre paramètre PAYG ne couvre pas ces Workspaces. **Que se passe-t-il si je passe au forfait Free ?** Le PAYG est automatiquement désactivé car il n’est pas disponible sur le forfait Free. Tout dépassement accumulé avant la rétrogradation reste facturé. Consultez [Changer de forfait](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) pour plus de détails. **Puis-je définir un plafond de dépenses ?** Il n’existe actuellement pas de plafond de dépenses intégré pour le PAYG. Si vous souhaitez limiter les coûts de dépassement, envisagez plutôt les [Boost Packs](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/boost-packs.md), qui offrent un coût fixe et connu. **Le PAYG comptabilise-t-il la génération d’images en plus des PDF ?** Oui. Chaque document généré est décompté de votre quota et facturé via le PAYG, que le résultat soit un PDF ou une [image](https://pdfmonkey.io/fr/docs/generation-de-documents/format-de-sortie.md). ## Pages associées {#related-pages} - [Nos forfaits](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) — comparer les forfaits et les quotas mensuels - [Boost Packs](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/boost-packs.md) — crédits supplémentaires ponctuels (mutuellement exclusifs avec le PAYG) - [Changer de forfait](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md) — fonctionnement des mises à niveau, rétrogradations et prorations - [Statuts des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/statuts-des-documents.md) — comprendre ce qui se passe lorsque votre quota est épuisé - [Générer des images au lieu de PDF](https://pdfmonkey.io/fr/docs/generation-de-documents/format-de-sortie.md) — la génération d’images compte dans votre quota ## FAQ **Qu’est-ce que le paiement à l’usage PDFMonkey ?** Le paiement à l’usage (PAYG) est un mode de facturation automatique qui vous facture pour chaque document généré après l’épuisement de votre quota mensuel. Au lieu d’être bloqué lorsque votre quota est atteint, vous continuez à générer des documents et payez un petit montant par document. **Y a-t-il un nombre minimum de documents pour le paiement à l’usage ?** Non. Le PAYG n’impose aucun minimum d’achat. Vous n’êtes facturé que pour les documents effectivement générés au-delà de votre quota, même s’il ne s’agit que d’un seul document. **Puis-je définir un plafond de dépenses pour le paiement à l’usage ?** Il n’existe actuellement pas de plafond de dépenses intégré pour le PAYG. Si vous souhaitez limiter les coûts de dépassement, envisagez plutôt les Boost Packs, qui offrent un coût fixe et connu. **Quel est le tarif par document pour le paiement à l’usage ?** Le tarif par document dépend de votre offre : Pro+ à 0,006 EUR et Premium à 0,005 EUR. Ces tarifs s’appliquent à chaque document généré au-delà de votre quota mensuel. --- # Changer d’offre PDFMonkey : passage à une offre supérieure, inférieure et facturation Source: https://pdfmonkey.io/fr/docs/tarifs-et-facturation/changer-d-offre.md Vous pouvez changer votre offre PDFMonkey à tout moment depuis la section Facturation de votre Dashboard. Les passages à une offre supérieure prennent effet immédiatement ; les passages à une offre inférieure s’appliquent au début de votre prochain cycle de facturation. ## Comment changer d’offre {#how-to-change-your-plan} 1. Ouvrez votre Dashboard et rendez-vous dans la section **Facturation**. 2. Cliquez sur **Gérer mon abonnement** pour ouvrir le portail de facturation. 3. Choisissez une nouvelle offre et confirmez le changement. Pour les passages à une offre supérieure, PDFMonkey utilise un processus dédié qui applique le changement immédiatement après confirmation. Pour les passages à une offre inférieure ou les annulations, le portail Stripe vous permet de planifier le changement pour la fin de votre cycle de facturation en cours. ## Passer à une offre supérieure {#upgrading} Lorsque vous passez à une offre supérieure, le changement prend effet **immédiatement**. Vous accédez instantanément aux fonctionnalités de la nouvelle offre, au quota de documents plus élevé et au temps de génération plus long. > [!NOTE] > **Facturation au prorata** > > Vous n’êtes facturé que pour le reste de votre cycle de facturation en cours au tarif de la nouvelle offre. La portion inutilisée de votre ancienne offre est créditée sur la nouvelle charge. Si vous avez des questions spécifiques sur le calcul de la proratisation, contactez le support via le chat intégré. ### Ce qui change lors d’un passage à une offre supérieure - **Le quota de documents** augmente immédiatement à la capacité de la nouvelle offre. - **Le temps de génération maximum** augmente selon le maximum de la nouvelle offre (par exemple, de 30 secondes sur Free à 2 minutes sur Pro). - **La rétention des documents** est étendue. Les templates dont le TTL était au maximum de l’ancienne offre sont automatiquement mis à jour avec le maximum de la nouvelle offre. Consultez [Rétention et suppression](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md). - **Les fonctionnalités** sont débloquées instantanément. Par exemple, le passage à Pro+ ou Premium active les [liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md) pour tous les documents existants générés avec succès, sans avoir besoin de les regénérer. ## Passer à une offre inférieure {#downgrading} Lorsque vous passez à une offre inférieure, le changement est **planifié pour le début de votre prochain cycle de facturation**. Vous conservez les fonctionnalités et le quota de votre offre actuelle jusqu’à la fin du cycle. > [!WARNING] > **Impact sur les fonctionnalités et les données** > > Le passage à une offre inférieure peut affecter vos documents de manière permanente. Consultez les sections ci-dessous avant de confirmer. ### Ce qui change lors d’un passage à une offre inférieure - **Le quota de documents** diminue selon la capacité de la nouvelle offre au début du prochain cycle de facturation. - **Le temps de génération maximum** diminue. Les documents nécessitant plus de temps que le maximum de la nouvelle offre risquent d’échouer à la génération. - **La rétention des documents** est réduite. Les templates dont le TTL dépasse le maximum de la nouvelle offre sont automatiquement abaissés à ce maximum, et les dates d’expiration des documents existants sont recalculées en conséquence. Les documents qui tombent en dehors de la nouvelle fenêtre de rétention sont définitivement supprimés et ne peuvent pas être récupérés. Consultez [Rétention et suppression](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md). - **Les liens de partage** cessent de fonctionner si vous passez de Pro+ ou Premium à une offre qui ne les inclut pas (Pro, Starter ou Free). Si vous repassez ensuite à Pro+ ou Premium, les liens de partage redeviennent actifs pour les documents encore existants. Consultez [Liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md). - **Les ressources externes** (polices web, images distantes, CSS/JS externes) cessent de fonctionner si vous passez à l’offre Free. Les documents qui les référencent échoueront à la génération. Consultez [Ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md). - **Le paiement à l’usage** est automatiquement désactivé si vous passez à l’offre Free. Tout dépassement accumulé avant le changement reste facturé. Consultez [Paiement à l’usage](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/paiement-a-l-usage.md). ## Changer de fréquence de facturation {#switching-billing-frequency} Vous pouvez passer de la facturation mensuelle à annuelle et inversement. La facturation annuelle vous permet d’économiser **10 %** par rapport au tarif mensuel. Vous pouvez effectuer ce changement à tout moment depuis le portail de facturation. Lorsque vous passez du mensuel à l’annuel, vous êtes facturé au tarif annuel immédiatement (au prorata du temps restant sur votre cycle mensuel en cours). Le passage de l’annuel au mensuel prend effet à la fin de votre période annuelle en cours. Consultez [Nos offres](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) pour le détail des offres disponibles, ou rendez-vous sur [pdfmonkey.io/pricing](https://pdfmonkey.io/pricing) pour les tarifs en vigueur. ## Impact sur les méthodes de dépassement {#effect-on-overage-methods} Si vous avez des [Boost Packs](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/boost-packs.md) ou le [Paiement à l’usage](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/paiement-a-l-usage.md) activé, gardez les points suivants en tête : - **Les crédits Boost Pack** sont conservés lorsque vous changez d’offre au sein du même cycle de facturation. Ils expirent toujours à la fin du cycle, indépendamment du changement d’offre. - **Le paiement à l’usage** reste actif lors des changements entre offres payantes. Il est automatiquement désactivé uniquement si vous passez à l’offre Free. - Les deux méthodes de dépassement ne sont pas disponibles sur l’offre Free. ## Questions fréquentes {#faq} **Y a-t-il un contrat ou un engagement minimum ?** Non. Toutes les offres PDFMonkey sont facturées de manière récurrente, sans contrat à long terme. Vous pouvez passer à une offre supérieure, inférieure ou annuler à tout moment. **Qu’advient-il de mes documents lorsque je passe à une offre inférieure ?** Les documents compris dans la [fenêtre de rétention](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) de la nouvelle offre sont conservés. Les documents en dehors de cette fenêtre sont définitivement supprimés lorsque le changement prend effet. Les fonctionnalités réservées aux offres supérieures (comme les [liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md)) cessent de fonctionner jusqu’à un éventuel retour à une offre supérieure. **Puis-je changer d’offre pendant mon essai de 30 jours ?** Oui. Vous pouvez [passer à n’importe quelle offre payante](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) à tout moment pendant l’essai. Le changement prend effet immédiatement. Consultez [Essai Pro de 30 jours](https://pdfmonkey.io/fr/docs/premiers-pas/essai-de-30-jours.md) pour les détails de ce que l’essai inclut. **Vais-je perdre mes templates si je passe à une offre inférieure ?** Non. Vos templates ne sont jamais supprimés lors d’un changement d’offre. Seuls les documents générés sont affectés par les changements de rétention. **Comment la proratisation est-elle calculée ?** La proratisation est gérée par Stripe. Lors d’un passage à une offre supérieure en cours de cycle, le temps inutilisé de votre ancienne offre est crédité et le coût proportionnel de la nouvelle offre est facturé pour les jours restants du cycle. Les montants exacts apparaissent comme des lignes distinctes sur votre prochaine facture. ## Pages liées {#related-pages} - [Nos offres](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/nos-offres.md) : comparez les offres, quotas et fonctionnalités - [Boost Packs](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/boost-packs.md) : crédits de génération supplémentaires ponctuels - [Paiement à l’usage](https://pdfmonkey.io/fr/docs/tarifs-et-facturation/paiement-a-l-usage.md) : facturation automatique par document au-delà de votre quota - [Essai Pro de 30 jours](https://pdfmonkey.io/fr/docs/premiers-pas/essai-de-30-jours.md) : ce que l’essai inclut et ce qui se passe à son terme - [Liens de partage](https://pdfmonkey.io/fr/docs/generation-de-documents/liens-de-partage.md) : URL publiques permanentes et impact des changements d’offre - [Rétention et suppression des documents](https://pdfmonkey.io/fr/docs/generation-de-documents/conservation-et-suppression.md) : paramètres TTL et limites de rétention par offre - [Ressources externes](https://pdfmonkey.io/fr/docs/premiers-pas/ressources-externes.md) : définition des ressources externes et restrictions de l’offre Free ## FAQ **Y a-t-il un contrat ou un engagement minimum sur PDFMonkey ?** Non. Toutes les offres PDFMonkey sont facturées de manière récurrente, sans contrat à long terme. Vous pouvez passer à une offre supérieure, inférieure ou annuler à tout moment. **Qu’advient-il de mes documents lorsque je passe à une offre inférieure ?** Les documents compris dans la fenêtre de rétention de la nouvelle offre sont conservés. Les documents en dehors de cette fenêtre sont définitivement supprimés lorsque le changement prend effet. Les fonctionnalités réservées aux offres supérieures, comme les liens de partage, cessent de fonctionner jusqu’à un éventuel retour à une offre supérieure. **Vais-je perdre mes templates si je passe à une offre inférieure ?** Non. Vos templates ne sont jamais supprimés lors d’un changement d’offre. Seuls les documents générés sont affectés par les changements de rétention. **Comment la proratisation est-elle calculée lors d’un passage à une offre supérieure ?** La proratisation est gérée par Stripe. Lors d’un passage à une offre supérieure en cours de cycle, le temps inutilisé de votre ancienne offre est crédité et le coût proportionnel de la nouvelle offre est facturé pour les jours restants du cycle. Les montants exacts apparaissent comme des lignes distinctes sur votre prochaine facture. --- # Pourquoi mon Document PDFMonkey est-il vide ? Source: https://pdfmonkey.io/fr/docs/depannage/le-document-est-vide.md Un document vide signifie généralement que PDFMonkey a généré le document avec succès, mais que le résultat ne contient aucun contenu visible. La cause la plus fréquente est un template non publié. ## Le template n’est pas publié {#template-not-published} C’est de loin la cause la plus courante. Les templates PDFMonkey possèdent deux versions de leur contenu : un **brouillon** (ce que vous éditez) et une version **publiée** (ce que PDFMonkey utilise pour générer les documents). Si vous n’avez jamais cliqué sur **Publish**, le contenu publié est vide et chaque document généré à partir de ce template sera vierge. ### Comment corriger {#fix-unpublished-template} 1. Ouvrez votre template dans l’éditeur (Dashboard ou Builder). 2. Cliquez sur le bouton **Publish**. 3. Relancez la génération du document. > [!WARNING] > **Publiez après chaque modification** > > Cliquer sur **Publish** copie le brouillon actuel vers la version publiée. Si vous modifiez votre template sans republier, les documents continuent d’utiliser l’ancien contenu publié. Pensez toujours à publier après avoir effectué des modifications que vous souhaitez voir apparaître dans les documents générés. Pour un guide complet du workflow template-vers-document, consultez [De zéro à votre premier Document](https://pdfmonkey.io/fr/docs/premiers-pas/de-zero-a-votre-premier-document.md). ## La logique conditionnelle masque tout le contenu {#conditional-logic} Si votre template enveloppe le contenu dans des blocs conditionnels, le résultat peut être vide lorsque les conditions ne sont pas remplies. **Les templates Code** utilisent la syntaxe Liquid : ```liquid {% if items.size > 0 %} {% endif %} ``` Si `items` est absent du payload ou est un tableau vide, rien ne s’affiche. **Les templates Builder** utilisent des règles de visibilité sur les composants. Si une condition de visibilité s’évalue à faux pour chaque composant, la page apparaît vide. ### Comment corriger {#fix-conditional-logic} - Comparez les noms de variables dans vos conditions avec les clés de votre [payload](https://pdfmonkey.io/fr/docs/modeles-code/definir-des-donnees-dynamiques.md). Une faute de frappe ou une différence de casse (`Items` au lieu de `items`) fait échouer la condition silencieusement. - Testez avec le payload que vous envoyez réellement, pas uniquement les données de test du template. - Supprimez temporairement les conditions pour vérifier que le contenu s’affiche sans elles, puis réintroduisez-les une par une. ## Une erreur JavaScript ou d’expression dans un template Builder {#builder-js-error} Les templates Builder peuvent échouer silencieusement lorsqu’ils contiennent une erreur à l’exécution. Deux scénarios courants : - **Bibliothèques JavaScript externes ou code personnalisé dans des blocs HTML.** Si un script lève une erreur non interceptée, le rendu peut s’interrompre et produire un document vide. - **Erreurs de syntaxe dans les conditions ou les répétitions.** Une faute de frappe dans une condition de visibilité ou une expression de répétition (par exemple une parenthèse manquante ou une variable mal orthographiée) empêche le composant de s’évaluer, ce qui peut produire un résultat vide. ### Comment corriger {#fix-builder-js-error} 1. Ouvrez le template dans le Builder et vérifiez l’**aperçu**. Si l’aperçu lui-même est vide ou cassé, l’erreur se trouve dans la logique du template. 2. Examinez les **blocs HTML** contenant des balises `