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
string
string
string
number
string
string
string
string
number
number
number
string
number
string
string
string
string
number
string | null
string | null
string | null
number | null
object | null
array | null
number | null
At 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`);
}