{"workflow":{"id":10492,"name":"Manage clinical trial e-consent and compliance with Claude AI and Google Sheets","views":30,"recentViews":0,"totalViews":30,"createdAt":"2025-11-04T10:44:05.463Z","description":"This workflow automates end-to-end e-consent management for clinical trials. It captures, validates, timestamps, and stores consent submissions with a full regulatory-compliant audit trail, notifies investigators and participants, and runs daily compliance checks for missing or expiring consents.\n\n### How it works\n\n1. **Capture E-Consent** - Webhook receives signed consent submission from participant portal\n2. **Validate & Timestamp** - Verifies all required fields, applies cryptographic timestamp for legal validity\n3. **Claude AI Compliance Check** - Reviews consent form completeness against ICH E6 GCP guidelines\n4. **Store with Audit Trail** - Writes immutable record to Google Sheets with full chain of custody\n5. **Notify PI & Participant** - Sends confirmation emails to principal investigator and participant\n6. **Daily Expiry Sweep** - Scheduled job checks for expiring or missing consents\n7. **Generate Compliance Report** - Produces daily audit summary for regulatory submission\n\n### Setup Steps\n\n1. Import workflow into n8n\n2. Configure credentials:\n   - **Anthropic API** - Claude AI for compliance review\n   - **Google Sheets** - Consent records and audit log\n   - **SMTP / Gmail** - Email notifications to PI and participants\n   - **DocuSign API** (optional) - For e-signature verification\n3. Set your trial ID, IRB number, and PI email in the `Build Consent Record` node\n4. Update expiry thresholds in the `Daily Expiry Sweep` node\n5. Activate both the webhook and scheduled workflows\n\n### Sample Consent Payload\n```json\n{\n  \"trialId\": \"TRIAL-2025-001\",\n  \"participantId\": \"P-10042\",\n  \"participantEmail\": \"participant@email.com\",\n  \"participantName\": \"Jane Doe\",\n  \"consentFormVersion\": \"v3.2\",\n  \"consentDate\": \"2025-02-22T10:00:00Z\",\n  \"signatureData\": \"base64_signature_string\",\n  \"witnessName\": \"Dr. Smith\",\n  \"capacityConfirmed\": true,\n  \"rightToWithdrawExplained\": true,\n  \"risksExplained\": true,\n  \"questionsAnswered\": true\n}\n```\n\n### Features\n- **ICH E6 GCP compliant** validation with Claude AI review\n- **Immutable audit trail** with hash-based record integrity\n- **Automated expiry alerts** for re-consent workflows\n- **Daily compliance report** ready for IRB/regulatory submission\n- **Full chain of custody** — who captured, reviewed, and stored every record\n\n\n**Explore More LinkedIn & Social Automation:**  \n[Contact us](https://www.oneclickitsolution.com/contact-us/) to design AI-powered lead nurturing, content engagement, and multi-platform reply workflows tailored to your growth strategy.","workflow":{"id":"3oSRSvRBcVydac9J","meta":{"instanceId":"dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281","templateCredsSetupCompleted":true},"name":"Clinical Trial Participant Consent Management with Digital Audit Trail and Claude AI","tags":[],"nodes":[{"id":"e88cf9f1-ba27-4451-b167-6b0418d5609a","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[1408,352],"parameters":{"width":780,"height":1208,"content":"## Clinical Trial Consent Management with Digital Audit Trail & Claude AI\n\nThis workflow automates end-to-end e-consent management for clinical trials. It captures, validates, timestamps, and stores consent submissions with a full regulatory-compliant audit trail, notifies investigators and participants, and runs daily compliance checks for missing or expiring consents.\n\n### How it works\n\n1. **Capture E-Consent** - Webhook receives signed consent submission from participant portal\n2. **Validate & Timestamp** - Verifies all required fields, applies cryptographic timestamp for legal validity\n3. **Claude AI Compliance Check** - Reviews consent form completeness against ICH E6 GCP guidelines\n4. **Store with Audit Trail** - Writes immutable record to Google Sheets with full chain of custody\n5. **Notify PI & Participant** - Sends confirmation emails to principal investigator and participant\n6. **Daily Expiry Sweep** - Scheduled job checks for expiring or missing consents\n7. **Generate Compliance Report** - Produces daily audit summary for regulatory submission\n\n### Setup Steps\n\n1. Import workflow into n8n\n2. Configure credentials:\n   - **Anthropic API** - Claude AI for compliance review\n   - **Google Sheets** - Consent records and audit log\n   - **SMTP / Gmail** - Email notifications to PI and participants\n   - **DocuSign API** (optional) - For e-signature verification\n3. Set your trial ID, IRB number, and PI email in the `Build Consent Record` node\n4. Update expiry thresholds in the `Daily Expiry Sweep` node\n5. Activate both the webhook and scheduled workflows\n\n### Sample Consent Payload\n```json\n{\n  \"trialId\": \"TRIAL-2025-001\",\n  \"participantId\": \"P-10042\",\n  \"participantEmail\": \"participant@email.com\",\n  \"participantName\": \"Jane Doe\",\n  \"consentFormVersion\": \"v3.2\",\n  \"consentDate\": \"2025-02-22T10:00:00Z\",\n  \"signatureData\": \"base64_signature_string\",\n  \"witnessName\": \"Dr. Smith\",\n  \"capacityConfirmed\": true,\n  \"rightToWithdrawExplained\": true,\n  \"risksExplained\": true,\n  \"questionsAnswered\": true\n}\n```\n\n### Features\n- **ICH E6 GCP compliant** validation with Claude AI review\n- **Immutable audit trail** with hash-based record integrity\n- **Automated expiry alerts** for re-consent workflows\n- **Daily compliance report** ready for IRB/regulatory submission\n- **Full chain of custody** — who captured, reviewed, and stored every record"},"typeVersion":1},{"id":"96e0990d-4474-4654-b0f2-6556b9cbe879","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[2416,512],"parameters":{"color":3,"width":440,"height":328,"content":"## 1. Consent Capture & Validation"},"typeVersion":1},{"id":"caec55ae-0a7e-41f9-ab11-9fa69b523a5d","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[2912,368],"parameters":{"color":3,"width":812,"height":668,"content":"## 2. AI Compliance Review & Audit Record"},"typeVersion":1},{"id":"bca0a4dc-304f-4b13-ac60-d354b5fd010f","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[3760,352],"parameters":{"color":3,"width":1104,"height":700,"content":"## 3. Store, Notify & Confirm"},"typeVersion":1},{"id":"e149384d-b0a1-4da8-b6d9-ec51905bc962","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[2480,1200],"parameters":{"color":3,"width":1380,"height":364,"content":"## 4. Daily Compliance Sweep & Reporting"},"typeVersion":1},{"id":"da0e9618-4357-4f8a-937d-8df15dea93ce","name":"Receive E-Consent Submission","type":"n8n-nodes-base.webhook","position":[2496,672],"webhookId":"clinical-consent-webhook","parameters":{"path":"clinical-consent","options":{},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2},{"id":"ab1e8bff-aadd-4e2c-8224-2aec49e033f0","name":"Validate and Timestamp Consent","type":"n8n-nodes-base.code","position":[2720,672],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Extract consent submission from request body\nconst body = $input.item.json.body || $input.item.json;\n\n// --- Required field validation (ICH E6 GCP mandatory elements) ---\nconst requiredFields = [\n  'trialId', 'participantId', 'participantEmail', 'participantName',\n  'consentFormVersion', 'consentDate', 'signatureData'\n];\nconst missing = requiredFields.filter(f => !body[f]);\nif (missing.length > 0) {\n  throw new Error(`GCP Compliance Failure - Missing required consent fields: ${missing.join(', ')}`);\n}\n\n// --- Validate email format ---\nconst emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nif (!emailRegex.test(body.participantEmail)) {\n  throw new Error(`Invalid participant email format: ${body.participantEmail}`);\n}\n\n// --- Validate consent date is not in the future ---\nconst consentDate = new Date(body.consentDate);\nif (isNaN(consentDate.getTime())) {\n  throw new Error(`Invalid consent date format: ${body.consentDate}`);\n}\nif (consentDate > new Date()) {\n  throw new Error('Consent date cannot be in the future');\n}\n\n// --- Parse GCP checklist flags ---\nconst gcpChecklist = {\n  capacityConfirmed: Boolean(body.capacityConfirmed),\n  rightToWithdrawExplained: Boolean(body.rightToWithdrawExplained),\n  risksExplained: Boolean(body.risksExplained),\n  benefitsExplained: Boolean(body.benefitsExplained),\n  alternativesExplained: Boolean(body.alternativesExplained),\n  confidentialityExplained: Boolean(body.confidentialityExplained),\n  questionsAnswered: Boolean(body.questionsAnswered),\n  voluntaryParticipation: Boolean(body.voluntaryParticipation !== false),\n  witnessPresent: Boolean(body.witnessName)\n};\n\n// Calculate GCP completeness score\nconst checklistKeys = Object.keys(gcpChecklist);\nconst passedChecks = checklistKeys.filter(k => gcpChecklist[k]).length;\nconst gcpCompletenessScore = Math.round((passedChecks / checklistKeys.length) * 100);\n\n// --- Generate cryptographic-style record hash (deterministic) ---\nconst hashInput = `${body.trialId}|${body.participantId}|${body.consentFormVersion}|${body.consentDate}|${body.signatureData?.substring(0, 32)}`;\nlet hashValue = 0;\nfor (let i = 0; i < hashInput.length; i++) {\n  const char = hashInput.charCodeAt(i);\n  hashValue = ((hashValue << 5) - hashValue) + char;\n  hashValue = hashValue & hashValue;\n}\nconst recordHash = `SHA-${Math.abs(hashValue).toString(16).toUpperCase().padStart(8, '0')}`;\n\n// --- Calculate consent expiry (default: 12 months from consent date) ---\nconst consentExpiryMonths = body.consentExpiryMonths || 12;\nconst expiryDate = new Date(consentDate);\nexpiryDate.setMonth(expiryDate.getMonth() + consentExpiryMonths);\n\n// --- Build normalized consent record ---\nconst consentRecord = {\n  // Identifiers\n  consentRecordId: `CONS-${Date.now()}-${Math.random().toString(36).substr(2, 9).toUpperCase()}`,\n  trialId: body.trialId.trim().toUpperCase(),\n  participantId: body.participantId.trim(),\n  irbNumber: body.irbNumber || 'IRB-NOT-PROVIDED',\n  sponsorId: body.sponsorId || null,\n  siteId: body.siteId || null,\n\n  // Participant details\n  participantName: body.participantName.trim(),\n  participantEmail: body.participantEmail.trim().toLowerCase(),\n  participantDob: body.participantDob || null,\n  participantLanguage: body.participantLanguage || 'en',\n\n  // Consent details\n  consentFormVersion: body.consentFormVersion.trim(),\n  consentDate: consentDate.toISOString(),\n  consentExpiryDate: expiryDate.toISOString(),\n  consentType: body.consentType || 'INITIAL',\n  signatureData: body.signatureData,\n  signatureMethod: body.signatureMethod || 'ELECTRONIC',\n\n  // Witness\n  witnessName: body.witnessName || null,\n  witnessEmail: body.witnessEmail || null,\n  piName: body.piName || 'PRINCIPAL_INVESTIGATOR',\n  piEmail: body.piEmail || 'user@example.com',\n\n  // GCP Checklist\n  gcpChecklist,\n  gcpCompletenessScore,\n\n  // Audit metadata\n  recordHash,\n  submittedAt: new Date().toISOString(),\n  ipAddress: body.ipAddress || 'NOT_CAPTURED',\n  userAgent: body.userAgent || 'NOT_CAPTURED',\n  portalVersion: body.portalVersion || '1.0',\n  status: 'PENDING_REVIEW'\n};\n\nreturn { json: { consentRecord } };"},"typeVersion":2},{"id":"6b0c850c-0e87-451b-9c10-e8b9281bfaf5","name":"Verify E-Signature via DocuSign","type":"n8n-nodes-base.httpRequest","position":[3024,496],"parameters":{"url":"https://na3.docusign.net/restapi/v2.1/accounts/YOUR_DOCUSIGN_ACCOUNT_ID/envelopes","options":{"timeout":10000},"sendQuery":true,"sendHeaders":true,"queryParameters":{"parameters":[{"name":"custom_field","value":"={{ $json.consentRecord.participantId }}"},{"name":"status","value":"completed"}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"Bearer YOUR_TOKEN_HERE"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2,"continueOnFail":true},{"id":"4b31dd58-83b6-446d-8b76-27a9d427a184","name":"Check for Duplicate Consent Record","type":"n8n-nodes-base.googleSheets","position":[3024,688],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"a9e844d2-2e3d-426f-8d6d-558bff604a6b","name":"Flag Duplicate or Proceed","type":"n8n-nodes-base.if","position":[3248,656],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":false,"typeValidation":"loose"},"combinator":"and","conditions":[{"operator":{"type":"number","operation":"equals"},"leftValue":"={{ $json.length || 0 }}","rightValue":0}]}},"typeVersion":2},{"id":"050aead2-e829-4259-ad1b-bc23afd0d81f","name":"Claude AI GCP Compliance Review","type":"@n8n/n8n-nodes-langchain.agent","position":[3472,656],"parameters":{"text":"=You are an expert clinical research regulatory compliance officer with deep knowledge of ICH E6(R2) Good Clinical Practice (GCP), FDA 21 CFR Part 50 (Informed Consent), and EU Clinical Trials Regulation No 536/2014.\n\nReview this e-consent submission for regulatory compliance and completeness.\n\n**Trial Information:**\n- Trial ID: {{ $json.consentRecord.trialId }}\n- IRB Number: {{ $json.consentRecord.irbNumber }}\n- Consent Form Version: {{ $json.consentRecord.consentFormVersion }}\n- Consent Type: {{ $json.consentRecord.consentType }}\n\n**Participant Information:**\n- Participant ID: {{ $json.consentRecord.participantId }}\n- Consent Date: {{ $json.consentRecord.consentDate }}\n- Consent Expiry: {{ $json.consentRecord.consentExpiryDate }}\n- Signature Method: {{ $json.consentRecord.signatureMethod }}\n- Participant Language: {{ $json.consentRecord.participantLanguage }}\n\n**GCP Checklist Results ({{ $json.consentRecord.gcpCompletenessScore }}% complete):**\n- Participant capacity confirmed: {{ $json.consentRecord.gcpChecklist.capacityConfirmed }}\n- Right to withdraw explained: {{ $json.consentRecord.gcpChecklist.rightToWithdrawExplained }}\n- Risks explained: {{ $json.consentRecord.gcpChecklist.risksExplained }}\n- Benefits explained: {{ $json.consentRecord.gcpChecklist.benefitsExplained }}\n- Alternatives explained: {{ $json.consentRecord.gcpChecklist.alternativesExplained }}\n- Confidentiality explained: {{ $json.consentRecord.gcpChecklist.confidentialityExplained }}\n- Questions answered: {{ $json.consentRecord.gcpChecklist.questionsAnswered }}\n- Voluntary participation confirmed: {{ $json.consentRecord.gcpChecklist.voluntaryParticipation }}\n- Witness present: {{ $json.consentRecord.gcpChecklist.witnessPresent }}\n\n**Witness / PI:**\n- Witness Name: {{ $json.consentRecord.witnessName || 'None' }}\n- PI Name: {{ $json.consentRecord.piName }}\n\n**Assessment Task:**\n1. Review all GCP checklist items against ICH E6(R2) Section 4.8 requirements\n2. Identify any regulatory gaps or missing elements\n3. Classify the consent record compliance level\n4. Provide specific remediation steps for any gaps\n5. Assess risk level for IRB/audit purposes\n\n**Response Format (JSON only, no markdown):**\n{\n  \"complianceStatus\": \"COMPLIANT | CONDITIONALLY_COMPLIANT | NON_COMPLIANT\",\n  \"complianceScore\": 95,\n  \"riskLevel\": \"LOW | MEDIUM | HIGH | CRITICAL\",\n  \"gcpFramework\": \"ICH E6(R2)\",\n  \"regulatoryGaps\": [\"list of specific missing or incomplete elements\"],\n  \"remediationRequired\": true,\n  \"remediationSteps\": [\"specific corrective actions required before activation\"],\n  \"auditReadiness\": \"READY | NEEDS_REVIEW | NOT_READY\",\n  \"approvalRecommendation\": \"APPROVE | CONDITIONAL_APPROVE | REJECT\",\n  \"approvalNotes\": \"Brief explanation for PI\",\n  \"witnessRequirementMet\": true,\n  \"electronicSignatureValid\": true,\n  \"reConsentRequired\": false,\n  \"reConsentReason\": null,\n  \"irbFlags\": [\"any items that must be flagged to the IRB\"],\n  \"estimatedRegulatoryRisk\": \"brief 1-sentence risk statement for the audit file\"\n}","options":{"systemMessage":"You are a clinical research regulatory compliance expert. Respond with valid JSON only — no markdown, no code blocks, no preamble. Your reviews must align strictly with ICH E6(R2) GCP, FDA 21 CFR Part 50, and EU CTR 536/2014."},"promptType":"define"},"typeVersion":1.6},{"id":"fe175773-5a1a-49c2-95ff-5f98fe0d8d8f","name":"Claude AI Model","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[3552,880],"parameters":{"model":"=claude-sonnet-4-20250514","options":{"temperature":0.1}},"credentials":{"anthropicApi":{"id":"credential-id","name":"Anthropic account - test"}},"typeVersion":1},{"id":"3c8cb26f-48a0-41c7-a8e8-00ffb5574e3a","name":"Parse Compliance Review","type":"n8n-nodes-base.code","position":[3824,656],"parameters":{"mode":"runOnceForEachItem","jsCode":"const aiResponse = $input.item.json;\nlet aiText = aiResponse.response || aiResponse.output || aiResponse.text || '';\n\n// Handle Anthropic content array format\nif (aiResponse.content && Array.isArray(aiResponse.content)) {\n  aiText = aiResponse.content[0]?.text || '';\n}\n\n// Strip any markdown code blocks\nconst cleanText = aiText\n  .replace(/```json\\s*/g, '')\n  .replace(/```\\s*/g, '')\n  .trim();\n\nlet complianceReview;\ntry {\n  complianceReview = JSON.parse(cleanText);\n} catch (error) {\n  throw new Error(`Failed to parse Claude compliance response: ${error.message}. Raw: ${cleanText.substring(0, 200)}`);\n}\n\n// Pull consent record from upstream\nconst consentRecord = $('Validate and Timestamp Consent').item.json.consentRecord;\n\n// Determine final status\nconst finalStatus = complianceReview.approvalRecommendation === 'APPROVE'\n  ? 'APPROVED'\n  : complianceReview.approvalRecommendation === 'CONDITIONAL_APPROVE'\n  ? 'CONDITIONALLY_APPROVED'\n  : 'REJECTED';\n\n// Update consent record status\nconsentRecord.status = finalStatus;\nconsentRecord.complianceReviewedAt = new Date().toISOString();\nconsentRecord.complianceReviewedBy = 'Claude AI GCP Compliance Engine v1';\n\nreturn {\n  json: {\n    consentRecord,\n    complianceReview,\n    finalStatus,\n    requiresRemediaton: complianceReview.remediationRequired || false,\n    requiresEscalation: complianceReview.riskLevel === 'HIGH' || complianceReview.riskLevel === 'CRITICAL',\n    irbFlags: complianceReview.irbFlags || []\n  }\n};"},"typeVersion":2},{"id":"f1c2f9dc-e0c7-4cfe-b68a-c5e247c9910c","name":"Store Consent Record with Audit Trail","type":"n8n-nodes-base.googleSheets","position":[4048,464],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"173d56ab-1b79-4b9c-9b33-9972486d405e","name":"Notify Principal Investigator","type":"n8n-nodes-base.emailSend","position":[4048,656],"webhookId":"8211b10a-8ad7-45d6-89a5-f58f314c5373","parameters":{"options":{"allowUnauthorizedCerts":false},"subject":"=[{{ $json.finalStatus }}] Consent Submission - {{ $json.consentRecord.participantId }} | Trial {{ $json.consentRecord.trialId }}","toEmail":"=","fromEmail":"="},"credentials":{"smtp":{"id":"credential-id","name":"SMTP account"}},"typeVersion":2.1,"continueOnFail":true},{"id":"783a0604-20f4-4e91-b522-b761a0432fd0","name":"Send Confirmation to Participant","type":"n8n-nodes-base.emailSend","position":[4048,848],"webhookId":"e907a747-8fa4-4056-94c1-6da887c594a5","parameters":{"options":{},"subject":"=Your Informed Consent Confirmation - {{ $json.consentRecord.trialId }}","toEmail":"=","fromEmail":"="},"credentials":{"smtp":{"id":"credential-id","name":"SMTP account"}},"typeVersion":2.1,"continueOnFail":true},{"id":"4a0486bc-3b33-428c-a2f0-3f53d6d20e25","name":"Build Consent Response","type":"n8n-nodes-base.code","position":[4272,688],"parameters":{"mode":"runOnceForEachItem","jsCode":"const data = $('Parse Compliance Review').item.json;\n\nreturn {\n  json: {\n    success: true,\n    consentRecordId: data.consentRecord.consentRecordId,\n    participantId: data.consentRecord.participantId,\n    trialId: data.consentRecord.trialId,\n    finalStatus: data.finalStatus,\n    complianceStatus: data.complianceReview.complianceStatus,\n    complianceScore: data.complianceReview.complianceScore,\n    riskLevel: data.complianceReview.riskLevel,\n    approvalRecommendation: data.complianceReview.approvalRecommendation,\n    approvalNotes: data.complianceReview.approvalNotes,\n    consentExpiryDate: data.consentRecord.consentExpiryDate,\n    recordHash: data.consentRecord.recordHash,\n    remediationRequired: data.requiresRemediaton,\n    remediationSteps: data.complianceReview.remediationSteps || [],\n    regulatoryGaps: data.complianceReview.regulatoryGaps || [],\n    irbFlags: data.irbFlags || [],\n    auditReadiness: data.complianceReview.auditReadiness,\n    processedAt: new Date().toISOString()\n  }\n};"},"typeVersion":2},{"id":"497ab26c-e10e-45cb-a84e-94df987cac8d","name":"Send Consent Confirmation Response","type":"n8n-nodes-base.respondToWebhook","position":[4672,688],"parameters":{"options":{"responseHeaders":{"entries":[{"name":"Content-Type","value":"application/json"}]}},"respondWith":"json","responseBody":"={{ JSON.stringify($json, null, 2) }}"},"typeVersion":1},{"id":"8976b60f-de32-4c40-b808-ef3fcf511e9b","name":"Daily Compliance Sweep Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[2528,1360],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 6 * * *"}]}},"typeVersion":1.2},{"id":"330cab51-d88a-4ce7-bd00-07bc1415e221","name":"Fetch All Active Consent Records","type":"n8n-nodes-base.googleSheets","position":[2752,1360],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"f5b79833-231e-4179-8bcb-161e7cb8ff38","name":"Analyse Expiring and Missing Consents","type":"n8n-nodes-base.code","position":[3024,1360],"parameters":{"jsCode":"const allConsents = $input.all().map(i => i.json);\nconst today = new Date();\n\n// Thresholds\nconst EXPIRY_WARNING_DAYS = 30;\nconst EXPIRY_CRITICAL_DAYS = 7;\n\nconst expiringSoon = [];\nconst expiredAlready = [];\nconst expiringCritical = [];\nconst conditionalNotRemediated = [];\n\nfor (const consent of allConsents) {\n  if (!consent.consentExpiryDate) continue;\n\n  const expiryDate = new Date(consent.consentExpiryDate);\n  const daysUntilExpiry = Math.floor((expiryDate - today) / (1000 * 60 * 60 * 24));\n\n  if (daysUntilExpiry < 0) {\n    expiredAlready.push({ ...consent, daysOverdue: Math.abs(daysUntilExpiry) });\n  } else if (daysUntilExpiry <= EXPIRY_CRITICAL_DAYS) {\n    expiringCritical.push({ ...consent, daysUntilExpiry });\n  } else if (daysUntilExpiry <= EXPIRY_WARNING_DAYS) {\n    expiringSoon.push({ ...consent, daysUntilExpiry });\n  }\n\n  if (consent.finalStatus === 'CONDITIONALLY_APPROVED' && consent.remediationRequired === 'true') {\n    const reviewedAt = new Date(consent.complianceReviewedAt);\n    const daysSinceReview = Math.floor((today - reviewedAt) / (1000 * 60 * 60 * 24));\n    if (daysSinceReview > 7) {\n      conditionalNotRemediated.push({ ...consent, daysSinceReview });\n    }\n  }\n}\n\nconst report = {\n  sweepDate: today.toISOString(),\n  totalActiveConsents: allConsents.length,\n  summary: {\n    expired: expiredAlready.length,\n    expiringCritical: expiringCritical.length,\n    expiringSoon: expiringSoon.length,\n    remediationOverdue: conditionalNotRemediated.length\n  },\n  expiredAlready,\n  expiringCritical,\n  expiringSoon,\n  conditionalNotRemediated,\n  requiresImmediateAction: expiredAlready.length + expiringCritical.length + conditionalNotRemediated.length\n};\n\nreturn [{ json: report }];"},"typeVersion":2},{"id":"ffd2c899-417c-47b4-8fc3-5e5374c8d563","name":"Send Daily Compliance Report to PI","type":"n8n-nodes-base.emailSend","position":[3280,1360],"webhookId":"4c0c8cfb-fec5-4939-b9e1-2cc82aec9530","parameters":{"options":{},"subject":"=[Daily Compliance Report] Consent Sweep {{ new Date().toDateString() }} — {{ $json.requiresImmediateAction }} Action Items","toEmail":"=","fromEmail":"="},"credentials":{"smtp":{"id":"credential-id","name":"SMTP account"}},"typeVersion":2.1,"continueOnFail":true},{"id":"10116069-9175-47c3-a5a9-eb13fbf9afb5","name":"Log Sweep Results to Audit Sheet","type":"n8n-nodes-base.googleSheets","position":[3584,1360],"parameters":{"columns":{"value":{},"schema":[],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"id","value":"="},"documentId":{"__rl":true,"mode":"id","value":"="}},"credentials":{"googleSheetsOAuth2Api":{"id":"credential-id","name":"Google Sheets account"}},"typeVersion":4.5,"continueOnFail":true},{"id":"657fb697-1b0d-433b-9ff1-e05e6ae8ff4e","name":"Wait For Load","type":"n8n-nodes-base.wait","position":[4480,688],"webhookId":"3b70774d-892b-44ad-b8f2-2c4a45d1baf4","parameters":{},"typeVersion":1.1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"c29c3a56-102f-48d5-921d-d50a46e8edd0","connections":{"Wait For Load":{"main":[[{"node":"Send Consent Confirmation Response","type":"main","index":0}]]},"Claude AI Model":{"ai_languageModel":[[{"node":"Claude AI GCP Compliance Review","type":"ai_languageModel","index":0}]]},"Build Consent Response":{"main":[[{"node":"Wait For Load","type":"main","index":0}]]},"Parse Compliance Review":{"main":[[{"node":"Store Consent Record with Audit Trail","type":"main","index":0},{"node":"Notify Principal Investigator","type":"main","index":0},{"node":"Send Confirmation to Participant","type":"main","index":0}]]},"Flag Duplicate or Proceed":{"main":[[{"node":"Claude AI GCP Compliance Review","type":"main","index":0}]]},"Receive E-Consent Submission":{"main":[[{"node":"Validate and Timestamp Consent","type":"main","index":0}]]},"Notify Principal Investigator":{"main":[[{"node":"Build Consent Response","type":"main","index":0}]]},"Daily Compliance Sweep Trigger":{"main":[[{"node":"Fetch All Active Consent Records","type":"main","index":0}]]},"Validate and Timestamp Consent":{"main":[[{"node":"Verify E-Signature via DocuSign","type":"main","index":0},{"node":"Check for Duplicate Consent Record","type":"main","index":0}]]},"Claude AI GCP Compliance Review":{"main":[[{"node":"Parse Compliance Review","type":"main","index":0}]]},"Verify E-Signature via DocuSign":{"main":[[{"node":"Flag Duplicate or Proceed","type":"main","index":0}]]},"Fetch All Active Consent Records":{"main":[[{"node":"Analyse Expiring and Missing Consents","type":"main","index":0}]]},"Send Confirmation to Participant":{"main":[[{"node":"Build Consent Response","type":"main","index":0}]]},"Check for Duplicate Consent Record":{"main":[[{"node":"Flag Duplicate or Proceed","type":"main","index":0}]]},"Send Daily Compliance Report to PI":{"main":[[{"node":"Log Sweep Results to Audit Sheet","type":"main","index":0}]]},"Analyse Expiring and Missing Consents":{"main":[[{"node":"Send Daily Compliance Report to PI","type":"main","index":0}]]},"Store Consent Record with Audit Trail":{"main":[[{"node":"Build Consent Response","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":24,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.emailSend":{"count":3},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.googleSheets":{"count":4},"@n8n/n8n-nodes-langchain.agent":{"count":1},"n8n-nodes-base.scheduleTrigger":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":1},"@n8n/n8n-nodes-langchain.lmChatAnthropic":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Oneclick AI Squad","username":"oneclick-ai","bio":"The AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations  from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.","verified":true,"links":["https://www.oneclickitsolution.com/"],"avatar":"https://gravatar.com/avatar/848fca91367142f65f9e5c55d64e5c9952b160d7b060d103b52aa343c6bc7b3d?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":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"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-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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"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/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"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/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"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-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/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"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":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"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/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"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/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/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"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/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"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-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"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/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.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"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"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1145,"icon":"file:anthropic.svg","name":"@n8n/n8n-nodes-langchain.lmChatAnthropic","codex":{"data":{"alias":["claude","sonnet","opus"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Anthropic Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTMyLjczIDBoLTYuOTQ1TDM4LjQ1IDMyaDYuOTQ1ek0xMi42NjUgMCAwIDMyaDcuMDgybDIuNTktNi43MmgxMy4yNWwyLjU5IDYuNzJoNy4wODJMMTkuOTI5IDB6bS0uNzAyIDE5LjMzNyA0LjMzNC0xMS4yNDYgNC4zMzQgMTEuMjQ2eiIvPjwvc3ZnPg=="},"displayName":"Anthropic Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":35,"name":"Document Extraction"},{"id":49,"name":"AI Summarization"}],"image":[]}}