{
  "id": "6LpWrUPBXJgDuxH7",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Reschedule Appointment open-source-01",
  "tags": [
    {
      "id": "oufe6ROEtWIl02g4",
      "name": "open-source",
      "createdAt": "2026-06-25T18:55:08.441Z",
      "updatedAt": "2026-07-13T19:25:56.333Z"
    }
  ],
  "nodes": [
    {
      "id": "e2b1c3bc-15ff-4bd7-9dea-ef5429553630",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2224,
        4576
      ],
      "parameters": {
        "width": 720,
        "height": 896,
        "content": "## Reschedule Appointment open-source-01\n\n### How it works\n\nThis workflow is called by another workflow to reschedule an existing appointment. It looks up the appointment in Google Sheets, validates that it exists, builds the requested new time slot, checks availability through a sub-workflow, and updates the Google Calendar event when the slot is free. It returns status fields for success, not-found, unavailable-slot, and error cases, and can trigger follow-up background/error workflows.\n\n### Setup steps\n\n- Configure the Google Sheets credential and sheet/range used by the \"GET Event Id\" node so it can find the existing appointment and event ID.\n- Configure the Google Calendar credential and calendar/event fields in the \"Update an event\" node.\n- Ensure the called sub-workflows exist and are active: \"Check Slot Availability\", \"Error Workflow\", and \"Background Workflow\".\n- Verify the incoming data from the parent workflow includes the appointment identifier and requested reschedule date/time fields expected by the set and lookup nodes.\n\n### Customization\n\nAdjust the slot start/end calculation, appointment lookup criteria, success/error response fields, or background follow-up actions to match your scheduling rules and customer notification process."
      },
      "typeVersion": 1
    },
    {
      "id": "f1477686-e4a2-4e07-a74d-ef64214fb709",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1024,
        4672
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 640,
        "content": "## Validate appointment record\n\nChecks whether the appointment lookup found a record, prepares the new slot boundaries if it exists, or returns an appointment-not-found message if it does not."
      },
      "typeVersion": 1
    },
    {
      "id": "dc654fae-2670-44a9-bb2a-ce785e7a5885",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        4704
      ],
      "parameters": {
        "color": 7,
        "width": 656,
        "height": 528,
        "content": "## Check slot availability\n\nCalls the availability-check sub-workflow, evaluates the result, and produces an unavailable-slot response when the requested time is already taken."
      },
      "typeVersion": 1
    },
    {
      "id": "11fdbaa0-e6b2-4e41-8cec-7dbffc5f0fe6",
      "name": "Check Slot Availability",
      "type": "n8n-nodes-base.if",
      "position": [
        -128,
        4944
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e9522f95-5f9c-4522-b6db-139e8c4ebe0f",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.available === true }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "81612899-6bf4-46ba-910a-65f2237ab690",
      "name": "Invoke Error Workflow",
      "type": "n8n-nodes-base.executeWorkflow",
      "disabled": true,
      "position": [
        656,
        4272
      ],
      "parameters": {
        "options": {
          "waitForSubWorkflow": false
        },
        "workflowId": {
          "__rl": true,
          "mode": "list",
          "value": "bQdno8qQgpKWbiDE",
          "cachedResultUrl": "/workflow/bQdno8qQgpKWbiDE",
          "cachedResultName": "Error Workflow"
        },
        "workflowInputs": {
          "value": {
            "resolved": "No",
            "node_name": "={{ $json.error }}",
            "timestamp": "={{ $now.toISO() }}",
            "error_type": "={{ $json.error }}",
            "execution_id": "={{ $execution.id }}",
            "patient_name": "={{ $('Read Event ID from Sheets').first()?.json?.name ?? 'Unknown' }}",
            "service_type": "={{ $('When Executed by Another Workflow').item.json.new_service_type }}",
            "patient_phone": "={{ $('When Executed by Another Workflow').item.json.phone }}",
            "workflow_name": "={{ $workflow.name }}",
            "preferred_date": "={{ $('When Executed by Another Workflow').item.json.new_date }}",
            "preferred_time": "={{ $('When Executed by Another Workflow').item.json.new_time }}"
          },
          "schema": [
            {
              "id": "workflow_name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "workflow_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "node_name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "node_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "error_type",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "error_type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "patient_name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "patient_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "patient_phone",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "patient_phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "service_type",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "service_type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "preferred_date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "preferred_date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "preferred_time",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "preferred_time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "timestamp",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "execution_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "execution_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "resolved",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "resolved",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "c750a26c-bab2-4844-b4b3-69ee806d2faf",
      "name": "Invoke Slot Check Workflow",
      "type": "n8n-nodes-base.executeWorkflow",
      "position": [
        -352,
        4944
      ],
      "parameters": {
        "options": {
          "waitForSubWorkflow": true
        },
        "workflowId": {
          "__rl": true,
          "mode": "list",
          "value": "AQhWv6s3ouxoTLPI",
          "cachedResultUrl": "/workflow/AQhWv6s3ouxoTLPI",
          "cachedResultName": "Check Slot Availability"
        },
        "workflowInputs": {
          "value": {
            "preferred_date": "={{ $('When Executed by Another Workflow').item.json.new_date }}",
            "preferred_time": "={{ $('When Executed by Another Workflow').item.json.new_time }}"
          },
          "schema": [
            {
              "id": "preferred_date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "preferred_date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "preferred_time",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "preferred_time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "1726d17c-8076-40a0-8e99-fef5de4d2d00",
      "name": "Read Event ID from Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "onError": "continueErrorOutput",
      "position": [
        -1216,
        4880
      ],
      "parameters": {
        "options": {
          "returnFirstMatch": true
        },
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.preferred_date }}",
              "lookupColumn": "preferred_date"
            },
            {
              "lookupValue": "={{ $json.preferred_time }}",
              "lookupColumn": "preferred_time"
            },
            {
              "lookupValue": "Booked",
              "lookupColumn": "status"
            },
            {
              "lookupValue": "={{ $json.phone.replace('+','') }}",
              "lookupColumn": "phone"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit#gid=0",
          "cachedResultName": "Appointment_Sheet"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit?usp=drivesdk",
          "cachedResultName": "VAPI AI Receptionist"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "ace5a4f8-baa7-4e9d-b90b-f538e11c3065",
      "name": "Check Appointment Existence",
      "type": "n8n-nodes-base.if",
      "position": [
        -976,
        5008
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f0fab72b-c87d-4c3e-ad52-62fff77970ed",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.event_id }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "b53666f1-5c2e-4e19-8ce4-402712a51f2b",
      "name": "Set Slot Timing",
      "type": "n8n-nodes-base.set",
      "position": [
        -752,
        4944
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "fd936412-e8ed-45b2-9842-9fccc73da593",
              "name": "start",
              "type": "string",
              "value": "={{ $('When Executed by Another Workflow').item.json.new_date }}T{{ $('When Executed by Another Workflow').item.json.new_time }}"
            },
            {
              "id": "3cda2a1b-6a47-452e-9840-93fffbda80f3",
              "name": "end",
              "type": "string",
              "value": "={{ $('When Executed by Another Workflow').item.json.new_date }}T{{\nDateTime\n  .fromFormat(\n    $('When Executed by Another Workflow').first().json.new_time,\n    'HH:mm'\n  )\n  .plus({ minutes: 30 })\n  .toFormat('HH:mm')\n}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "ba07d31e-b149-4157-b6ad-d867edda9990",
      "name": "Set Appointment Not Found Message",
      "type": "n8n-nodes-base.set",
      "position": [
        -752,
        5104
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "7f623eb6-e679-4103-88f9-99e37962fdc2",
              "name": "message",
              "type": "string",
              "value": "Appointment Not Found"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b15d5f22-beef-42c2-b406-6ab082517e41",
      "name": "Set Reschedule Error Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        432,
        4272
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a978fa3a-1de7-4149-8740-736df1b7f1a6",
              "name": "Rescheduled",
              "type": "boolean",
              "value": false
            },
            {
              "id": "0916d5f0-3c63-411a-953b-ac888d3c316a",
              "name": "error",
              "type": "string",
              "value": "crm_unavailable"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "99598678-eda3-4275-a2e5-66e1fc299209",
      "name": "Update Calendar Event",
      "type": "n8n-nodes-base.googleCalendar",
      "onError": "continueErrorOutput",
      "position": [
        320,
        4928
      ],
      "parameters": {
        "eventId": "={{ $('Read Event ID from Sheets').item.json.event_id }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "user@example.com"
        },
        "operation": "update",
        "updateFields": {
          "end": "={{ $('Set Slot Timing').item.json.end }}",
          "start": "={{ $('Set Slot Timing').item.json.start }}",
          "summary": "={{ $('When Executed by Another Workflow').item.json.new_service_type }} - {{ $('Read Event ID from Sheets').item.json.name }}",
          "description": "={{ $('When Executed by Another Workflow').item.json.phone }}"
        }
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1.3
    },
    {
      "id": "7667cb2e-cb11-453f-92dd-431acc409de0",
      "name": "Set Slot Unavailable Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        96,
        5040
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "0a7e4101-0dc2-4183-aa26-02f864588328",
              "name": "Rescheduled",
              "type": "boolean",
              "value": false
            },
            {
              "id": "f0da5310-1aa4-4745-a9de-d0494df9f192",
              "name": "error",
              "type": "string",
              "value": "new_slot_unavailable"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4568495f-522a-40ce-9444-9539426cc2fc",
      "name": "Set Post-Update Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        880,
        4272
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a978fa3a-1de7-4149-8740-736df1b7f1a6",
              "name": "Rescheduled",
              "type": "boolean",
              "value": false
            },
            {
              "id": "0916d5f0-3c63-411a-953b-ac888d3c316a",
              "name": "error",
              "type": "string",
              "value": "calendar_unavailable"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "52ebcbd4-0975-4eb6-ab34-9b4dbd291f41",
      "name": "Set Extended Update Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        544,
        4912
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "320ac51e-c6c0-491e-af7c-690ca9e9ebad",
              "name": "Rescheduled",
              "type": "boolean",
              "value": true
            },
            {
              "id": "be46c811-6817-49ec-b91d-9595cc592c8f",
              "name": "name",
              "type": "string",
              "value": "={{ $('Read Event ID from Sheets').item.json.name }}"
            },
            {
              "id": "67c137ed-cda6-468a-b072-65b032c3214e",
              "name": "service_type",
              "type": "string",
              "value": "={{ $('When Executed by Another Workflow').item.json.new_service_type }}"
            },
            {
              "id": "3a7717f0-f49f-477d-a331-015c08c0c4b3",
              "name": "preferred_date",
              "type": "string",
              "value": "={{\nDateTime\n  .fromISO($('When Executed by Another Workflow').item.json.new_date)\n  .toFormat('dd LLL yyyy')\n}}"
            },
            {
              "id": "d7fc5978-8bd3-4941-9bf2-2e4d5508c08c",
              "name": "preferred_time",
              "type": "string",
              "value": "={{ DateTime   .fromFormat($('When Executed by Another Workflow').item.json.new_time, 'HH:mm')   .toFormat('hh:mm a') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "577c6b8b-608d-405a-aff5-7e6e37b76092",
      "name": "Invoke Background Workflow",
      "type": "n8n-nodes-base.executeWorkflow",
      "disabled": true,
      "position": [
        704,
        5328
      ],
      "parameters": {
        "options": {
          "waitForSubWorkflow": false
        },
        "workflowId": {
          "__rl": true,
          "mode": "list",
          "value": "hEOycKblp9Yg7ath",
          "cachedResultUrl": "/workflow/hEOycKblp9Yg7ath",
          "cachedResultName": "Background Workflow"
        },
        "workflowInputs": {
          "value": {
            "name": "={{ $('Read Event ID from Sheets').item.json.name }}",
            "phone": "={{ $('When Executed by Another Workflow').item.json.phone }}",
            "event_id": "={{ $json.id }}",
            "action_type": "Reschedule",
            "service_type": "={{ $('When Executed by Another Workflow').item.json.new_service_type }}",
            "preferred_date": "={{ $('When Executed by Another Workflow').item.json.new_date }}",
            "preferred_time": "={{ $('When Executed by Another Workflow').item.json.new_time }}"
          },
          "schema": [
            {
              "id": "name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "phone",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "service_type",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "service_type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "preferred_date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "preferred_date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "preferred_time",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "preferred_time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "event_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "event_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "action_type",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "action_type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "88b3eaee-58fd-42ab-a5d1-108e697f41fd",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1488,
        4672
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Trigger and lookup\n\nStarts when invoked by another workflow and retrieves the matching appointment/event record from Google Sheets."
      },
      "typeVersion": 1
    },
    {
      "id": "312e46a1-c895-4950-b494-4a57570e3719",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        272,
        4688
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 400,
        "content": "## Update calendar event\n\nUpdates the existing Google Calendar event when the slot is available and formats the main successful reschedule response fields."
      },
      "typeVersion": 1
    },
    {
      "id": "459fced3-64b2-47aa-b952-801c2fc8d4b0",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        336,
        4048
      ],
      "parameters": {
        "color": 7,
        "width": 688,
        "height": 480,
        "content": "## Error status handling\n\nA separate upper-row cluster that prepares error/status fields and invokes the shared error workflow for lookup or calendar update failures; it also includes the adjacent update status formatter."
      },
      "typeVersion": 1
    },
    {
      "id": "a3e83f9c-bfeb-4a36-8942-1961c3fa0a83",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        352,
        5152
      ],
      "parameters": {
        "color": 7,
        "width": 528,
        "height": 400,
        "content": "## Background follow-up\n\nRuns a lower-right background sub-workflow after the calendar update, likely for asynchronous follow-up tasks such as notifications or cleanup."
      },
      "typeVersion": 1
    },
    {
      "id": "df17de92-5525-44bb-bebc-ff6ef9107f2a",
      "name": "When Executed by Another Workflow",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        -1424,
        4880
      ],
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "phone"
            },
            {
              "name": "new_date"
            },
            {
              "name": "new_time"
            },
            {
              "name": "preferred_date"
            },
            {
              "name": "preferred_time"
            },
            {
              "name": "new_service_type"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "a882470e-3872-4f61-91ed-1062e64e59c1",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        4544
      ],
      "parameters": {
        "color": "#356582",
        "width": 800,
        "height": 912,
        "content": "## See it in action\n\nThis workflow powers appointment booking inside Aria, a live AI \nvoice receptionist that books, reschedules, and cancels real \nappointments by phone. Watch the full call below.\n\n@[youtube](OF-5d0pQ7Zo)\n\nNote: this is one of 5 sub-workflows in the Aria system \u2014 \nbooking, canceling, rescheduling, checking availability, and \nfinding alternate slots each run as a separate workflow, called \nvia MCP tools. Build each one to match your own calendar/CRM \nsetup \u2014 or watch the video to see the full pattern working end \nto end."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "timezone": "America/Chicago",
    "binaryMode": "separate",
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": "bQdno8qQgpKWbiDE",
    "timeSavedMode": "fixed",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "32d5590f-4c36-4405-839c-17dd815f4eff",
  "nodeGroups": [],
  "connections": {
    "Set Slot Timing": {
      "main": [
        [
          {
            "node": "Invoke Slot Check Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Calendar Event": {
      "main": [
        [
          {
            "node": "Set Extended Update Fields",
            "type": "main",
            "index": 0
          },
          {
            "node": "Invoke Background Workflow",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set Post-Update Fields",
            "type": "main",
            "index": 0
          },
          {
            "node": "Invoke Error Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Slot Availability": {
      "main": [
        [
          {
            "node": "Update Calendar Event",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set Slot Unavailable Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Event ID from Sheets": {
      "main": [
        [
          {
            "node": "Check Appointment Existence",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set Reschedule Error Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Invoke Slot Check Workflow": {
      "main": [
        [
          {
            "node": "Check Slot Availability",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Appointment Existence": {
      "main": [
        [
          {
            "node": "Set Slot Timing",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Set Appointment Not Found Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Reschedule Error Fields": {
      "main": [
        [
          {
            "node": "Invoke Error Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When Executed by Another Workflow": {
      "main": [
        [
          {
            "node": "Read Event ID from Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}