Skip to main content
VTPE delivers real-time payment lifecycle events to your Webhook URL via signed POST requests. This page describes the request headers, event envelope structure, the three event types, how to acknowledge delivery, retry behavior, and how to verify webhook signatures.

Webhook Request Headers

Every webhook request from VTPE includes the following three headers:

Event Envelope

All VTPE webhook events use a common envelope:
The event field identifies the payment lifecycle stage. The data field contains event-specific payload data.
Sent when a payment session is created:

Acknowledging Webhooks

Your endpoint must return HTTP 200 with the following JSON body to confirm receipt:
If your endpoint returns a non-2xx status code, VTPE will not consider the delivery successful and may retry the request.

Retry Behavior

VTPE retries webhook deliveries when your endpoint returns a non-2xx response. To handle retries safely, make your webhook handler idempotent. Use the paymentId field as a unique key to deduplicate events and prevent duplicate side effects in your system.

Signature Verification

Always verify the X-Signature header before processing any webhook payload. VTPE signs each webhook using HMAC-SHA256 of the raw request body concatenated with the X-Timestamp value. For complete implementation details, see the Webhook Security guide.
Always verify the X-Signature header before processing any webhook payload. Unverified webhooks may be forged.