Overview
Refunds can be issued for:- One-time purchases (orders)
- Subscription charges
- Both partial and full amounts
Refunds are processed through Stripe and typically appear in the customer’s account within 5-10 business days.
Creating a Refund
Refund Reasons
When creating a refund, specify a reason:duplicate: Duplicate chargefraudulent: Fraudulent transactionrequested_by_customer: Customer requesteddispute_prevention: Preventing a chargeback/disputeother: Other reason
The reason is sent to Stripe and helps with accounting and dispute management.
Partial Refunds
You can issue partial refunds up to the refundable amount:Tax Handling
Polar automatically calculates and processes tax refunds:- Tax Amount Calculation: Proportional tax is calculated based on the refund amount
- Tax Processor Update: The tax transaction is reverted in the tax processor (e.g., Stripe Tax)
- Accounting: Both the refund amount and tax amount are recorded separately
Example: $50 refund with $5 tax
Benefit Revocation
When refunding one-time purchases, you can choose to revoke associated benefits:How Benefit Revocation Works
Refund Status
Refunds go through several statuses:pending: Refund initiated, waiting for processorsucceeded: Refund completed successfullyfailed: Refund failed (e.g., insufficient funds)canceled: Refund was canceled before completion
Only
succeeded refunds trigger benefit revocation and accounting entries.Customer Balance Impact
When a refund is processed:- Positive Balance Reduction: If the customer has a positive account balance, it’s reduced by the refund amount
- Transaction Recording: A refund transaction is created in the customer’s wallet
- Event Emission: An
order.refundedevent is emitted
Refund Blocking
Certain orders cannot be refunded:- Orders with active disputes/chargebacks
- Orders already fully refunded
- Orders in certain fraud prevention states
Error Response
Dispute Prevention
Polar can automatically issue refunds to prevent chargebacks:Automatic Refund
When integrated with Chargeback Stop or similar services, Polar automatically issues refunds to prevent disputes and reduce chargeback fees.
Webhooks
Refund events trigger webhooks:refund.created: When a refund is initiatedrefund.updated: When refund status changesorder.refunded: When an order’s refund total changes
refund.created Event
Internal Comments
Add internal comments to refunds for record-keeping:Comments are internal only and not visible to customers.
Metadata
Attach custom metadata to refunds:Best Practices
Document Everything
Always add internal comments explaining why refunds were issued
Review Before Revoking
Consider the customer relationship before revoking benefits
Track with Metadata
Use metadata to link refunds to support tickets or incidents
Monitor Patterns
Track refund reasons to identify product or service issues