Refunds

Overview

Refunds return money to customers for previously collected charges. They can be full or partial and are tracked separately from the original charge.


How It Works

  1. Refund requested — A refund is initiated through the dashboard or API
  2. Processing — The refund is sent to the payment processor
  3. Completed — Funds are returned to the customer's payment method

Example: A customer cancels their annual subscription mid-year. A prorated refund of $50 is created against their original $99 charge. The customer sees the credit on their card statement within 5-10 business days.


API Endpoints

MethodEndpointDescription
GETList refundsRetrieve a paginated list of refunds
POSTCancel refundsCancel pending refunds

Important Behaviors

  • User ID via charge: Each refund includes user_id resolved through the charge relationship (charge → customer). If the charge has no customer, user_id is null.
  • Expandable charge: Pass include=charge to get the full charge object embedded in the response.
  • Cancel accepts IDs or 'all': The cancel endpoint accepts a comma-separated string of refund IDs, or the string 'all' to cancel all eligible pending refunds.
  • Only "to_issue" refunds are cancellable: The cancel endpoint only affects refunds with status: to_issue and a valid created date.
  • Async cancellation: Cancel dispatches a background job (InitiateCancelledRefunds). Refunds are not cancelled immediately.

Refund Statuses

StatusDescription
succeededRefund completed successfully
pendingRefund is being processed
canceledRefund was cancelled before completion
failedRefund could not be processed

Refund Object

AttributeTypeDescription
idintegerUnique identifier
charge_idintegerID of the original charge (expandable via include=charge)
user_idinteger|nullCustomer ID resolved via charge relationship
amountintegerRefund amount in cents
currencystringThree-letter ISO currency code
statusstringRefund status
reasonstring|nullReason for the refund
descriptionstring|nullDescription
referencestring|nullExternal reference number
receipt_numberstring|nullReceipt number
offlinebooleanWhether this is an offline refund
failed_reasonstring|nullReason for failure (if failed)
failed_atinteger|nullUnix timestamp of failure
created_atintegerUnix timestamp of creation