The system triggers a webhook failure email when the initial webhook call fails and subsequent retry attempts also fail. Here is the sequence of retry attempts and when the webhook failure email is triggered:

  • We will do a retry 5 minutes after the initial web-hook failure.  (If it is because of an issue at the recipient's end.)

  • Subsequently, we retry 30 minutes later. 

  • To end, we try again one hour (60 minutes) after the previous attempt.

For example, if the webhook call fails at 2 PM, we will try at 2:05, then 2:35, and then finally at 3:35 PM. If all three re-attempts fail, the Webhook failure email is triggered to the account admins.


Sample webhook failure email:




When customers reach out to us to locate the root cause or the display ID, you can follow the below steps for troubleshooting:


  • From the email, you will see the rule link (In the above screenshot, you will see emma-sleep.freshdesk.com) using which you can capture the account URL.
  • Navigate to FreshOps to locate the POD of the account and then navigate to the POD-specific Haystack application.
  • Construct the search query as below and search for the time the webhook failure email was received:

“Please recheck the webhook settings in your account” AND “account-ID”

  • Copy the 1st event ID and run through the logs again and search for the word “response” and you will be able to see the failure reason.

Screenshot for reference:



  • If you are unable to locate the “response”, search for “x-request-id”. Copy it and search for the logs again. Screenshot for reference:


  •  Based on the response, guide the customer on the next steps.


Possible error responses:

  • Freshdesk Endpoints

  • External Endpoints


Freshdesk Endpoints:


1. HTTP Status Code = 400,

Response Text = {"description":"Validation failed","errors":[{"field":"type","message":"It should be one of these values: 'Inquiry,Sales Inquiry - Institutional,Marketing Inquiry'","code":"invalid_value"}]} 


A 400 error response will be returned in the following cases:


Mandatory field not passed: If a mandatory field is not included in the payload of the webhook request, the system will identify the missing field and respond with a 400 error. 


NULL value for a ticket property: If you are passing a field in the webhook payload and the ticket does not have any value in that field, 400 Bad request response will be returned. The webhook payload does not accept NULL values hence we can suggest the customer to either remove the field from the payload or pass some value to it.


Incorrect payload syntax: If the syntax of the payload in the webhook request is incorrect or does not match the expected format, a 400 error will be returned. This indicates that the request structure or formatting is not valid and needs to be corrected.


2.  a) HTTP Status Code = 403,

Response Text = {"message":"Your IPAddress is blocked by the administrator"}


For this error response, we can suggest the customer whitelist the NAT IPs on their end.


b) HTTP Status Code = 403,

Response Text = {"code":"access_denied","message":"You are not authorized to perform this action."}

Please check and reconfigure the rule to avoid any loss of communication.


If the agent’s API key does not have sufficient permissions to perform the API call, this response will be returned. Either admin’s API key has to be passed or the customer should grant permission to the agent whose API key has been passed.


External Endpoints:


Fetch the Haystack logs by following the steps mentioned above and you can share the "Header" and "response" with the customer and they can check on their end.


Screenshot for response:




1. Response Code: 504


The timeout for a webhook call is 5 seconds. If we do not receive a response within this period, then the server will return a 504 response code since the webhook got timed out. We'll have to check when the request was sent from Freshdesk and when the response was sent from the client-server. If the time period is more than 5 seconds, then the client has to be optimized to send a response within the timeout. Then, the webhook will be queued for the next retry.


Here's how the response would be:


[00274790-5e3e-43f7-a059-eb4da16bd280] [a7e27b70496f537bd7258bba] [e8c91e2d4d90e72fc97fa91f] Timeout trying to complete the request.

[00274790-5e3e-43f7-a059-eb4da16bd280] [a7e27b70496f537bd7258bba] [e8c91e2d4d90e72fc97fa91f] R=2043001464438 WEBHOOK: response=504

[00274790-5e3e-43f7-a059-eb4da16bd280] [a7e27b70496f537bd7258bba] [e8c91e2d4d90e72fc97fa91f] R=2043001464438 WEBHOOK: RETRY, perform_in=300, retry_count=1


2. Response: Incomplete response received from application


The parameter group_id was empty so the error message "Incomplete response received from application". Here's the response we received:


"body"=>"{\n\"group_id\":,\n\"custom_fields\":{\n\"cf_last_email_date:\"2020-04-21 14:23:42 +0530\"\n}\n}"}