> For the complete documentation index, see [llms.txt](https://docs.neox.vn/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.neox.vn/docs/global/global-collections/integration/refund-requests/webhook.md).

# Webhook

For webhook delivery mechanics, security verification, and retry behaviour, see [Event Notification](/docs/global/global-collections/integration/event-notification.md).

This page documents 2 event types covering the refund lifecycle of a trade/platform collection order: `TRADE_COLLECTION_REFUND_PROCESS` and `TRADE_COLLECTION_REFUND_SUCCESS`.

{% hint style="info" %}
[Create Refund Request](/docs/global/global-collections/integration/refund-requests/api-create-refund-request.md) accepts a `webhookUrl` field, but it is **not** used to deliver refund status notifications. Both events below are delivered through the **collection-transaction event group** instead, using the URL and secret pre-configured centrally for your merchant account (see [Event Notification](/docs/global/global-collections/integration/event-notification.md)). This is a deliberate design decision, not an oversight: refunds are tracked as part of the originating collection order's lifecycle rather than as a standalone stream.
{% endhint %}

## TRADE\_COLLECTION\_REFUND\_PROCESS

Sent when a refund against a trade/platform collection order starts processing.

### Event data

| Field Name      | Type   | Description                                                                                                                    |
| --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| type            | string | Event type. Fixed value: `TRADE_COLLECTION_REFUND_PROCESS`.                                                                    |
| subMerchantId   | string | NeoX identifier of the sub-merchant that owns the receiving virtual account, if applicable.                                    |
| orderId         | string | NeoX identifier of the original collection order being refunded.                                                               |
| requestId       | string | Unique identifier for this webhook event. Use this for idempotency.                                                            |
| refundRequestId | string | The `requestId` of the originating Create Refund Request.                                                                      |
| refundAmount    | number | Amount being refunded.                                                                                                         |
| refundCurrency  | string | Currency of `refundAmount`.                                                                                                    |
| feeAmount       | number | Fee charged for the refund, if any.                                                                                            |
| feeCurrency     | string | Currency of `feeAmount`.                                                                                                       |
| beneAccountNum  | string | Account number the refund is being returned to.                                                                                |
| beneAccountName | string | Account name the refund is being returned to.                                                                                  |
| status          | string | Fixed value: `PROCESS`.                                                                                                        |
| createdAt       | string | Timestamp when the refund was created (ISO 8601).                                                                              |
| extData         | string | Reserved for future use. Currently always the literal string `"{}"`.                                                           |
| secureHash      | string | Base64-encoded SHA-256 signature. See [Event Notification](/docs/global/global-collections/integration/event-notification.md). |

### Sample data

```json
{
  "type": "TRADE_COLLECTION_REFUND_PROCESS",
  "subMerchantId": "18104208",
  "orderId": "689379735339516013",
  "requestId": "ORE_20260722152239096",
  "refundRequestId": "RF-20260722-000987654",
  "refundAmount": 5555,
  "refundCurrency": "USD",
  "feeAmount": 0,
  "feeCurrency": "USD",
  "beneAccountNum": "0013915373322",
  "beneAccountName": "NGUYEN VAN A",
  "status": "PROCESS",
  "createdAt": "2026-07-24T03:10:12.000Z",
  "extData": "{}",
  "secureHash": "Base64EncodedSHA256HashValue=="
}
```

## TRADE\_COLLECTION\_REFUND\_SUCCESS

Sent when a refund against a trade/platform collection order completes successfully. Same fields as `TRADE_COLLECTION_REFUND_PROCESS`, with `status=SUCCESS` and an additional `completedAt` field.

### Event data

Same fields as [TRADE\_COLLECTION\_REFUND\_PROCESS](#trade_collection_refund_process) above, except:

| Field Name  | Type   | Description                                                 |
| ----------- | ------ | ----------------------------------------------------------- |
| type        | string | Event type. Fixed value: `TRADE_COLLECTION_REFUND_SUCCESS`. |
| status      | string | Fixed value: `SUCCESS`.                                     |
| completedAt | string | Timestamp when the refund completed (ISO 8601).             |

### Sample data

```json
{
  "type": "TRADE_COLLECTION_REFUND_SUCCESS",
  "subMerchantId": "18104208",
  "orderId": "689379735339516013",
  "requestId": "ORE_20260722152239096",
  "refundRequestId": "RF-20260722-000987654",
  "refundAmount": 5555,
  "refundCurrency": "USD",
  "feeAmount": 0,
  "feeCurrency": "USD",
  "beneAccountNum": "0013915373322",
  "beneAccountName": "NGUYEN VAN A",
  "status": "SUCCESS",
  "createdAt": "2026-07-24T03:10:12.000Z",
  "completedAt": "2026-07-24T03:25:47.000Z",
  "extData": "{}",
  "secureHash": "Base64EncodedSHA256HashValue=="
}
```
