{"nodes":[{"name":"Airtable","type":"n8n-nodes-base.airtable","position":[1650,300],"parameters":{"table":"Pokemon","operation":"list","additionalOptions":{}},"credentials":{"airtableApi":"Airtable Credentials @n8n"},"typeVersion":1,"id":"node-905e6f6f"},{"name":"Redis","type":"n8n-nodes-base.redis","position":[600,600],"parameters":{"key":"{{ $credentials.key }}","ttl":3600,"expire":true,"operation":"incr"},"credentials":{"redis":"Redis Cloud Credentials"},"typeVersion":1,"id":"node-55f2f76c"},{"name":"Redis1","type":"n8n-nodes-base.redis","position":[1200,450],"parameters":{"key":"{{ $credentials.key }}","operation":"incr"},"credentials":{"redis":"Redis Cloud Credentials"},"typeVersion":1,"id":"node-155b97cd"},{"name":"Set1","type":"n8n-nodes-base.set","position":[1600,550],"parameters":{"values":{"string":[{"name":"message","value":"You exceeded your limit"}]},"options":{},"keepOnlySet":true},"typeVersion":1,"id":"node-3d7ccd78"},{"name":"Webhook1","type":"n8n-nodes-base.webhook","position":[200,600],"webhookId":"a3167ed7-98d2-422c-bfe2-e3ba599d19f1","parameters":{"path":"a3167ed7-98d2-422c-bfe2-e3ba599d19f1","options":{},"responseMode":"lastNode","authentication":"{{ $credentials.headerAuth }}"},"credentials":{"httpHeaderAuth":"Credential Example"},"typeVersion":1,"id":"node-0e286c24"},{"name":"Function","type":"n8n-nodes-base.function","position":[1900,300],"parameters":{"functionCode":" const limit = `Limit consumed: `+ $node['Redis1'].json[$node[\"Set2\"].json[\"apiKey\"]];\n return [\n  {\n    json: {\n      message:limit,\n      body: items.map(item => {\n        const name= item.json.fields.name\n        const url= item.json.fields.url\n        return {name,url}\n      })\n    }\n  }\n]\n"},"typeVersion":1,"id":"node-6e368f92"},{"name":"Set","type":"n8n-nodes-base.set","position":[400,600],"parameters":{"values":{"string":[{"name":"apiKey","value":"={{$json[\"headers\"][\"x-api-key\"] +'-'+ new Date().getHours() +'-'+ new Date().getMinutes()}}"}]},"options":{},"keepOnlySet":true},"typeVersion":1,"id":"node-4d4e41b1"},{"name":"Set2","type":"n8n-nodes-base.set","position":[1000,450],"parameters":{"values":{"string":[{"name":"apiKey","value":"={{$node['Webhook1'].json[\"headers\"][\"x-api-key\"] +'-'+ new Date().getHours()}}"}]},"options":{},"keepOnlySet":true},"typeVersion":1,"id":"node-92c73a75"},{"name":"Set3","type":"n8n-nodes-base.set","position":[1000,700],"parameters":{"values":{"string":[{"name":"message","value":"You exceeded your limit"}]},"options":{},"keepOnlySet":true},"typeVersion":1,"id":"node-ec3bc090"},{"name":"Per hour","type":"n8n-nodes-base.if","position":[1400,450],"parameters":{"conditions":{"number":[{"value1":"={{$json[$node[\"Set2\"].json[\"apiKey\"]]}}","value2":60}],"string":[]}},"typeVersion":1,"id":"node-8cb729eb"},{"name":"Per minute","type":"n8n-nodes-base.if","position":[800,600],"parameters":{"conditions":{"number":[{"value1":"={{$json[$node[\"Set\"].json[\"apiKey\"]]}}","value2":10,"operation":"smallerEqual"}]}},"typeVersion":1,"id":"node-11e6fe06"},{"id":"error-d380966e","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-570d7d98","versionId":"1.0.0","createdAt":"2025-09-29T07:08:00.089473","updatedAt":"2025-09-29T07:08:00.089488","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."}