Refund Flow

📘

API Reference

EndpointMethodDescription
Create RefundPOST payment/refundCreate payment refund
Get Refund by IDGET payment/refund/{Id}Retrieve details of a specific refund by ID
List RefundsGET merchant/refundFetch a list of all merchant refunds

Create refund request body parameters

🚧

Important

Use the dryRunquery parameter to validate a refund request without executing it. By default, dryRunis set to false. Set it to trueto perform a validation only, without processing the actual refund.

blockchain and address are required only when type is CRYPTO. All other fields below fromAmount are optional for every refund type.

NameTypeRequiredDescription
paymentIdstring✅Unique identifier of the payment being refunded
typestring (enum)✅Type of refund provider. Allowed: ASTERIUM, CRYPTO
fromCurrencystring✅Currency the refund is issued from
toCurrencystring✅Currency the refund is issued in
fromAmountstring✅≥ 0. Refund amount in source currency; must be ≤ sum of the payment items
blockchainstring✅ (CRYPTO only)Blockchain network for the refund
addressstring✅ (CRYPTO only)Destination crypto address for the refund
toAmountstring❌≥ 0. Refund amount in target currency; calculated automatically if omitted
invoiceIdstring❌Unique identifier of the associated invoice
descriptionstring❌Additional details or notes about the refund
signedRateobject❌Signed rate information, used when the refund involves a currency exchange

Example

{
  "paymentId": "",
  "type": "ASTERIUM",
  "toCurrency": "",
  "fromCurrency": "",
  "fromAmount": ""
}
Full Request Example (with optional fields)
{
  "paymentId": "a0570107-bba8-447e-b591-980d36c45d34",
  "type": "CRYPTO",
  "fromCurrency": "usdt",
  "toCurrency": "usdt",
  "fromAmount": "50.00",
  "blockchain": "tron",
  "address": "TKM5PxycJq6JpTfsz6PYhQYTThr7FAEqTK",
  "invoiceId": "4fa3a26d-09b4-49be-94ac-b2231528e7f7",
  "description": "Customer requested partial refund"
}
Response (JSON)
{
  "id": "f3b2c1a0-6e4d-4b8a-9c3e-1a2b3c4d5e6f",
  "paymentId": "a0570107-bba8-447e-b591-980d36c45d34",
  "type": "CRYPTO",
  "status": "INIT",
  "fromAmount": "50.00",
  "fromCurrency": "usdt",
  "toAmount": "50.00",
  "toCurrency": "usdt",
  "invoiceId": "4fa3a26d-09b4-49be-94ac-b2231528e7f7",
  "amountInInvoiceCurrency": "50.00",
  "amountInPaymentCurrency": "50.00",
  "feeAmount": "0.50",
  "feeCurrency": "usdt",
  "description": "Customer requested partial refund",
  "statusDescription": "Refund initialized, awaiting processing",
  "createdDate": "2025-11-12T08:10:22.216Z",
  "lastModifiedDate": "2025-11-12T08:10:22.216Z"
}
👍

Note: the same BaseRefundDto object is returned for dryRun=true (validation only, no funds moved) and dryRun=false (real execution).


Refund Statuses

StatusDescriptionCategory
INITRefund created but not yet processed.⏳ Pending
PROCESSINGRefund is being processed.⏳ Pending
CAPTUREDFunds have been held (captured) for the refund. This is an intermediate status — a further internal operation follows before the refund is complete.🔄 In Progress
PROCESSEDFinal status. Funds have been sent back to the payer.✅ Final
REJECTEDRefund was rejected due to validation or fraud detection.❌ Final
REVERSINGRefund reversal is in progress.🔄 In Progress
DIRTY_MONEYRefund flagged as suspicious. Manual compliance review required.⚠️ Review
FAILEDRefund attempt failed due to an error.❌ Final
SETTLEMENT_PROCESSEDRefund has been included in a settlement.✅ Final
SETTLEMENT_CAPTUREDRefund settlement has been captured.✅ Final

Status Flow Diagram

                       ┌──────────┐
                       │   INIT   │
                       └────┬─────┘
                            │
                       ┌────▼──────────┐
                       │  PROCESSING   │
                       └────┬──────────┘
                            │
        ┌────────────┬──────┴──────┬─────────────┐
        │            │             │             │
   ┌────▼──────┐ ┌───▼────┐  ┌─────▼─────┐  ┌────▼───┐
   │  CAPTURED │ │REJECTED│  │DIRTY_MONEY│  │ FAILED │
   └────┬──────┘ └────────┘  └───────────┘  └────────┘
        │
        │  (intermediate: funds held, internal
        │   follow-up operation pending)
        │
   ┌────▼──────┐
   │ PROCESSED │  ◄── final: funds returned to payer
   └────┬──────┘
        │
   ┌────▼──────────────────┐
   │  SETTLEMENT_PROCESSED │
   └────┬───────────────────┘
        │
   ┌────▼──────────────────┐
   │  SETTLEMENT_CAPTURED  │
   └────────────────────────┘


📘

Tips

  • Always run with dryRun=true first to validate the refund amount and currency before executing it for real.
  • fromAmount must be less than or equal to the sum of the original payment items.
  • Use List Refunds with the statuses and paymentMethods filters to monitor refund progress across your merchant account.

Related Endpoints

EndpointMethodDescription
Create RefundPOSTCreate a new refund for a payment
Get Refund by IDGETRetrieve refund details
List RefundsGETList all refunds for the merchant
Get Exchange RateGETObtain signed rate for a currency conversion
Get Invoice PaymentGETRetrieve the payment being refunded