{"nodes":[{"name":"On clicking 'execute'","type":"n8n-nodes-base.manualTrigger","position":[200,470],"parameters":{},"typeVersion":1,"id":"node-54ba8f7e"},{"name":"HTTP Request","type":"n8n-nodes-base.httpRequest","position":[600,470],"parameters":{"url":"{{ $env.BASE_URL }}","options":{},"queryParametersUi":{"parameter":[{"name":"hapikey","value":"<YOUR_API_KEY>"},{"name":"limit","value":"100"}]}},"typeVersion":1,"id":"node-4962624b"},{"name":"NoOp","type":"n8n-nodes-base.noOp","position":[800,470],"parameters":{},"typeVersion":1,"id":"node-3abbf3c2"},{"name":"Wait","type":"n8n-nodes-base.function","position":[1000,470],"parameters":{"functionCode":"return new Promise((resolve, reject) => {\n      setTimeout(() => { resolve([{ json: {} }]) }, 5000);\n    })\n"},"typeVersion":1,"id":"node-30d0e54a"},{"name":"Config URL","type":"n8n-nodes-base.function","position":[400,470],"parameters":{"functionCode":"\nlet next = 'https://api.hubapi.com/crm/v3/objects/contacts'\n\nif (items[0].json.next) {\n  next = items[0].json.next\n}\n\nreturn [\n  {\n    json: {\n      next : next\n    }\n  }\n]"},"typeVersion":1,"id":"node-bd8e5aba"},{"name":"Check if pagination?","type":"n8n-nodes-base.if","position":[1250,470],"parameters":{"conditions":{"string":[],"boolean":[{"value1":"={{$node[\"HTTP Request\"].json[\"paging\"] ? true : false}}","value2":true}]}},"typeVersion":1,"id":"node-e04cba72"},{"name":"Set next URL","type":"n8n-nodes-base.set","position":[890,210],"parameters":{"values":{"string":[{"name":"next","value":"={{$node[\"HTTP Request\"].json[\"paging\"][\"next\"][\"link\"]}}"}]},"options":{},"keepOnlySet":true},"executeOnce":true,"typeVersion":1,"id":"node-7becf9ef"},{"name":"Combine all data","type":"n8n-nodes-base.function","position":[1500,560],"parameters":{"functionCode":"const allData = []\n\nlet counter = 0;\ndo {\n  try {\n    const items = $items(\"HTTP Request\", 0, counter).map(item => item.json.results);\n                    \n    const aja = items[0].map(item => {\n      return { json: item }\n    })    \n    \n    allData.push.apply(allData, aja);\n    //allData.push($items(\"Increment\", 0, counter));\n  } catch (error) {\n    return allData;  \n  }\n\n  counter++;\n} while(true);\n\n"},"typeVersion":1,"id":"node-595a335c"},{"id":"error-6ec0d0b5","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"connections":{},"name":"Production Workflow","settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3},"meta":{"instanceId":"workflow-4ce5740c","versionId":"1.0.0","createdAt":"2025-09-29T07:07:48.574719","updatedAt":"2025-09-29T07:07:48.574736","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"description":"Production-ready workflow: Production Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}