This workflow follows the Google Calendar → HTTP Request 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 →
{
"name": "CreateDoctorCalendar",
"nodes": [
{
"parameters": {},
"id": "webhook-trigger",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
100,
300
]
},
{
"parameters": {
"url": "=http://localhost:8000/api/doctores/{{ $json.doctor_id }}",
"method": "GET",
"authentication": "none",
"simplifyOutput": true
},
"id": "get-doctor",
"name": "Get Doctor Data",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
300,
300
],
"dependsOn": [
"webhook-trigger"
]
},
{
"parameters": {
"resource": "calendar",
"operation": "create",
"summary": "=Calendar - {{ $json.doctor_name }}",
"description": "=Appointments for {{ $json.doctor_name }}",
"timezone": "America/Argentina/Buenos_Aires"
},
"id": "create-calendar",
"name": "Google Calendar - Create",
"type": "n8n-nodes-base.googleCalendar",
"typeVersion": 3,
"position": [
500,
300
],
"credentials": {
"googleCalendarOAuth2Api": {
"name": "<your credential>"
}
},
"dependsOn": [
"get-doctor"
]
},
{
"parameters": {
"url": "={{ $json.webhook_url }}",
"method": "POST",
"body": "={\n \"doctor_id\": {{ $('webhook-trigger').item.json.doctor_id }},\n \"calendar_id\": \"{{ $json.id }}\",\n \"calendar_email\": \"{{ $json.description }}\"\n}",
"contentType": "application/json"
},
"id": "callback-success",
"name": "Callback - Success",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
700,
200
],
"dependsOn": [
"create-calendar"
],
"onError": "continueErrorHandling"
},
{
"parameters": {
"url": "={{ $('webhook-trigger').item.json.webhook_url.replace('/doctor-calendar-created', '/doctor-calendar-error') }}",
"method": "POST",
"body": "={\n \"doctor_id\": {{ $('webhook-trigger').item.json.doctor_id }},\n \"error_message\": \"{{ $error.message }}\"\n}",
"contentType": "application/json"
},
"id": "callback-error",
"name": "Callback - Error",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
700,
400
],
"dependsOn": [
"create-calendar"
],
"onError": "continueErrorHandling"
},
{
"parameters": {},
"id": "return-response",
"name": "Return Success",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
900,
200
],
"dependsOn": [
"callback-success"
]
}
],
"connections": {},
"settings": {
"executionOrder": "v1"
}
}
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.
googleCalendarOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
CreateDoctorCalendar. Uses httpRequest, googleCalendar. Webhook trigger; 6 nodes.
Source: https://github.com/ignacioelizeche/BackOffice-Odonto/blob/13b047f47b8a3442a521b3ff148aff5b26d8f464/N8N/CreateDoctorCalendar.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Rodopi Dent - Calendar Create Event. Uses googleCalendar, httpRequest. Webhook trigger; 6 nodes.
This template is designed for developers, businesses, and service providers who need to programmatically check Calendly availability. It's perfect for: Web developers building custom booking interface
Never lose a prospect to a missed call again. This workflow sends an automatic "sorry we missed you" SMS within seconds, follows up 2 hours later if there's no reply, and enrolls unresponsive contacts
Send Postcards to Contacts Automatically using CentralStationCRM and EchtPost. Uses httpRequest. Webhook trigger; 12 nodes.
Send Postcards to Contacts Automatically using CentralStationCRM and EchtPost. Uses httpRequest. Webhook trigger; 12 nodes.