{"nodes":[{"id":"517fad39-50ec-4eae-94c4-aca5b111a093","name":"Webhook","type":"n8n-nodes-base.webhook","position":[-120,-100],"webhookId":"a227afae-e16e-44c2-bb5c-e69fe553b455","parameters":{"path":"a227afae-e16e-44c2-bb5c-e69fe553b455","options":{}},"typeVersion":2,"notes":"This webhook node performs automated tasks as part of the workflow."},{"id":"cbd978df-9b95-4148-a054-7772213f5b8f","name":"continue with valid token","type":"n8n-nodes-base.noOp","position":[1020,-40],"parameters":{},"typeVersion":1,"notes":"This noOp node performs automated tasks as part of the workflow."},{"id":"65167cf9-3ec5-4727-a604-a318e86bb54e","name":"get new accessToken","type":"n8n-nodes-base.httpRequest","position":[560,80],"parameters":{"url":"{{ $env.API_BASE_URL }}","options":{"response":{"response":{"fullResponse":true}}}},"notesInFlow":false,"typeVersion":4.2,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"b17e01d2-c43a-486f-ab08-d81e05f8d110","name":"2. set token in static data","type":"n8n-nodes-base.code","position":[780,80],"parameters":{"jsCode":"const workflowStaticData = $getWorkflowStaticData('global');\n\n// get new access token\nworkflowStaticData.accessToken = $input.first().json.AccessToken;\n// set timestamp of new access token\nworkflowStaticData.timestamp = $now.toISO().toString();\n\nreturn [\n  {\n      // data: $input.all(),\n      accessToken: workflowStaticData.accessToken,\n      timestamp: workflowStaticData.timestamp,\n      // today: $today\n  }\n];"},"typeVersion":2,"notes":"This code node performs automated tasks as part of the workflow."},{"id":"31fd494a-f323-47cc-8f89-0bb2f2332e0f","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-120,60],"parameters":{"rule":{"interval":[{}]}},"typeVersion":1.2,"notes":"This scheduleTrigger node performs automated tasks as part of the workflow."},{"id":"77623419-99f9-4369-9546-375eaf6f5732","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-180,240],"parameters":{"width":660,"height":400,"content":"# StaticData Demo\n\n\nThis workflow demonstrates how to use the [`workflowStaticData()` function]({{ $env.WEBHOOK_URL }}\n) to set any type of variable that will persist within workflow executions. \n\nThis can be useful for working with access tokens that expire after a certain time period. \n\n{{ $env.WEBHOOK_URL }}\n\n## Important\n\nStatic Data only persists across **_production_** executions, i.e. triggered by Webhooks or Schedule Triggers (not manual executions!)\nFor this the workflow will have to be activated. \n\n\n\n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"e4cbdbf7-7b3d-4c52-9d41-bc427d63df5d","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[520,60],"parameters":{"color":5,"width":180,"height":420,"content":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### HTTP Request\n\nToggle \n`Include Response Headers and Status` \noption if access token is not sent in the body"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"bed68570-bf35-4fa9-984c-1b67a53b59ba","name":"if token is valid","type":"n8n-nodes-base.if","notes":"(1 minute expiration)","position":[340,-20],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"65f5c979-3e7d-4e50-92c3-3ae39f1bba3d","operator":{"type":"dateTime","operation":"afterOrEquals"},"leftValue":"={{ $json.timestamp }}","rightValue":"={{ $now.minus(1,'minute') }}"}]},"looseTypeValidation":true},"notesInFlow":true,"typeVersion":2.2},{"id":"57a4f5f9-eb77-4fd4-b6b1-55137f108374","name":"1. initiate static data","type":"n8n-nodes-base.code","position":[120,-20],"parameters":{"jsCode":"// initialize staticData object\nconst workflowStaticData = $getWorkflowStaticData('global');\n\n// initialize accessToken on staticData if it desn't exist yet\nif (!workflowStaticData.hasOwnProperty('accessToken')) {\n  workflowStaticData.accessToken = 0\n}\n\n// initializing any other variables on the staticData object\nif (!workflowStaticData.hasOwnProperty('timestamp')) {\n  workflowStaticData.timestamp = $now.toISO()\n}\n\nreturn [\n  {\n      // data: $input.all(),\n      accessToken: workflowStaticData.accessToken,\n      timestamp: workflowStaticData.timestamp,\n      // today: $today\n  }\n];"},"notesInFlow":false,"typeVersion":2,"notes":"This code node performs automated tasks as part of the workflow."}],"connections":{"Webhook":{"main":[[],[],[],[],[],[],[],[],[]]},"get new accessToken":{"main":[[],[],[],[],[],[],[],[],[]]}},"name":"Webhook Workflow","settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"description":"Automated workflow: Webhook Workflow. This workflow integrates 8 different services: webhook, stickyNote, httpRequest, code, scheduleTrigger. It contains 13 nodes and follows best practices for error handling and security.","meta":{"instanceId":"workflow-8a93542e","versionId":"1.0.0","createdAt":"2025-09-29T07:07:42.642679","updatedAt":"2025-09-29T07:07:42.642696","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"notes":"Excellent quality workflow: Webhook Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}