{"id":1802,"date":"2025-12-17T09:46:10","date_gmt":"2025-12-17T09:46:10","guid":{"rendered":"https:\/\/paoloronco.it\/?p=1802"},"modified":"2025-12-17T10:46:58","modified_gmt":"2025-12-17T10:46:58","slug":"n8n-template-certification-creator-checker-with-pdfgenerationapi-templates","status":"publish","type":"post","link":"https:\/\/paoloronco.it\/en\/n8n-template-certification-creator-checker-with-pdfgenerationapi-templates\/","title":{"rendered":"[n8n-template] Certification Creator &amp; Checker with PDFgenerationAPI Templates"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>From a simple MVP to a reusable, production-ready workflow<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It was a real pleasure to connect with <strong>Michal Liska<\/strong>, Chief Operating Officer at <strong>PDF Generator API by Actual Reports<\/strong>, and to see this project featured as a real-world example inside the n8n ecosystem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What started as a simple MVP to automate certificate generation evolved into a reusable, template-based workflow that is now shared with the community. This article documents that evolution, explains how the system works, and shows how you can reuse it in your own environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49 The full story from the PDF Generator API team is available here:<br><a href=\"https:\/\/pdfgeneratorapi.com\/blog\/how-the-n8n-community-sparked-our-new-partnership-program\">https:\/\/pdfgeneratorapi.com\/blog\/how-the-n8n-community-sparked-our-new-partnership-program<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">PDF Template\u2013based Workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This template provides a <strong>complete and reusable solution to automatically create, distribute, and verify digital certificates using n8n<\/strong>, with <strong>PDF Generator API templates<\/strong> for PDF generation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The workflow is designed to cover the <strong>entire lifecycle of a certificate<\/strong>, from the initial request to public verification, in a clean and maintainable way.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is an <strong>MVP<\/strong>, but already <strong>fully functional, tested, and production-ready<\/strong>, and can be reused with minimal configuration in different environments.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"394\" src=\"https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/Workflow-image-1024x394.png\" alt=\"\" class=\"wp-image-1808\" srcset=\"https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/Workflow-image-1024x394.png 1024w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/Workflow-image-300x115.png 300w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/Workflow-image-768x295.png 768w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/Workflow-image-18x7.png 18w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/Workflow-image-1200x462.png 1200w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/Workflow-image-1320x508.png 1320w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/Workflow-image.png 1500w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"Assets\/Example-Certificate.pdf\">Example-certificate<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Visit my Github n8n templates: <a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\">https:\/\/github.com\/paoloronco\/n8n-templates<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See the workflow on n8n Creators hub: <a href=\"coming%20soon\">coming soon<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">What problem this template solves<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In many real-world scenarios, certificates are still:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>generated manually<\/li>\n\n\n\n<li>created with fragile scripts<\/li>\n\n\n\n<li>hard to verify<\/li>\n\n\n\n<li>visually inconsistent<\/li>\n\n\n\n<li>difficult to maintain over time<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This template solves those problems by providing:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>automated certificate creation<\/li>\n\n\n\n<li>a unique and verifiable Certification ID<\/li>\n\n\n\n<li>consistent PDF output using templates<\/li>\n\n\n\n<li>a public verification endpoint<\/li>\n\n\n\n<li>a clear separation between automation logic and visual design<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 What makes this version different<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>YouTube <\/strong>Video: <a href=\"https:\/\/youtu.be\/eqSWoPndVUg\">https:\/\/youtu.be\/eqSWoPndVUg<\/a><a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-what-makes-this-version-different\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This workflow is the&nbsp;<strong>evolution of the original HTML-based version<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why templates instead of HTML?<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#why-templates-instead-of-html\"><\/a><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No HTML inside the workflow<\/li>\n\n\n\n<li>Clean separation between logic and layout<\/li>\n\n\n\n<li>Visual template editor<\/li>\n\n\n\n<li>Easier maintenance and customization<\/li>\n\n\n\n<li>Better collaboration between developers and designers<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The PDF layout is managed\u00a0<strong>entirely through PDF Generator API templates<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"526\" src=\"https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/image-1024x526.png\" alt=\"\" class=\"wp-image-1803\" srcset=\"https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/image-1024x526.png 1024w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/image-300x154.png 300w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/image-768x394.png 768w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/image-1536x789.png 1536w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/image-2048x1052.png 2048w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/image-18x9.png 18w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/image-1200x616.png 1200w, https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/12\/image-1320x678.png 1320w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd0d High-level overview<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-high-level-overview\"><\/a><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The system exposes&nbsp;<strong>two main endpoints<\/strong>:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1\ufe0f\u20e3 Certificate creation<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#1%EF%B8%8F%E2%83%A3-certificate-creation\"><\/a><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/certifications2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Handles:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>candidate input<\/li>\n\n\n\n<li>unique ID generation<\/li>\n\n\n\n<li>data persistence<\/li>\n\n\n\n<li>PDF generation (template-based)<\/li>\n\n\n\n<li>email delivery<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2\ufe0f\u20e3 Certificate verification<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#2%EF%B8%8F%E2%83%A3-certificate-verification\"><\/a><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/certificationscheck<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Allows anyone to verify:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>if a certificate exists<\/li>\n\n\n\n<li>who it belongs to<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd25 What this workflow does<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-what-this-workflow-does\"><\/a><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udf93 1. Certificate creation<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-1-certificate-creation\"><\/a><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Triggered via\u00a0<strong>POST webhook<\/strong>\u00a0(<code>\/certifications2<\/code>)<\/li>\n\n\n\n<li>Accepts candidate data:\n<ul class=\"wp-block-list\">\n<li>name<\/li>\n\n\n\n<li>surname<\/li>\n\n\n\n<li>course<\/li>\n\n\n\n<li>email<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Generates a\u00a0<strong>unique Certification ID<\/strong><\/li>\n\n\n\n<li>Prevents collisions via ID existence checks<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\uddc2 2. Data storage<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-2-data-storage\"><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Each certificate is stored in an&nbsp;<strong>n8n Data Table<\/strong>, creating a persistent registry.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Stored fields:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Name<\/li>\n\n\n\n<li>Surname<\/li>\n\n\n\n<li>CertificationID<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This registry is used both for validation and auditing.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\uddfe 3. PDF generation (Template-based)<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-3-pdf-generation-template-based\"><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The workflow uses&nbsp;<strong>PDF Generator API \u2013 Generate a PDF document<\/strong>&nbsp;node.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of HTML, it sends a&nbsp;<strong>JSON payload<\/strong>&nbsp;that maps directly to template placeholders.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"DueDate\": \"{{$now.toISODate()}}\",\n  \"Candidate\": \"{{$('Webhook_Creation').item.json.headers.name}} {{$('Webhook_Creation').item.json.headers.surname}}\",\n  \"CourseName\": \"{{ $('Webhook_Creation').item.json.headers.course }}\",\n  \"ID\": \"{{ $('Generate_Certification_ID').item.json.id }}\"\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f&nbsp;The JSON must be valid and keys must match the template placeholders exactly.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u2709\ufe0f 4. Email delivery<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#%EF%B8%8F-4-email-delivery\"><\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uses\u00a0<strong>Gmail OAuth2<\/strong><\/li>\n\n\n\n<li>Sends the generated PDF as attachment<\/li>\n\n\n\n<li>Fully customizable subject and body<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd0d 5. Certificate verification<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-5-certificate-verification\"><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The verification endpoint:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/certificationscheck?id=CERTIFICATION-ID<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Returns:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>If valid:<\/strong>\n{\n  \"ok\": true,\n  \"name\": \"John\",\n  \"surname\": \"Doe\"\n}\n\n<strong>If not valid<\/strong>\n\n{\n  \"ok\": false\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This makes certificates&nbsp;<strong>publicly verifiable and tamper-resistant<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 PDF Generator API Template<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-pdf-generator-api-template\"><\/a><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What is included<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#what-is-included\"><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The repository includes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>a ready-to-use\u00a0<strong>PDF Generator API template<\/strong><\/li>\n\n\n\n<li>placeholders such as:\n<ul class=\"wp-block-list\">\n<li><code>{Candidate}<\/code><\/li>\n\n\n\n<li><code>{CourseName}<\/code><\/li>\n\n\n\n<li><code>{DueDate}<\/code><\/li>\n\n\n\n<li><code>{ID}<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">You can freely customize:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>layout<\/li>\n\n\n\n<li>fonts<\/li>\n\n\n\n<li>colors<\/li>\n\n\n\n<li>logos<\/li>\n\n\n\n<li>signatures<\/li>\n\n\n\n<li>date formatting<\/li>\n\n\n\n<li>QR codes<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">No workflow changes are required when updating the template.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udd16 AI-powered template editing (Gemini)<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-ai-powered-template-editing-gemini\"><\/a><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">PDF Generator API provides an&nbsp;<strong>AI Gem powered by Gemini<\/strong>&nbsp;to help users create and refine templates.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49 AI Gem link:&nbsp;<a href=\"https:\/\/gemini.google.com\/gem\/1RrpDHQocP7E7C7Bpsc7yhDT-AkuKNuT_?usp=sharing\">https:\/\/gemini.google.com\/gem\/1RrpDHQocP7E7C7Bpsc7yhDT-AkuKNuT_?usp=sharing<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>describe the layout in natural language<\/li>\n\n\n\n<li>generate or modify templates<\/li>\n\n\n\n<li>iterate faster without manual positioning<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udee0 Requirements<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-requirements\"><\/a><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before importing the workflow, you need:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>n8n instance<\/strong>\u00a0(Cloud or self-hosted)<\/li>\n\n\n\n<li><strong>n8n Data Table<\/strong>\u00a0with fields:\n<ul class=\"wp-block-list\">\n<li><code>Name<\/code>\u00a0(string)<\/li>\n\n\n\n<li><code>Surname<\/code>\u00a0(string)<\/li>\n\n\n\n<li><code>CertificationID<\/code>\u00a0(string)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>PDF Generator API account<\/strong><\/li>\n\n\n\n<li><strong>Gmail OAuth2 credentials<\/strong><\/li>\n\n\n\n<li>Ability to call HTTP webhooks<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Installation<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-installation\"><\/a><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Import the workflow<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#1-import-the-workflow\"><\/a><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to\u00a0<strong>n8n \u2192 Workflows \u2192 Import<\/strong><\/li>\n\n\n\n<li>Paste\u00a0<code>workflow.json<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2. Configure Data Table<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#2-configure-data-table\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Update these nodes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Insert_Certification<\/code><\/li>\n\n\n\n<li><code>Find_Certification_By_ID<\/code><\/li>\n\n\n\n<li><code>Find_Certification_By_ID1<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">3. Configure credentials<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#3-configure-credentials\"><\/a><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PDF Generator API node \u2192 set credentials<\/li>\n\n\n\n<li>Gmail node \u2192 set OAuth2 credentials<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4. Activate the workflow<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#4-activate-the-workflow\"><\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Click&nbsp;<strong>Activate<\/strong>&nbsp;and you\u2019re ready to go.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddea Status: MVP (but production-ready)<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-status-mvp-but-production-ready\"><\/a><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This project started as an MVP, but it is:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>fully functional<\/li>\n\n\n\n<li>tested<\/li>\n\n\n\n<li>modular<\/li>\n\n\n\n<li>easy to extend<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">You can use it&nbsp;<strong>for free<\/strong>, adapt it to your needs, and deploy it in production with minimal changes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udf0d Why this matters<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-why-this-matters\"><\/a><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This repository demonstrates how:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>low-code automation<\/li>\n\n\n\n<li>clean API design<\/li>\n\n\n\n<li>reusable templates<\/li>\n\n\n\n<li>community-driven sharing<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">can produce&nbsp;<strong>real-world, production-grade solutions<\/strong>, not just demos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcce Links<a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/tree\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates#-links\"><\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[n8n workflow on Creators Hub](coming soon)<\/li>\n\n\n\n<li><a href=\"https:\/\/youtu.be\/eqSWoPndVUg\">YouTube Video<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/paoloronco.it\/n8n-template-certification-creator-checker\/\">Project article and documentation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/pdfgeneratorapi.com\/\">PDF Generator API<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/blob\/main\/free-templates\/3a-Certification-Creation%26Validation%20With%20PDF%20Templates\">Template AI Gem<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>From a simple MVP to a reusable, production-ready workflow It was a real pleasure to connect with Michal Liska, Chief Operating Officer at PDF Generator API by Actual Reports, and to see this project featured as a real-world example inside the n8n ecosystem. What started as a simple MVP to automate certificate generation evolved into &hellip; <a href=\"https:\/\/paoloronco.it\/en\/n8n-template-certification-creator-checker-with-pdfgenerationapi-templates\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;[n8n-template] Certification Creator &amp; Checker with PDFgenerationAPI Templates&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,1],"tags":[24],"class_list":["post-1802","post","type-post","status-publish","format-standard","hentry","category-n8n-guides","category-uncategorized","tag-n8n-guides"],"_links":{"self":[{"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/posts\/1802","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/comments?post=1802"}],"version-history":[{"count":3,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/posts\/1802\/revisions"}],"predecessor-version":[{"id":1809,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/posts\/1802\/revisions\/1809"}],"wp:attachment":[{"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/media?parent=1802"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/categories?post=1802"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/tags?post=1802"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}