Each retry is performed with a 1-minute interval between attempts. If all retries are exhausted, a failure notification will be sent to your registered merchant email.
Retry Rules by HTTP Status
The number of retry attempts depends on the HTTP response status returned by your endpoint.| HTTP Status / Condition | Handler | Max Retries | Description |
|---|---|---|---|
500 Internal Server Error | handleFailedHttpResponse() | 1 | Your server encountered an internal error. |
503 Service Unavailable | handleFailedHttpResponse() | 4 | Your server is temporarily unreachable. |
400 / 404 Bad Request / Not Found | handleFailedHttpResponse() | 2 | Endpoint may be incorrect or temporarily unavailable. |
307 / 308 Temporary / Permanent Redirect | retryRedirect() | 5 | Redirects are followed up to 5 times. |
301 / 302 / 303 Redirect | handleFailedHttpResponse() | 0 | Redirects are not followed — update your endpoint URL. |
| Exception (cURL error, timeout, DNS) | catch(Exception $e) | 1 | Connection-level failures. |
| Other (default) | handleFailedHttpResponse() | 5 | All other status codes not listed above. |
Retry Interval
Interval Between Retries
Each retry attempt is made 1 minute after the previous one. Retries stop once the maximum limit for that status code is reached.
Retry Cache TTL
Retry counts are stored in cache with a 15-minute TTL. All attempts are logged to our database for auditing.
Example: HTTP 503 Retry Flow
Here’s what happens when your endpoint consistently returns503:
Attempt #1
Singapay sends the webhook. Your server responds
503. System schedules a retry in 1 minute.Total maximum delivery time for a
503 scenario: approximately 4 minutes across all attempts.What Happens After All Retries Fail
If the webhook cannot be delivered after all retry attempts:- The failure is logged in the database and visible via the Callback menu on your merchant dashboard.
- A failure notification email is sent to your registered merchant email address.
Best Practices
Return 2xx
Always respond with an HTTP status between
200–299 to acknowledge receipt.Stay Available
Keep your webhook endpoint stable and publicly accessible at all times.
Avoid Redirects
Do not use redirect URLs (
301–308) as your webhook endpoint.