# Refund (/en/api-reference/objects/refund)

A Refund returns funds from a successful Charge back to the customer's original payment method. Refunds can be full or partial, and a single Charge can be refunded multiple times up to its original amount. The Refund's `status` reflects the processor's progress as the money makes its way back: `pending` while in flight, `succeeded` once the funds have been returned, or `failed` if the processor rejected the request.

## Fields

- `id` (string, required) — Unique identifier for the refund
- `object` (string, required) — Object type
- `amount` (number, required) — Refund amount in smallest currency unit
- `chargeId` (string, required) — ID of the charge being refunded
- `paymentIntentId` (string, required) — ID of the PaymentIntent being refunded
- `balanceTransactionId` (string | null, required) — ID of the balance transaction for the refund, null until settled
- `failureBalanceTransactionId` (string | null, required) — Balance transaction for failed refund reversal, null unless the refund failed
- `externalRefundId` (string | null, required) — Processor-side refund id, null when not yet reconciled
- `createdAt` (string, required) — Time at which the refund was created (ISO 8601)
- `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY"), required) — Three-letter ISO currency code
- `presentmentDetails` (PresentmentDetails) — Customer-facing view of the refund — amount in the original charge's presentment currency using the charge's LOCKED exchange rate. Populated only when the charge had a presentment currency different from processing.
  - `amount` (number, required) — Amount in the customer's currency (smallest unit — e.g. fils for KWD, cents for USD)
  - `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY"), required) — Customer's currency code (ISO 4217)
  - `exchangeRate` (number, required) — Locked exchange rate: presentment_major × rate = processing_major. Reused for refunds/disputes. Stored as numeric(15,6) — frontend can call `.toFixed(6)` to render the full 6-decimal string when needed.
  - `exchangeRateId` (string, required) — Reference to the immutable ExchangeRate record used — audit trail for FX reconciliation
- `status` (enum("PENDING" | "REQUIRES_ACTION" | "SUCCEEDED" | "FAILED" | "CANCELED"), required) — Status of the refund (pending, requires_action, succeeded, failed, canceled)
- `reason` (enum("DUPLICATE" | "FRAUDULENT" | "REQUESTED_BY_CUSTOMER" | "RISK_HOLD_CAPTURE")) — Reason for the refund
- `failureReason` (enum("lost_or_stolen_card" | "expired_or_canceled_card" | "charge_for_pending_refund_disputed" | "insufficient_funds" | "declined" | "merchant_request" | "unknown")) — Reason for refund failure
- `pendingReason` (enum("processing" | "insufficient_funds" | "charge_pending")) — Reason for pending status
- `description` (string) — Description for non-card refunds
- `destinationDetails` (RefundDestinationDetails) — Payment method-specific refund details
  - `type` (enum("card" | "wallet" | "bank_transfer" | "kiosk"), required)
  - `card` (CardDestinationDetails)
    - `reference` (string) — Acquirer reference number (ARN)
    - `referenceStatus` (enum("pending" | "available" | "unavailable"))
    - `referenceType` (string)
    - `type` (enum("pending" | "refund" | "reversal"))
  - `wallet` (WalletDestinationDetails)
    - `reference` (string) — Wallet transaction reference
    - `provider` (string) — Wallet provider (e.g., vodafone_cash, fawry)
  - `bankTransfer` (BankTransferDestinationDetails)
    - `reference` (string)
    - `referenceStatus` (enum("pending" | "available" | "unavailable"))
  - `kiosk` (KioskDestinationDetails)
    - `reference` (string)
    - `provider` (string)
- `nextAction` (RefundNextAction) — Next action if requires_action
  - `type` (string, required)
  - `displayDetails` (RefundNextActionDisplayDetails)
    - `emailSentAt` (string) — Email sent timestamp (ISO 8601)
    - `emailSentTo` (string)
    - `expiresAt` (string) — Expiration timestamp (ISO 8601)
- `instructionsEmail` (string) — Email for refund instructions
- `receiptNumber` (string) — Receipt number for email receipts
- `feeAmount` (number) — Original platform fee (NOT refunded - kept by platform)