VA Transaction Events

These webhook events are triggered based on the overall lifecycle of a Virtual Account (VA) transaction.

This webhook now covers all VA transactions (both inbound deposits and outbound transfers). Merchants must strictly listen to transaction update events as the authoritative trigger for fund settlement, reconciliation, or business logic execution.


🔔 Event Types

Event IdentifierTrigger Condition & Business MeaningActionable Advice
va.transaction.createTransaction Created: Triggered when the system detects an incoming external transfer or initiates an outbound instruction. The status is typically pending, indicating that funds are identified or processing but not yet cleared.Use for logging or reconciliation only. Do not use this as a final settlement trigger.
va.transaction.updateTransaction Updated: Triggered whenever there is a change in the VA transaction's status or settlement amount.🌟 Settlement Trigger: Listen to this event. When the status field in the payload changes to completed, the funds have been successfully credited to or deducted from the balance. Execute your final accounting logic.

📦 Payload Example

When an event occurs, DogPay sends a POST request to your configured webhook endpoint. Below is the complete payload example of a va.transaction.update event when an inbound deposit is completed:

{
    "event_id": "123e4567-e89b-12d3-a456-426614174000",
    "event_identifier": "va.transaction.update",
    "data": {
        "id": "123e4567-e89b-12d3-a456-426614174001",
        "accountId": "123e4567-e89b-12d3-a456-426614174002",
        "idNo": "1000000000000000001",
        "vaId": "123e4567-e89b-12d3-a456-426614174003",
        "settleAmount": "100.00000000",
        "fee": "1.00000000",
        "totalAmount": "101.00000000",
        "type": "deposit",
        "status": "completed",
        "processStatus": "completed",
        "currency": "USD",
        "createAt": "2026-07-03T10:00:00.000Z",
        "completeAt": "2026-07-03T10:05:00.000Z",
        "detail": "ACH Mock Deposit",
        "sourceId": "PAYM-1000000001",
        "traceId": null,
        "relation": "unpobo",
        "callId": "WW202607031000000000000001",
        "operationType": "credit",
        "customerNotes": null,
        "originalIdNo": null
    }
}
⚠️

Idempotency Note

Please use event_id or the transaction's idNo to ensure idempotency. Always check if the transaction has already been processed in your database before executing accounting logic to prevent duplicate crediting/deducting caused by network retries.



Did this page help you?