{"workflow":{"id":13388,"name":"Sync Fizzy cards with Basecamp todos in real time","views":46,"recentViews":0,"totalViews":46,"createdAt":"2026-02-13T18:19:41.246Z","description":"## Description\n\nAutomatically sync Fizzy cards to Basecamp todos in real-time. When cards are created, assigned, completed, or reopened in Fizzy, the changes sync instantly to your Basecamp project. Card tags determine which todolist items go to, and team members are matched by email.\n\n### What you'll need\n\n- n8n instance (self-hosted or cloud)\n- Basecamp account with project access\n- Fizzy account with board management permissions\n- Matching project/board names in both platforms\n\n### How it works\n\n1. **Receive webhook** - Fizzy sends card events to n8n\n2. **Match projects** - Finds corresponding Basecamp project by name\n3. **Sync todolists** - Maps Fizzy tags to Basecamp todolists (auto-creates if needed)\n4. **Update todos** - Creates, updates, or completes todos based on card actions\n5. **Sync assignees** - Matches team members by email address\n\n### Setup steps\n\n**1. Install Basecamp community node**\n```\nnpm install n8n-nodes-basecamp\n```\nOr install via n8n Community Nodes: https://www.npmjs.com/package/n8n-nodes-basecamp\n\n**2. Configure Basecamp credentials**\n- Create integration at: https://launchpad.37signals.com/integrations\n- Copy Client ID and Client Secret\n- Add credentials in n8n (Settings &gt; Credentials &gt; Basecamp OAuth2)\n\n**3. Set your account ID**\n- Find your Basecamp Account ID in your Basecamp URL\n- Update the \"Set Basecamp account ID\" node in the workflow\n\n**4. Prepare your Basecamp project**\n- Create a project (name must match your Fizzy board name exactly)\n- Enable the Todos tool in project settings\n- Optionally create todolists matching your Fizzy tag names\n\n**5. Configure Fizzy webhook**\n- Open your Fizzy board\n- Click the globe icon for webhook settings\n- Paste the webhook URL from the \"Receive Fizzy webhook\" node\n- Enable all event types\n- Note: Each board requires its own webhook\n\n### Supported Fizzy events\n\n- `card_published` → Creates new todo\n- `card_assigned` / `card_unassigned` → Updates todo assignees\n- `card_closed` → Marks todo complete\n- `card_reopened` / `card_postponed` → Marks todo incomplete\n\n### Features\n\n✅ Real-time bidirectional sync\n✅ Automatic todolist creation from tags\n✅ Assignee matching by email\n✅ Maintains Fizzy card ID for tracking\n✅ Handles both active and completed todos\n✅ Pagination support for large todolists\n\n### Tips\n\n- Use consistent naming between Fizzy boards and Basecamp projects\n- Ensure team members use the same email in both platforms\n- The first Fizzy tag determines the Basecamp todolist\n- The workflow preserves a Fizzy ID in todo descriptions for tracking","workflow":{"id":"TckxPn8Et62aAgUP","meta":{"instanceId":"27346862d434982872c2253fe816f782a20566c03d31ff9d37b2e169d0ec33c3"},"name":"Sync Fizzy Cards into Basecamp Todos","tags":[{"id":"nY4Y2BAklcA0nSbM","name":"Fizzy","createdAt":"2026-02-13T14:28:15.351Z","updatedAt":"2026-02-13T14:28:15.351Z"}],"nodes":[{"id":"95404f80-67d4-4cfd-b47c-049375fa16c2","name":"Set Basecamp account ID","type":"n8n-nodes-base.code","position":[64,912],"parameters":{"jsCode":"// Configuration - Set your Basecamp Account ID here\nconst BASECAMP_ACCOUNT_ID = \"<Put your account ID Here>\";\n\n// Pass through webhook data and add account ID\nconst webhookData = $input.first().json;\n\nreturn {\n  ...webhookData,\n  basecampAccountId: BASECAMP_ACCOUNT_ID\n};"},"typeVersion":2},{"id":"a005d45d-2c21-4d83-9c3e-fb6ec2e8058a","name":"Find todo and prepare update","type":"n8n-nodes-base.code","position":[2848,896],"parameters":{"jsCode":"// Get the original route data from Route by Action1 node\nconst routeData = $('Check if New Card').first().json;\n\n// Extract values from route data\nconst fizzyCardId = routeData.fizzyCardId;\nconst fizzyAction = routeData.fizzyAction;\nconst assigneeIds = routeData.assigneeIds;\nconst projectId = routeData.projectId;\nconst cardTitle = routeData.cardTitle;\nconst cardDescription = routeData.cardDescription;\n\n// Get all todos from merged results\nconst allTodos = $input.all().map(item => item.json);\n\nconsole.log(`Searching for Fizzy ID: ${fizzyCardId} among ${allTodos.length} todos`);\n\n// Find the matching todo by Fizzy ID in the description\nconst fizzyIdPattern = new RegExp(`Fizzy ID:\\\\s*${fizzyCardId}`, 'i');\nconst matchedTodo = allTodos.find(todo => {\n  if (!todo.description) return false;\n  const matches = fizzyIdPattern.test(todo.description);\n  if (matches) {\n    console.log(`Found matching todo: ${todo.id} - ${todo.title}`);\n  }\n  return matches;\n});\n\nif (!matchedTodo) {\n  const availableTodos = allTodos.map(t => `ID: ${t.id}, Title: ${t.title}, Description: ${t.description?.substring(0, 100) || 'N/A'}`).join('\\n');\n  throw new Error(`No todo found with Fizzy ID: \"${fizzyCardId}\".\\n\\nSearched ${allTodos.length} todos.\\n\\nAvailable todos:\\n${availableTodos}`);\n}\n\nconsole.log(`Successfully matched todo ${matchedTodo.id} for Fizzy card ${fizzyCardId}`);\n\n// Prepare the output based on action type\nlet output = {\n  todoId: matchedTodo.id,\n  projectId: projectId,\n  fizzyAction: fizzyAction,\n  currentAssignees: matchedTodo.assignees || [],\n  assigneeIds: assigneeIds,\n  cardTitle: cardTitle,\n  cardDescription: cardDescription,\n  fizzyCardId: fizzyCardId,\n  currentStatus: matchedTodo.status,\n  currentCompleted: matchedTodo.completed\n};\n\n// For status changes, determine the new status\nif (fizzyAction === 'card_closed') {\n  output.shouldComplete = true;\n  output.shouldReopen = false;\n} else if (fizzyAction === 'card_reopened') {\n  output.shouldComplete = false;\n  output.shouldReopen = true;\n} else if (fizzyAction === 'card_postponed' || fizzyAction === 'card_auto_postponed' || fizzyAction === 'card_sent_back_to_triage') {\n  // Basecamp doesn't have a \"postponed\" status, so we'll uncomplete it\n  output.shouldComplete = false;\n  output.shouldReopen = true;\n}\n\nreturn output;"},"typeVersion":2},{"id":"8598d428-8223-49b6-95bd-4fbc93fe92ef","name":"Receive Fizzy webhook","type":"n8n-nodes-base.webhook","position":[-160,912],"webhookId":"0491991a-47ec-494d-9ebc-f3c60c45aecf","parameters":{"path":"fizzyxbasecamp","options":{},"httpMethod":"POST","responseMode":"lastNode"},"typeVersion":2.1},{"id":"f4fdb48e-3aff-4ac6-bdfb-0396d47ffeaf","name":"Fetch Basecamp projects","type":"n8n-nodes-base.httpRequest","position":[288,816],"parameters":{"url":"=https://3.basecampapi.com/{{ $('Set Basecamp account ID').first().json.basecampAccountId }}/projects.json","options":{},"authentication":"predefinedCredentialType","nodeCredentialType":"basecamp4OAuth2Api"},"credentials":{"basecamp4OAuth2Api":{"id":"hjWkCiie1HTLdtHY","name":"Basecamp account"}},"typeVersion":4.3},{"id":"6df604c8-d556-48ac-9f1a-1f8d2166c399","name":"Fetch Basecamp people","type":"n8n-nodes-base.httpRequest","position":[288,1008],"parameters":{"url":"=https://3.basecampapi.com/{{ $('Set Basecamp account ID').first().json.basecampAccountId }}/people.json","options":{},"authentication":"predefinedCredentialType","nodeCredentialType":"basecamp4OAuth2Api"},"credentials":{"basecamp4OAuth2Api":{"id":"hjWkCiie1HTLdtHY","name":"Basecamp account"}},"typeVersion":4.3},{"id":"d7a1fe7e-8937-411b-9cbf-b55cf4aa1b93","name":"Combine projects and people","type":"n8n-nodes-base.merge","position":[512,912],"parameters":{},"typeVersion":3},{"id":"eedefdae-d447-4f4f-b0e9-4dd6889e704d","name":"Match project and get todoset","type":"n8n-nodes-base.code","position":[880,912],"parameters":{"jsCode":"// Get the Fizzy board name from webhook node\nconst webhookData = $('Receive Fizzy webhook').first().json;\nconst fizzyBoardName = webhookData.body.board.name;\nconst fizzyAction = webhookData.body.action;\n\n// Get all Basecamp projects\nconst basecampProjects = $('Fetch Basecamp projects').all();\n\n// Get all Basecamp people\nconst basecampPeople = $('Fetch Basecamp people').all();\n\n// Find matching project (case-insensitive)\nconst matchedProject = basecampProjects.find(item => \n  item.json.name.toLowerCase() === fizzyBoardName.toLowerCase()\n);\n\nif (!matchedProject) {\n  throw new Error(`No Basecamp project found matching Fizzy board: \"${fizzyBoardName}\"`);\n}\n\n// Extract project ID\nconst projectId = matchedProject.json.id;\n\n// Find the \"To-dos\" todoset in the dock\nconst todoset = matchedProject.json.dock.find(item => \n  item.name === 'todoset'\n);\n\nif (!todoset) {\n  throw new Error(`No todoset found in project: \"${matchedProject.json.name}\"`);\n}\n\nconst todosetId = todoset.id;\n\n// Return the IDs to pass to next node\nreturn {\n  projectId: projectId,\n  todosetId: todosetId,\n  boardName: fizzyBoardName,\n  fizzyAction: fizzyAction,\n  webhookData: webhookData,\n  basecampPeople: basecampPeople.map(p => p.json)\n};"},"typeVersion":2},{"id":"7f931279-850c-4168-a9fa-ef9594c9f376","name":"Fetch project todolists","type":"n8n-nodes-base.httpRequest","position":[1088,912],"parameters":{"url":"=https://3.basecampapi.com/{{ $('Set Basecamp account ID').first().json.basecampAccountId }}/buckets/{{$json.projectId}}/todosets/{{$json.todosetId}}/todolists.json","options":{},"authentication":"predefinedCredentialType","nodeCredentialType":"basecamp4OAuth2Api"},"credentials":{"basecamp4OAuth2Api":{"id":"hjWkCiie1HTLdtHY","name":"Basecamp account"}},"typeVersion":4.3},{"id":"7c0a17ba-5b36-4c8d-897a-1050d0a22fd6","name":"Match todolist and assignees","type":"n8n-nodes-base.code","position":[1280,912],"parameters":{"jsCode":"// Get webhook data from previous node\nconst previousNodeData = $('Match project and get todoset').first().json;\nconst webhookData = previousNodeData.webhookData;\nconst basecampPeople = previousNodeData.basecampPeople;\nconst fizzyAction = previousNodeData.fizzyAction;\n\n// Get the first tag from Fizzy card\nconst fizzyTags = webhookData.body.eventable.tags;\n\n// Default to \"Fizzy Todo\" if no tags present\nconst firstTag = (fizzyTags && fizzyTags.length > 0) ? fizzyTags[0] : \"Fizzy Todo\";\n\n// Get all todolists from current input\nconst todolists = $input.all();\n\n// Find matching todolist (case-insensitive)\nconst matchedTodolist = todolists.find(item => {\n  const todolistTitle = item.json.title.toLowerCase();\n  const tagToMatch = firstTag.toLowerCase();\n  return todolistTitle === tagToMatch;\n});\n\n// Get projectId from previous node\nconst projectId = previousNodeData.projectId;\n\n// Match assignees by email\nconst fizzyAssignees = webhookData.body.eventable.assignees || [];\nconst assigneeIds = [];\n\nfor (const fizzyAssignee of fizzyAssignees) {\n  const fizzyEmail = fizzyAssignee.email_address.toLowerCase();\n  \n  const matchedPerson = basecampPeople.find(person => \n    person.email_address.toLowerCase() === fizzyEmail\n  );\n  \n  if (matchedPerson) {\n    assigneeIds.push(matchedPerson.id);\n  }\n}\n\n// Get the Fizzy card ID for mapping\nconst fizzyCardId = webhookData.body.eventable.id;\nconst fizzyCardTitle = webhookData.body.eventable.title;\n\n// Base data object\nconst baseData = {\n  projectId: projectId,\n  cardTitle: fizzyCardTitle,\n  cardDescription: webhookData.body.eventable.description || '',\n  assigneeIds: assigneeIds,\n  fizzyAction: fizzyAction,\n  fizzyCardId: fizzyCardId,\n  todosetId: previousNodeData.todosetId,\n  basecampAccountId: $('Set Basecamp account ID').first().json.basecampAccountId,\n  firstTag: firstTag,\n  isDefaultList: (fizzyTags && fizzyTags.length > 0) ? false : true\n};\n\n// If todolist found, add todolistId and route normally\nif (matchedTodolist) {\n  return {\n    ...baseData,\n    todolistId: matchedTodolist.json.id,\n    todolistFound: true\n  };\n} else {\n  // If no todolist found, flag for creation\n  return {\n    ...baseData,\n    todolistFound: false,\n    newTodolistName: firstTag\n  };\n}"},"typeVersion":2},{"id":"c19a89c1-da76-4676-be36-327e80b5c639","name":"Fetch active todos","type":"n8n-nodes-base.httpRequest","position":[2576,1184],"parameters":{"url":"=https://3.basecampapi.com/{{ $json.basecampAccountId }}/buckets/{{ $json.projectId }}/todolists/{{ $json.todolistId }}/todos.json","options":{"pagination":{"pagination":{"nextURL":"={{ $response.headers['link']?.match(/<([^>]+)>;\\s*rel=\"next\"/)?.[1] }}","paginationMode":"responseContainsNextURL","completeExpression":"={{ !$response.headers['link'] || !$response.headers['link'].includes('rel=\"next\"') }}","paginationCompleteWhen":"other"}}},"authentication":"predefinedCredentialType","nodeCredentialType":"basecamp4OAuth2Api"},"credentials":{"basecamp4OAuth2Api":{"id":"hjWkCiie1HTLdtHY","name":"Basecamp account"}},"typeVersion":4.4},{"id":"5196689a-ec15-4e80-8299-4a02a9dd832b","name":"Fetch completed todos","type":"n8n-nodes-base.httpRequest","position":[2576,1328],"parameters":{"url":"=https://3.basecampapi.com/{{ $json.basecampAccountId }}/buckets/{{ $json.projectId }}/todolists/{{ $json.todolistId }}/todos.json?completed=true","options":{"pagination":{"pagination":{"nextURL":"={{ $response.headers['link']?.match(/<([^>]+)>;\\s*rel=\"next\"/)?.[1] }}","paginationMode":"responseContainsNextURL","completeExpression":"={{ !$response.headers['link'] || !$response.headers['link'].includes('rel=\"next\"') }}","paginationCompleteWhen":"other"}}},"sendQuery":true,"authentication":"predefinedCredentialType","queryParameters":{"parameters":[{}]},"nodeCredentialType":"basecamp4OAuth2Api"},"credentials":{"basecamp4OAuth2Api":{"id":"hjWkCiie1HTLdtHY","name":"Basecamp account"}},"typeVersion":4.4},{"id":"43594424-0b87-4df3-83e2-d93556158ccd","name":"Combine all todos","type":"n8n-nodes-base.merge","position":[2848,1248],"parameters":{},"typeVersion":3},{"id":"2c3c4aff-dff1-4e21-a665-21c4dcaa511e","name":"Create new todolist","type":"n8n-nodes-basecamp.basecamp4","position":[1472,1168],"parameters":{"name":"={{$json.newTodolistName}}","bucketId":"={{$json.projectId}}","resource":"todolist","operation":"createTodolist","todosetId":"={{$json.todosetId}}","description":"=Auto-created from Fizzy","requestOptions":{}},"credentials":{"basecamp4OAuth2Api":{"id":"hjWkCiie1HTLdtHY","name":"Basecamp account"}},"typeVersion":1},{"id":"25a7038f-8230-4490-92b7-0b4715e349ed","name":"Check if todolist exists","type":"n8n-nodes-base.if","position":[1472,912],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"todolist_exists","operator":{"type":"boolean","operation":"true"},"leftValue":"={{ $json.todolistFound }}","rightValue":true}]}},"typeVersion":2},{"id":"795ff0a3-df67-4715-955a-6bbaf542b89d","name":"Add new todolist ID","type":"n8n-nodes-base.code","position":[1680,1168],"parameters":{"jsCode":"// Get the created todolist data\nconst createdTodolist = $input.first().json;\n\n// Get the original data from Match Todolist & Assignees node\nconst originalData = $('Match todolist and assignees').first().json;\n\n// Merge the new todolist ID with the original data\nreturn {\n  ...originalData,\n  todolistId: createdTodolist.id,\n  todolistFound: true\n};"},"typeVersion":2},{"id":"8a8b7b46-1dc6-4890-8d19-ac2148038970","name":"Create new todo","type":"n8n-nodes-basecamp.basecamp4","position":[2112,896],"parameters":{"notify":true,"content":"={{$json.cardTitle}}","bucketId":"={{$json.projectId}}","resource":"todo","operation":"createTodo","todolistId":"={{$json.todolistId}}","assigneeIds":"={{$json.assigneeIds}}","description":"=Fizzy ID: {{$json.fizzyCardId}} - Please Don't Delete!\n\n{{$json.cardDescription}}","requestOptions":{}},"credentials":{"basecamp4OAuth2Api":{"id":"hjWkCiie1HTLdtHY","name":"Basecamp account"}},"typeVersion":1},{"id":"0507e272-9632-4894-9c84-bc658b16f016","name":"Check if assignment change","type":"n8n-nodes-base.if","position":[3264,896],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"or","conditions":[{"id":"is_assign","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.fizzyAction }}","rightValue":"card_assigned"},{"id":"a3e33eb6-a171-4648-863c-8c0c1f05098a","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fizzyAction }}","rightValue":"card_unassigned"}]}},"typeVersion":2},{"id":"3c2632f9-66a0-4faf-8ecf-3d3116cf375e","name":"Update todo assignees","type":"n8n-nodes-basecamp.basecamp4","position":[3488,800],"parameters":{"todoId":"={{$json.todoId}}","content":"={{$json.cardTitle}}","bucketId":"={{$json.projectId}}","resource":"todo","operation":"updateTodo","todoFields":{"notify":{"notify":true},"assigneeIds":{"assigneeIds":"={{$json.assigneeIds}}"},"description":{"description":"=Fizzy ID: {{$json.fizzyCardId}} - Please Don't Delete!\n\n{{$json.cardDescription}}"}},"requestOptions":{}},"credentials":{"basecamp4OAuth2Api":{"id":"hjWkCiie1HTLdtHY","name":"Basecamp account"}},"typeVersion":1},{"id":"c8806e91-b8cc-4c56-8a55-e02a468451f0","name":"Check if card closed","type":"n8n-nodes-base.if","position":[3488,992],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"is_closed","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.fizzyAction }}","rightValue":"card_closed"}]}},"typeVersion":2},{"id":"69001a54-92c8-40ae-966b-7d4e8e8d69ec","name":"Mark todo as complete","type":"n8n-nodes-basecamp.basecamp4","position":[3712,896],"parameters":{"todoId":"={{$json.todoId}}","bucketId":"={{$json.projectId}}","resource":"todo","operation":"completeTodo","requestOptions":{}},"credentials":{"basecamp4OAuth2Api":{"id":"hjWkCiie1HTLdtHY","name":"Basecamp account"}},"typeVersion":1},{"id":"20166541-01ea-4862-9816-7707b89ce8e5","name":"Mark todo as incomplete","type":"n8n-nodes-basecamp.basecamp4","position":[3936,1088],"parameters":{"todoId":"={{$json.todoId}}","bucketId":"={{$json.projectId}}","resource":"todo","operation":"uncompleteTodo","requestOptions":{}},"credentials":{"basecamp4OAuth2Api":{"id":"hjWkCiie1HTLdtHY","name":"Basecamp account"}},"typeVersion":1},{"id":"5c87b77a-1c95-4af3-9286-1adc4cfb7816","name":"Check if card reopened","type":"n8n-nodes-base.if","position":[3712,1088],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"or","conditions":[{"id":"is_reopen","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.fizzyAction }}","rightValue":"card_reopened"},{"id":"8a109a14-f93a-4815-a804-ed0c5cdb235b","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fizzyAction }}","rightValue":"card_postponed"},{"id":"00f74454-0323-4c43-9ae3-f6fcf4bf2ab2","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fizzyAction }}","rightValue":"card_auto_postponed"},{"id":"cc752d9a-97bb-4e00-820e-e3934484e133","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $json.fizzyAction }}","rightValue":"card_sent_back_to_triage"}]}},"typeVersion":2},{"id":"1b6b8631-160d-40e1-8d41-f4f623cbf688","name":"Setup instructions","type":"n8n-nodes-base.stickyNote","position":[240,-80],"parameters":{"width":880,"height":624,"content":"## Setup steps\n\n**1. Install Basecamp community node**\nInstall from: https://www.npmjs.com/package/n8n-nodes-basecamp\n\n**2. Configure Basecamp credentials**\nCreate integration: https://launchpad.37signals.com/integrations\nAdd credentials in n8n with your Client ID and Client Secret\n\n**3. Set your account ID**\nUpdate the \"Set Basecamp account ID\" node with your Account ID\n\n**4. Prepare your Basecamp project**\n- Create project matching your Fizzy board name exactly\n- Enable Todos tool in project settings\n\n**5. Configure Fizzy webhook**\n\n- Each board needs its own webhook:\n- Click globe icon in Fizzy board\n- Paste webhook URL from \"Receive Fizzy webhook\" node\n- Enable all events\n\n## How it works\n\nThis workflow syncs Fizzy cards to Basecamp todos in real-time. When cards are created, assigned, or closed in Fizzy, the corresponding todos update automatically in Basecamp. Card tags determine the todolist, and assignees sync by email match."},"typeVersion":1},{"id":"8cfb232e-0c3e-4434-a7d6-1325fcf3bc9b","name":"Initial setup","type":"n8n-nodes-base.stickyNote","position":[-224,656],"parameters":{"color":7,"width":896,"height":624,"content":"Receives webhook from Fizzy and fetches Basecamp data"},"typeVersion":1},{"id":"43c90a16-2901-4f80-9fcf-8d58b9f22aa1","name":"Project matching","type":"n8n-nodes-base.stickyNote","position":[816,656],"parameters":{"color":7,"width":1072,"height":800,"content":"Matches Fizzy Data to Basecamp Data (Projects, Todoset, Todolist)"},"typeVersion":1},{"id":"17f46172-7d8a-4025-bec1-c8a1ae2f86d8","name":"Create path","type":"n8n-nodes-base.stickyNote","position":[2016,656],"parameters":{"color":7,"width":336,"height":800,"content":"Creates new todo when fizzy card status is equal to published (New)"},"typeVersion":1},{"id":"150593f5-f87e-4b15-8ba1-50edc2990fd2","name":"Update path","type":"n8n-nodes-base.stickyNote","position":[2480,656],"parameters":{"color":7,"width":592,"height":960,"content":"Updates existing todo when card changes"},"typeVersion":1},{"id":"a8b2a1c5-1e62-45a5-84bf-887365f3dff7","name":"Status changes","type":"n8n-nodes-base.stickyNote","position":[3168,656],"parameters":{"color":7,"width":992,"height":816,"content":"Handles assignment updates and completion status"},"typeVersion":1},{"id":"b98f4005-336a-4e44-be28-840e6952ccf0","name":"Check if New Card","type":"n8n-nodes-base.if","position":[2128,1168],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"action_create","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.fizzyAction }}","rightValue":"card_published"}]}},"typeVersion":2}],"active":false,"pinData":{},"settings":{"binaryMode":"separate","availableInMCP":false,"executionOrder":"v1"},"versionId":"1dc5ca67-d4d3-46c9-a197-f620d70ce5a7","connections":{"Check if New Card":{"main":[[{"node":"Create new todo","type":"main","index":0}],[{"node":"Fetch active todos","type":"main","index":0},{"node":"Fetch completed todos","type":"main","index":0}]]},"Combine all todos":{"main":[[{"node":"Find todo and prepare update","type":"main","index":0}]]},"Fetch active todos":{"main":[[{"node":"Combine all todos","type":"main","index":0}]]},"Add new todolist ID":{"main":[[{"node":"Check if New Card","type":"main","index":0}]]},"Create new todolist":{"main":[[{"node":"Add new todolist ID","type":"main","index":0}]]},"Check if card closed":{"main":[[{"node":"Mark todo as complete","type":"main","index":0}],[{"node":"Check if card reopened","type":"main","index":0}]]},"Fetch Basecamp people":{"main":[[{"node":"Combine projects and people","type":"main","index":1}]]},"Fetch completed todos":{"main":[[{"node":"Combine all todos","type":"main","index":1}]]},"Receive Fizzy webhook":{"main":[[{"node":"Set Basecamp account ID","type":"main","index":0}]]},"Check if card reopened":{"main":[[{"node":"Mark todo as incomplete","type":"main","index":0}]]},"Fetch Basecamp projects":{"main":[[{"node":"Combine projects and people","type":"main","index":0}]]},"Fetch project todolists":{"main":[[{"node":"Match todolist and assignees","type":"main","index":0}]]},"Set Basecamp account ID":{"main":[[{"node":"Fetch Basecamp projects","type":"main","index":0},{"node":"Fetch Basecamp people","type":"main","index":0}]]},"Check if todolist exists":{"main":[[{"node":"Check if New Card","type":"main","index":0}],[{"node":"Create new todolist","type":"main","index":0}]]},"Check if assignment change":{"main":[[{"node":"Update todo assignees","type":"main","index":0}],[{"node":"Check if card closed","type":"main","index":0}]]},"Combine projects and people":{"main":[[{"node":"Match project and get todoset","type":"main","index":0}]]},"Find todo and prepare update":{"main":[[{"node":"Check if assignment change","type":"main","index":0}]]},"Match todolist and assignees":{"main":[[{"node":"Check if todolist exists","type":"main","index":0}]]},"Match project and get todoset":{"main":[[{"node":"Fetch project todolists","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":29,"nodeTypes":{"n8n-nodes-base.if":{"count":5},"n8n-nodes-base.code":{"count":5},"n8n-nodes-base.merge":{"count":2},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.stickyNote":{"count":6},"n8n-nodes-base.httpRequest":{"count":5},"n8n-nodes-basecamp.basecamp4":{"count":5}}},"status":"published","readyToDemo":null,"user":{"name":"David Webb Espiritu","username":"davidwebbespiritu","bio":"Full-Stack Developer | ERPNext/Frappe | API Integration | AI & Automation | DevOps | UI/UX Designer","verified":false,"links":["https://linktr.ee/davidwebbespiritu"],"avatar":"https://gravatar.com/avatar/48f29bf55322c533c3d9c24d09e854a2d6ff515fe680614a196e00d5bebe648c?r=pg&d=retro&size=200"},"nodes":[{"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":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":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"}]}],"categories":[{"id":46,"name":"Project Management"}],"image":[]}}