{
  "workflow": {
    "id": 8594,
    "name": "Smart stock trading recommendations with GPT-4, TwelveData & NewsAPI analysis",
    "views": 3029,
    "recentViews": 2,
    "totalViews": 3029,
    "createdAt": "2025-09-15T10:32:18.789Z",
    "description": "## Overview\nAdvanced AI-powered stock analysis workflow that combines multi-timeframe technical analysis with real-time news sentiment to generate actionable BUY/SELL/HOLD recommendations. Uses sophisticated algorithms to process price data, news sentiment, and market context for informed trading decisions.\n\n## Core Features\n\n### Multi-Timeframe Technical Analysis\n- **4-Hour Charts** - Intraday trend analysis and entry timing\n- **Daily Charts** - Primary trend identification and key levels\n- **Weekly Charts** - Long-term context and major trend direction\n- **Moving Average Analysis** - 5, 10, and 20-period trend indicators\n- **Support/Resistance Levels** - Dynamic price level identification\n- **Volume Analysis** - Trading activity and momentum confirmation\n\n### AI-Powered News Sentiment Analysis\n- **Real-Time News Processing** - Latest market-moving headlines\n- **Sentiment Scoring** - Numerical sentiment rating (-1 to +1 scale)\n- **Impact Assessment** - News relevance to stock performance\n- **Multi-Source Analysis** - Comprehensive news coverage evaluation\n- **Context-Aware Processing** - Financial market-specific sentiment analysis\n\n### Intelligent Recommendation Engine\n- **Professional Trading Logic** - Multi-timeframe alignment analysis\n- **Risk/Reward Calculations** - Minimum 1:2 ratio requirements\n- **Entry/Exit Price Targets** - Specific actionable price levels\n- **Stop-Loss Recommendations** - Risk management guidelines\n- **Confidence Scoring** - Recommendation strength assessment\n\n## Technical Capabilities\n\n### Data Sources & APIs\n- **TwelveData API** - Professional-grade price and volume data\n- **NewsAPI Integration** - Comprehensive news coverage\n- **Perplexity AI** - Additional sentiment context and analysis\n- **Chart-Img API** - Visual chart generation for analysis\n- **Real-Time Processing** - Live market data integration\n\n### AI Models & Analysis\n- **GPT-4 Integration** - Advanced natural language processing\n- **Custom Sentiment Engine** - Financial market-tuned sentiment analysis\n- **Multi-Model Approach** - Cross-validation of recommendations\n- **Algorithmic Trading Logic** - Professional-grade decision frameworks\n\n### Visual Analysis Tools\n- **Interactive Charts** - TradingView-style chart generation\n- **Technical Indicators** - Visual representation of analysis\n- **Dark Theme Support** - Professional trading interface\n- **Multiple Timeframes** - Comprehensive visual analysis\n\n## Use Cases & Applications\n\n### Individual Traders\n- **Day Trading Signals** - Short-term entry/exit recommendations\n- **Swing Trading Analysis** - Multi-day position guidance\n- **Risk Management** - Stop-loss and position sizing advice\n- **Market Timing** - Optimal entry point identification\n\n### Investment Research\n- **Due Diligence** - Comprehensive stock analysis\n- **Sentiment Monitoring** - News impact assessment\n- **Technical Screening** - Multi-criteria stock evaluation\n- **Portfolio Optimization** - Individual stock recommendations\n\n### Automated Trading Systems\n- **Signal Generation** - Systematic buy/sell/hold alerts\n- **Risk Controls** - Automated stop-loss calculations\n- **Multi-Asset Analysis** - Scalable across stock universe\n- **Backtesting Support** - Historical recommendation validation\n\n### Financial Advisors & Analysts\n- **Client Reporting** - Professional analysis documentation\n- **Research Automation** - Streamlined analysis workflow\n- **Decision Support** - Data-driven recommendation framework\n- **Market Commentary** - AI-generated insights and rationale\n\n## Key Benefits\n\n### Professional-Grade Analysis\n- **Institutional Quality** - Bank-level analytical frameworks\n- **Multi-Dimensional** - Technical + fundamental + sentiment analysis\n- **Real-Time Processing** - Live market data integration\n- **Objective Decision Making** - Removes emotional bias from analysis\n\n### Time Efficiency\n- **Instant Analysis** - Seconds vs hours of manual research\n- **Automated Processing** - Continuous market monitoring\n- **Scalable Operations** - Analyze multiple stocks simultaneously\n- **24/7 Availability** - Round-the-clock market analysis\n\n### Risk Management\n- **Built-in Stop Losses** - Automatic risk level calculation\n- **Position Sizing** - Risk-appropriate recommendation sizing\n- **Multi-Timeframe Validation** - Reduces false signals\n- **Conservative Approach** - Defaults to HOLD when uncertain\n\n## Setup Requirements\n\n### API Keys Needed\n1. **TwelveData API** - Free tier available at twelvedata.com\n2. **NewsAPI Key** - Free tier available at newsapi.org  \n3. **OpenAI API** - For GPT-4 analysis capabilities\n4. **Perplexity API** - Additional sentiment analysis\n5. **Chart-Img API** - Optional chart visualization (chart-img.com)\n\n### Configuration Steps\n1. **API Integration** - Add your API keys to respective nodes\n2. **Symbol Format** - Supports company names or stock symbols\n3. **Risk Parameters** - Customize stop-loss and target calculations\n4. **Notification Setup** - Configure alert delivery methods\n5. **Testing & Validation** - Verify API connections and data flow\n\n## Advanced Features\n\n### Natural Language Processing\n- **Company Name Recognition** - Automatic symbol conversion\n- **Context Understanding** - Market-aware news interpretation\n- **Multi-Language Support** - Global news source analysis\n- **Entity Extraction** - Key information identification\n\n### Error Handling & Reliability\n- **API Failure Recovery** - Graceful degradation strategies\n- **Data Validation** - Input/output quality checks\n- **Rate Limit Management** - Automatic throttling controls\n- **Backup Data Sources** - Redundant information feeds\n\n### Customization Options\n- **Timeframe Selection** - Adjustable analysis periods\n- **Risk Tolerance** - Configurable risk/reward ratios\n- **Sentiment Weighting** - Balance technical vs fundamental analysis\n- **Alert Thresholds** - Custom trigger conditions\n\n## Important Disclaimers\n\nThis tool provides educational and informational analysis only. All trading decisions should:\n- Consider your personal risk tolerance and financial situation\n- Be validated with additional research and professional advice\n- Account for market volatility and potential losses\n- Follow proper risk management principles\n\n## Performance Optimization\n\n### Speed Enhancements\n- **Parallel Processing** - Simultaneous data retrieval\n- **Caching Strategies** - Reduced API call frequency\n- **Efficient Algorithms** - Optimized calculation methods\n- **Memory Management** - Scalable resource usage\n\n### Accuracy Improvements\n- **Multi-Source Validation** - Cross-reference data points\n- **Historical Backtesting** - Performance validation\n- **Continuous Learning** - Algorithm refinement\n- **Market Adaptation** - Evolving analysis criteria\n\n*Transform your investment research with AI-powered analysis that combines the speed of automation with the depth of professional-grade financial analysis.*",
    "workflow": {
      "id": "INwMUl3OdeqFBlkr",
      "meta": {
        "instanceId": "e56288a9b12ad2dc7c19cc4170f20f7abcacaad5fb3972dd882c9ce4f34e7668",
        "templateCredsSetupCompleted": true
      },
      "name": "AI Powered Stock Setiment Analyzer",
      "tags": [],
      "nodes": [
        {
          "id": "e58d9c28-2f7f-4332-ab99-1431a2f1b68a",
          "name": "When chat message received",
          "type": "@n8n/n8n-nodes-langchain.chatTrigger",
          "position": [
            -896,
            -64
          ],
          "webhookId": "1659fe58-d78d-40dc-92fa-76f3bf599df8",
          "parameters": {
            "options": {
              "responseMode": "responseNodes"
            }
          },
          "typeVersion": 1.3
        },
        {
          "id": "d89ad9e2-7a74-44ff-b889-7cf8435f4481",
          "name": "4h trend",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            -176,
            -256
          ],
          "parameters": {
            "url": "https://api.twelvedata.com/time_series",
            "options": {},
            "sendQuery": true,
            "authentication": "genericCredentialType",
            "genericAuthType": "httpQueryAuth",
            "queryParameters": {
              "parameters": [
                {
                  "name": "symbol",
                  "value": "={{ $json.message.content }}"
                },
                {
                  "name": "interval",
                  "value": "4h"
                }
              ]
            }
          },
          "credentials": {
            "httpQueryAuth": {
              "id": "credential-id",
              "name": "httpQueryAuth Credential"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "bbce42d7-e50e-4b9e-a168-a0f2f68af753",
          "name": "1day trend",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            -176,
            -64
          ],
          "parameters": {
            "url": "https://api.twelvedata.com/time_series",
            "options": {},
            "sendQuery": true,
            "authentication": "genericCredentialType",
            "genericAuthType": "httpQueryAuth",
            "queryParameters": {
              "parameters": [
                {
                  "name": "symbol",
                  "value": "={{ $json.message.content }}"
                },
                {
                  "name": "interval",
                  "value": "1day"
                }
              ]
            }
          },
          "credentials": {
            "httpQueryAuth": {
              "id": "credential-id",
              "name": "httpQueryAuth Credential"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "27d3fd72-380f-412e-b004-bcf101af280d",
          "name": "1week trend",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            -176,
            128
          ],
          "parameters": {
            "url": "https://api.twelvedata.com/time_series",
            "options": {},
            "sendQuery": true,
            "authentication": "genericCredentialType",
            "genericAuthType": "httpQueryAuth",
            "queryParameters": {
              "parameters": [
                {
                  "name": "symbol",
                  "value": "={{ $json.message.content }}"
                },
                {
                  "name": "interval",
                  "value": "1week"
                }
              ]
            }
          },
          "credentials": {
            "httpQueryAuth": {
              "id": "credential-id",
              "name": "httpQueryAuth Credential"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "0f22b55e-8c91-4694-9fde-8810d016fce6",
          "name": "Get News",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            768,
            -48
          ],
          "parameters": {
            "url": "https://newsapi.org/v2/everything",
            "options": {},
            "sendQuery": true,
            "authentication": "genericCredentialType",
            "genericAuthType": "httpQueryAuth",
            "queryParameters": {
              "parameters": [
                {
                  "name": "q",
                  "value": "={{ $json.message.content }}"
                }
              ]
            }
          },
          "credentials": {
            "httpQueryAuth": {
              "id": "credential-id",
              "name": "httpQueryAuth Credential"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "344af493-dad1-48f9-bdbe-d7754ca9c47e",
          "name": "News Sentiment Analyzer",
          "type": "@n8n/n8n-nodes-langchain.openAi",
          "position": [
            1104,
            -48
          ],
          "parameters": {
            "modelId": {
              "__rl": true,
              "mode": "list",
              "value": "gpt-4.1-mini",
              "cachedResultName": "GPT-4.1-MINI"
            },
            "options": {},
            "messages": {
              "values": [
                {
                  "content": "=You are a highly intelligent and accurate sentiment analyzer specializing in the financial markets. Analyze the sentiment of the provided text\n\n- Evaluate the immediate market reaction, recent news impact, and technical volatility.\n- Determine a sentiment category: \"Positive\", \"Neutral\", or \"Negative\".\n- Calculate a numerical score between -1 (extremely negative) and 1 (extremely positive).\n- Provide a concise rationale explaining the short-term sentiment (give a detailed response with appropriate headlines for major events.\n\nYour output must be exactly a JSON object. The value must be an object with three keys: \"category\", \"score\", and \"rationale\". Do not output any additional text.\n\nFor example, your output should look like:\n\n{\n  \"category\": \"Positive\",\n  \"score\": 0.7,\n  \"rationale\": \"...\"\n}\n\nNow, analyze the following text and produce your JSON output: {{ JSON.stringify($json.articles) }}"
                }
              ]
            },
            "jsonOutput": true
          },
          "credentials": {
            "openAiApi": {
              "id": "credential-id",
              "name": "openAiApi Credential"
            }
          },
          "typeVersion": 1.8
        },
        {
          "id": "fb4954a2-9203-4574-8332-2053ec97c3bb",
          "name": "Aggregate",
          "type": "n8n-nodes-base.aggregate",
          "position": [
            320,
            -64
          ],
          "parameters": {
            "options": {},
            "aggregate": "aggregateAllItemData"
          },
          "typeVersion": 1
        },
        {
          "id": "905c0187-c652-468e-9081-bff1cfde5b2f",
          "name": "Merge",
          "type": "n8n-nodes-base.merge",
          "position": [
            144,
            -80
          ],
          "parameters": {
            "numberInputs": 3
          },
          "typeVersion": 3.2
        },
        {
          "id": "26bc4bf6-cae8-4478-8b8a-96033c5fb50d",
          "name": "Merge1",
          "type": "n8n-nodes-base.merge",
          "position": [
            1392,
            -160
          ],
          "parameters": {},
          "typeVersion": 3.2
        },
        {
          "id": "07b32114-e812-4020-97cf-e71eac41afea",
          "name": "Aggregate1",
          "type": "n8n-nodes-base.aggregate",
          "position": [
            1568,
            -160
          ],
          "parameters": {
            "options": {},
            "aggregate": "aggregateAllItemData"
          },
          "typeVersion": 1
        },
        {
          "id": "d7d5bb3f-8364-4cb7-9653-1ebf30d037c9",
          "name": "Technical Data AI Agent",
          "type": "@n8n/n8n-nodes-langchain.agent",
          "position": [
            1808,
            -160
          ],
          "parameters": {
            "text": "=Data Sources\nTechnical Data (Price Action):\n{{ JSON.stringify($json.data[0]) }}\n\nSentiment Analysis (based on news):\nCategory: {{ $json.data[1].message.content.category }}\nScore: {{ $json.data[1].message.content.score }}\nRationale: {{ $json.data[1].message.content.rationale }}\n\n\"Score\" Assignment is between -1 (extremely negative) and 1 (extremely positive)\n\nUse the *Get Stock Sentiment* to additionally get the sentiment about the tool and base your results on the overall sentiment.\n\nAlso - use the *Chat Image for a Stock* tool to get the stock chart image and send it in the output",
            "options": {
              "systemMessage": "=You are a professional algorithmic trader with expertise in multi-timeframe analysis and sentiment integration. Your task is to analyze the provided technical and sentiment data to generate a single, actionable trade recommendation.\n\nAnalysis Framework\n1. Technical Analysis Priority\n\nPrimary Timeframe (4h): Entry/exit timing, immediate trend direction\nSecondary Timeframe (1d): Trend confirmation, key support/resistance levels\nTertiary Timeframe (1w): Overall market context, major trend direction\n\n2. Key Technical Indicators to Evaluate\n\nPrice action patterns (candlestick formations, support/resistance)\nTrend analysis (higher highs/lows, moving average relationships)\nMomentum indicators (RSI overbought/oversold conditions)\nVolume confirmation\nRisk/reward ratio (minimum 1:2 ratio required)\n\n3. Sentiment Integration Rules\n\nBullish sentiment + bullish technicals = Strong BUY signal\nBearish sentiment + bearish technicals = Strong SELL signal\nConflicting signals = HOLD (wait for alignment)\nExtreme sentiment readings = Consider contrarian approach\n\n4. Risk Management Requirements\n\nStop-loss must be placed beyond significant technical levels\nPosition sizing should account for volatility\nMaximum risk per trade: 2% of account\nTarget should provide minimum 1:2 risk/reward ratio\n\nDecision Process\n\nTrend Identification: Determine primary trend across all timeframes\nEntry Signal: Identify optimal entry based on 4h price action\nConfirmation: Validate with 1d trend and volume\nContext Check: Ensure alignment with 1w trend direction\nSentiment Filter: Apply sentiment data to strengthen or weaken signal\nRisk Calculation: Set stop-loss and target based on technical levels\n\nCritical Rules\nOnly recommend BUY/SELL when all timeframes align or when risk/reward is exceptional (>1:3)\nDefault to HOLD when signals are mixed or unclear\nAlways prioritize capital preservation over profit maximization\nEntry price must be actionable (near current market price)\nAll price levels must be justified by technical analysis\n\nOutput Format (STRICT - No additional text)\nTechnical Recommendation: [BUY|SELL|HOLD]\nEntry Price: [specific price level or N/A]\nStop-Loss: [specific price level or N/A]\nTarget Price: [specific price level or N/A]\nRisk/Reward Ratio: [ratio or N/A]\nConfidence Level: [High|Medium|Low|N/A]\nDo not include rationale. \n\nIn the output, only return 'N/A' if no info is known, should be the last resort."
            },
            "promptType": "define"
          },
          "typeVersion": 2.2
        },
        {
          "id": "09d9912b-cdbb-41ac-9f5b-2d92cadddb9e",
          "name": "OpenAI Chat Model",
          "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
          "position": [
            1568,
            64
          ],
          "parameters": {
            "model": {
              "__rl": true,
              "mode": "list",
              "value": "gpt-4o",
              "cachedResultName": "gpt-4o"
            },
            "options": {}
          },
          "credentials": {
            "openAiApi": {
              "id": "credential-id",
              "name": "openAiApi Credential"
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "36d679d0-5b6d-4c2e-873b-1c0822093a84",
          "name": "Code",
          "type": "n8n-nodes-base.code",
          "position": [
            1152,
            -256
          ],
          "parameters": {
            "jsCode": "// n8n JavaScript Code for Stock Data Transformation - With Price Trends\n// Comprehensive output including trend analysis for LLMs\n\nfunction calculateMovingAverage(prices, period) {\n  if (prices.length < period) return null;\n  const sum = prices.slice(0, period).reduce((a, b) => a + b, 0);\n  return Math.round((sum / period) * 100) / 100;\n}\n\nfunction calculateTrendDirection(prices) {\n  if (prices.length < 3) return 'INSUFFICIENT_DATA';\n  \n  const recent = prices.slice(0, 3);\n  const older = prices.slice(3, 6);\n  \n  const recentAvg = recent.reduce((a, b) => a + b, 0) / recent.length;\n  const olderAvg = older.length > 0 ? older.reduce((a, b) => a + b, 0) / older.length : recentAvg;\n  \n  const change = ((recentAvg - olderAvg) / olderAvg) * 100;\n  \n  if (change > 2) return 'STRONG_UPTREND';\n  if (change > 0.5) return 'UPTREND';\n  if (change < -2) return 'STRONG_DOWNTREND';\n  if (change < -0.5) return 'DOWNTREND';\n  return 'SIDEWAYS';\n}\n\nfunction identifySupportResistance(prices, highs, lows) {\n  const sortedPrices = [...prices].sort((a, b) => a - b);\n  const maxPrice = Math.max(...highs);\n  const minPrice = Math.min(...lows);\n  \n  return {\n    resistance: maxPrice,\n    support: minPrice,\n    median: sortedPrices[Math.floor(sortedPrices.length / 2)]\n  };\n}\n\nfunction transformStockDataForLLM(stockData) {\n  const result = {\n    symbol: '',\n    overview: {},\n    price_trends: {},\n    technical_analysis: {},\n    multi_timeframe: {},\n    llm_summary: ''\n  };\n  \n  let dailyData = null;\n  let weeklyData = null;\n  let intraDayData = null;\n  \n  // Separate data by timeframes\n  stockData.forEach(dataSet => {\n    const meta = dataSet.meta;\n    const interval = meta.interval;\n    \n    result.symbol = meta.symbol;\n    \n    if (interval === '1day') dailyData = dataSet;\n    if (interval === '1week') weeklyData = dataSet;\n    if (interval === '4h') intraDayData = dataSet;\n  });\n  \n  if (!dailyData || !dailyData.values.length) {\n    throw new Error('No daily data found');\n  }\n  \n  const dailyValues = dailyData.values;\n  const latest = dailyValues[0];\n  \n  // Basic overview\n  result.overview = {\n    symbol: result.symbol,\n    current_price: parseFloat(latest.close),\n    date: latest.datetime,\n    daily_change: dailyValues[1] ? parseFloat(latest.close) - parseFloat(dailyValues[1].close) : 0,\n    daily_change_percent: dailyValues[1] ? \n      Math.round(((parseFloat(latest.close) - parseFloat(dailyValues[1].close)) / parseFloat(dailyValues[1].close)) * 100 * 100) / 100 : 0,\n    volume: parseInt(latest.volume),\n    day_range: `$${latest.low} - $${latest.high}`\n  };\n  \n  // Extract price arrays for analysis\n  const closePrices = dailyValues.map(d => parseFloat(d.close));\n  const highPrices = dailyValues.map(d => parseFloat(d.high));\n  const lowPrices = dailyValues.map(d => parseFloat(d.low));\n  const volumes = dailyValues.map(d => parseInt(d.volume));\n  \n  // Price trends analysis\n  result.price_trends = {\n    trend_direction: calculateTrendDirection(closePrices),\n    moving_averages: {\n      ma_5: calculateMovingAverage(closePrices, 5),\n      ma_10: calculateMovingAverage(closePrices, 10),\n      ma_20: calculateMovingAverage(closePrices, 20)\n    },\n    price_position: {\n      above_ma5: closePrices[0] > calculateMovingAverage(closePrices, 5),\n      above_ma10: closePrices[0] > calculateMovingAverage(closePrices, 10),\n      above_ma20: closePrices[0] > calculateMovingAverage(closePrices, 20)\n    },\n    recent_performance: {\n      last_5_days: dailyValues.slice(0, 5).map(d => ({\n        date: d.datetime,\n        close: parseFloat(d.close),\n        change_from_prev: dailyValues.indexOf(d) < dailyValues.length - 1 ? \n          parseFloat(d.close) - parseFloat(dailyValues[dailyValues.indexOf(d) + 1].close) : 0,\n        volume: parseInt(d.volume)\n      })),\n      weekly_change: closePrices.length >= 7 ? \n        Math.round(((closePrices[0] - closePrices[6]) / closePrices[6]) * 100 * 100) / 100 : 0,\n      monthly_change: closePrices.length >= 30 ? \n        Math.round(((closePrices[0] - closePrices[29]) / closePrices[29]) * 100 * 100) / 100 : 0\n    }\n  };\n  \n  // Technical analysis\n  const supportResistance = identifySupportResistance(closePrices.slice(0, 30), highPrices.slice(0, 30), lowPrices.slice(0, 30));\n  const avgVolume = volumes.slice(0, 20).reduce((a, b) => a + b, 0) / Math.min(20, volumes.length);\n  \n  result.technical_analysis = {\n    support_resistance: supportResistance,\n    volume_analysis: {\n      current_volume: volumes[0],\n      average_volume_20d: Math.round(avgVolume),\n      volume_ratio: Math.round((volumes[0] / avgVolume) * 100) / 100,\n      volume_trend: volumes[0] > avgVolume * 1.5 ? 'HIGH' : volumes[0] < avgVolume * 0.5 ? 'LOW' : 'NORMAL'\n    },\n    volatility: {\n      daily_volatility: Math.round(((parseFloat(latest.high) - parseFloat(latest.low)) / parseFloat(latest.close)) * 100 * 100) / 100,\n      recent_volatility: Math.round((Math.max(...highPrices.slice(0, 10)) - Math.min(...lowPrices.slice(0, 10))) / closePrices[0] * 100 * 100) / 100\n    },\n    momentum_indicators: {\n      price_vs_support: Math.round(((closePrices[0] - supportResistance.support) / supportResistance.support) * 100 * 100) / 100,\n      price_vs_resistance: Math.round(((supportResistance.resistance - closePrices[0]) / closePrices[0]) * 100 * 100) / 100\n    }\n  };\n  \n  // Multi-timeframe analysis\n  result.multi_timeframe = {\n    daily: {\n      trend: result.price_trends.trend_direction,\n      last_close: closePrices[0]\n    }\n  };\n  \n  // Add weekly analysis if available\n  if (weeklyData && weeklyData.values.length > 1) {\n    const weeklyPrices = weeklyData.values.map(d => parseFloat(d.close));\n    result.multi_timeframe.weekly = {\n      trend: calculateTrendDirection(weeklyPrices),\n      weekly_change: Math.round(((weeklyPrices[0] - weeklyPrices[1]) / weeklyPrices[1]) * 100 * 100) / 100\n    };\n  }\n  \n  // Add intraday analysis if available\n  if (intraDayData && intraDayData.values.length > 1) {\n    const intradayPrices = intraDayData.values.map(d => parseFloat(d.close));\n    result.multi_timeframe.intraday = {\n      trend: calculateTrendDirection(intradayPrices),\n      recent_sessions: intraDayData.values.slice(0, 6).map(d => ({\n        datetime: d.datetime,\n        close: parseFloat(d.close)\n      }))\n    };\n  }\n  \n  // Generate comprehensive LLM summary\n  const ma5 = result.price_trends.moving_averages.ma_5;\n  const ma20 = result.price_trends.moving_averages.ma_20;\n  const trendStrength = result.price_trends.trend_direction;\n  const volumeStatus = result.technical_analysis.volume_analysis.volume_trend;\n  \n  result.llm_summary = `${result.symbol} Technical Analysis Summary:\n  \nCURRENT STATUS: Trading at $${result.overview.current_price} (${result.overview.daily_change >= 0 ? '+' : ''}${result.overview.daily_change_percent}% today)\n\nTREND ANALYSIS:\n- Overall Trend: ${trendStrength}\n- Price vs 5-day MA ($${ma5}): ${closePrices[0] > ma5 ? 'ABOVE' : 'BELOW'}\n- Price vs 20-day MA ($${ma20}): ${closePrices[0] > ma20 ? 'ABOVE' : 'BELOW'}\n- Weekly Performance: ${result.price_trends.recent_performance.weekly_change >= 0 ? '+' : ''}${result.price_trends.recent_performance.weekly_change}%\n\nTECHNICAL LEVELS:\n- Support: $${supportResistance.support}\n- Resistance: $${supportResistance.resistance}\n- Distance to Support: ${result.technical_analysis.momentum_indicators.price_vs_support}%\n\nVOLUME & MOMENTUM:\n- Volume: ${volumeStatus} (${result.technical_analysis.volume_analysis.volume_ratio}x average)\n- Daily Volatility: ${result.technical_analysis.volatility.daily_volatility}%\n\nKEY INSIGHT: Stock is ${trendStrength.toLowerCase()}, trading ${closePrices[0] > ma20 ? 'above' : 'below'} key moving averages with ${volumeStatus.toLowerCase()} volume activity.`;\n  \n  return result;\n}\n\n// Main execution for n8n\ntry {\n  if (!$json || !$json.data || !Array.isArray($json.data)) {\n    throw new Error('Expected input format: { \"data\": [...] }');\n  }\n  \n  const transformedData = transformStockDataForLLM($json.data);\n  \n  return {\n    json: transformedData\n  };\n  \n} catch (error) {\n  return {\n    json: {\n      error: \"Data transformation failed\",\n      details: error.message,\n      expected_format: \"{ data: [{ meta: {...}, values: [...] }] }\"\n    }\n  };\n}"
          },
          "typeVersion": 2
        },
        {
          "id": "e1b272a7-2de0-47cd-a7ed-66adee5205f4",
          "name": "Think",
          "type": "@n8n/n8n-nodes-langchain.toolThink",
          "position": [
            1776,
            80
          ],
          "parameters": {},
          "typeVersion": 1.1
        },
        {
          "id": "64480805-811b-4ab3-871e-13cee359226a",
          "name": "Get Stock Sentiment",
          "type": "n8n-nodes-base.perplexityTool",
          "position": [
            1952,
            256
          ],
          "parameters": {
            "model": "sonar",
            "options": {},
            "messages": {
              "message": [
                {
                  "content": "=Give me recent sentiment about this stock: {{ $('When chat message received').item.json.chatInput }}"
                }
              ]
            },
            "requestOptions": {}
          },
          "credentials": {
            "perplexityApi": {
              "id": "credential-id",
              "name": "perplexityApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "799885b8-c23b-44f3-a0d3-ac2a31051230",
          "name": "Check Twelvedata API Success",
          "type": "n8n-nodes-base.switch",
          "position": [
            480,
            -64
          ],
          "parameters": {
            "rules": {
              "values": [
                {
                  "outputKey": "Success",
                  "conditions": {
                    "options": {
                      "version": 2,
                      "leftValue": "",
                      "caseSensitive": true,
                      "typeValidation": "strict"
                    },
                    "combinator": "and",
                    "conditions": [
                      {
                        "id": "24b4ab24-3435-42a1-8a43-80c32f41b938",
                        "operator": {
                          "type": "string",
                          "operation": "equals"
                        },
                        "leftValue": "={{ $('4h trend').item.json.status }}",
                        "rightValue": "ok"
                      }
                    ]
                  },
                  "renameOutput": true
                },
                {
                  "outputKey": "Error",
                  "conditions": {
                    "options": {
                      "version": 2,
                      "leftValue": "",
                      "caseSensitive": true,
                      "typeValidation": "strict"
                    },
                    "combinator": "and",
                    "conditions": [
                      {
                        "id": "df95719f-22f3-4af3-9886-f3dfae4fde71",
                        "operator": {
                          "type": "string",
                          "operation": "notEquals"
                        },
                        "leftValue": "={{ $('4h trend').item.json.status }}",
                        "rightValue": "ok"
                      }
                    ]
                  },
                  "renameOutput": true
                }
              ]
            },
            "options": {}
          },
          "typeVersion": 3.2
        },
        {
          "id": "8a313633-398e-454c-8f18-bb4b2a665fd1",
          "name": "Get Chart Image for Stock",
          "type": "n8n-nodes-base.httpRequestTool",
          "position": [
            2368,
            192
          ],
          "parameters": {
            "url": "https://api.chart-img.com/v2/tradingview/advanced-chart/storage",
            "method": "POST",
            "options": {
              "response": {}
            },
            "sendBody": true,
            "authentication": "genericCredentialType",
            "bodyParameters": {
              "parameters": [
                {
                  "name": "height",
                  "value": "300"
                },
                {
                  "name": "theme",
                  "value": "dark"
                },
                {
                  "name": "interval",
                  "value": "1W"
                },
                {
                  "name": "style",
                  "value": "baseline"
                },
                {
                  "name": "symbol",
                  "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters4_Value', `set tradingview symbol EXCHANGE:SYMBOL. Example - NASDAQ:MSFT`, 'string') }}"
                }
              ]
            },
            "genericAuthType": "httpHeaderAuth",
            "toolDescription": "Get Chart Image for a Stock for the last 1 week"
          },
          "credentials": {
            "httpHeaderAuth": {
              "id": "credential-id",
              "name": "httpHeaderAuth Credential"
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "ced4c850-4182-451c-ba54-7c4bc00d40a3",
          "name": "Respond with Error",
          "type": "@n8n/n8n-nodes-langchain.chat",
          "position": [
            768,
            240
          ],
          "parameters": {
            "message": "=There was an error:  {{ $json.data[0].message }}",
            "options": {},
            "waitUserReply": false
          },
          "typeVersion": 1
        },
        {
          "id": "66370ec1-4c88-4e92-b10e-3302d11488cf",
          "name": "Respond to Chat",
          "type": "@n8n/n8n-nodes-langchain.chat",
          "position": [
            2384,
            -160
          ],
          "parameters": {
            "message": "={{ $json.output }}",
            "options": {},
            "waitUserReply": false
          },
          "typeVersion": 1
        },
        {
          "id": "c9c3f88f-8ed6-4413-a4db-d1861b575b84",
          "name": "Convert to Stock Symbol",
          "type": "@n8n/n8n-nodes-langchain.openAi",
          "position": [
            -656,
            -64
          ],
          "parameters": {
            "modelId": {
              "__rl": true,
              "mode": "list",
              "value": "gpt-4.1-mini",
              "cachedResultName": "GPT-4.1-MINI"
            },
            "options": {},
            "messages": {
              "values": [
                {
                  "content": "=I will give you a stock name, just return me the stock symbol. Strictly - Nothing else at all.\n\nStock Name: {{ $json.chatInput }}"
                }
              ]
            }
          },
          "credentials": {
            "openAiApi": {
              "id": "credential-id",
              "name": "openAiApi Credential"
            }
          },
          "typeVersion": 1.8
        },
        {
          "id": "a647a054-5cb3-4d80-8895-08da67ac6f4e",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -320,
            -416
          ],
          "parameters": {
            "color": 5,
            "width": 384,
            "height": 736,
            "content": "## STOCK PRICE TREND\n* Fetch using TwelveData APIs\n* Get your free API Key from here: https://twelvedata.com/\n* Replace your API Key under the Credentials"
          },
          "typeVersion": 1
        },
        {
          "id": "a9d0f2b6-a89c-4872-be86-418ce8d3bb49",
          "name": "Sticky Note1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            672,
            -224
          ],
          "parameters": {
            "color": 4,
            "width": 288,
            "height": 352,
            "content": "## NEWS API\n* Get your free API key from here: https://newsapi.org/\n* Replace your API Key under the Credentials"
          },
          "typeVersion": 1
        },
        {
          "id": "5d09c698-c92b-430e-ac93-664fcb47951b",
          "name": "Sticky Note2",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2192,
            16
          ],
          "parameters": {
            "color": 4,
            "width": 432,
            "height": 352,
            "content": "## CHART-IMG API\n* Get your free API key from here: http://chart-img.com/\n* Replace your API Key under the Credential\n* Optional Step. You can even delete this"
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "3ec964d2-dd25-48ab-a4df-eb5011e5873b",
      "connections": {
        "Code": {
          "main": [
            [
              {
                "node": "Merge1",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Merge": {
          "main": [
            [
              {
                "node": "Aggregate",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Think": {
          "ai_tool": [
            [
              {
                "node": "Technical Data AI Agent",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Merge1": {
          "main": [
            [
              {
                "node": "Aggregate1",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "4h trend": {
          "main": [
            [
              {
                "node": "Merge",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Get News": {
          "main": [
            [
              {
                "node": "News Sentiment Analyzer",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Aggregate": {
          "main": [
            [
              {
                "node": "Check Twelvedata API Success",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "1day trend": {
          "main": [
            [
              {
                "node": "Merge",
                "type": "main",
                "index": 1
              }
            ]
          ]
        },
        "Aggregate1": {
          "main": [
            [
              {
                "node": "Technical Data AI Agent",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "1week trend": {
          "main": [
            [
              {
                "node": "Merge",
                "type": "main",
                "index": 2
              }
            ]
          ]
        },
        "Respond to Chat": {
          "main": [
            []
          ]
        },
        "OpenAI Chat Model": {
          "ai_languageModel": [
            [
              {
                "node": "Technical Data AI Agent",
                "type": "ai_languageModel",
                "index": 0
              }
            ]
          ]
        },
        "Get Stock Sentiment": {
          "ai_tool": [
            [
              {
                "node": "Technical Data AI Agent",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "Convert to Stock Symbol": {
          "main": [
            [
              {
                "node": "4h trend",
                "type": "main",
                "index": 0
              },
              {
                "node": "1day trend",
                "type": "main",
                "index": 0
              },
              {
                "node": "1week trend",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "News Sentiment Analyzer": {
          "main": [
            [
              {
                "node": "Merge1",
                "type": "main",
                "index": 1
              }
            ]
          ]
        },
        "Technical Data AI Agent": {
          "main": [
            [
              {
                "node": "Respond to Chat",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Get Chart Image for Stock": {
          "ai_tool": [
            [
              {
                "node": "Technical Data AI Agent",
                "type": "ai_tool",
                "index": 0
              }
            ]
          ]
        },
        "When chat message received": {
          "main": [
            [
              {
                "node": "Convert to Stock Symbol",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Check Twelvedata API Success": {
          "main": [
            [
              {
                "node": "Code",
                "type": "main",
                "index": 0
              },
              {
                "node": "Get News",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "Respond with Error",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 23,
      "nodeTypes": {
        "n8n-nodes-base.code": {
          "count": 1
        },
        "n8n-nodes-base.merge": {
          "count": 2
        },
        "n8n-nodes-base.switch": {
          "count": 1
        },
        "n8n-nodes-base.aggregate": {
          "count": 2
        },
        "n8n-nodes-base.stickyNote": {
          "count": 3
        },
        "n8n-nodes-base.httpRequest": {
          "count": 4
        },
        "@n8n/n8n-nodes-langchain.chat": {
          "count": 2
        },
        "n8n-nodes-base.perplexityTool": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.agent": {
          "count": 1
        },
        "n8n-nodes-base.httpRequestTool": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.openAi": {
          "count": 2
        },
        "@n8n/n8n-nodes-langchain.toolThink": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.chatTrigger": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.lmChatOpenAi": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "Jitesh Dugar",
      "username": "jiteshdugar",
      "bio": "AI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.",
      "verified": true,
      "links": [
        "https://www.linkedin.com/in/jiteshdugar"
      ],
      "avatar": "https://gravatar.com/avatar/edaa3abb99806b0586dced559d0a5417f24a507e7c4464a63960f0638a4b1b90?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": 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": 112,
        "icon": "fa:map-signs",
        "name": "n8n-nodes-base.switch",
        "codex": {
          "data": {
            "alias": [
              "Router",
              "If",
              "Path",
              "Filter",
              "Condition",
              "Logic",
              "Branch",
              "Case"
            ],
            "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/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/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/automation-for-maintainers-of-open-source-projects/",
                  "icon": "🏷️",
                  "label": "How to automatically manage contributions to open-source projects"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Switch",
          "color": "#506000"
        },
        "iconData": {
          "icon": "map-signs",
          "type": "icon"
        },
        "displayName": "Switch",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "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"
          }
        ]
      },
      {
        "id": 1119,
        "icon": "fa:robot",
        "name": "@n8n/n8n-nodes-langchain.agent",
        "codex": {
          "data": {
            "alias": [
              "LangChain",
              "Chat",
              "Conversational",
              "Plan and Execute",
              "ReAct",
              "Tools"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Agents",
                "Root Nodes"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "AI Agent",
          "color": "#404040"
        },
        "iconData": {
          "icon": "robot",
          "type": "icon"
        },
        "displayName": "AI Agent",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      },
      {
        "id": 1153,
        "icon": "file:openAiLight.svg",
        "name": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
        "codex": {
          "data": {
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Language Models",
                "Root Nodes"
              ],
              "Language Models": [
                "Chat Models (Recommended)"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "OpenAI Chat Model"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="
        },
        "displayName": "OpenAI Chat Model",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      },
      {
        "id": 1236,
        "icon": "file:aggregate.svg",
        "name": "n8n-nodes-base.aggregate",
        "codex": {
          "data": {
            "alias": [
              "Aggregate",
              "Combine",
              "Flatten",
              "Transform",
              "Array",
              "List",
              "Item"
            ],
            "details": "",
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Aggregate"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjRkY2RDVBIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMyIDE0OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE0NmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJINDRjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTAgOTZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDQ0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTQ2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03NCA3NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExNi4yMTdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjU2YzAgMjYuOTc4IDEwLjI3MiA1MS41NTcgMjcuMTE5IDcwLjAzOSA1LjA1NSA1LjU0NSA1LjA1NSAxNC4zNzcgMCAxOS45MjItMTYuODQ3IDE4LjQ4Mi0yNy4xMTkgNDMuMDYxLTI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMySDg2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE2LjIxN2M0NC4xODMgMCA4MC0zNS44MTcgODAtODB2LTU2YzAtMzAuOTI4IDI1LjA3Mi01NiA1Ni01NmE1Ljc4MyA1Ljc4MyAwIDAgMCA1Ljc4My01Ljc4M3YtMzYuNDM0YTUuNzgzIDUuNzgzIDAgMCAwLTUuNzgzLTUuNzgzYy0zMC45MjggMC01Ni0yNS4wNzItNTYtNTZ2LTU2YzAtNDQuMTgzLTM1LjgxNy04MC04MC04MEg4NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNzYgMjQ0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUxMnY1MTJIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="
        },
        "displayName": "Aggregate",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 1247,
        "icon": "fa:comments",
        "name": "@n8n/n8n-nodes-langchain.chatTrigger",
        "codex": {
          "data": {
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes",
              "Langchain"
            ]
          }
        },
        "group": "[\"trigger\"]",
        "defaults": {
          "name": "When chat message received"
        },
        "iconData": {
          "icon": "comments",
          "type": "icon"
        },
        "displayName": "Chat Trigger",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      },
      {
        "id": 1250,
        "icon": "file:openAi.svg",
        "name": "@n8n/n8n-nodes-langchain.openAi",
        "codex": {
          "data": {
            "alias": [
              "LangChain",
              "ChatGPT",
              "Sora",
              "DallE",
              "whisper",
              "audio",
              "transcribe",
              "tts",
              "assistant"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Agents",
                "Miscellaneous",
                "Root Nodes"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "OpenAI"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg1IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NiAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MSA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K"
        },
        "displayName": "OpenAI",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      },
      {
        "id": 1289,
        "icon": "fa:brain",
        "name": "@n8n/n8n-nodes-langchain.toolThink",
        "codex": {
          "data": {
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolthink/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Tools"
              ],
              "Tools": [
                "Other Tools"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Think"
        },
        "iconData": {
          "icon": "brain",
          "type": "icon"
        },
        "displayName": "Think Tool",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      },
      {
        "id": 1313,
        "icon": "fa:comments",
        "name": "@n8n/n8n-nodes-langchain.chat",
        "codex": {
          "data": {
            "alias": [
              "human",
              "wait",
              "hitl"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.respondtochat/"
                }
              ]
            },
            "categories": [
              "Core Nodes",
              "HITL",
              "Langchain"
            ],
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Respond to Chat"
        },
        "iconData": {
          "icon": "comments",
          "type": "icon"
        },
        "displayName": "Respond to Chat",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          },
          {
            "id": 26,
            "name": "Langchain"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 44,
        "name": "Crypto Trading"
      },
      {
        "id": 49,
        "name": "AI Summarization"
      }
    ],
    "image": []
  }
}