You set up a webhook in the Perplexity API to receive real-time data, but the endpoint never receives a POST request. This usually happens because of a misconfiguration in the webhook URL, an incorrect event selection, or a network-level block. This article explains why the webhook fails to trigger and provides step-by-step fixes to get it working.
Key Takeaways: Fixing Perplexity API Webhook Delivery Failures
- Webhook URL validation: The endpoint must use HTTPS and return a 200 status for the test ping to succeed.
- Event subscription matching: Only events you subscribe to in the API dashboard trigger the webhook.
- Network and firewall rules: Your server must allow inbound connections from Perplexity IP ranges on port 443.
Why the Perplexity API Webhook Does Not Trigger
The Perplexity API sends a POST request to your webhook URL when a specific event occurs, such as a completed search or a new answer. If the webhook does not trigger, one of three things is wrong. First, the URL you provided is unreachable or does not return a 200 OK status within 5 seconds. Second, you subscribed to the wrong event or no event at all. Third, your server or firewall blocks the incoming request from Perplexity servers. The API also sends a test ping when you first save the webhook; if that ping fails, the webhook is disabled automatically.
Common Root Causes in Detail
The most frequent cause is an invalid or expired SSL certificate on your endpoint. Perplexity requires HTTPS and validates the certificate chain. If the certificate is self-signed or expired, the request is dropped. Another common cause is a missing or incorrect event name in the subscription payload. The API accepts only event names documented in the official reference, such as search.completed or answer.created. A typo in the event name silently fails. Finally, rate limiting or IP whitelisting on your side can reject the request before your application processes it.
Steps to Fix a Non-Triggering Webhook
Follow these steps in order. After each step, test the webhook by triggering the event manually or using the API dashboard test function.
Step 1: Verify the Webhook URL and SSL Certificate
- Check the URL protocol
The URL must start withhttps://. HTTP URLs are rejected immediately. Example:https://yourdomain.com/webhook. - Test the endpoint manually
Use a tool like curl or Postman to send a POST request to the URL. The endpoint must return HTTP 200 within 5 seconds. Any other status code or timeout causes the webhook to fail. - Validate the SSL certificate
Open the URL in a browser and click the padlock icon. The certificate must be issued by a trusted CA and not be expired. Self-signed certificates are not allowed.
Step 2: Confirm the Event Subscription
- Log in to the Perplexity API dashboard
Go tohttps://api.perplexity.ai/dashboardand navigate to Webhooks. - Inspect the subscribed events
Click the webhook entry. The list of subscribed events appears. Ensure the event you expect, such assearch.completed, is checked. - Add missing events
If the event is missing, click Edit Webhook and check the correct event name from the dropdown. Save the changes.
Step 3: Check Network and Firewall Rules
- Allow inbound traffic on port 443
Your server firewall must accept TCP connections on port 443 from all IPs or specifically from the Perplexity IP range. Contact Perplexity support for the current IP list. - Disable IP whitelisting temporarily
If you have an IP whitelist, remove it and test the webhook. If the webhook triggers, add the Perplexity IPs to the whitelist. - Review reverse proxy logs
If you use Nginx or Apache, check the access logs for requests from Perplexity IPs. A missing log entry means the request never reached your server.
Step 4: Test the Webhook Using the Dashboard
- Use the Send Test button
In the webhook edit page, click Send Test. The API sends a test payload to your endpoint. If the test succeeds, the webhook status changes to Active. - Check the response log
After the test, the dashboard shows the HTTP status code and response body from your endpoint. A 200 status confirms the webhook is working. - Trigger a real event
Perform an action that matches the subscribed event, such as running a search query. The webhook log should show a new entry within seconds.
If the Webhook Still Does Not Trigger
If you completed all steps and the webhook remains inactive, check these additional failure patterns.
Webhook Shows Disabled After Saving
The API automatically disables a webhook if the initial test ping fails. Re-enable it by clicking Enable in the dashboard, then fix the URL or SSL issue from Step 1. The webhook will be tested again.
Webhook Triggers But Payload Is Empty
An empty payload usually means the event occurred but no data matched the subscription filter. For example, if you subscribe to search.completed but the search returned no results, the payload may contain only metadata. Check the event documentation for the expected payload structure.
Webhook Triggers Only Intermittently
Intermittent failures are often caused by network timeouts or rate limiting. Your endpoint must respond within 5 seconds. If your application processes the request slowly, move the processing to a background job and return 200 immediately. Also check if your hosting provider blocks repeated requests from the same IP.
Perplexity API Webhook Events: Search Completed vs Answer Created
| Item | Search Completed | Answer Created |
|---|---|---|
| Event name | search.completed |
answer.created |
| Trigger condition | Perplexity finishes a search query | Perplexity generates a final answer from sources |
| Payload contains | Query text, source count, duration | Answer text, citations, confidence score |
| Use case | Logging search activity | Storing or forwarding the answer |
You can now diagnose and fix a Perplexity API webhook that fails to trigger. Start by verifying the URL and SSL certificate, then check the event subscription and network rules. Use the dashboard test function to confirm each fix. For advanced reliability, set up a retry mechanism in your endpoint and monitor the webhook log for failed deliveries.