E-commerce Ready
Multi-format
Delight customers with instant, professional order confirmations. Include all order details, shipping information, and personalized recommendations - sent through your own SMTP for maximum deliverability.
Order confirmation emails consistently achieve higher open rates than promotional emails, with product recommendations proven to increase customer lifetime value.
Instant delivery with tracking links
Downloadable receipt for records
Email with PDF attachment
// Send order confirmation after successful payment
const sendOrderConfirmation = async (orderId) => {
// Fetch complete order data
const order = await db.orders.findOne({
id: orderId,
include: ['items', 'customer', 'shipping', 'billing']
});
// Get product recommendations based on purchase
const recommendations = await getRecommendations(order.items);
// Send confirmation email
const response = await fetch('https://dash.liquidtemplater.com/items/template_request', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
data: {
order: {
number: order.number,
created_at: order.created_at,
payment_method: order.payment_method,
estimated_delivery: calculateDeliveryDate(order),
items: order.items,
subtotal: order.subtotal,
discount: order.discount,
shipping: order.shipping_cost,
tax: order.tax,
total: order.total,
tracking_url: `https://shop.com/track/${order.tracking_number}`
},
customer: order.customer,
shipping: order.shipping_address,
billing: order.billing_address,
recommended_products: recommendations,
support_url: 'https://shop.com/help'
},
template: `<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: Arial, sans-serif; color: #333; }
.container { max-width: 600px; margin: 0 auto; }
.header { background: #4A6CF7; color: white; padding: 30px; text-align: center; }
.order-info { background: #f8f9fa; padding: 20px; margin: 20px 0; }
.total-row { font-weight: bold; font-size: 18px; }
.button { background: #4A6CF7; color: white; padding: 15px 30px;
text-decoration: none; display: inline-block; margin: 20px 0; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>Thanks for your order, {{customer.first_name}}!</h1>
<p>Order #{{order.number}} confirmed</p>
</div>
<div class="order-info">
<h2>Order Details</h2>
<p><strong>Order Date:</strong> {{order.created_at}}</p>
<p><strong>Order Number:</strong> #{{order.number}}</p>
<p><strong>Payment Method:</strong> {{order.payment_method}}</p>
{% if order.estimated_delivery %}
<p><strong>Estimated Delivery:</strong> {{order.estimated_delivery}}</p>
{% endif %}
</div>
<h3>Items Ordered</h3>
<table width="100%" cellpadding="10" cellspacing="0">
{% for item in order.items %}
<tr style="border-bottom: 1px solid #eee;">
<td>
<strong>{{item.name}}</strong><br>
{% if item.variant %}<small>{{item.variant}}</small><br>{% endif %}
Qty: {{item.quantity}}
</td>
<td align="right">{{item.total | prepend: "$"}}</td>
</tr>
{% endfor %}
<tr class="total-row">
<td align="right">Total:</td>
<td align="right">{{order.total | prepend: "$"}}</td>
</tr>
</table>
<center>
<a href="{{order.tracking_url}}" class="button">Track Your Order</a>
</center>
{% if recommended_products %}
<h3>You Might Also Like</h3>
{% for product in recommended_products limit: 3 %}
<p>{{product.name}} - {{product.price | prepend: "$"}}</p>
{% endfor %}
{% endif %}
</div>
</body>
</html>`,
type: 'email',
email_to: order.customer.email,
email_from: 'orders@shop.com'
})
});
const requestData = await response.json();
const requestId = requestData.data.id;
// Poll for email completion
let emailSent = false;
while (!emailSent) {
await new Promise(resolve => setTimeout(resolve, 1000));
const statusResponse = await fetch(
`https://dash.liquidtemplater.com/items/template_request/${requestId}`,
{
headers: { 'Authorization': 'Bearer YOUR_API_TOKEN' }
}
);
const statusData = await statusResponse.json();
if (statusData.data.fullfilled_on) {
emailSent = true;
}
}
// Update order status
await db.orders.update({
where: { id: orderId },
data: {
confirmation_sent: true,
confirmation_sent_at: new Date()
}
});
};
// Webhook handler for payment success
app.post('/webhooks/payment-success', async (req, res) => {
const { order_id } = req.body;
await sendOrderConfirmation(order_id);
res.json({ success: true });
});
Order confirmation data is processed immediately and stored in our secure German data centers for 7 days, to ensure delivery after which its deleted for privacy sake