{"id":1774,"date":"2025-11-25T16:08:18","date_gmt":"2025-11-25T16:08:18","guid":{"rendered":"https:\/\/paoloronco.it\/?p=1774"},"modified":"2025-12-03T16:05:06","modified_gmt":"2025-12-03T16:05:06","slug":"n8n-template-certification-creator-checker","status":"publish","type":"post","link":"https:\/\/paoloronco.it\/en\/n8n-template-certification-creator-checker\/","title":{"rendered":"[n8n-template] Certification Creator &amp; Checker"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This Guide contains a complete <strong>end-to-end certification management system built with n8n<\/strong>.It automates the entire lifecycle of a digital certificate \u2014 from creation, to PDF generation, to verification via API or a user-friendly HTML page.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-style-default\"><img decoding=\"async\" src=\"https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/11\/Workflow-image.png\" alt=\"\" class=\"wp-image-1865\"\/><\/figure>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/11\/Example-Certificate.pdf\" type=\"application\/pdf\" style=\"width:100%;height:457px\" aria-label=\"Embed of Example-Certificate.\"><\/object><a id=\"wp-block-file--media-5858a8b5-5a40-4040-96d1-2af861788671\" href=\"https:\/\/paoloronco.it\/wp-content\/uploads\/2025\/11\/Example-Certificate.pdf\">Example-Certificate<\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">See all my workflows on Github <a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\">paoloronco\/n8n-templates<\/a><br>Video: YouTube &#8211; <a href=\"https:\/\/youtu.be\/A7aKK0Z9n9A\">Certificate Creator &amp; Validator<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See the workflow on n8n Creators hub: [coming soon]<\/p>\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<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udf93 1. Certificate Creation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Automatically generates a fully personalized certificate when a new request is received:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Accepts candidate data via a <strong>POST webhook<\/strong> (<code>\/certifications<\/code>)<\/li>\n\n\n\n<li>Reads: <strong>name<\/strong>, <strong>surname<\/strong>, <strong>course<\/strong>, <strong>email<\/strong><\/li>\n\n\n\n<li>Produces a <strong>unique Certification ID<\/strong> using a custom generation algorithm<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\uddc2 2. Data Storage<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Stores each issued certificate in an <strong>n8n Data Table<\/strong>, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Candidate First Name<\/li>\n\n\n\n<li>Candidate Last Name<\/li>\n\n\n\n<li>Certification ID<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This creates a persistent, searchable certification registry.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\uddfe 3. PDF Certificate Generation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Builds a professional certificate PDF using <strong>PDF Generator API<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fully customizable HTML template<\/li>\n\n\n\n<li>Inserts candidate data, course name, certification ID, and date<\/li>\n\n\n\n<li>Outputs the final document as <code>document.pdf<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2709\ufe0f 4. Email Delivery<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Automatically sends the generated certificate to the candidate:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uses <strong>Gmail OAuth2<\/strong><\/li>\n\n\n\n<li>Includes the PDF as an attachment<\/li>\n\n\n\n<li>Sends a clean, customizable confirmation message<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd0d 5. Certificate Verification<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Provides a secure verification system through:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A <strong>public API endpoint<\/strong> (<code>\/certificationscheck<\/code>)<\/li>\n\n\n\n<li>Response includes:<\/li>\n\n\n\n<li>Validation status<\/li>\n\n\n\n<li>Candidate name + surname (if valid)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udf10 6. Verification Mini-Website<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Includes a ready-to-use HTML page for certificate lookup:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>User enters Certification ID<\/li>\n\n\n\n<li>Page queries your <code>certificationscheck<\/code> endpoint<\/li>\n\n\n\n<li>Displays whether the certificate is valid<\/li>\n\n\n\n<li>Shows the candidate\u2019s name if found<\/li>\n\n\n\n<li>Fully customizable (branding, style, messages)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">File included in the repo:<strong><code>Cerification_Check.html<\/code><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">In short, this workflow automates:\u2714 Certificate generation\u2714 Certificate storage\u2714 Certificate validation\u2714 PDF production\u2714 Email distribution\u2714 Public verification interface<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Together, these features form a complete, production-ready certificate management platform powered by n8n.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udee0 Requirements<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before using this workflow, you must have:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>n8n instance<\/strong>(Cloud or self-hosted)<\/li>\n\n\n\n<li><strong>n8n Data Table<\/strong> with ID fields:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Name<\/code> (string)<\/li>\n\n\n\n<li><code>Surname<\/code> (string)<\/li>\n\n\n\n<li><code>CertificationID<\/code> (string)<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>PDF Generator API account<\/strong>Credentials set in n8n as <code>pdfGeneratorApi<\/code>.<\/li>\n\n\n\n<li><strong>Gmail OAuth2 credentials<\/strong>Configured in n8n as <code>gmailOAuth2<\/code>.<\/li>\n\n\n\n<li>Ability to call <strong>HTTP POST endpoints<\/strong> from your website, backend, forms, etc.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\ude80 Installation<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Import workflow<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In n8n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to <strong>Workflows \u2192 Import<\/strong><\/li>\n\n\n\n<li>Paste the JSON provided in this repository<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Configure Data Table<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Update the following nodes to point to your Data Table:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Insert_Certificaton<\/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<p class=\"wp-block-paragraph\">Make sure the Data Table has the fields:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Field<\/th><th>Type<\/th><\/tr><\/thead><tbody><tr><td>Name<\/td><td>string<\/td><\/tr><tr><td>Surname<\/td><td>string<\/td><\/tr><tr><td>CertificationID<\/td><td>string<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Configure Credentials<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In the workflow:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Node <strong>Generate_PDF<\/strong> \u2192 set PDF Generator API credentials<\/li>\n\n\n\n<li>Node <strong>Email_Certification<\/strong> \u2192 set Gmail OAuth2 credentials<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Activate Workflow<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Click <strong>Activate<\/strong> in n8n.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udd27 How the Workflow Works<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 1. Webhook: Certificate Creation (<code>\/certifications<\/code>)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The workflow starts with:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>POST https:\/\/YOUR-N8N-DOMAIN.com\/webhook\/certification Headers: name: John surname: Doe course: Advanced n8n email: john.doe@example.com<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The webhook passes these headers to the next nodes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 2. Generate_Certification_ID (Code Node)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">JavaScript used:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const uniqueId =\n  Date.now().toString(36).toUpperCase() +\n  Math.random().toString(36).substring(2, 8).toUpperCase();\n\nreturn &#91;{ id: uniqueId }];<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Produces something like:<code>LQ4Z5H8R2A1F<\/code><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 3. Check if ID already exists<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The workflow uses:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Find_Certification_By_ID<\/code><\/li>\n\n\n\n<li><code>Certification_ID_Exists<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If the ID <strong>already exists<\/strong>, it loops back and generates a new one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the ID is <strong>unique<\/strong>, the workflow continues.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 4. Insert certification in Data Table<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Saves:<\/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>Unique ID<\/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\udd39 5. Generate PDF Certificate<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Using the PDF Generator API, the workflow builds a certificate from an <strong>HTML template<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>default HTML provided in the workflow is just an example<\/strong> and can be fully customized.You can freely change:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Layout and structure (containers, sections, alignment)<\/li>\n\n\n\n<li>Colors, fonts, borders, and background<\/li>\n\n\n\n<li>Logos, images, and branding elements<\/li>\n\n\n\n<li>Text content (titles, subtitles, messages)<\/li>\n\n\n\n<li>Additional placeholders\/fields<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">By default, the example template includes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Candidate name<\/li>\n\n\n\n<li>Course title<\/li>\n\n\n\n<li>Unique Certification ID<\/li>\n\n\n\n<li>Current date<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">After the HTML is rendered, this node generates a PDF file and outputs it as <code>binary.document.pdf<\/code>, which is then attached to the email in the next step.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 6. Send Certificate via Gmail<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The workflow sends an email with:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Subject:<\/strong> <code>Your certification is ready!<\/code><strong>Attachment:<\/strong> the generated <code>document.pdf<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The recipient is the email provided to the webhook.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udd0d Certificate Verification (<code>\/certificationscheck<\/code>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The workflow provides two different ways to verify the authenticity of a certificate:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 1. Manual API Request<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can verify a certificate by sending a manual HTTP request:&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>POST \/certificationscheck Headers: id: CERTIFICATION-ID-HERE<\/code><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">API Logic:<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>Find_Certification_By_ID1<\/code> searches the Data Table for the ID<\/li>\n\n\n\n<li><code>Certification_Exists<\/code> checks if a match exists<\/li>\n\n\n\n<li>Returns JSON:<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">If found:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><code>{ \"ok\": \"true\", \"name\": \"John\", \"surname\": \"Doe\" }<\/code><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">If NOT found:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><code>{ \"ok\": \"false\" }<\/code><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83c\udf10 Using This on Your Website<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The repository also includes a <strong>ready-to-use verification webpage<\/strong>:<code>Cerification_Check.html<\/code><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Use the correct endpoint URL<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Inside the HTML page, the verification request uses:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>fetch(\"https:\/\/YOUR-N8N-DOMAIN.com\/webhook\/certificationscheck\",<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <strong>YOUR-N8N-DOMAIN.com<\/strong> with the actual domain where your n8n instance is hosted.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This mini site allows users to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enter a Certification ID into a text field<\/li>\n\n\n\n<li>Trigger a verification request with a single click<\/li>\n\n\n\n<li>See the result immediately on-screen<\/li>\n\n\n\n<li>View the certificate holder\u2019s name and surname if the ID is valid<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The page communicates with your <code>\/certificationscheck<\/code> endpoint using JavaScript <code>fetch()<\/code> and behaves exactly like the manual API request \u2014 but in a clean, simple interface.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">What you can customize<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Logo and header text<\/li>\n\n\n\n<li>Colors, fonts, and CSS<\/li>\n\n\n\n<li>Button styles and layout<\/li>\n\n\n\n<li>Messages for valid\/invalid IDs<\/li>\n\n\n\n<li>Language and UI text<\/li>\n\n\n\n<li>The endpoint URL (if your n8n instance changes)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This makes it easy to embed certificate verification directly into your website, LMS, or customer portal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">HTML Templates:<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/blob\/main\/free-templates\/3-Certification-Creation%26Validation\/HTML-Files\/Certificate.html\">HTML Certificate Template<\/a><\/strong><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/paoloronco\/n8n-templates\/blob\/main\/free-templates\/3-Certification-Creation%26Validation\/HTML-Files\/Cerification_Check.html\"><strong>HTML Certificate Validator<\/strong><\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This Guide contains a complete end-to-end certification management system built with n8n.It automates the entire lifecycle of a digital certificate \u2014 from creation, to PDF generation, to verification via API or a user-friendly HTML page. See all my workflows on Github paoloronco\/n8n-templatesVideo: YouTube &#8211; Certificate Creator &amp; Validator See the workflow on n8n Creators hub: &hellip; <a href=\"https:\/\/paoloronco.it\/en\/n8n-template-certification-creator-checker\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;[n8n-template] Certification Creator &amp; Checker&#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],"tags":[],"class_list":["post-1774","post","type-post","status-publish","format-standard","hentry","category-n8n-guides"],"_links":{"self":[{"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/posts\/1774","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=1774"}],"version-history":[{"count":2,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/posts\/1774\/revisions"}],"predecessor-version":[{"id":1795,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/posts\/1774\/revisions\/1795"}],"wp:attachment":[{"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/media?parent=1774"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/categories?post=1774"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/paoloronco.it\/en\/wp-json\/wp\/v2\/tags?post=1774"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}