Webhooks Overview
Zotlo Webhooks allow your backend to receive real-time notifications about events such as subscription status changes, successful payments, registered users, completed quizzes and refunds.
Your server receives these events as HTTP POST requests in JSON format, enabling you to sync billing activity, update user access, trigger workflows, or maintain your internal records.
Activation
To start receiving webhook events, you must activate each webhook type from the Zotlo Dashboard:
Navigate to Developer Tools → Webhooks.
Enter your server’s endpoint URL for the webhook(s) you want to subscribe to.
Once saved, the webhook becomes active immediately.
You can use the “Send Test Webhook” option to verify connectivity and validate your endpoint before going live.
How Webhooks Work
Webhooks are delivered to the endpoint URL once they are activated.
Each webhook event is sent as a POST request with a JSON body containing:
queue : event metadata
parameters : actual event payload (subscription, payment, or refund details)
Example structure:
{
"queue": {
"type": "...",
"eventType": "...",
"requestID": "...",
"createDate": {...},
"appId": 123
},
"parameters": { ... }
}Delivery & Retry Logic
A webhook is considered successful when your server returns HTTP 200.
If your server returns anything other than 200, the notification is retried with the following schedule:
1st retry
10 minutes
2nd–4th retry
Every 30 minutes
5th retry
After 1 hour
Final state
No more retries
If all attempts fail, the event is dropped and will not be resent.
Security Best Practices
To ensure webhook authenticity, you should:
Validate the IP/domain whitelist (optional).
Verify the requestID does not repeat (idempotency check).
Log all incoming events.
Always return 200 OK after successful processing, not before.
Event Types
Zotlo currently provides three webhook categories:
Subscription Status Webhook
Sends events on subscription lifecycle changes (new subscriber, grace, renewal, cancellation, reactivation, etc.)
Payment Webhook
Sends events for all successful payments (subscription & consumables)
Refund Webhook
Sends events for all successful refund operations
Registered Users Webhook
Sends events for all successful user registrations
Completed Quizzes Webhook
Sends events for all completed quizzes
Each webhook type includes its own queue.type, eventType, and structured parameters payload.
Detailed specs for each webhook type are provided on their respective documentation pages.
Recommendations
To ensure consistent processing:
Treat all webhooks as asynchronous.
Use transaction_id and subscriber_id as primary identifiers.
Use realStatus instead of status when determining true subscription state.
Apply idempotent handling to avoid duplicates.
Process events in chronological order using
createDatewhen needed.
Sample Response Structure
While the payload differs per webhook type, all webhook POST bodies follow the same structure:
queue.type
Type of webhook (SubscriberUpdate, TransactionInsert, TransactionRefund)
queue.eventType
Specific event (renewal, newSubscriber, refund, transaction, etc.)
parameters
The event data (subscription profile, payment details, refund details)
Last updated

