Order Initiation
This event is triggered when a subscriber initiates the payment process for an order, and does not subsequently complete the payment in 5 minutes, before the payment is completed or confirmed.
Event Type
order.created.initiated
Setting Up the Webhook
To subscribe to this webhook event, configure your webhook endpoint with the following:
- cURL
- JavaScript
- Python
curl -X 'POST' \
'https://api-prod-new.tagmango.com/api/v1/integration/webhook/webhook' \
-H 'accept: application/json' \
-H 'x-api-key: <Your API Key>' \
-H 'Content-Type: application/json' \
-d '{
"hookUrl": "<your webhook url>",
"event": "order.created.initiated",
"mango": "<mango to be associated> (optional sends all mango related events if not specified)"
}'
fetch('https://api-prod-new.tagmango.com/api/v1/integration/webhook/webhook', {
method: 'POST',
headers: {
'accept': 'application/json',
'Content-Type': 'application/json',
'x-api-key': '<Your API Key>'
},
body: JSON.stringify({
"hookUrl": "<your webhook url>",
"event": "order.created.initiated",
"mango": "<mango to be associated> (optional sends all mango related events if not specified)"
})
})
.then(response => response.json())
.then(data => console.log(data));
import requests
import json
url = "https://api-prod-new.tagmango.com/api/v1/integration/webhook/webhook"
headers = {
"accept": "application/json",
"Content-Type": "application/json",
"x-api-key": "<Your API Key>"
}
data = {
"hookUrl": "<your webhook url>",
"event": "order.created.initiated",
"mango": "<mango to be associated> (optional sends all mango related events if not specified)"
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
hookUrl | string | Yes | Your webhook endpoint URL |
event | string | Yes | Must be `order.created.initiated` |
mango | string | No | Specific mango ID to monitor. If not specified, receives events for all mangoes |
Webhook Payload
When a subscriber starts the payment process for an order, TagMango will send a POST request to your webhook URL with the following payload:
Example
{
"subscriberId": "634fc35ddaf58580e2418c40",
"name": "Subscriber Name",
"email": "someone@example.com",
"phone": 1234567890,
"country": "IN",
"dialCode": "+91",
"orderId": "634fc35ddaf58580e2418c40",
"orderTime": "2025-02-03T12:36:18.831Z",
"amount": 100,
"gst": 0,
"discount": 20,
"coupon": "CODE",
"amountPayable": 90,
"mangoName": "Your mango",
"status": "completed",
"recurringType": "monthly",
"currency": "INR",
"quantity": 1,
"affiliateId": "634fc35ddaf58580e2418c40",
"affiliateName": "Affiliate Name",
"affiliateEmail": "affiliate@example.com",
"affiliatePhone": 123467890,
"customFields": null,
"funnelBridgeDetails": null,
"renewalCount": 3
}
Schema
stringstringstringnumberstringstringstringstringnumbernumbernumberstringnumberstringstringstringstringnumberstring | nullstring | nullstring | nullnumber | nullobject | nullarray | nullnumber | nullAt this stage, the payment is not yet confirmed. The status field in the payload will be set to initiated. You should wait for the order.created.completed webhook to confirm successful payment.
The payload may also include any custom fields configured in your mango as additional key-value pairs in the customFields object.
Handling the Webhook
Your webhook endpoint should:
- Respond with 200 status - Return a 200 HTTP status code to acknowledge receipt
- Process quickly - Respond within 30 seconds to avoid timeouts
- Implement idempotency - Handle duplicate events gracefully
- Verify authenticity - Validate the request using the provided authentication headers
Example Implementation
// Node.js Express example
app.post("/webhook", (req, res) => {
const payload = req.body;
// Verify the webhook authenticity (implement based on your security setup)
if (!verifyWebhook(req)) {
return res.status(401).send("Unauthorized");
}
// Process the webhook event
try {
console.log("Event data:", JSON.stringify(payload, null, 2));
// Your business logic here
// Process the event data according to your application needs
processWebhookEvent(eventType, payload);
} catch (error) {
console.error("Error processing webhook:", error);
// You might want to return 500 here depending on your retry policy
}
// Acknowledge receipt
res.status(200).send("OK");
});
function processWebhookEvent(eventType, payload) {
// Implement your custom logic based on the event type and payload
// This is where you'll handle the webhook data according to your business requirements
// Examples of what you might do:
// - Store event data in your database
// - Send notifications to users
// - Update user records
// - Trigger automated workflows
// - Sync data with external systems
console.log(`Processing ${eventType} event for your application`);
}