Order Complete Webhook
curl --request POST \
--url https://cdn.tailoredd.com/apiV2/webhooks/order-complete \
--header 'Content-Type: application/json' \
--data '
{
"orderId": "order-sample-001",
"customerEmail": "customer@example.com",
"customerName": "John Doe",
"customerID": "CUST-123",
"deliveryDate": "2025-11-27T10:00:00.000Z",
"products": [
{
"productId": "product-123",
"productName": "Sample Product",
"quantity": 1,
"price": 99.99
}
],
"reviewPageUrl": "https://merchant.com/review"
}
'import requests
url = "https://cdn.tailoredd.com/apiV2/webhooks/order-complete"
payload = {
"orderId": "order-sample-001",
"customerEmail": "customer@example.com",
"customerName": "John Doe",
"customerID": "CUST-123",
"deliveryDate": "2025-11-27T10:00:00.000Z",
"products": [
{
"productId": "product-123",
"productName": "Sample Product",
"quantity": 1,
"price": 99.99
}
],
"reviewPageUrl": "https://merchant.com/review"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
orderId: 'order-sample-001',
customerEmail: 'customer@example.com',
customerName: 'John Doe',
customerID: 'CUST-123',
deliveryDate: '2025-11-27T10:00:00.000Z',
products: [
{
productId: 'product-123',
productName: 'Sample Product',
quantity: 1,
price: 99.99
}
],
reviewPageUrl: 'https://merchant.com/review'
})
};
fetch('https://cdn.tailoredd.com/apiV2/webhooks/order-complete', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cdn.tailoredd.com/apiV2/webhooks/order-complete",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'orderId' => 'order-sample-001',
'customerEmail' => 'customer@example.com',
'customerName' => 'John Doe',
'customerID' => 'CUST-123',
'deliveryDate' => '2025-11-27T10:00:00.000Z',
'products' => [
[
'productId' => 'product-123',
'productName' => 'Sample Product',
'quantity' => 1,
'price' => 99.99
]
],
'reviewPageUrl' => 'https://merchant.com/review'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cdn.tailoredd.com/apiV2/webhooks/order-complete"
payload := strings.NewReader("{\n \"orderId\": \"order-sample-001\",\n \"customerEmail\": \"customer@example.com\",\n \"customerName\": \"John Doe\",\n \"customerID\": \"CUST-123\",\n \"deliveryDate\": \"2025-11-27T10:00:00.000Z\",\n \"products\": [\n {\n \"productId\": \"product-123\",\n \"productName\": \"Sample Product\",\n \"quantity\": 1,\n \"price\": 99.99\n }\n ],\n \"reviewPageUrl\": \"https://merchant.com/review\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cdn.tailoredd.com/apiV2/webhooks/order-complete")
.header("Content-Type", "application/json")
.body("{\n \"orderId\": \"order-sample-001\",\n \"customerEmail\": \"customer@example.com\",\n \"customerName\": \"John Doe\",\n \"customerID\": \"CUST-123\",\n \"deliveryDate\": \"2025-11-27T10:00:00.000Z\",\n \"products\": [\n {\n \"productId\": \"product-123\",\n \"productName\": \"Sample Product\",\n \"quantity\": 1,\n \"price\": 99.99\n }\n ],\n \"reviewPageUrl\": \"https://merchant.com/review\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cdn.tailoredd.com/apiV2/webhooks/order-complete")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"orderId\": \"order-sample-001\",\n \"customerEmail\": \"customer@example.com\",\n \"customerName\": \"John Doe\",\n \"customerID\": \"CUST-123\",\n \"deliveryDate\": \"2025-11-27T10:00:00.000Z\",\n \"products\": [\n {\n \"productId\": \"product-123\",\n \"productName\": \"Sample Product\",\n \"quantity\": 1,\n \"price\": 99.99\n }\n ],\n \"reviewPageUrl\": \"https://merchant.com/review\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {}
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Rating must be between 1 and 5"
}
}Webhooks
Order complete webhook
Receive order-complete events from your commerce platform to trigger automated post-purchase review request flows.
POST
/
webhooks
/
order-complete
Order Complete Webhook
curl --request POST \
--url https://cdn.tailoredd.com/apiV2/webhooks/order-complete \
--header 'Content-Type: application/json' \
--data '
{
"orderId": "order-sample-001",
"customerEmail": "customer@example.com",
"customerName": "John Doe",
"customerID": "CUST-123",
"deliveryDate": "2025-11-27T10:00:00.000Z",
"products": [
{
"productId": "product-123",
"productName": "Sample Product",
"quantity": 1,
"price": 99.99
}
],
"reviewPageUrl": "https://merchant.com/review"
}
'import requests
url = "https://cdn.tailoredd.com/apiV2/webhooks/order-complete"
payload = {
"orderId": "order-sample-001",
"customerEmail": "customer@example.com",
"customerName": "John Doe",
"customerID": "CUST-123",
"deliveryDate": "2025-11-27T10:00:00.000Z",
"products": [
{
"productId": "product-123",
"productName": "Sample Product",
"quantity": 1,
"price": 99.99
}
],
"reviewPageUrl": "https://merchant.com/review"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
orderId: 'order-sample-001',
customerEmail: 'customer@example.com',
customerName: 'John Doe',
customerID: 'CUST-123',
deliveryDate: '2025-11-27T10:00:00.000Z',
products: [
{
productId: 'product-123',
productName: 'Sample Product',
quantity: 1,
price: 99.99
}
],
reviewPageUrl: 'https://merchant.com/review'
})
};
fetch('https://cdn.tailoredd.com/apiV2/webhooks/order-complete', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cdn.tailoredd.com/apiV2/webhooks/order-complete",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'orderId' => 'order-sample-001',
'customerEmail' => 'customer@example.com',
'customerName' => 'John Doe',
'customerID' => 'CUST-123',
'deliveryDate' => '2025-11-27T10:00:00.000Z',
'products' => [
[
'productId' => 'product-123',
'productName' => 'Sample Product',
'quantity' => 1,
'price' => 99.99
]
],
'reviewPageUrl' => 'https://merchant.com/review'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cdn.tailoredd.com/apiV2/webhooks/order-complete"
payload := strings.NewReader("{\n \"orderId\": \"order-sample-001\",\n \"customerEmail\": \"customer@example.com\",\n \"customerName\": \"John Doe\",\n \"customerID\": \"CUST-123\",\n \"deliveryDate\": \"2025-11-27T10:00:00.000Z\",\n \"products\": [\n {\n \"productId\": \"product-123\",\n \"productName\": \"Sample Product\",\n \"quantity\": 1,\n \"price\": 99.99\n }\n ],\n \"reviewPageUrl\": \"https://merchant.com/review\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cdn.tailoredd.com/apiV2/webhooks/order-complete")
.header("Content-Type", "application/json")
.body("{\n \"orderId\": \"order-sample-001\",\n \"customerEmail\": \"customer@example.com\",\n \"customerName\": \"John Doe\",\n \"customerID\": \"CUST-123\",\n \"deliveryDate\": \"2025-11-27T10:00:00.000Z\",\n \"products\": [\n {\n \"productId\": \"product-123\",\n \"productName\": \"Sample Product\",\n \"quantity\": 1,\n \"price\": 99.99\n }\n ],\n \"reviewPageUrl\": \"https://merchant.com/review\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cdn.tailoredd.com/apiV2/webhooks/order-complete")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"orderId\": \"order-sample-001\",\n \"customerEmail\": \"customer@example.com\",\n \"customerName\": \"John Doe\",\n \"customerID\": \"CUST-123\",\n \"deliveryDate\": \"2025-11-27T10:00:00.000Z\",\n \"products\": [\n {\n \"productId\": \"product-123\",\n \"productName\": \"Sample Product\",\n \"quantity\": 1,\n \"price\": 99.99\n }\n ],\n \"reviewPageUrl\": \"https://merchant.com/review\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {}
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Rating must be between 1 and 5"
}
}POST {BASE_URL}/webhooks/order-complete
Headers
| Header | Required |
|---|---|
X-Merchant-Id | Yes |
X-Webhook-Signature | Yes — HMAC-SHA256 of raw JSON body using your webhook secret. |
Body parameters
string
required
Order reference.
string
required
Customer email.
string
required
Customer name.
string
required
Your internal customer ID.
string
required
ISO 8601 UTC delivery timestamp.
array
required
Array of
{ productId, productName, quantity, price }.string
required
URL where customer lands to leave their review.
Example
{
"orderId": "ORDER-10045",
"customerEmail": "customer@example.com",
"customerName": "John Doe",
"customerID": "CUST-123",
"deliveryDate": "2026-01-20T10:00:00Z",
"products": [
{ "productId": "SKU-001", "productName": "Classic Tee", "quantity": 1, "price": 59.95 }
],
"reviewPageUrl": "https://yourstore.com/review"
}
Signing the request
const crypto = require('crypto');
const body = JSON.stringify(payload);
const sig = crypto.createHmac('sha256', process.env.RF_WEBHOOK_SECRET)
.update(body).digest('hex');
// Header: X-Webhook-Signature: sig
Was this page helpful?
⌘I