Skip to main content
Webhooks let your server receive real-time push notifications whenever something meaningful happens in Convo — a message is delivered or read, a contact is created, or a campaign reply comes in. Instead of polling the API, you register a URL and Convo sends an HTTP POST request to that URL the moment the event fires.
Your webhook endpoint must respond with HTTP 200 as quickly as possible. If your endpoint is slow or times out, Convo will retry the delivery. To avoid duplicate processing, acknowledge the request immediately and handle the event asynchronously in a background job or queue.
During local development, use a tunneling tool like ngrok or Cloudflare Tunnel to expose your local server over a public HTTPS URL without deploying.

Prerequisites

Before configuring a webhook, make sure you have:
  • A Custom App in Convo — navigate to Dashboard → Integrations → Custom Apps and create a new app. Custom Apps are the container that holds your webhook configuration and generates the shared_secret used to verify payloads.
  • A publicly accessible HTTPS URL — WhatsApp and Convo only deliver to https:// endpoints with a valid TLS certificate. Plain HTTP or self-signed certificates are not accepted.

Configuring Your Webhook

1

Create a Custom App

In the Convo dashboard, go to Integrations → Custom Apps → New App. Give your app a descriptive name (e.g., OrderNotifications or CRMSync). You’ll see a shared_secret value after the app is created — copy it now and store it securely; you’ll use it to verify incoming webhook payloads.
2

Configure your webhook URL

In your app’s settings, enter the full public HTTPS URL of the endpoint on your server that will receive webhook events (e.g., https://your-server.com/webhook). Convo sends a POST request with a JSON body to this URL for every subscribed event.
3

Subscribe to topics

Select the event topics your app should receive. Available topics include:Subscribe only to the topics your application needs — this keeps your endpoint traffic lean and your processing logic simple.
4

Note your shared_secret

After saving the app, Convo displays a shared_secret. This secret is used to generate an HMAC-SHA256 signature for every webhook payload, sent as the x-convo-signature header. Verify this signature on every incoming request to ensure the payload genuinely came from Convo and was not tampered with in transit.
5

List webhooks

Confirm your webhook is registered by querying the list endpoint. Filter by your app name using the app_name query parameter.
Example response

Verifying Webhook Signatures

Always validate the x-convo-signature header before processing a payload. This prevents replay attacks and ensures your endpoint only acts on genuine Convo events.
Node.js
Store your shared_secret in an environment variable (e.g., WEBHOOK_SECRET) — never hard-code it in your source code.

Delete a Webhook

To remove a webhook — for example when decommissioning an integration or rotating to a new endpoint URL — send a DELETE request with the webhook’s id.
This always returns:
After deleting, Convo will immediately stop sending events to the associated URL. If you want to resume receiving events, register a new webhook with the updated URL using your Custom App settings.