Subscription Sync Webhook
Receive notifications when subscription status changes in edrone.
Webhook URL
Configure your webhook endpoint in Mission Control: Settings → Integrations → Webhooks
Payload
{
"event": "subscription_status_changed",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"email": "customer@example.com",
"subscriber_status": 0,
"sms_subscriber_status": 1,
"reason": "unsubscribed_by_user"
}
}
Fields
| Field | Type | Description |
|---|---|---|
event | string | Event type |
timestamp | string | ISO 8601 timestamp |
data.email | string | Customer email |
data.subscriber_status | number | 1 = subscribed, 0 = unsubscribed |
data.sms_subscriber_status | number | SMS subscription status |
data.reason | string | Reason for change |
Handling the webhook
- Node.js (Express)
- Python (Flask)
- PHP
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhooks/edrone', (req, res) => {
const payload = req.body;
if (payload.event === 'subscription_status_changed') {
const email = payload.data.email;
const subscribed = payload.data.subscriber_status === 1;
// Update your database
updateSubscriptionStatus(email, subscribed);
}
res.json({ received: true });
});
app.listen(3000);
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhooks/edrone', methods=['POST'])
def handle_webhook():
payload = request.json
if payload['event'] == 'subscription_status_changed':
email = payload['data']['email']
subscribed = payload['data']['subscriber_status'] == 1
# Update your database
update_subscription_status(email, subscribed)
return jsonify({'received': True}), 200
<?php
$payload = json_decode(file_get_contents('php://input'), true);
if ($payload['event'] === 'subscription_status_changed') {
$email = $payload['data']['email'];
$subscribed = $payload['data']['subscriber_status'] === 1;
// Update your database
updateSubscriptionStatus($email, $subscribed);
}
header('Content-Type: application/json');
echo json_encode(['received' => true]);
Security
Verify webhook authenticity:
- Check request comes from edrone IP range
- Validate payload structure
- Use HTTPS endpoint only
Retry policy
Failed webhooks are retried:
- 1st retry: 1 minute
- 2nd retry: 5 minutes
- 3rd retry: 30 minutes
- After 3 failures: webhook marked as failed