AutomationFlowsAI & RAG › Automatically Detect & Classify Github API Errors with Gpt-4o to Airtable,…

Automatically Detect & Classify Github API Errors with Gpt-4o to Airtable,…

Original n8n title: Automatically Detect & Classify Github API Errors with Gpt-4o to Airtable, Notion & Slack

ByRahul Joshi @rahul08 on n8n.io

Automatically detect, classify, and document GitHub API errors using AI. This workflow connects GitHub, OpenAI (GPT-4o), Airtable, Notion, and Slack to build a real-time, searchable API error knowledge base — helping engineering and support teams respond faster, stay aligned,…

Event trigger★★★★★ complexityAI-powered30 nodesGithub TriggerAgentOpenAI ChatOutput Parser StructuredMemory Buffer WindowAirtableNotionSlack
AI & RAG Trigger: Event Nodes: 30 Complexity: ★★★★★ AI nodes: yes Added:
Automatically Detect & Classify Github API Errors with Gpt-4o to Airtable,… — n8n workflow card showing Github Trigger, Agent, OpenAI Chat integration

This workflow corresponds to n8n.io template #10335 — we link there as the canonical source.

This workflow follows the Agent → Airtable recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "gceCBgo6PVxGolsl",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Build AI-Powered API Error Catalog from GitHub to Airtable, Notion & Slack",
  "tags": [],
  "nodes": [
    {
      "id": "36883e78-6c02-40b3-8749-8f9c2ca8fcfe",
      "name": "Trigger Configuration",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1760,
        -64
      ],
      "parameters": {
        "color": 2,
        "width": 564,
        "height": 376,
        "content": "## \ud83e\udded GitHub Issue Trigger  \n\nListens for new or updated issues marked \u201cbug\u201d or \u201cerror.\u201d  \nPrepares clean JSON data (title, body, repo, timestamp) for AI processing.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7d3e76db-cb71-4139-8771-734579629862",
      "name": "AI Classification",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        -176
      ],
      "parameters": {
        "color": 2,
        "width": 660,
        "height": 680,
        "content": "## \ud83e\udd16 AI Classification & Parsing  \n\nAnalyzes the GitHub issue text using GPT-4o.  \nExtracts error type, root cause, and severity, then formats structured results for Airtable, Notion, and Slack."
      },
      "typeVersion": 1
    },
    {
      "id": "5e8dbb53-1a51-4ec8-8147-7bde48282472",
      "name": "Response Parsing",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        -144
      ],
      "parameters": {
        "color": 2,
        "width": 416,
        "height": 472,
        "content": "## \u2699\ufe0f Intelligent Routing  \n\n\nDecides which team should handle the issue based on AI classification.  \nRoutes the data to DevOps, Backend, Support, or API branches automatically."
      },
      "typeVersion": 1
    },
    {
      "id": "911ab0f0-4a1b-4981-9229-39eff9e5fea5",
      "name": "Slack Alerts",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -352
      ],
      "parameters": {
        "color": 2,
        "width": 460,
        "height": 988,
        "content": "## \ud83d\uddc2\ufe0f Database Logging  \n\nSaves each analyzed error to Airtable and Notion for tracking and documentation.  \nMaps standard fields like Error Code, Category, Severity, and Suggested Action."
      },
      "typeVersion": 1
    },
    {
      "id": "34b1571d-94d4-4c19-83ca-66598c20e5b3",
      "name": "Prepare GitHub Issue Data",
      "type": "n8n-nodes-base.set",
      "position": [
        -1328,
        128
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "9dfaa4d6-3b16-48e5-8787-36d45fc877d7",
              "name": "Issue Title",
              "type": "string",
              "value": "={{ $json.body.issue.title }}"
            },
            {
              "id": "c1d46bc2-0774-4999-aaa2-80dda17efa9b",
              "name": "Issue Body",
              "type": "string",
              "value": "={{ $json.body.issue.body }}"
            },
            {
              "id": "05f2e592-a943-4fa3-92f7-e635cbd5019b",
              "name": "Issue URL",
              "type": "string",
              "value": "={{ $json.body.issue.html_url }}"
            },
            {
              "id": "6aeef038-6b7e-4953-9a30-518201d90e12",
              "name": "Issue Number",
              "type": "number",
              "value": "={{ $json.body.issue.number }}"
            },
            {
              "id": "ead4db1d-0c1a-49d6-83a7-6368feecbc3c",
              "name": "Repository Name",
              "type": "string",
              "value": "={{ $json.body.repository.full_name }}"
            },
            {
              "id": "0eb094bb-8360-4240-bb60-c1fdf8eebc97",
              "name": "Created At",
              "type": "string",
              "value": "={{ $json.body.repository.created_at }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "5bc68cc4-2dd7-4f06-aee1-720003d1a42e",
      "name": "GitHub Issue Created/Updated",
      "type": "n8n-nodes-base.githubTrigger",
      "position": [
        -1552,
        128
      ],
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "url",
          "value": "="
        },
        "events": [
          "issues"
        ],
        "options": {},
        "repository": {
          "__rl": true,
          "mode": "url",
          "value": "="
        },
        "authentication": "oAuth2"
      },
      "credentials": {
        "githubOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "6ac5f56a-aa1b-4236-a8df-ce3d242721c1",
      "name": "AI: Classify API Error (GPT-4o)",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -1056,
        128
      ],
      "parameters": {
        "text": "=Analyze this GitHub API error issue:\n\nTitle: {{ $json[\"Issue Title\"] }}\nRepository: {{ $json[\"Repository Name\"] }}\nIssue Number: #{{ $json[\"Issue Number\"] }}\nCreated: {{ $json[\"Created At\"] }}\nURL: {{ $json[\"Issue URL\"] }}\n\nIssue Details:\n{{ $json[\"Issue Body\"] }}\n\nPlease classify this error, identify the root cause, suggest a fix, and determine if it matches any existing FAQ category.",
        "options": {
          "systemMessage": "=You are an expert API error classification assistant for a SaaS engineering team.\n\nYour responsibilities include:\n1. Analyze GitHub issues related to API errors and exceptions.\n2. Extract and identify error codes, messages, and endpoints.\n3. Classify each error into one of the standard categories:\n   - Authentication\n   - Server Error\n   - Rate Limit\n   - Invalid Request\n   - Database\n   - Network\n   - Configuration\n   - Other\n4. Determine the root cause based on error patterns and context.\n5. Suggest a clear and actionable fix or next step.\n6. Assign a confidence level for your analysis (high / medium / low).\n7. Determine the severity level of the issue (critical / high / medium / low).\n8. Map the issue to an existing internal FAQ topic if relevant.\n9. Assign the responsible internal team based on the error category:\n   - **Backend Team** \u2192 Authentication, Database, Server Error\n   - **DevOps Team** \u2192 Infrastructure, Rate Limit, Network, Deployment\n   - **API Team** \u2192 Invalid Request, Configuration, Schema or Integration Issues\n   - **Support Team** \u2192 Other or unclear user-facing errors\n\nAlways respond in **valid JSON** following this exact schema:\n{\n  \"errorCode\": \"\",\n  \"category\": \"\",\n  \"faqMatch\": \"\",\n  \"rootCause\": \"\",\n  \"suggestedAction\": \"\",\n  \"confidence\": \"\",\n  \"severity\": \"\",\n  \"affectedEndpoint\": \"\",\n  \"assignedTeam\": \"\"\n}\n\nBe concise but thorough in your reasoning. Avoid non-JSON text or explanations outside the JSON.\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.1
    },
    {
      "id": "481c36b8-cbbe-49c6-9809-e2dc30f6f665",
      "name": "LLM Model: GPT-4o",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -1104,
        352
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "options": {
          "temperature": 0.7
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ba53d5c2-177f-4ffa-84c8-6c1577c6ce03",
      "name": "Output Parser: Structured JSON Schema",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -848,
        352
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"errorCode\": \"AUTH-401\",\n  \"category\": \"Authentication\",\n  \"faqMatch\": \"Token Expiry Issues\",\n  \"rootCause\": \"Expired access token causing authorization failure on /api/v1/users\",\n  \"suggestedAction\": \"Implement token refresh mechanism and validate expiration logic.\",\n  \"confidence\": \"high\",\n  \"severity\": \"medium\",\n  \"affectedEndpoint\": \"/api/v1/users\",\n  \"assignedTeam\": \"Backend Team\"\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "dba69663-c2b5-4f83-a378-547092bb9100",
      "name": "AI Memory Buffer",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -976,
        352
      ],
      "parameters": {
        "sessionKey": "\"AI Agent - Error Analyzer\"",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "baa722d9-3f87-4391-83e1-30a39ec1942f",
      "name": "Parse AI Classification Output",
      "type": "n8n-nodes-base.code",
      "position": [
        -640,
        128
      ],
      "parameters": {
        "jsCode": "// Get all input items\nconst items = $input.all();\n\n// Process each item\nconst formattedItems = items.map(item => {\n  // Get AI output\n  const aiOutput = item.json.output || item.json;\n\n  // Get original issue data from earlier node\n  const issueData = $('Prepare GitHub Issue Data').first().json || {};\n\n  // Format for Airtable, Notion, and Slack\n  return {\n    json: {\n      // Original Issue Data\n      issueTitle: issueData.issueTitle || issueData[\"Issue Title\"] || \"Untitled Issue\",\n      issueUrl: issueData.issueUrl || issueData[\"Issue URL\"] || \"\",\n      issueNumber: issueData.issueNumber || issueData[\"Issue Number\"] || 0,\n      issueBody: issueData.issueBody || issueData[\"Issue Body\"] || \"\",\n      repoName: issueData.repoName || issueData[\"Repository Name\"] || \"\",\n      createdAt: issueData.createdAt || issueData[\"Created At\"] || new Date().toISOString(),\n\n      // AI Analysis Results\n      errorCode: aiOutput.errorCode || \"UNKNOWN\",\n      category: aiOutput.category || \"Uncategorized\",\n      faqMatch: aiOutput.faqMatch || \"No FAQ Match\",\n      rootCause: aiOutput.rootCause || \"Root cause unknown\",\n      suggestedAction: aiOutput.suggestedAction || \"Manual investigation required\",\n      confidence: aiOutput.confidence || \"low\",\n      severity: aiOutput.severity || \"medium\",\n      affectedEndpoint: aiOutput.affectedEndpoint || \"Unknown endpoint\",\n      assignedTeam: aiOutput.assignedTeam || \"Unassigned\",\n\n      // Additional metadata\n      analyzedAt: new Date().toISOString(),\n      status: \"pending_review\",\n\n      // \ud83e\uddf1 Formatted text for Notion description\n      notionDescription: `**Error Code:** ${aiOutput.errorCode}\n**Category:** ${aiOutput.category}\n**Severity:** ${aiOutput.severity}\n**Confidence:** ${aiOutput.confidence}\n**Assigned Team:** ${aiOutput.assignedTeam}\n\n**Root Cause:**\n${aiOutput.rootCause}\n\n**Suggested Action:**\n${aiOutput.suggestedAction}\n\n**Affected Endpoint:**\n${aiOutput.affectedEndpoint}\n\n**Original Issue:**\n${issueData.issueBody || issueData[\"Issue Body\"] || \"\"}`,\n\n      // \ud83d\udcac Formatted text for Slack\n      slackMessage: `\ud83d\udea8 *New API Error Analyzed*\n\n*Error Code:* ${aiOutput.errorCode}\n*Category:* ${aiOutput.category}\n*Severity:* ${aiOutput.severity}\n*Confidence:* ${aiOutput.confidence}\n\ud83d\udc65 *Assigned Team:* ${aiOutput.assignedTeam}\n\n*FAQ Match:* ${aiOutput.faqMatch}\n\n*Root Cause:*\n${aiOutput.rootCause}\n\n*Suggested Action:*\n${aiOutput.suggestedAction}\n\n*GitHub Issue:* ${issueData.issueUrl || issueData[\"Issue URL\"] || \"N/A\"}\n*Repository:* ${issueData.repoName || issueData[\"Repository Name\"] || \"N/A\"}`,\n\n      // \ud83d\udcca Airtable fields object (ready to use)\n      airtableFields: {\n        \"Error Code\": aiOutput.errorCode,\n        \"Error Category\": aiOutput.category,\n        \"FAQ Match\": aiOutput.faqMatch,\n        \"Root Cause\": aiOutput.rootCause,\n        \"Suggested Action\": aiOutput.suggestedAction,\n        \"Confidence\": aiOutput.confidence,\n        \"Severity\": aiOutput.severity,\n        \"Affected Endpoint\": aiOutput.affectedEndpoint,\n        \"Assigned Team\": aiOutput.assignedTeam || \"Unassigned\",\n        \"Source URL\": issueData.issueUrl || issueData[\"Issue URL\"] || \"\",\n        \"Repository\": issueData.repoName || issueData[\"Repository Name\"] || \"\",\n        \"Issue Number\": issueData.issueNumber || issueData[\"Issue Number\"] || 0,\n        \"Status\": \"New\",\n        \"Created At\": new Date().toISOString()\n      }\n    }\n  };\n});\n\nreturn formattedItems;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "fc8db243-9c6a-417f-a538-1c6c3dbc747b",
      "name": "Check: Valid AI Response or Data Missing",
      "type": "n8n-nodes-base.if",
      "position": [
        -416,
        128
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "32a385f7-3200-4e72-9730-555b90a42751",
              "operator": {
                "type": "string",
                "operation": "isEmpty"
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": ""
            },
            {
              "id": "0eca57c7-3933-4f19-856a-7f0d4dc08902",
              "operator": {
                "type": "object",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.airtableFields }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "8cd461a6-208e-4ff1-8fe5-744227986bd8",
      "name": "Route by Assigned Team",
      "type": "n8n-nodes-base.switch",
      "position": [
        -192,
        96
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "6fca3214-bd0f-4b4e-9acc-c6806e43584c",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.assignedTeam }}",
                    "rightValue": "DevOps Team"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "d416b5a4-a371-4f26-b46c-e7e2f8a5b8e3",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.assignedTeam }}",
                    "rightValue": "Backend Team"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "b294f578-9eef-41db-99a4-63372b575be0",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.assignedTeam }}",
                    "rightValue": "Support Team"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "8d5d93bb-502e-41c5-9df8-18410f493e0e",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.assignedTeam }}",
                    "rightValue": "API Team"
                  }
                ]
              }
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.3
    },
    {
      "id": "51f79f94-dc6c-41df-984d-fe25efb895ff",
      "name": "Airtable: Create Record (DevOps)",
      "type": "n8n-nodes-base.airtable",
      "position": [
        32,
        -160
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblZvyR7J8hndLlUZ",
          "cachedResultUrl": "https://airtable.com/appsZ3Uuh5PnD215s/tblZvyR7J8hndLlUZ",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "Name": "={{ $json.issueTitle }}",
            "Status": "Todo",
            "Severity": "={{ $json.severity }}",
            "FAQ Match": "={{ $json.faqMatch }}",
            "Error Code": "={{ $json.airtableFields[\"Error Code\"] }}",
            "Repository": "={{ $json.airtableFields.Repository }}",
            "Root Cause": "={{ $json.rootCause }}",
            "Source URL": "={{ $json.airtableFields[\"Source URL\"] }}",
            "Error Category": "={{ $json.airtableFields[\"Error Category\"] }}",
            "Suggested Action": "={{ $json.suggestedAction }}",
            "Affected Endpoint": "={{ $json.affectedEndpoint }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Notes",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Assignee",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Assignee",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Todo",
                  "value": "Todo"
                },
                {
                  "name": "In progress",
                  "value": "In progress"
                },
                {
                  "name": "Done",
                  "value": "Done"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Attachments",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Attachments",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Attachment Summary",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Attachment Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Error Code",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Error Code",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Error Category",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Error Category",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "FAQ Match",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "FAQ Match",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Root Cause",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Root Cause",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Suggested Action",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Suggested Action",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Confidence",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Confidence",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Severity",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Severity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Affected Endpoint",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Affected Endpoint",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Source URL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Source URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Repository",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Repository",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Issue Number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Issue Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Created At",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Created At",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "be976a3b-ab8e-4095-9ba1-b36d47bc6817",
      "name": "Notion: Log Issue (DevOps)",
      "type": "n8n-nodes-base.notion",
      "position": [
        256,
        -160
      ],
      "parameters": {
        "title": "={{ $json.fields.Name }}",
        "simple": false,
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "Status|status",
              "statusValue": "Todo"
            },
            {
              "key": "Error Category|select",
              "selectValue": "={{ $json.fields[\"Error Category\"] }}"
            },
            {
              "key": "FAQ Match|rich_text",
              "textContent": "={{ $json.fields[\"FAQ Match\"] }}"
            },
            {
              "key": "Root Cause|rich_text",
              "textContent": "={{ $json.fields[\"Root Cause\"] }}"
            },
            {
              "key": "Suggested Action|rich_text",
              "textContent": "={{ $json.fields[\"Suggested Action\"] }}"
            },
            {
              "key": "Severity|select",
              "selectValue": "High"
            },
            {
              "key": "Affected Endpoint|rich_text",
              "textContent": "={{ $json.fields[\"Affected Endpoint\"] }}"
            },
            {
              "key": "Source URL|url",
              "urlValue": "={{ $json.fields[\"Source URL\"] }}"
            },
            {
              "key": "Repository|rich_text",
              "textContent": "={{ $json.fields.Repository }}"
            },
            {
              "key": "Created At|date",
              "date": "={{ $json.fields[\"Created At\"] }}"
            }
          ]
        }
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "63b1b8c7-f049-45e7-9985-ed0da37a66c2",
      "name": "Slack Notify: DevOps Team",
      "type": "n8n-nodes-base.slack",
      "position": [
        480,
        -160
      ],
      "parameters": {
        "text": "=:rotating_light: *New API Error FAQ Entry*\n\n*Error Code:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['Error Code'] }}\n*Category:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['Error Category'] }}\n*FAQ Match:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['FAQ Match'] }}\n\n*Suggested Action:*  {{ $('Airtable: Create Record (DevOps)').item.json.fields['Suggested Action'] }}\n\n*GitHub Issue:* {{ $('Parse AI Classification Output').item.json.issueUrl }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "294932fc-d262-4915-98d1-be5d4a2357c5",
      "name": "Notion: Log Issue (Backend)",
      "type": "n8n-nodes-base.notion",
      "position": [
        32,
        32
      ],
      "parameters": {
        "title": "={{ $json.airtableFields[\"Error Code\"] }}",
        "simple": false,
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "Status|status",
              "statusValue": "Todo"
            },
            {
              "key": "Error Category|select",
              "selectValue": "={{ $json.airtableFields[\"Error Category\"] }}"
            },
            {
              "key": "FAQ Match|rich_text",
              "textContent": "={{ $json.airtableFields[\"FAQ Match\"] }}"
            },
            {
              "key": "Root Cause|rich_text",
              "textContent": "={{ $json.airtableFields[\"Root Cause\"] }}"
            },
            {
              "key": "Suggested Action|rich_text",
              "textContent": "={{ $json.airtableFields[\"Suggested Action\"] }}"
            },
            {
              "key": "Severity|select",
              "selectValue": "High"
            },
            {
              "key": "Affected Endpoint|rich_text",
              "textContent": "={{ $json.airtableFields[\"Affected Endpoint\"] }}"
            },
            {
              "key": "Source URL|url",
              "urlValue": "={{ $json.airtableFields[\"Source URL\"] }}"
            },
            {
              "key": "Repository|rich_text",
              "textContent": "={{ $json.airtableFields.Repository }}"
            },
            {
              "key": "Created At|date",
              "date": "={{ $json.airtableFields[\"Created At\"] }}"
            }
          ]
        }
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "924557fe-310e-43d9-a477-50e195ea9a38",
      "name": "Slack Notify: Backend Team",
      "type": "n8n-nodes-base.slack",
      "position": [
        256,
        32
      ],
      "parameters": {
        "text": "=:rotating_light: *New API Error FAQ Entry*\n\n*Error Code:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['Error Code'] }}\n*Category:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['Error Category'] }}\n*FAQ Match:* {{ $('Airtable: Create Record (DevOps)').item.json.fields['FAQ Match'] }}\n\n*Suggested Action:*  {{ $('Airtable: Create Record (DevOps)').item.json.fields['Suggested Action'] }}\n\n*GitHub Issue:* {{ $('Parse AI Classification Output').item.json.issueUrl }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "f2160801-0978-4a63-8bba-07b44f075606",
      "name": "Airtable: Create Record (Support)",
      "type": "n8n-nodes-base.airtable",
      "position": [
        32,
        224
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblZvyR7J8hndLlUZ",
          "cachedResultUrl": "https://airtable.com/appsZ3Uuh5PnD215s/tblZvyR7J8hndLlUZ",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "Name": "={{ $json.issueTitle }}",
            "Status": "Todo",
            "Severity": "={{ $json.severity }}",
            "FAQ Match": "={{ $json.faqMatch }}",
            "Error Code": "={{ $json.airtableFields[\"Error Code\"] }}",
            "Repository": "={{ $json.airtableFields.Repository }}",
            "Root Cause": "={{ $json.rootCause }}",
            "Source URL": "={{ $json.airtableFields[\"Source URL\"] }}",
            "Error Category": "={{ $json.airtableFields[\"Error Category\"] }}",
            "Suggested Action": "={{ $json.suggestedAction }}",
            "Affected Endpoint": "={{ $json.affectedEndpoint }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Notes",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Assignee",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Assignee",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Todo",
                  "value": "Todo"
                },
                {
                  "name": "In progress",
                  "value": "In progress"
                },
                {
                  "name": "Done",
                  "value": "Done"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Attachments",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Attachments",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Attachment Summary",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Attachment Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Error Code",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Error Code",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Error Category",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Error Category",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "FAQ Match",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "FAQ Match",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Root Cause",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Root Cause",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Suggested Action",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Suggested Action",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Confidence",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Confidence",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Severity",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Severity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Affected Endpoint",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Affected Endpoint",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Source URL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Source URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Repository",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Repository",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Issue Number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Issue Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Created At",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Created At",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "c3bcb44a-b3ce-4da0-8fd3-507dad3d1a99",
      "name": "Slack Notify: Support Team",
      "type": "n8n-nodes-base.slack",
      "position": [
        480,
        224
      ],
      "parameters": {
        "text": "=:rotating_light: *New API Error FAQ Entry*\n\n*Error Code:* {{ $('Airtable: Create Record (Support)').item.json.fields['Error Code'] }}\n*Category:* {{ $('Airtable: Create Record (Support)').item.json.fields['Error Category'] }}\n*FAQ Match:* {{ $('Airtable: Create Record (Support)').item.json.fields['FAQ Match'] }}\n\n*Suggested Action:*  {{ $('Airtable: Create Record (Support)').item.json.fields['Suggested Action'] }}\n\n*GitHub Issue:* {{ $('Parse AI Classification Output').item.json.issueUrl }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "89a3e79b-89a9-498e-86cd-9fc06a920889",
      "name": "Airtable: Create Record (API Team)",
      "type": "n8n-nodes-base.airtable",
      "position": [
        32,
        416
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblZvyR7J8hndLlUZ",
          "cachedResultUrl": "https://airtable.com/appsZ3Uuh5PnD215s/tblZvyR7J8hndLlUZ",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "Name": "={{ $json.issueTitle }}",
            "Status": "Todo",
            "Severity": "={{ $json.severity }}",
            "FAQ Match": "={{ $json.faqMatch }}",
            "Error Code": "={{ $json.airtableFields[\"Error Code\"] }}",
            "Repository": "={{ $json.airtableFields.Repository }}",
            "Root Cause": "={{ $json.rootCause }}",
            "Source URL": "={{ $json.airtableFields[\"Source URL\"] }}",
            "Error Category": "={{ $json.airtableFields[\"Error Category\"] }}",
            "Suggested Action": "={{ $json.suggestedAction }}",
            "Affected Endpoint": "={{ $json.affectedEndpoint }}"
          },
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Notes",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Assignee",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Assignee",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Todo",
                  "value": "Todo"
                },
                {
                  "name": "In progress",
                  "value": "In progress"
                },
                {
                  "name": "Done",
                  "value": "Done"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Attachments",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Attachments",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Attachment Summary",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Attachment Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Error Code",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Error Code",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Error Category",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Error Category",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "FAQ Match",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "FAQ Match",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Root Cause",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Root Cause",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Suggested Action",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Suggested Action",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Confidence",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Confidence",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Severity",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Severity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Affected Endpoint",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Affected Endpoint",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Source URL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Source URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Repository",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Repository",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Issue Number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Issue Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Created At",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Created At",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "e619b7fc-f78b-4899-af27-a97d73578515",
      "name": "Notion: Log Issue (Support Team)",
      "type": "n8n-nodes-base.notion",
      "position": [
        256,
        224
      ],
      "parameters": {
        "title": "={{ $json.fields.Name }}",
        "simple": false,
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "Status|status",
              "statusValue": "Todo"
            },
            {
              "key": "Error Category|select",
              "selectValue": "={{ $json.fields[\"Error Category\"] }}"
            },
            {
              "key": "FAQ Match|rich_text",
              "textContent": "={{ $json.fields[\"FAQ Match\"] }}"
            },
            {
              "key": "Root Cause|rich_text",
              "textContent": "={{ $json.fields[\"Root Cause\"] }}"
            },
            {
              "key": "Suggested Action|rich_text",
              "textContent": "={{ $json.fields[\"Suggested Action\"] }}"
            },
            {
              "key": "Severity|select",
              "selectValue": "High"
            },
            {
              "key": "Affected Endpoint|rich_text",
              "textContent": "={{ $json.fields[\"Affected Endpoint\"] }}"
            },
            {
              "key": "Source URL|url",
              "urlValue": "={{ $json.fields[\"Source URL\"] }}"
            },
            {
              "key": "Repository|rich_text",
              "textContent": "={{ $json.fields.Repository }}"
            },
            {
              "key": "Created At|date",
              "date": "={{ $json.fields[\"Created At\"] }}"
            }
          ]
        }
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "eaded3ea-f394-45f8-ad39-cdb71ee40e56",
      "name": "Notion: Log Issue (API Team)",
      "type": "n8n-nodes-base.notion",
      "position": [
        256,
        416
      ],
      "parameters": {
        "title": "={{ $json.fields.Name }}",
        "simple": false,
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "Status|status",
              "statusValue": "Todo"
            },
            {
              "key": "Error Category|select",
              "selectValue": "={{ $json.fields[\"Error Category\"] }}"
            },
            {
              "key": "FAQ Match|rich_text",
              "textContent": "={{ $json.fields[\"FAQ Match\"] }}"
            },
            {
              "key": "Root Cause|rich_text",
              "textContent": "={{ $json.fields[\"Root Cause\"] }}"
            },
            {
              "key": "Suggested Action|rich_text",
              "textContent": "={{ $json.fields[\"Suggested Action\"] }}"
            },
            {
              "key": "Severity|select",
              "selectValue": "High"
            },
            {
              "key": "Affected Endpoint|rich_text",
              "textContent": "={{ $json.fields[\"Affected Endpoint\"] }}"
            },
            {
              "key": "Source URL|url",
              "urlValue": "={{ $json.fields[\"Source URL\"] }}"
            },
            {
              "key": "Repository|rich_text",
              "textContent": "={{ $json.fields.Repository }}"
            },
            {
              "key": "Created At|date",
              "date": "={{ $json.fields[\"Created At\"] }}"
            }
          ]
        }
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "5f83906a-f47d-4fad-99d8-916ddf9249c7",
      "name": "Notify API Team",
      "type": "n8n-nodes-base.slack",
      "position": [
        480,
        416
      ],
      "parameters": {
        "text": "=:rotating_light: *New API Error FAQ Entry*\n\n*Error Code:* {{ $('Airtable: Create Record (API Team)').item.json.fields['Error Code'] }}\n*Category:* {{ $('Airtable: Create Record (API Team)').item.json.fields['Error Category'] }}\n*FAQ Match:* {{ $('Airtable: Create Record (API Team)').item.json.fields['FAQ Match'] }}\n\n*Suggested Action:*  {{ $('Airtable: Create Record (API Team)').item.json.fields['Suggested Action'] }}\n\n*GitHub Issue:* {{ $('Parse AI Classification Output').item.json.issueUrl }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "72f825c7-add5-49b8-9458-dd4fa4e916b7",
      "name": "Error Handler Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        -1616,
        640
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "eb4f81f3-7256-4624-b8f5-a8050effbd57",
      "name": "Slack: Send Error Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        -1408,
        640
      ],
      "parameters": {
        "text": "=\u274c *Error in API Error Catalog Workflow* *Node:* {{ $json.node.name }} *Message:* {{ $json.error.message }} *Time:* {{ $json.timestamp }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "7c0f800e-2632-4c48-b0ab-da4672f352ae",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1888,
        496
      ],
      "parameters": {
        "color": 2,
        "width": 672,
        "height": 336,
        "content": "## \ud83d\udea8 Error Handling \n\n \nCatches any workflow failure and posts an alert to Slack.  \nIncludes node name, error message, and timestamp for quick debugging.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "07514bfc-fd27-44e9-b269-25ef437daa3e",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1776,
        -592
      ],
      "parameters": {
        "width": 512,
        "height": 416,
        "content": "## \ud83e\udde9 Build AI-Powered API Error Catalog  \n### How it works\nThis workflow automatically listens for new GitHub issues labeled as \u201cbug\u201d or \u201cerror\u201d, classifies them with OpenAI GPT-4o, and logs structured insights into Airtable, Notion, and Slack.  \nIt routes each issue to the correct internal team (DevOps, Backend, Support, or API) and provides an AI-suggested fix and FAQ match.\n\n### Setup steps\n1. Connect your **GitHub** account and select your repository.\n2. Add your **OpenAI** credentials (GPT-4o or GPT-4o-mini).\n3. Connect **Airtable** and create a table with matching field names.\n4. Connect **Notion** and select your database (status, category, etc.).\n5. Connect **Slack** and set your target channel IDs.\n6. Run once manually to initialize webhook triggers.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "616d9e85-fd78-40be-9508-1aea10a8896f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        432,
        -352
      ],
      "parameters": {
        "color": 2,
        "height": 976,
        "content": "## \ud83d\udcac Slack Alerts  \nSends team-specific alerts summarizing the error, category, and recommended fix.  \nHelps each team act quickly on critical issues."
      },
      "typeVersion": 1
    },
    {
      "id": "8f53d912-7112-4496-bbee-a5c084fc3765",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1248,
        -592
      ],
      "parameters": {
        "width": 320,
        "height": 272,
        "content": "## \ud83d\udd10 Credentials & Security\n\n  \n- Use OAuth2 for GitHub and Slack.  \n- API Keys for OpenAI, Airtable, and Notion.  \n- Remove personal IDs or base URLs before publishing.  \n- Test with dummy accounts before sharing the workflow.\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "7b4afc5d-daca-4124-ac02-953beffca4a2",
  "connections": {
    "AI Memory Buffer": {
      "ai_memory": [
        [
          {
            "node": "AI: Classify API Error (GPT-4o)",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "LLM Model: GPT-4o": {
      "ai_languageModel": [
        [
          {
            "node": "AI: Classify API Error (GPT-4o)",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Error Handler Trigger": {
      "main": [
        [
          {
            "node": "Slack: Send Error Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route by Assigned Team": {
      "main": [
        [
          {
            "node": "Airtable: Create Record (DevOps)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notion: Log Issue (Backend)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Airtable: Create Record (Support)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Airtable: Create Record (API Team)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare GitHub Issue Data": {
      "main": [
        [
          {
            "node": "AI: Classify API Error (GPT-4o)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notion: Log Issue (DevOps)": {
      "main": [
        [
          {
            "node": "Slack Notify: DevOps Team",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notion: Log Issue (Backend)": {
      "main": [
        [
          {
            "node": "Slack Notify: Backend Team",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GitHub I

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Automatically detect, classify, and document GitHub API errors using AI. This workflow connects GitHub, OpenAI (GPT-4o), Airtable, Notion, and Slack to build a real-time, searchable API error knowledge base — helping engineering and support teams respond faster, stay aligned,…

Source: https://n8n.io/workflows/10335/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Agent Nodes. Uses lmChatOpenAi, slack, stopAndError, errorTrigger. Event-driven trigger; 72 nodes.

OpenAI Chat, Slack, Stop And Error +12
AI & RAG

This workflow generates comprehensive B2B leads, from a selected Business type in ANY CITY IN THE WORLD, including: Company name; Website; Email (enriched with AI Agent); Phone number; Address; Main L

Output Parser Structured, Memory Buffer Window, Agent +8
AI & RAG

Streamline customer support with a real-time, AI-powered answer engine that detects incoming support emails, classifies intent, identifies the customer’s GEO region, and generates a tailored reply rea

Slack, Gmail Trigger, OpenAI Chat +5
AI & RAG

Streamline Facebook Messenger inbox management with an AI-powered categorization and response system. 💬⚙️ This workflow automatically classifies new messages as Lead, Query, or Spam using GPT-4, route

Error Trigger, Slack, Facebook Graph Api +5
AI & RAG

Automatically analyze the sentiment of Facebook posts and their audience comments using GPT-4 to identify trends and potential PR risks. 🧠💬 This workflow fetches recent posts via the Facebook Graph AP

Error Trigger, Slack, Facebook Graph Api +6