Skip to main content

Knowledge > Runbooks > Customer Ops > Process a Refund

Process a Refund

Issue a full or partial refund to a church customer via Stripe.

Prerequisites

  • Stripe CLI logged in (live mode needs --api-key $STRIPE_LIVE_SECRET_KEY)
  • The church's Stripe payment intent ID (pi_...) or charge ID (ch_...)
  • Refund policy confirmed (see C:\dev\knowledge\data\policies.yaml)

Steps

  1. Verify the refund request is legitimate

    • Confirm the church's identity (email, subscription ID)
    • Confirm the refund is within the refund policy window
    • Check knowledge/data/policies.yaml for current refund policy terms
  2. Find the payment intent or charge ID

    By customer email:

    stripe customers list --email "[church-email]"

    Note the cus_ ID, then list charges:

    stripe charges list --customer cus_xxxxxxxxxxxx --limit 5

    Copy the ch_ charge ID or the associated pi_ payment intent ID.

    Alternatively, list payment intents:

    stripe payment-intents list --customer cus_xxxxxxxxxxxx --limit 5
  3. Calculate refund amount (if partial) Amount is in cents. For example, $19.95 = 1995 cents. Omit --amount for a full refund.

  4. Issue the refund

    Full refund:

    stripe refunds create --payment-intent pi_xxxxxxxxxxxx

    Partial refund (specify amount in cents):

    stripe refunds create --payment-intent pi_xxxxxxxxxxxx --amount 1995

    For live mode, append --api-key $STRIPE_LIVE_SECRET_KEY to the command.

  5. Confirm the refund was created successfully

    stripe refunds list --limit 3

    The new refund should appear with status: succeeded.

  6. Cancel the subscription if not already done A refund does NOT automatically cancel the subscription. If the church is leaving, also run:

    stripe subscriptions cancel sub_xxxxxxxxxxxx

    See cancel-subscription.md for full details.

  7. Notify the church by email that the refund has been processed

    • Include the refund amount and expected return timeline (5–10 business days to card)
    • If the subscription was also cancelled, confirm that too

Refund Timeline

  • Stripe typically processes refunds within 5–10 business days
  • The refund appears on the original payment method (credit card)
  • Stripe does not refund their processing fee to us (expected)

Partial Refund Use Cases

  • Pro-rated refund when cancelling mid-cycle
  • Refund for a feature outage or service disruption
  • Goodwill refund for a portion of the charge

Test Mode Note

In test mode, refunds work against test charges only. To test the refund flow without affecting live data, use test mode with a test payment (pi_test_...).

Verification

After issuing the refund:

  • stripe refunds retrieve re_xxxxxxxxxxxx shows status: succeeded
  • The church receives a Stripe-generated refund confirmation email (automatic)
  • Your Stripe dashboard shows the refund on the payment

See Also

  • cancel-subscription.md — cancel subscription alongside refund
  • C:\dev\knowledge\data\policies.yaml — refund policy terms
  • C:\dev\PRICING.md — price amounts for calculating partial refunds