{"workflow":{"id":14306,"name":"Monitor Kimai project deadlines and budgets with daily email alerts","views":22,"recentViews":1,"totalViews":22,"createdAt":"2026-03-25T08:22:47.573Z","description":"Automatically monitor billable Kimai projects every weekday morning and receive a formatted HTML email when a project deadline is approaching or its hour budget is running low. If nothing requires attention, no email is sent  keeping your inbox clean and focused.\n\n## Who it's for\n\nTeams and freelancers using Kimai to track billable hours who want to stay on top of project deadlines and budget consumption without checking manually every day. Particularly useful for agencies managing multiple concurrent projects with fixed-hour contracts or purchase orders with expiry dates.\n\n## How it works\n\nThe workflow runs Monday–Friday at 9 AM via a Schedule Trigger. It fetches all visible billable projects from Kimai, then, in parallel, retrieves full project details (end date, time budget, customer name) and all timesheet records for each project. Total logged hours are calculated and merged with project data.\n\nEach project is then evaluated: it gets flagged if its end date falls within the next 10 days, or if logged hours have exceeded 80% of the allocated budget. Flagged projects are assigned a color-coded urgency level (expired, urgent, warning, on track, or missing data) and sorted by days remaining.\n\nA rich HTML email is generated with one card per project, showing the deadline status and a visual progress bar for hour consumption. The email is sent only if at least one project qualifies, otherwise the workflow exits silently.\n\n## How to set up\n\n1. Add your Kimai Bearer Token as an HTTP Bearer Auth credential in n8n\n2. Add your SMTP credentials for outgoing email\n3. Replace `https://kimai` with your actual Kimai instance URL in the three HTTP Request nodes and in the email button link inside the `Build Email HTML - Report` node\n4. Update `fromEmail` and `toEmail` in the `Send an Email` node\n\n## Requirements\n\n- Self-hosted or cloud Kimai instance with API access\n- Kimai service account Bearer Token\n- SMTP account for outgoing email\n\n## How to customize\n\n| What | Where |\n|---|---|\n| Days threshold (default: 10) | `Calculate expiration` → line 1 |\n| Budget alert % (default: 80%) | `Calculate expiration` → `getBudgetInfo()` |\n| Schedule | `Every Day at 9:00` trigger node |\n| Sender / recipient email | `Send an Email` node |","workflow":{"meta":{"instanceId":"818525b29b24074724ec33139bff06e9c4d540539f68e12c2e9d31a4397479fd"},"nodes":[{"id":"fc46a11c-cb88-470d-ac28-314a4f911676","name":"Send an Email","type":"n8n-nodes-base.emailSend","position":[2704,176],"webhookId":"d2220fb3-b1a3-4a8f-a135-9955a9070351","parameters":{"html":"={{ $json.html }}","options":{"appendAttribution":false,"allowUnauthorizedCerts":true},"subject":"={{ $json.subject }}","toEmail":"info@example.com","fromEmail":"info@example.com"},"credentials":{"smtp":{"id":"credential-id","name":"SMTP account"}},"typeVersion":2.1},{"id":"51e18cb1-20e1-486a-9ea5-a9c65bb72a27","name":"Every Day at 9:00","type":"n8n-nodes-base.scheduleTrigger","position":[736,256],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 9 * * 1-5"}]}},"typeVersion":1.2},{"id":"f228e077-eae6-4442-abd5-46d713a980ff","name":"GET Projects","type":"n8n-nodes-base.httpRequest","position":[960,256],"parameters":{"url":"https://kimai/api/projects","options":{},"sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpBearerAuth","queryParameters":{"parameters":[{"name":"visible","value":"1"}]}},"credentials":{"httpBearerAuth":{"id":"credential-id","name":"Kimai Service Account"}},"typeVersion":4.2},{"id":"055cc8ac-f30a-4f69-a236-edd0425b58cc","name":"Get only Bilable","type":"n8n-nodes-base.code","position":[1184,256],"parameters":{"jsCode":"const results = [];\n\nfor (const item of $input.all()) {\n  if (item.json.billable === true) {\n    results.push({ json: item.json });\n  }\n}\n\nreturn results;"},"typeVersion":2},{"id":"0e709eaf-f296-4e60-8fa5-20739dd4a9e8","name":"GET Projects Details","type":"n8n-nodes-base.httpRequest","position":[1552,160],"parameters":{"url":"=https://kimai/api/projects/{{$json.id}}","options":{},"authentication":"genericCredentialType","genericAuthType":"httpBearerAuth"},"credentials":{"httpBearerAuth":{"id":"credential-id","name":"Kimai Service Account"}},"typeVersion":4.2},{"id":"0a14fabc-e525-4c78-8291-b1f9dad92492","name":"GET Timesheet Records","type":"n8n-nodes-base.httpRequest","position":[1408,352],"parameters":{"url":"https://kimai/api/timesheets","options":{},"sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpBearerAuth","queryParameters":{"parameters":[{"name":"user","value":"all"},{"name":"project","value":"={{ $json.id }}"},{"name":"size","value":"1+1234567890"}]}},"credentials":{"httpBearerAuth":{"id":"credential-id","name":"Kimai Service Account"}},"typeVersion":4.2},{"id":"3453b9a8-0e24-422b-972f-ad490bdc8fcf","name":"Calculate Budget Uses","type":"n8n-nodes-base.code","position":[1632,352],"parameters":{"jsCode":"const totali = {};\n\nfor (const item of $input.all()) {\n  const projectId = item.json.project?.id ?? item.json.project ?? null;\n  const duration = Number(item.json.duration ?? 0);\n\n  if (!projectId) continue;\n\n  if (!totali[projectId]) {\n    totali[projectId] = 0;\n  }\n\n  totali[projectId] += duration;\n}\n\nconst results = Object.entries(totali)\n  .map(([id, totalSeconds]) => ({\n    json: {\n      id: Number(id),\n      total_seconds: totalSeconds,\n      total_ore: Math.round((totalSeconds / 3600) * 100) / 100\n    }\n  }))\n  .sort((a, b) => a.json.id - b.json.id);\n\nreturn results;"},"typeVersion":2},{"id":"381fbd24-3e48-4d3f-8b92-ae73df6d8456","name":"Combine Data","type":"n8n-nodes-base.merge","position":[1856,256],"parameters":{"mode":"combine","options":{},"joinMode":"enrichInput1","fieldsToMatchString":"id"},"typeVersion":3.2},{"id":"1f697c3b-9d42-4f15-ac8e-98c5b0490a38","name":"Calculate expiration","type":"n8n-nodes-base.code","position":[2080,256],"parameters":{"jsCode":"const daysThreshold = 10;\n\nconst now = new Date();\nconst today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n\nconst msPerDay = 1000 * 60 * 60 * 24;\nconst projects = [];\n\nfunction formatIsoToItalian(isoDate) {\n  if (!isoDate) return null;\n\n  const parts = String(isoDate).split(\"-\");\n  if (parts.length !== 3) return null;\n\n  return `${parts[2]}/${parts[1]}/${parts[0]}`;\n}\n\nfunction getDaysDiff(date) {\n  if (!date) return null;\n  return Math.round((date.getTime() - today.getTime()) / msPerDay);\n}\n\nfunction getUrgency(days) {\n  if (days === null || days === undefined) return \"none\";\n  if (days < 0) return \"expired\";\n  if (days <= 3) return \"high\";\n  if (days <= 7) return \"medium\";\n  return \"low\";\n}\n\nfunction getStatus(days) {\n  if (days === null || days === undefined) return \"not_present\";\n  return days < 0 ? \"expired\" : \"expiring\";\n}\n\nfunction getBudgetInfo(timeBudget, totalSeconds) {\n  if (!timeBudget || timeBudget <= 0) return null;\n\n  const percentage = Math.round((totalSeconds / timeBudget) * 100);\n  const usedHours = Math.round((totalSeconds / 3600) * 100) / 100;\n  const budgetHours = Math.round((timeBudget / 3600) * 100) / 100;\n  const remainingHours = Math.round(((timeBudget - totalSeconds) / 3600) * 100) / 100;\n\n  return {\n    percentage,\n    usedHours,\n    budgetHours,\n    remainingHours,\n    exceeded: percentage >= 100,\n    shouldReport: percentage >= 80\n  };\n}\n\nfor (const item of $input.all()) {\n  const id = item.json.id ?? null;\n  const name = String(item.json.name ?? \"\");\n  const customer = String(item.json.parentTitle ?? \"\");\n\n  const endRaw = item.json.end ?? null;\n\n  let projectDeadline = \"not present\";\n  let projectDeadlineIso = null;\n  let projectDays = null;\n  let projectUrgency = \"none\";\n  let projectStatus = \"not_present\";\n\n  if (endRaw) {\n    const endDate = new Date(`${endRaw}T00:00:00`);\n    if (!isNaN(endDate.getTime())) {\n      projectDeadline = formatIsoToItalian(endRaw) || endRaw;\n      projectDeadlineIso = endRaw;\n      projectDays = getDaysDiff(endDate);\n      projectUrgency = getUrgency(projectDays);\n      projectStatus = getStatus(projectDays);\n    }\n  }\n\n  const timeBudget = Number(item.json.timeBudget ?? 0);\n  const totalSeconds = Number(item.json.total_seconds ?? 0);\n  const budget = getBudgetInfo(timeBudget, totalSeconds);\n\n  const projectShouldReport =\n    projectDays !== null && projectDays >= 0 && projectDays <= daysThreshold;\n\n  const budgetShouldReport =\n    budget !== null && budget.shouldReport;\n\n  const shouldReport =\n    projectShouldReport ||\n    budgetShouldReport;\n\n  if (!shouldReport) {\n    continue;\n  }\n\n  projects.push({\n    id,\n    name,\n    customer,\n\n    project_deadline: projectDeadline,\n    project_deadline_iso: projectDeadlineIso,\n    project_days: projectDays,\n    project_urgency: projectUrgency,\n    project_status: projectStatus,\n\n    budget_set: timeBudget > 0,\n    budget_total_hours: budget ? budget.budgetHours : null,\n    budget_used_hours: budget ? budget.usedHours : null,\n    budget_remaining_hours: budget ? budget.remainingHours : null,\n    budget_percentage: budget ? budget.percentage : null,\n    budget_exceeded: budget ? budget.exceeded : false,\n    budget_should_report: budget ? budget.shouldReport : false\n  });\n}\n\nprojects.sort((a, b) => {\n  const aVal = a.project_days ?? 999999;\n  const bVal = b.project_days ?? 999999;\n  return aVal - bVal;\n});\n\nreturn [\n  {\n    json: {\n      daysThreshold,\n      count: projects.length,\n      projects\n    }\n  }\n];"},"typeVersion":2},{"id":"753c9210-efd8-43bf-993c-6f50799b0dfb","name":"Need Email?","type":"n8n-nodes-base.if","position":[2304,256],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"condition-count","operator":{"type":"number","operation":"gt"},"leftValue":"={{ $json.count }}","rightValue":0}]}},"typeVersion":2},{"id":"a5294383-503e-4c15-a5e7-51e6e3ec0ed8","name":"Build Email HTML - Report","type":"n8n-nodes-base.code","position":[2528,176],"parameters":{"jsCode":"const projects = $json.projects || [];\nconst todayDate = $now.setLocale('en').toFormat('dd LLL yyyy');\nconst count = Number($json.count || 0);\nconst daysThreshold = Number($json.daysThreshold || 10);\n\nconst urgencyConfig = {\n  expired: { color: '#ef4444', background: '#fef2f2', icon: '🚨', label: 'EXPIRED', action: 'TAKE ACTION' },\n  high:    { color: '#f97316', background: '#fff7ed', icon: '🔥', label: 'URGENT', action: 'DUE SOON' },\n  medium:  { color: '#d97706', background: '#fffbeb', icon: '⏳', label: 'WARNING', action: 'TO MONITOR' },\n  low:     { color: '#10b981', background: '#ecfdf5', icon: '✅', label: 'OK', action: 'ON TRACK' },\n  none:    { color: '#6366f1', background: '#f5f3ff', icon: '🔍', label: 'TO CHECK', action: 'MISSING DATA' }\n};\n\nconst escapeHtml = (v) =>\n  String(v ?? '')\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\n\nconst buildStatusBlock = (urgency, date, label) => {\n  const cfg = urgencyConfig[urgency] || urgencyConfig.none;\n  const isMissing = !date || date === 'not present';\n\n  return `\n    <div style=\"background: ${cfg.background}; border-radius: 16px; padding: 14px; border: 1px solid ${cfg.color}${isMissing ? '60' : '20'}; min-height: 80px;\">\n      <div style=\"display: flex; align-items: center; margin-bottom: 6px;\">\n        <span style=\"font-size: 14px; margin-right: 6px;\">${cfg.icon}</span>\n        <span style=\"font-size: 10px; font-weight: 800; color: ${cfg.color}; text-transform: uppercase; letter-spacing: 1px;\">${cfg.label}</span>\n      </div>\n      <div style=\"font-size: 15px; font-weight: 800; color: ${isMissing ? cfg.color : '#1e293b'}; margin-bottom: 2px;\">\n        ${escapeHtml(isMissing ? 'MISSING DATA' : date)}\n      </div>\n      <div style=\"font-size: 11px; color: #64748b; font-weight: 500;\">${escapeHtml(label)}</div>\n    </div>\n  `;\n};\n\nconst buildBudgetBlock = (p) => {\n  if (!p.budget_set) {\n    return `\n      <div style=\"background: #f5f3ff; border-radius: 16px; padding: 16px; border: 1px dashed #6366f1; text-align: center;\">\n        <div style=\"font-size: 14px; margin-bottom: 4px;\">🔍</div>\n        <div style=\"font-size: 11px; font-weight: 800; color: #6366f1; text-transform: uppercase;\">Budget not configured</div>\n        <div style=\"font-size: 10px; color: #64748b; margin-top: 2px;\">Check whether this project should be billable</div>\n      </div>`;\n  }\n\n  const percent = Math.min(Number(p.budget_percentage ?? 0), 100);\n  const isOver = p.budget_exceeded;\n  const color = isOver ? '#ef4444' : (percent > 85 ? '#f97316' : '#3b82f6');\n\n  return `\n    <div style=\"background: #ffffff; border-radius: 16px; padding: 16px; border: 1px solid #e2e8f0;\">\n      <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n        <tr>\n          <td style=\"font-size: 12px; font-weight: 700; color: #1e293b;\">Budget Usage</td>\n          <td align=\"right\" style=\"font-size: 12px; font-weight: 800; color: ${color};\">${p.budget_percentage}%</td>\n        </tr>\n      </table>\n      <div style=\"width: 100%; height: 8px; background: #f1f5f9; border-radius: 10px; margin: 10px 0; overflow: hidden;\">\n        <div style=\"width: ${percent}%; height: 100%; background: ${color}; border-radius: 10px;\"></div>\n      </div>\n      <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n        <tr>\n          <td style=\"font-size: 11px; color: #64748b;\"><strong>${p.budget_used_hours}h</strong> logged</td>\n          <td align=\"right\" style=\"font-size: 11px; color: #64748b;\">Total: <strong>${p.budget_total_hours}h</strong></td>\n        </tr>\n      </table>\n    </div>`;\n};\n\nconst rowsHTML = projects.map((p) => {\n  const projectLabel =\n    p.project_status === 'not_present'\n      ? 'Add the PO deadline'\n      : (p.project_days < 0\n          ? `Expired ${Math.abs(p.project_days)} days ago`\n          : `In ${p.project_days} days`);\n\n  return `\n    <div style=\"margin-bottom: 30px; background: #ffffff; border-radius: 24px; box-shadow: 0 10px 25px rgba(0,0,0,0.05); border: 1px solid #e2e8f0; overflow: hidden;\">\n      <div style=\"padding: 20px; background: linear-gradient(to right, #f8fafc, #ffffff); border-bottom: 1px solid #f1f5f9;\">\n        <div style=\"font-size: 10px; font-weight: 800; color: #3b82f6; text-transform: uppercase; letter-spacing: 1.5px; margin-bottom: 4px;\">${escapeHtml(p.customer)}</div>\n        <div style=\"font-size: 20px; font-weight: 900; color: #0f172a; letter-spacing: -0.5px;\">${escapeHtml(p.name)}</div>\n      </div>\n      \n      <div style=\"padding: 20px;\">\n        <div style=\"font-size: 10px; font-weight: 700; color: #94a3b8; text-transform: uppercase; margin-bottom: 8px;\">Order Deadline (PO)</div>\n        ${buildStatusBlock(p.project_urgency, p.project_deadline, projectLabel)}\n\n        <div style=\"height: 16px;\"></div>\n\n        <div style=\"font-size: 10px; font-weight: 700; color: #94a3b8; text-transform: uppercase; margin-bottom: 8px;\">Hours Monitoring</div>\n        ${buildBudgetBlock(p)}\n      </div>\n    </div>`;\n}).join('');\n\nconst html = `<!DOCTYPE html>\n<html lang=\"en\">\n<body style=\"margin:0; padding:0; background-color:#f8fafc; font-family:'Inter', -apple-system, system-ui, sans-serif;\">\n  <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"background-color: #f8fafc; padding: 40px 10px;\">\n    <tr>\n      <td align=\"center\">\n        <table width=\"600\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"width: 100%; max-width: 600px;\">\n          <tr>\n            <td style=\"padding-bottom: 30px; text-align: center;\">\n              <div style=\"font-size: 12px; font-weight: 800; color: #3b82f6; text-transform: uppercase; letter-spacing: 2px; margin-bottom: 8px;\">Timesheet Analysis</div>\n              <h1 style=\"font-size: 36px; font-weight: 900; color: #0f172a; margin: 0; letter-spacing: -1.5px;\">Deadline Report</h1>\n              <p style=\"font-size: 16px; color: #64748b; margin-top: 10px;\">Detected <strong>${count} projects</strong> to manage or verify.</p>\n            </td>\n          </tr>\n\n          <tr>\n            <td>${rowsHTML}</td>\n          </tr>\n\n          <tr>\n            <td style=\"padding-top: 20px; text-align: center;\">\n              <a href=\"https://kimai.com\" style=\"display: inline-block; background: #0f172a; color: #ffffff; padding: 16px 40px; border-radius: 18px; text-decoration: none; font-weight: 700; font-size: 15px; box-shadow: 0 10px 20px rgba(15,23,42,0.1);\">Open Timesheet &rarr;</a>\n              <div style=\"margin-top: 40px; border-top: 1px solid #e2e8f0; padding-top: 20px; font-size: 12px; color: #94a3b8; letter-spacing: 0.5px;\">\n                Automatically generated on ${todayDate}\n              </div>\n            </td>\n          </tr>\n        </table>\n      </td>\n    </tr>\n  </table>\n</body>\n</html>`;\n\nreturn [\n  {\n    json: {\n      html,\n      subject: `[Timesheet] - Projects Deadline Report`\n    }\n  }\n];"},"typeVersion":2},{"id":"d9e85095-fd10-4ad2-aa0e-15d2a44163d5","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[2016,544],"parameters":{"color":3,"width":224,"height":80,"content":"To Customize the Range of Day to check customize here."},"typeVersion":1},{"id":"e0c4fc70-0a02-47e4-985a-8f30eca5690c","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[640,32],"parameters":{"color":7,"width":256,"height":608,"content":"## 1. Scheduled Start"},"typeVersion":1},{"id":"b7ef4e00-7322-4614-85aa-2d99ef0f5656","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[912,32],"parameters":{"color":7,"width":1072,"height":608,"content":"## 2.  Get Information from Kimai"},"typeVersion":1},{"id":"e70f095a-c231-4a93-b813-ffd7d1acfb46","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[2000,32],"parameters":{"color":7,"width":256,"height":608,"content":"## 3. Check Expiration"},"typeVersion":1},{"id":"59990bba-f5c5-4b4a-8fb0-f845d04e3d8b","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[2272,32],"parameters":{"color":7,"width":624,"height":608,"content":"## 4. Build & Send Email"},"typeVersion":1},{"id":"6aae9924-997a-4887-a127-1a8a35a7fd15","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-144,32],"parameters":{"width":768,"height":608,"content":"# 📅 Kimai — Deadline & Budget Monitor\n\n## Monitors billable Kimai projects daily and sends an HTML alert email when a deadline is within 10 days or the hour budget exceeds 80%.\n\nRuns every weekday at **9 AM**.\nFetches all billable projects and checks:\n- End date within **10 days**\n- Budget consumption **≥ 80%**\n\nNo alerts needed? No email sent.\n\n## ⚙️ Customize\n\n| What | Where |\n|---|---|\n| Days threshold | `Calculate expiration` → line 1 |\n| Budget % alert | `Calculate expiration` → `getBudgetInfo()` |\n| Kimai URL | All 3 HTTP Request nodes |\n| Sender / Recipient | `Send an Email` node |\n"},"typeVersion":1}],"pinData":{},"connections":{"Need Email?":{"main":[[{"node":"Build Email HTML - Report","type":"main","index":0}]]},"Combine Data":{"main":[[{"node":"Calculate expiration","type":"main","index":0}]]},"GET Projects":{"main":[[{"node":"Get only Bilable","type":"main","index":0}]]},"Get only Bilable":{"main":[[{"node":"GET Projects Details","type":"main","index":0},{"node":"GET Timesheet Records","type":"main","index":0}]]},"Every Day at 9:00":{"main":[[{"node":"GET Projects","type":"main","index":0}]]},"Calculate expiration":{"main":[[{"node":"Need Email?","type":"main","index":0}]]},"GET Projects Details":{"main":[[{"node":"Combine Data","type":"main","index":0}]]},"Calculate Budget Uses":{"main":[[{"node":"Combine Data","type":"main","index":1}]]},"GET Timesheet Records":{"main":[[{"node":"Calculate Budget Uses","type":"main","index":0}]]},"Build Email HTML - Report":{"main":[[{"node":"Send an Email","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":17,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.emailSend":{"count":1},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.httpRequest":{"count":3},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Gaetano Abbaticchio","username":"itsgaet","bio":"I'm Gaetano (ItsGaet), Trainer, Consultant, and MCT. I build automations and share everything along the way: n8n workflows, AI tools, and process design. Most of what I publish comes from things I've built and use in the real world. No hype, just things that work.","verified":false,"links":["https://www.linkedin.com/in/itsgaet/"],"avatar":"https://gravatar.com/avatar/eb7232a72bd18bec4f596ae17655659bcdfacf8bca269abb33091b9a7e545a05?r=pg&d=retro&size=200"},"nodes":[{"id":11,"icon":"fa:envelope","name":"n8n-nodes-base.emailSend","codex":{"data":{"alias":["SMTP","email","human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/sendemail/"}]},"categories":["Communication","HITL","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Send Email","color":"#00bb88"},"iconData":{"icon":"envelope","type":"icon"},"displayName":"Send Email","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":9,"name":"Core Nodes"},{"id":28,"name":"HITL"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":46,"name":"Project Management"}],"image":[]}}