ParuPay POSTs the payment result to the URL you register, even when the customer never returns to your site. Your handler updates the order.

Register an endpoint

Webhooks are registered only in the merchant portal under Integrations → Webhooks. Add your public https:// URL, choose the events to receive (or * for every event), and save. One endpoint is allowed for sandbox and one for live. After you create the endpoint, the portal shows its signing secret (whsec_test_… or whsec_live_…). Store that secret on your server — you need it to verify deliveries. You can also send a sample event from the same screen to check your handler.

What ParuPay sends

Metadata on webhooks contains only order_id. Look up everything else in your own database. Event types and data.object fields are listed above.

Verify and handle it

X-One9Pay-Signature is t=sandbox or t=live, then v1= and the last 16 characters of your webhook secret. Reject the request when the mode or the value does not match.

Delivery rules

  • Respond with a 2xx status. Anything else, or no answer within 5 seconds, is recorded as failed.
  • Failed deliveries are not retried automatically. Send them again with POST /v1/charges/:id/resend_webhook or POST /v1/payment_links/:id/resend_webhook, or from the payment in the merchant portal.
  • Every attempt is logged. Read them with GET /v1/payments/:id/webhook_deliveries.
  • Check your handler from the merchant portal (Integrations → Webhooks → send a test), which posts a sample event (default payment_intent.succeeded).