{
  "name": "🎓 Learn API Fundamentals with an Interactive Hands-On Tutorial Workflow",
  "nodes": [
    {
      "id": "52e84ac4-6495-443e-b3d6-16d3291a6261",
      "name": "Start Tutorial",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        320,
        464
      ]
    },
    {
      "id": "5aab442c-2fd7-4b41-ae0f-eeaf9e722213",
      "name": "1. The Kitchen (GET /menu)",
      "type": "n8n-nodes-base.webhook",
      "position": [
        1632,
        464
      ]
    },
    {
      "id": "cee20f21-eb2e-4ea6-947f-acbc7f27a437",
      "name": "Prepare Menu Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1856,
        464
      ]
    },
    {
      "id": "4af53e2a-0d5a-4b2e-8e65-fbc19d138abb",
      "name": "1. The Customer (GET Menu Item)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1312,
        464
      ]
    },
    {
      "id": "a1f76b04-daf5-41b9-b300-332b61d69cda",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -224
      ],
      "parameters": {
        "width": 800,
        "height": 896,
        "content": "## Tutorial - What is an API?\n\nWelcome! This workflow will teach you the basics of APIs (Application Programming Interfaces).\n\n**What is an API?**\nThink of it like ordering food at a restaurant.\n- **Y"
      }
    },
    {
      "id": "d37a6305-25ff-412d-8763-06e4c0a6b8ae",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        160
      ],
      "parameters": {
        "width": 864,
        "height": 512,
        "content": "#### Lesson 1: The Basics (Method & URL)\n\nThis is the simplest possible request.\n\n- **URL (Uniform Resource Locator):** This is the **address of the restaurant's kitchen**. The HTTP Request node needs"
      }
    },
    {
      "id": "edef5d0b-f0a4-4651-9ee4-84ecbe9e8062",
      "name": "2. The Customer (GET with Query Params)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1312,
        1136
      ]
    },
    {
      "id": "a2b5422d-fb46-4737-8182-dbbb50293fa1",
      "name": "2. The Kitchen (GET /order)",
      "type": "n8n-nodes-base.webhook",
      "position": [
        1632,
        1136
      ]
    },
    {
      "id": "91d5b241-64c9-48cf-bf79-fff121d0febf",
      "name": "Prepare Cheese Pizza",
      "type": "n8n-nodes-base.set",
      "position": [
        2064,
        1040
      ]
    },
    {
      "id": "bee0bce4-f854-4c1d-9ad1-b526f02e1925",
      "name": "Prepare Plain Pizza",
      "type": "n8n-nodes-base.set",
      "position": [
        2064,
        1232
      ]
    },
    {
      "id": "d6862155-ea76-4357-bae7-c4329ec1a612",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        704
      ],
      "parameters": {
        "width": 1056,
        "height": 720,
        "content": "#### Lesson 2: Customizing a Request (Query Parameters)\n\nWhat if you want to customize your order? That's what Query Parameters are for.\n\n**Query Parameters:** These are simple `key=value` options add"
      }
    },
    {
      "id": "c568bc8c-822d-42b9-ab9b-2d91ae4e4fed",
      "name": "3. The Customer (POST with Body)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1312,
        1744
      ]
    },
    {
      "id": "0f0dae83-3290-4a5f-a039-3b54d87bcf7d",
      "name": "3. The Kitchen (POST /review)",
      "type": "n8n-nodes-base.webhook",
      "position": [
        1632,
        1744
      ]
    },
    {
      "id": "c5aa4f94-eca3-4321-b961-084917b93b81",
      "name": "Process Review Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1856,
        1744
      ]
    },
    {
      "id": "4020d264-7c01-4cf2-b51e-b8b3f2bc382b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        1456
      ],
      "parameters": {
        "width": 1056,
        "height": 476,
        "content": "#### Lesson 3: Sending Data (POST & Body)\n\nSometimes, you don't want to *get* data, you want to *send* it.\n\n- **Method: `POST`**: This method is used to **send new data** to the server to create or up"
      }
    },
    {
      "id": "0fec2702-e2c9-4090-a327-f1d723b144b6",
      "name": "4. The Customer (GET with Headers/Auth)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1312,
        2608
      ]
    },
    {
      "id": "a35c1fc1-65a3-4d84-b29e-22939d334005",
      "name": "4. The Kitchen (GET /secret-dish)",
      "type": "n8n-nodes-base.webhook",
      "position": [
        1632,
        2608
      ]
    },
    {
      "id": "8cb4d6d3-c29f-4562-a966-d13beafd8f40",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        1968
      ],
      "parameters": {
        "width": 1056,
        "height": 908,
        "content": "#### Lesson 4: Identification (Headers & Auth)\n\nHeaders contain meta-information *about* your request. They're not part of the data itself, but they provide important context. Authentication is a comm"
      }
    },
    {
      "id": "3ab5e611-71d2-4ff3-9462-fb69d60b48aa",
      "name": "5. The Customer (Request with Timeout)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1312,
        3328
      ]
    },
    {
      "id": "5545e004-b8c3-4c47-91ee-31a2efa4c833",
      "name": "5. The Kitchen (GET /slow-service)",
      "type": "n8n-nodes-base.webhook",
      "position": [
        1632,
        3328
      ]
    },
    {
      "id": "237f65ad-3f1d-4afe-8541-89108afd57de",
      "name": "Prepare Slow Response",
      "type": "n8n-nodes-base.set",
      "position": [
        2064,
        3328
      ]
    },
    {
      "id": "dbe83810-b95f-46dd-bc2d-bf456fe11f94",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        2912
      ],
      "parameters": {
        "width": 1056,
        "height": 624,
        "content": "#### Lesson 5: Being Patient (Timeout & Error Handling)\n\nAn API request isn't instant. What if the kitchen is really busy?\n\n- **Timeout:** This is the **maximum amount of time (in milliseconds) you ar"
      }
    },
    {
      "id": "4e74c301-06e2-4b19-8101-3c63816ea615",
      "name": "Wait 3 seconds",
      "type": "n8n-nodes-base.wait",
      "position": [
        1856,
        3328
      ]
    },
    {
      "id": "42619763-955e-40d6-bbdb-23eea3c0bd85",
      "name": "IF Authorized",
      "type": "n8n-nodes-base.if",
      "position": [
        1856,
        2608
      ]
    },
    {
      "id": "562d4436-df8c-47bf-b259-eea95ea88147",
      "name": "IF extra cheese",
      "type": "n8n-nodes-base.if",
      "position": [
        1840,
        1136
      ]
    },
    {
      "id": "df8ea622-c2a5-4f6b-9a09-5d35b1dea0aa",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        -96
      ],
      "parameters": {
        "width": 700,
        "height": 764,
        "content": "## ✨ **CONFIGURATION REQUIRED** ✨\n\nTo use this interactive tutorial, you need to tell the \"Customer\" nodes where to find the \"Kitchen\" nodes.\n\n### **1. Get your Webhook URL**\n\n*   **Activate** this wo"
      }
    },
    {
      "id": "c0c76d70-c630-4630-a22e-1909a410c527",
      "name": "Base URL",
      "type": "n8n-nodes-base.set",
      "position": [
        912,
        464
      ]
    },
    {
      "id": "e5f25f10-a1f0-4d67-b0fb-c3a2b8abf786",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1264,
        2288
      ],
      "parameters": {
        "width": 304,
        "height": 496,
        "content": "### ⚠️ **Security Best Practice**\n\nFor this tutorial, we are putting the API key directly in the header. \n\n**In a real project, NEVER do this!**\n\nAlways use n8n's built-in **Credentials** system to st"
      }
    },
    {
      "id": "e908261b-cced-4539-9ea0-f40fb9e009e5",
      "name": "Respond with Secret",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2064,
        2496
      ]
    },
    {
      "id": "52d54052-eab2-45b8-ac9a-389b7fdf40d3",
      "name": "Respond: Unauthorized (401)",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        2064,
        2704
      ]
    },
    {
      "id": "f9d72d6c-47b8-4f51-8a69-ce4d557ae90f",
      "name": "OpenAPI Spec",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2336,
        704
      ],
      "parameters": {
        "width": 696,
        "height": 2096,
        "content": "# What other services give you\n\nReal-world APIs have documentation that tells developers how to use them. This is what the documentation for our little tutorial API would look like. To put you in cont"
      }
    },
    {
      "id": "fba94b52-0c18-4f3c-a702-aa883a3df293",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2320,
        3040
      ],
      "parameters": {
        "width": 384,
        "height": 496,
        "content": "![Kitch on fire](https://media3.giphy.com/media/v1.Y2lkPTc5MGI3NjExaGk3ZHhsa2gwYWUweDFsa2dlb2Z6NWx5NGF1NnRoczE1a29kYjZjcyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/M6bJf9VBmrN1qTtPyL/giphy.webp)"
      }
    },
    {
      "id": "d6b845a9-9d27-49ec-a9fe-ac48650bd260",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1760,
        1040
      ],
      "parameters": {
        "width": 256,
        "height": 272,
        "content": "![Kitch on fire](https://media2.giphy.com/media/v1.Y2lkPWVjZjA1ZTQ3MXIyOXBhZHhueGxnZjZhbnQ3MmRtbzg5aW9mZ3VrMGN2bGQ0Y3VidyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/l4FGpeeBs3XLWxqrm/giphy.webp)"
      }
    },
    {
      "id": "c6d51163-f9ea-4d6b-af33-32107d3feb6e",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2128,
        448
      ],
      "parameters": {
        "width": 176,
        "height": 224,
        "content": "![Kitch on fire](https://media1.giphy.com/media/v1.Y2lkPTc5MGI3NjExMGgyNmxobWE5ZjhydXdwM2o1bWkwMjZna3A1OTdiOHNpeGE5cW5wNSZlcD12MV9naWZzX3NlYXJjaCZjdD1n/2ka4S8LMiGxA371PD3/giphy.webp)"
      }
    },
    {
      "id": "b5a01aca-47be-42d8-8366-4f91bcf24682",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2032,
        1728
      ],
      "parameters": {
        "width": 256,
        "height": null,
        "content": "![Kitch on fire](https://media4.giphy.com/media/v1.Y2lkPWVjZjA1ZTQ3YWo1ODNsNm9pZHh6dDBhNnp6bWRvaTRuc3hxbWlhd3NoMW40eHN4dyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/V1gX8pwYRRDoxFh6lJ/200.webp)"
      }
    },
    {
      "id": "adacc21c-801a-49bb-a6da-630fc8b4272c",
      "name": "⚙️CONFIGURATION⚙️",
      "type": "n8n-nodes-base.set",
      "position": [
        688,
        464
      ]
    },
    {
      "id": "9eb6ee32-0d75-4817-a3d0-3106d88b14e6",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1600,
        2272
      ],
      "parameters": {
        "width": 400,
        "height": 256,
        "content": "![Key](https://media2.giphy.com/media/v1.Y2lkPTc5MGI3NjExb2VlZDBvZGQxMGtnbW9pMDBrZTFobXZ2ZnRvdmo5OHViNzdib2Z4dSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/HqVH7T3o1ggAguE4Oh/giphy.gif)"
      }
    },
    {
      "id": "1d450c34-d278-40cf-a5af-8d697cd39b59",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        1040
      ],
      "parameters": {
        "width": 272,
        "height": null,
        "content": "## Add a few GIFs for configuration and access to executions"
      }
    },
    {
      "id": "72a7e4af-494e-4b6c-8caa-5fd719e24594",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        752,
        2496
      ],
      "parameters": {
        "width": 416,
        "height": 1040,
        "content": "## Was this helpful? Let me know!\n[![clic](https://supastudio.ia2s.app/storage/v1/object/public/assets/n8n/clic_down_lucas.gif)](https://workflows.ac/form)\n\nI really hope this template helped you. You"
      }
    }
  ],
  "connections": {
    "Base URL": {
      "main": [
        [
          {
            "node": "1. The Customer (GET Menu Item)",
            "type": "main",
            "index": 0
          },
          {
            "node": "2. The Customer (GET with Query Params)",
            "type": "main",
            "index": 0
          },
          {
            "node": "3. The Customer (POST with Body)",
            "type": "main",
            "index": 0
          },
          {
            "node": "4. The Customer (GET with Headers/Auth)",
            "type": "main",
            "index": 0
          },
          {
            "node": "5. The Customer (Request with Timeout)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF Authorized": {
      "main": [
        [
          {
            "node": "Respond with Secret",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond: Unauthorized (401)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Tutorial": {
      "main": [
        [
          {
            "node": "⚙️CONFIGURATION⚙️",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 3 seconds": {
      "main": [
        [
          {
            "node": "Prepare Slow Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF extra cheese": {
      "main": [
        [
          {
            "node": "Prepare Cheese Pizza",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Plain Pizza",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "⚙️CONFIGURATION⚙️": {
      "main": [
        [
          {
            "node": "Base URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1. The Kitchen (GET /menu)": {
      "main": [
        [
          {
            "node": "Prepare Menu Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2. The Kitchen (GET /order)": {
      "main": [
        [
          {
            "node": "IF extra cheese",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3. The Kitchen (POST /review)": {
      "main": [
        [
          {
            "node": "Process Review Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4. The Kitchen (GET /secret-dish)": {
      "main": [
        [
          {
            "node": "IF Authorized",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5. The Kitchen (GET /slow-service)": {
      "main": [
        [
          {
            "node": "Wait 3 seconds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}