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
paymentIdstringUnique identifier of the payment being refunded
typestring (enum)Type of refund provider. Allowed: ASTERIUM, CRYPTO
fromCurrencystringCurrency the refund is issued from
toCurrencystringCurrency 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
invoiceIdstringUnique identifier of the associated invoice
descriptionstringAdditional details or notes about the refund
signedRateobjectSigned 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