Appearance
Refunds
IIMMPACT automatically refunds failed fulfillment and duplicate collections. Refunds are returned on the order and through refund webhooks.
Automatic refunds
IIMMPACT creates refunds automatically and returns them through the original payment method. There is no public refund-submission endpoint.
| Reason | Amount | When |
|---|---|---|
failed_fulfillment | Sum of failed units' frozen sale prices; excludes customer fees. | One aggregate refund per order, after all units finish. |
duplicate_collection | Entire extra collection, including its customer fee. | A separately confirmed duplicate collection; never fulfills the order again. |
If the RM60 item succeeds and the RM40 item fails, the order gets one RM40 refund. If every item fails, refund the full item subtotal; the fee remains unchanged. For quantity three with one failed unit, refund one unit's sale price. No refund is created when all units succeed.
Additional duplicate collections require their own refunds. Read all obligations in refunds on order detail, or receive refund events.
Refund schema
Each object appears in the order's refunds array and as refund event data.
| Field | Type | Description |
|---|---|---|
refund_id | string | Stable identifier through processing and review. |
order_id | string | Order receiving the refund. |
payment_id | string | Original collection being repaid; not a per-item allocation. |
external_reference | string | Your order reference. |
currency | string | MYR. |
amount | string | Positive two-place refund amount. |
reason | string | failed_fulfillment or duplicate_collection. |
status | string | pending, processing, requires_review, or successful. |
review_reason | string or null | provider_rejected or provider_outcome_unknown during review; otherwise null. |
created_at | string | RFC3339 obligation creation time. |
updated_at | string | RFC3339 time of the latest public refund change. |
Refund example
json
{
"refund_id": "ref_example",
"order_id": "ord_example",
"payment_id": "pay_example",
"external_reference": "ORD-00042",
"currency": "MYR",
"amount": "40.00",
"reason": "failed_fulfillment",
"status": "pending",
"review_reason": null,
"created_at": "2026-09-14T10:15:20+08:00",
"updated_at": "2026-09-14T10:15:20+08:00"
}Refund progress
| Status | Meaning |
|---|---|
pending | Repayment obligation exists. |
processing | Repayment is in progress. |
requires_review | Submission was rejected or its outcome is uncertain; IIMMPACT is reviewing it. |
successful | Customer repayment is verified. |
Order completed does not mean repayment finished. Wait for refund successful; do not independently refund a payment under review. Automatic submission happens once: timeout, rejection, or a missing callback does not trigger another money-moving submission. Status checks and review retain the same refund ID.
