Workflow: Production Workflow
Integrations: airtable, function, if, redis, set, stopAndError, webhook

{"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"}, "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "description": "Production-ready workflow: Production Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}