{
  "id": "",
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "name": "Verified Corporate Training Certificate with CEUs",
  "tags": [
    {
      "id": "BPzhQdipnO0Tjdq6",
      "name": "automation",
      "createdAt": "2025-10-22T13:59:37.916Z",
      "updatedAt": "2025-10-22T13:59:37.916Z"
    },
    {
      "id": "GQud9hERPXmNNU0h",
      "name": "events",
      "createdAt": "2025-11-19T11:24:41.582Z",
      "updatedAt": "2025-11-19T11:24:41.582Z"
    },
    {
      "id": "fYwexpLkx0FjnL3x",
      "name": "media",
      "createdAt": "2025-11-19T11:24:41.557Z",
      "updatedAt": "2025-11-19T11:24:41.557Z"
    },
    {
      "id": "nm4Q6c2AuUgddkeM",
      "name": "badges",
      "createdAt": "2025-11-19T11:24:41.569Z",
      "updatedAt": "2025-11-19T11:24:41.569Z"
    }
  ],
  "nodes": [
    {
      "id": "9d064507-3406-493e-836e-b16c81ad324b",
      "name": "Webhook Trigger",
      "type": "n8n-nodes-base.webhook",
      "position": [
        528,
        288
      ],
      "parameters": {
        "path": "ceu-certificate",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 1
    },
    {
      "id": "8107e3ae-b4bb-4a9b-9ab3-843525bfe943",
      "name": "Validate Required Fields",
      "type": "n8n-nodes-base.if",
      "position": [
        752,
        288
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json.body.name}}",
              "operation": "isNotEmpty"
            },
            {
              "value1": "={{$json.body.email}}",
              "operation": "isNotEmpty"
            },
            {
              "value1": "={{$json.body.courseTitle}}",
              "operation": "isNotEmpty"
            },
            {
              "value1": "={{$json.body.CEUsEarned}}",
              "operation": "isNotEmpty"
            },
            {
              "value1": "={{$json.body.completionDate}}",
              "operation": "isNotEmpty"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "098338dc-abfd-4b12-b03d-4a9487f9a19d",
      "name": "Stop: Incomplete Data",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        960,
        480
      ],
      "parameters": {
        "options": {
          "responseCode": 400
        },
        "respondWith": "json",
        "responseBody": "={\"success\": false, \"error\": \"Missing required fields\", \"message\": \"Please provide name, email, courseTitle, CEUsEarned, and completionDate\"}"
      },
      "typeVersion": 1
    },
    {
      "id": "5f95d17f-040d-49d4-8b8c-f6a49ebf039c",
      "name": "Check Domain Verified",
      "type": "n8n-nodes-base.if",
      "position": [
        1136,
        272
      ],
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json.valid }}",
              "value2": true
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "29ef1e50-241e-4c02-bc29-f803cec709b6",
      "name": "Stop: Domain Not Verified",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1392,
        480
      ],
      "parameters": {
        "options": {
          "responseCode": 400
        },
        "respondWith": "json",
        "responseBody": "={\"success\": false, \"error\": \"Invalid email\", \"message\": \"The provided email address could not be verified or is from a disposable domain\"}"
      },
      "typeVersion": 1
    },
    {
      "id": "43662678-2cfd-42fc-9023-f37696269795",
      "name": "Upload to Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        2016,
        256
      ],
      "parameters": {
        "name": "=CEU_Certificate_{{ $('Webhook Trigger').item.json.body.name.replace(/\\s+/g, '_')}}_{{ $('Generate Certificate ID & QR').item.json.certificateId }}.png",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive",
          "cachedResultName": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "root",
          "cachedResultUrl": "https://drive.google.com/drive",
          "cachedResultName": "YOUR_FOLDER_NAME"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "1e3c0f8b-74d5-42df-822a-f04ce0d2c752",
      "name": "Notify Organizers (Slack)",
      "type": "n8n-nodes-base.slack",
      "position": [
        2416,
        256
      ],
      "parameters": {
        "text": "=New CEU Certificate Issued\n\u2022 Recipient: John Smith\n\u2022 Course: Advanced Project Management\u2022 CEUs: 3.5  \u2022  Hours: 35\n\nCertificate ID                    Issued On\nCERT-CEU-1763553796549-VNDQJ6     November 19, 2025\n\n{{ $('HTML to PDF').item.json.pdf_url }}\n[ View Certificate PDF ]\n\nSent automatically \u2022 2:15 PM \u2022 n8n CEU Bot",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_CHANNEL_ID",
          "cachedResultName": "YOUR_CHANNEL_NAME"
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "1dc79c9a-895a-471b-8f25-e8a90c20ca42",
      "name": "Log to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2624,
        256
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "={{ $('Webhook Trigger').item.json.body.name }}",
            "Email": "={{ $('Webhook Trigger').item.json.body.email }}",
            "Status": "Issued",
            "PDF URL": "={{ $('HTML to PDF').item.json.pdf_url }}",
            "Timestamp": "={{new Date().toISOString()}}",
            "CEUs Earned": "={{ $('Webhook Trigger').item.json.body.CEUsEarned }}",
            "Course Title": "={{ $('Webhook Trigger').item.json.body.courseTitle }}",
            "Certificate ID": "={{ $('Generate Certificate ID & QR').item.json.certificateId }}",
            "Training Hours": "={{$('Webhook Trigger').item.json.body.trainingHours || 'N/A'}}",
            "Completion Date": "={{ $('Webhook Trigger').item.json.body.completionDate }}",
            "Instructor Name": "={{ $('Webhook Trigger').item.json.body.instructorName }}",
            "Verification URL": "={{ $('Generate Certificate ID & QR').item.json.verificationUrl }}",
            "Company / Provider": "={{ $('Webhook Trigger').item.json.body.companyName }}"
          },
          "schema": [
            {
              "id": "Timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Course Title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Course Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CEUs Earned",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "CEUs Earned",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Training Hours",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Training Hours",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Completion Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Completion Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Certificate ID",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Certificate ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Verification URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Verification URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "PDF URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "PDF URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Instructor Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Instructor Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company / Provider",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Company / Provider",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_DOCUMENT_ID/edit#gid=0",
          "cachedResultName": "YOUR_SHEET_NAME"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_DOCUMENT_ID/edit?usp=drivesdk",
          "cachedResultName": "YOUR_DOCUMENT_NAME"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "8ab2756a-1239-459b-b9f6-6ec9fd6312f7",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2848,
        256
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={\n  \"success\": true,\n  \"message\": \"CEU Certificate generated and sent successfully\",\n  \"certificateId\": \"{{ $('Generate Certificate ID & QR').item.json.certificateId }}\",\n  \"certificateUrl\": \"{{ $('HTML to PDF').item.json.pdf_url }}\",\n  \"driveUrl\": \"{{$('Upload to Google Drive').item.json.webViewLink}}\"\n}"
      },
      "typeVersion": 1
    },
    {
      "id": "086482ae-80f3-4058-848c-497a6774dcbc",
      "name": "Verifi Email",
      "type": "n8n-nodes-verifiemail.verifiEmail",
      "position": [
        944,
        272
      ],
      "parameters": {
        "email": "={{ $json.body.email }}"
      },
      "credentials": {
        "verifiEmailApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4f25bfb0-1934-4d2b-94e6-f0c9d898d13d",
      "name": "HTML to PDF",
      "type": "n8n-nodes-htmlcsstopdf.htmlcsstopdf",
      "position": [
        1584,
        256
      ],
      "parameters": {
        "html_content": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<title>CEU Certificate - {{ $json.certificateId }}</title>\n<style>\n@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700&family=Open+Sans:wght@400;600&display=swap');\nbody{margin:0;padding:40px;background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);font-family:'Open Sans',sans-serif;display:flex;justify-content:center;align-items:center;min-height:100vh}\n.certificate{width:1200px;height:900px;background:white;border-radius:20px;box-shadow:0 30px 80px rgba(0,0,0,0.4);padding:80px;position:relative;overflow:hidden}\n.title{font-family:'Playfair Display',serif;font-size:56px;color:#2d3748;margin:0;text-align:center}\n.subtitle{font-size:24px;color:#718096;text-transform:uppercase;letter-spacing:4px;text-align:center;margin-top:10px}\n.recipient{font-size:48px;font-weight:bold;color:#5a67d8;text-align:center;margin:40px 0 20px}\n.course{font-size:32px;font-weight:600;color:#2d3748;text-align:center;margin:30px 0}\n.details{text-align:center;font-size:20px;line-height:1.8;color:#4a5568}\n.ceu-box{background:#f7fafc;border:3px solid #5a67d8;border-radius:12px;padding:25px 50px;margin:40px auto;display:inline-block;text-align:center}\n.ceu-value{font-size:48px;font-weight:bold;color:#5a67d8;margin:0}\n.footer{position:absolute;bottom:80px;left:80px;right:80px;display:flex;justify-content:space-between;align-items:flex-end}\n.qr-code{width:140px;height:140px;border:10px solid white;box-shadow:0 6px 20px rgba(0,0,0,0.2);border-radius:8px}\n.cert-id{position:absolute;bottom:40px;left:0;right:0;text-align:center;font-size:14px;color:#718096}\n</style>\n</head>\n<body>\n<div class=\"certificate\">\n\n  <div style=\"text-align:center;margin-bottom:40px\">\n    <h1 class=\"title\">Certificate of Completion</h1>\n    <p class=\"subtitle\">Continuing Education Units (CEUs)</p>\n  </div>\n\n  <p style=\"text-align:center;font-size:20px;color:#718096\">This certifies that</p>\n  <h2 class=\"recipient\">{{ $('Webhook Trigger').item.json.body.name }}</h2>\n\n  <div class=\"details\">\n    <p>has successfully completed the training course</p>\n    <p class=\"course\">{{ $('Webhook Trigger').item.json.body.courseTitle }}</p>\n    <p>on {{ $('Webhook Trigger').item.json.body.completionDate.split(\"-\")[1] + \"/\" + $('Webhook Trigger').item.json.body.completionDate.split(\"-\")[2] + \"/\" + $('Webhook Trigger').item.json.body.completionDate.split(\"-\")[0] }}</p>\n  </div>\n\n  <div class=\"ceu-box\">\n    <p style=\"margin:0;color:#718096\">Awarded</p>\n    <p class=\"ceu-value\">{{ $('Webhook Trigger').item.json.body.CEUsEarned }} CEUs</p>\n    <p style=\"margin:0;color:#718096\">{{ $('Webhook Trigger').item.json.body.trainingHours || \"\u2014\" }} Contact Hours</p>\n  </div>\n\n  <div class=\"footer\">\n    <div>\n      <p style=\"margin:0;font-weight:600\">{{$('Webhook Trigger').item.json.body.instructorName  || \"Training Director\" }}</p>\n      <p style=\"margin:0;font-size:14px;color:#718096\">Instructor / Program Director</p>\n    </div>\n\n    <div style=\"text-align:center\">\n      <img src=\"{{ $json.qrCodeUrl }}\" class=\"qr-code\" alt=\"Verification QR Code\" />\n      <p style=\"margin:4px 0 0;font-size:11px;color:#666\">Scan to verify authenticity</p>\n    </div>\n\n    <div style=\"text-align:right\">\n      <p style=\"margin:0;font-weight:600\">{{ $('Webhook Trigger').item.json.body.companyName || \"Your Organization\" }}</p>\n      <p style=\"margin:0;font-size:14px;color:#718096\">Accredited Provider</p>\n    </div>\n  </div>\n\n  <div class=\"cert-id\">\n    Certificate ID: <strong>{{ $json.certificateId }}</strong> \u2022 \n    Issued: {{ $now.toFormat(\"MMMM d, yyyy\") }} \u2022 \n    Valid until: {{ $now.plus({years: 2}).toFormat(\"MMMM d, yyyy\") }}\n  </div>\n\n</div>\n</body>\n</html>"
      },
      "credentials": {
        "htmlcsstopdfApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2266119e-b1a5-4472-b993-d47a8bdc3224",
      "name": "Download File",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1792,
        256
      ],
      "parameters": {
        "url": "={{ $json.pdf_url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "be72ef00-997a-4826-82b9-c76ffca52cd3",
      "name": "Generate Certificate ID & QR",
      "type": "n8n-nodes-base.function",
      "position": [
        1360,
        256
      ],
      "parameters": {
        "functionCode": "// SINGLE CODE NODE \u2192 Certificate ID + QR Code (perfect for n8n 1.117.3)\nconst body = items[0].json.body;\n\n// Generate Certificate ID\nconst certId = `CERT-CEU-${Date.now()}-${Math.random().toString(36).substr(2, 6).toUpperCase()}`;\nconst verificationUrl = `https://training.verify.com/cert?id=${certId}`;\n\n// Direct QR code URL from qrserver.com\nconst qrCodeUrl = `https://api.qrserver.com/v1/create-qr-code/?size=300x300&format=png&margin=10&data=${encodeURIComponent(verificationUrl)}`;\n\nreturn [\n  {\n    json: {\n      ...body,\n      certificateId: certId,\n      verificationUrl: verificationUrl,\n      qrCodeUrl: qrCodeUrl,\n      generatedAt: new Date().toISOString()\n    },\n    // This tells n8n to download the QR image automatically and embed it\n    binary: {\n      qrCode: {\n        data: qrCodeUrl,\n        mimeType: \"image/png\",\n        fileName: `${certId}-QR.png`,\n        fileExtension: \"png\"\n      }\n    }\n  }\n];"
      },
      "typeVersion": 1
    },
    {
      "id": "b93f81d0-b3eb-47ca-8c64-ea81b39c4e98",
      "name": "Send Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2208,
        256
      ],
      "parameters": {
        "sendTo": "={{ $('Webhook Trigger').item.json.body.email }}",
        "message": "=<div style=\"font-family: Arial, sans-serif; max-width: 600px; margin: 40px auto; background: #ffffff; border-radius: 16px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.1);\">\n  \n  <!-- Header -->\n  <div style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 40px 30px; text-align: center; color: white;\">\n    <h1 style=\"margin:0; font-size: 28px; font-weight: 600;\">Certificate Awarded</h1>\n    <p style=\"margin:8px 0 0; font-size: 18px; opacity: 0.95;\">Congratulations on your achievement!</p>\n  </div>\n\n  <!-- Body -->\n  <div style=\"padding: 40px 30px; color: #333; line-height: 1.7;\">\n    \n    <p style=\"font-size: 17px; margin-bottom: 20px;\">\n      Dear <strong>{{ $('Webhook Trigger').item.json.body.name }}</strong>,\n    </p>\n\n    <p style=\"font-size: 16px;\">\n      We are delighted to inform you that you have successfully completed the training program:\n    </p>\n\n    <div style=\"background: #f8f5ff; padding: 20px; border-radius: 12px; border-left: 5px solid #764ba2; margin: 25px 0; font-size: 18px; text-align: center;\">\n      <strong>{{ $('Webhook Trigger').item.json.body.courseTitle }}</strong>\n    </div>\n\n    <!-- Certificate Details -->\n    <div style=\"background: #f9f9f9; padding: 20px; border-radius: 12px; margin: 30px 0;\">\n      <h3 style=\"margin: 0 0 15px; color: #764ba2; font-size: 18px;\">Certificate Details</h3>\n      <table style=\"width: 100%; font-size: 15px; color: #444;\">\n        <tr>\n          <td style=\"padding: 8px 0; font-weight: 600;\">Certificate ID</td>\n          <td style=\"text-align: right;\">{{ $('Generate Certificate ID & QR').item.json.certificateId }}</td>\n        </tr>\n        <tr>\n          <td style=\"padding: 8px 0; font-weight: 600;\">CEUs Earned</td>\n          <td style=\"text-align: right;\">{{ $('Webhook Trigger').item.json.body.CEUsEarned }} CEUs</td>\n        </tr>\n        <tr>\n          <td style=\"padding: 8px 0; font-weight: 600;\">Completion Date</td>\n          <td style=\"text-align: right;\">\n            {{ $('Webhook Trigger').item.json.body.completionDate.split(\"-\")[2] + \"/\" + \n               $('Webhook Trigger').item.json.body.completionDate.split(\"-\")[1] + \"/\" + \n               $('Webhook Trigger').item.json.body.completionDate.split(\"-\")[0] }}\n          </td>\n        </tr>\n        <tr>\n          <td style=\"padding: 8px 0; font-weight: 600;\">Contact Hours</td>\n          <td style=\"text-align: right;\">{{ $('Webhook Trigger').item.json.body.trainingHours || \"\u2014\" }}</td>\n        </tr>\n      </table>\n    </div>\n\n    <!-- Download Button -->\n    <div style=\"text-align: center; margin: 35px 0;\">\n      <a href=\"{{ $('HTML to PDF').item.json.pdf_url }}\" \n         target=\"_blank\"\n         style=\"background: #764ba2; color: white; font-weight: bold; font-size: 17px; padding: 16px 40px; border-radius: 50px; text-decoration: none; display: inline-block; box-shadow: 0 8px 20px rgba(118,75,162,0.4);\">\n        Download Your Certificate (PDF)\n      </a>\n    </div>\n\n    <p style=\"font-size: 14px; color: #777; text-align: center; margin-top: 30px;\">\n      Your certificate has been securely issued and is ready for printing or sharing.\n    </p>\n  </div>\n\n  <!-- Footer -->\n  <div style=\"background: #f8f9fa; padding: 20px; text-align: center; font-size: 13px; color: #888; border-top: 1px solid #eee;\">\n    Issued on {{ $now.toFormat(\"MMMM d, yyyy\") }} \u2022 Certificate ID: {{ $('Generate Certificate ID & QR').item.json.certificateId }}<br>\n    This is an automated message. Please do not reply.\n  </div>\n</div>",
        "options": {
          "appendAttribution": false
        },
        "subject": "=\u2705 Your CEU Certificate - {{ $('Webhook Trigger').item.json.body.courseTitle }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "f8f78383-859a-4395-b326-be9f7406d692",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        48
      ],
      "parameters": {
        "width": 448,
        "height": 368,
        "content": "# How It Works\n\n## **Verified Corporate Training Certificate with CEUs**\n\nAutomates secure, verifiable CEU certificate generation for corporate training.\n\nFeatures:\n\u2022 Real-time email validation\n\u2022 Unique Certificate ID + QR code\n\u2022 Professional PDF certificate\\n\u2022 Auto-email delivery + Slack notification\n\u2022 Full audit log in Google Sheets"
      },
      "typeVersion": 1
    },
    {
      "id": "6b634261-859a-4e5e-824b-66656ef038e6",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        464
      ],
      "parameters": {
        "width": 336,
        "height": 400,
        "content": "# Setup Credentials \n## Setup Steps (One-time)\n\n1. Connect credentials:\n\u2022 Verif.Email API at verifi.email\n\u2022 https://pdfmunk.com\n\u2022 Google Drive + Gmail\n\u2022 Google Sheets\n\u2022 Slack (optional)\n\n2. Update: \n\u2022 Webhook URL in your forms\n\u2022 Company name & logo in HTML template\n\u2022 Google Sheets ID & tab name\n\n3. Activate workflow \u2192 ready!"
      },
      "typeVersion": 1
    },
    {
      "id": "ad394608-8aa3-4123-a3c5-0a8ad127be46",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        496,
        48
      ],
      "parameters": {
        "color": 5,
        "width": 784,
        "height": 368,
        "content": "# Validation\n\n## **Data Reception & Validation**\n\n* Accepts POST from any form/tool\n* Checks all required fields\n* Validates email deliverability (MX + disposable check)\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0ac7497b-8134-48b6-8078-45d2687be00a",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1296,
        0
      ],
      "parameters": {
        "color": 5,
        "width": 624,
        "height": 400,
        "content": "# Generation\n\n## Certificate Generation\n\n* Generates unique Certificate ID\n* Creates QR code for verification\n* Renders beautiful PDF certificate via HTML  \u2192 PDF\n* Downloads pdf URL to Binary File\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a84cb6f5-cb07-437a-bf89-90d455fe3979",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1952,
        -16
      ],
      "parameters": {
        "color": 5,
        "width": 1120,
        "height": 432,
        "content": "# Delivery\n\n## Distribution & Logging\n\n* Uploads to Google Drive\n* Sends personalized email with PDF\n* Notifies team via Slack\n* Logs everything to Google Sheets\n* Returns success to webhook"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "",
  "connections": {
    "Send Email": {
      "main": [
        [
          {
            "node": "Notify Organizers (Slack)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML to PDF": {
      "main": [
        [
          {
            "node": "Download File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verifi Email": {
      "main": [
        [
          {
            "node": "Check Domain Verified",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download File": {
      "main": [
        [
          {
            "node": "Upload to Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Validate Required Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log to Google Sheets": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Domain Verified": {
      "main": [
        [
          {
            "node": "Generate Certificate ID & QR",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Stop: Domain Not Verified",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload to Google Drive": {
      "main": [
        [
          {
            "node": "Send Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Required Fields": {
      "main": [
        [
          {
            "node": "Verifi Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Stop: Incomplete Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify Organizers (Slack)": {
      "main": [
        [
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Certificate ID & QR": {
      "main": [
        [
          {
            "node": "HTML to PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}