Skip to main content

Email Templates

Read and update the automated emails EquipDash sends to customers and staff — booking confirmations, reminders, receipts, and more. These are the same templates managed in Settings → Email templates in the web UI, including the visual block layout and per-item versions.

A template's content can be plain wording (intro_text / outro_text) or a block layout (email_blocks). When you write email_blocks, the API renders and stores the same intro_html / outro_html the web editor would, so both surfaces always stay in sync.

Endpoints​

MethodEndpointDescriptionScope
GET/v1/settings/email-templatesList all templatessettings:read
GET/v1/settings/email-templates/{type}Get one template with its versionssettings:read
PATCH/v1/settings/email-templates/{type}Update a templatesettings:write
POST/v1/settings/email-templates/{type}/versionsAdd a per-item versionsettings:write
PATCH/v1/settings/email-templates/{type}/versions/{id}Update a versionsettings:write
DELETE/v1/settings/email-templates/{type}/versions/{id}Delete a versionsettings:write

{type} is the template key, e.g. booking_confirmation, booking_reminder, payment_receipt, pre_arrival. The list endpoint returns every valid key.


GET /v1/settings/email-templates​

Example Request​

curl "https://app.equipdash.com/api/v1/settings/email-templates" \
-H "Authorization: Bearer YOUR_API_KEY"

Response (200 OK)​

{
"data": [
{
"type": "booking_confirmation",
"label": "Booking Confirmation",
"description": "Sent when a customer completes a booking",
"group": "bookings",
"category": "customer",
"subject": "Your booking is confirmed - {booking_reference}",
"enabled": true,
"has_custom_layout": false,
"supports_item_versions": true,
"wording_editable": true
}
]
}

group matches the groups in the web UI rail: bookings, arrival_returns, payments_money, waivers_forms, reviews_surveys, customers, your_team.

Some automatic emails have fixed wording and only an on/off switch: refund_processed, security_deposit_notice, balance_due_reminder, condition_report_customer and service_ready. They are listed with wording_editable: false, and PATCH accepts only enabled for them.


GET /v1/settings/email-templates/{type}​

Returns the full template: wording, block layout, background color, available merge-tag placeholders, and (for booking-related templates) its per-item versions.

curl "https://app.equipdash.com/api/v1/settings/email-templates/booking_confirmation" \
-H "Authorization: Bearer YOUR_API_KEY"

PATCH /v1/settings/email-templates/{type}​

All fields are optional — send only what you want to change.

FieldTypeDescription
subjectstringSubject line (merge tags like {customer_name} allowed)
enabledbooleanWhether this email sends at all
intro_textstring | nullPlain wording before the automatic content block
outro_textstring | nullPlain wording after it
email_blocksarray | nullBlock layout (see below); null clears the layout
background_colorstring | nullHex color, e.g. #f5f7f9

Block layout​

email_blocks is an ordered list of {id, type, data} objects. Types: heading (data.text), text (data.html), button (data.text, data.url), image (data.url, data.alt), divider, spacer, and exactly one details — the marker where EquipDash inserts the automatic content (booking details, payment amounts, and so on). Blocks above details become the intro, blocks below it the outro. A missing details marker is appended automatically.

curl -X PATCH "https://app.equipdash.com/api/v1/settings/email-templates/booking_confirmation" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": "See you soon, {customer_name}!",
"email_blocks": [
{"id": "blk1", "type": "text", "data": {"html": "<p>Thanks for booking with us.</p>"}},
{"id": "blk2", "type": "details", "data": {}},
{"id": "blk3", "type": "button", "data": {"text": "View my booking", "url": "https://example.com"}}
]
}'

Per-item versions​

Booking-related templates (supports_item_versions: true) can carry versions — different wording for some products or experiences. At send time the most specific version wins: specific item → category → all products / all experiences → the base template. Versions inherit the base template's enabled switch and timing settings.

POST /v1/settings/email-templates/{type}/versions​

FieldTypeDescription
namestring, requiredOwner-facing label, e.g. "Guided sessions"
subjectstringDefaults to the base template's subject
apply_to_all_productsbooleanVersion applies to every product booking
apply_to_all_experiencesbooleanVersion applies to every experience booking
apply_to_all_store_productsbooleanVersion applies to every store-product booking
apply_to_all_servicesbooleanVersion applies to every service booking
product_idsint[]Specific products
product_category_idsint[]Product categories
experience_idsint[]Specific experiences
experience_category_idsint[]Experience categories
store_product_idsint[]Specific store products
store_category_idsint[]Store categories

At least one targeting field is required. Content starts as a copy of the base template; update it afterwards with PATCH .../versions/{id} (same content fields as the template PATCH, plus name and the targeting fields).

curl -X POST "https://app.equipdash.com/api/v1/settings/email-templates/booking_confirmation/versions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Guided sessions", "experience_category_ids": [12]}'

Response (201 Created)​

{
"data": {
"id": 4,
"name": "Guided sessions",
"subject": "Your booking is confirmed - {booking_reference}",
"apply_to_all_products": false,
"apply_to_all_experiences": false,
"product_ids": [],
"product_category_ids": [],
"experience_ids": [],
"experience_category_ids": [12],
"background_color": null,
"created_at": "2026-07-30T12:00:00+00:00"
}
}

Errors​

StatusCodeMeaning
404NOT_FOUNDUnknown template type, or versions requested on a template that doesn't support them
422INVALID_TARGETINGNo targeting supplied, or a targeted id doesn't belong to your account
422TEMPLATE_USES_BLOCKSintro_text/outro_text sent for a row with a block layout — send email_blocks instead (or email_blocks: null to clear it)
422WORDING_NOT_EDITABLEAnything other than enabled sent for an email with fixed wording
422VALIDATION_ERRORField-level validation failed