This workflow follows the Emailsend → 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": "TableFlow \u2014 Reservation Confirmation",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "reservation-confirmation",
"responseMode": "onReceived",
"options": {}
},
"id": "n8n-node-webhook",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
240,
300
]
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.body.collectionName }}",
"value2": "reservations"
},
{
"value1": "={{ $json.body.action }}",
"value2": "create"
}
]
}
},
"id": "n8n-node-if",
"name": "Is New Reservation?",
"type": "n8n-nodes-base.if",
"typeVersion": 1,
"position": [
460,
300
]
},
{
"parameters": {
"jsCode": "const record = $input.first().json.body.record;\n\nconst guestName = record.guest_name || 'Guest';\nconst guestEmail = record.guest_email || '';\nconst guestPhone = record.guest_phone || '';\nconst partySize = record.party_size || 1;\nconst reservedAt = record.reserved_at ? new Date(record.reserved_at).toLocaleString() : '';\nconst notes = record.notes || '';\n\nreturn [{\n json: {\n to: guestEmail,\n phone: guestPhone,\n subject: `Reservation Confirmed \u2014 ${guestName}`,\n body: `Dear ${guestName},\\n\\nYour reservation has been confirmed!\\n\\nDetails:\\n- Party: ${partySize} guests\\n- Date/Time: ${reservedAt}\\n${notes ? '- Notes: ' + notes + '\\n' : ''}\\nIf you need to cancel or change your reservation, please contact us.\\n\\nThank you,\\nTableFlow`,\n html: `<h2>Reservation Confirmed</h2><p>Dear <strong>${guestName}</strong>,</p><p>Your reservation has been confirmed.</p><ul><li><strong>Party size:</strong> ${partySize} guests</li><li><strong>Date/Time:</strong> ${reservedAt}</li>${notes ? '<li><strong>Notes:</strong> ' + notes + '</li>' : ''}</ul><p>See you soon!</p>`,\n recordId: record.id\n }\n}];"
},
"id": "n8n-node-prepare",
"name": "Prepare Notification",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
680,
220
]
},
{
"parameters": {
"fromEmail": "={{ $env.SMTP_USER }}",
"toEmail": "={{ $json.to }}",
"subject": "={{ $json.subject }}",
"emailType": "html",
"message": "={{ $json.html }}",
"options": {}
},
"id": "n8n-node-email",
"name": "Send Confirmation Email",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2,
"position": [
900,
220
],
"credentials": {
"smtp": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"url": "={{ $env.POCKETBASE_URL }}/api/collections/reservation_logs/records",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "reservation_id",
"value": "={{ $('Prepare Notification').item.json.recordId }}"
},
{
"name": "event",
"value": "confirmation_sent"
},
{
"name": "details",
"value": "={{ JSON.stringify({ channel: 'email', to: $('Prepare Notification').item.json.to }) }}"
}
]
},
"options": {}
},
"id": "n8n-node-log",
"name": "Log Confirmation Sent",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4,
"position": [
1120,
220
]
}
],
"connections": {
"Webhook": {
"main": [
[
{
"node": "Is New Reservation?",
"type": "main",
"index": 0
}
]
]
},
"Is New Reservation?": {
"main": [
[
{
"node": "Prepare Notification",
"type": "main",
"index": 0
}
],
[]
]
},
"Prepare Notification": {
"main": [
[
{
"node": "Send Confirmation Email",
"type": "main",
"index": 0
}
]
]
},
"Send Confirmation Email": {
"main": [
[
{
"node": "Log Confirmation Sent",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
},
"meta": {
"notes": "Triggered by a PocketBase webhook on reservation create. Sends a confirmation email and logs the event. Configure the PocketBase webhook URL to: POST http://<n8n-host>:5678/webhook/reservation-confirmation"
}
}
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.
smtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
TableFlow — Reservation Confirmation. Uses emailSend, httpRequest. Webhook trigger; 5 nodes.
Source: https://github.com/SanchezAlbaladejoPablo/tableflow/blob/72a4c27d1469a2f43764787cd24332c050448e9d/automations/n8n/reservation-confirmation.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.
세미나 데모 용 워크플로우. Uses httpRequest, emailSend. Webhook trigger; 17 nodes.
worklow_doc. Uses httpRequest, readBinaryFile, n8n-nodes-docxtemplater, emailSend. Webhook trigger; 15 nodes.
WF2 - Upload Manual | JurisAI. Uses httpRequest, emailSend. Webhook trigger; 15 nodes.
Deliver personalized files instantly after PayPal transactions using n8n – without writing a single backend line.
This workflow automates real-time student tracking using iOS Shortcuts and geolocation data, notifying both teachers and parents based on geofenced logic.