Setting Up Webhooks
To receive webhook notifications, configure a webhook URL in your workspace settings. This URL should be a publicly accessible endpoint that can receive POST requests. Requirements:- The endpoint must accept POST requests
- The endpoint must accept
application/jsoncontent type - The endpoint should respond with a 2xx status code to acknowledge receipt
Webhook Format
All webhooks are sent as HTTP POST requests to your configured webhook URL.Headers
Payload Structure
Supported Events
website.created
Triggered when a new website is created in your workspace.Unique identifier for the website
The preview URL of the website
Business name / website name
ISO 8601 timestamp of creation
Whether the website is activated
website.deleted
Triggered when a website is deleted from your workspace.Unique identifier for the deleted website
The preview URL that was associated with the website
Business name / website name
ISO 8601 timestamp of deletion
client.created
Triggered when a new client is added to your workspace.Unique identifier for the client
Full name of the client
Email address of the client
Maximum number of websites the client can create
ISO 8601 timestamp of creation
client.deleted
Triggered when a client is removed from your workspace.Unique identifier for the deleted client
Full name of the client
Email address of the client
ISO 8601 timestamp of deletion
Implementation Examples
Node.js / Express
Python / Flask
Best Practices
Respond quickly
Respond quickly
Your webhook endpoint should respond with a 2xx status code as quickly as possible (ideally within 5 seconds). If you need to perform time-consuming operations, queue them for background processing.
Validate webhook source
Validate webhook source
For production environments, consider implementing additional security measures:
- Use HTTPS endpoints only
- Validate the User-Agent header (
LindoAI-Webhooks/1.0) - Consider implementing IP allowlisting if Lindo provides static IP addresses
Handle failures gracefully
Handle failures gracefully
Your endpoint should be resilient to:
- Duplicate webhook deliveries
- Out-of-order webhook deliveries
- Missing or malformed data
Implement idempotency
Implement idempotency
Design your webhook handlers to be idempotent, as you may receive the same webhook multiple times:
Log and monitor
Log and monitor
Implement comprehensive logging and monitoring:
- Log all received webhooks
- Monitor webhook processing failures
- Set up alerts for repeated failures
Testing Webhooks
Local Development
For local development and testing, you can use tools like:- ngrok - Create a public URL for your local server
- Webhook.site - Test webhook payloads without writing code
- RequestBin - Another tool for inspecting webhook requests
Manual Testing
You can manually test your webhook endpoint using curl:Troubleshooting
Webhooks not being received
Webhooks not being received
- Check webhook URL configuration in your workspace settings
- Verify endpoint accessibility (not behind a firewall)
- Check for HTTPS requirement
- Review server logs
Webhook delivery failures
Webhook delivery failures
If your endpoint returns non-2xx status codes:
- Webhooks may be retried (implementation dependent)
- Check your endpoint’s error handling and logging
- Ensure your endpoint can handle the payload structure
Duplicate webhooks
Duplicate webhooks
If you’re receiving duplicate webhooks:
- Implement idempotency in your webhook handlers
- Use unique identifiers (like
website_id,client_id) to detect duplicates - Store processed webhook IDs to prevent reprocessing

