Example: Customer Refund
A B2B SaaS-flavored process: a customer reports a billing issue → CSM reviews → finance signs off above a threshold → Stripe processes the refund → customer gets a confirmation email.
You'll build: Service Customer Success → Offering Refund Request → Form (6 fields) → Workflow with conditional finance approval + Stripe automation. Time: ~25 min.
The shape
Submit → CSM Review → [refund < $500?] ─── Yes ──→ Process Refund (Stripe) → Confirmation Email → ✅ Refunded
│
└─── No ──→ Finance Approval ──→ Process Refund → ...
│
└─── Reject ──→ ❌ Denied (with reason → email customer)What you'll need
- Company account
- Stripe account (test mode is fine) with API key
- A Connector configured for Stripe — see Connectors
- An email-sending integration (your own SMTP, SendGrid, etc.) or you can use a webhook to a notification service
Step 1 — Service & Offering
Service
Admin → Services → New Service.
- Name:
Customer Success - Description:
Customer-facing requests handled by the CS team
Offering
- Name:
Refund Request - Description:
Process a refund for a customer billing issue
Step 2 — Form
| Field | Type | Required | Notes |
|---|---|---|---|
| Customer Email | ✓ | Used for Stripe lookup + confirmation | |
| Stripe Customer ID | Text | – | If known; else CSM will look it up |
| Charge ID to Refund | Text | ✓ | Stripe ch_xxx or pi_xxx |
| Refund Amount (USD) | Number | ✓ | |
| Reason | Select | ✓ | Duplicate charge, Service issue, Customer request, Goodwill, Other |
| Notes | Textarea | ✓ | Context for the reviewer |
Step 3 — Workflow
Drag phases
- Start
- Approval —
CSM Review - Decision —
Threshold Check - Approval —
Finance Approval(only if refund ≥ $500) - Process —
Process Refund(auto via Stripe connector) - Process —
Send Confirmation Email(auto) - End —
Refunded - End —
Denied
Connect
- Start → CSM Review
- CSM Review (Approve) → Threshold Check
- CSM Review (Reject) → Send Denial Email → Denied
- Threshold Check:
{{refundAmount}} >= 500→ Finance Approval; else → Process Refund - Finance Approval (Approve) → Process Refund
- Finance Approval (Reject) → Send Denial Email → Denied
- Process Refund → Send Confirmation Email → Refunded
Configure Threshold Check (Decision)
- Condition:
{{refundAmount}} >= 500
Configure Process Refund (API_CALL via Stripe Connector)
- Use Connector:
Stripe — Create Refund - Body:
charge = {{chargeIdToRefund}},amount = {{refundAmount * 100}}(Stripe wants cents) - Output Variable:
stripeRefundResult - On error → route to Denied with the Stripe error message captured
Configure Send Confirmation Email (Automated, Webhook)
- URL: your email-sending webhook
- Body Template:
{
"to": "{{customerEmail}}",
"subject": "Your refund has been processed",
"body": "Hi! We've processed your refund of ${{refundAmount}} (Stripe ID: {{stripeRefundResult.id}}). It'll appear on your card in 5-10 business days."
}Configure Send Denial Email (Automated, Webhook)
Similar shape but informs the customer the refund wasn't approved + the reason.
Publish
Step 4 — Responsibilities
| Phase | Responsible |
|---|---|
| CSM Review | CSM Team |
| Finance Approval | Finance Team |
| Process Refund | (auto) |
| Send Confirmation Email | (auto) |
| Send Denial Email | (auto) |
Step 5 — Test
Test small refund ($50)
Submit. CSM approves. Auto-skips Finance. Stripe (test mode) processes. Confirmation email fires.
Test large refund ($1500)
Submit. CSM approves → Finance Approval activates. Finance approves → Stripe processes.
Test denial
CSM rejects with reason "Refund window expired". Denial email fires citing the reason.
Test Stripe failure
Submit a refund for an already-refunded charge. Stripe API returns an error. Workflow routes to Denied with the error logged.
What you can adapt
- Auto-route by reason: refunds for "Service issue" go through CSM Manager (not just CSM); refunds for "Goodwill" require Finance regardless of amount. Add Decision branches.
- Customer satisfaction follow-up: 7 days after refund, fire a Timer phase that sends a CSAT survey. Track responses in a separate Service.
- Auto-credit instead of refund: for amounts under $50, offer the customer a credit toward next invoice instead of cash. Add a Decision branch + Stripe credit-note action.
- Audit reporting: the Audit Trail captures every refund action with the actor + amount. Filter by
service:refund-requestfor compliance reports.
Related
- Connectors → Stripe — wiring the Stripe credential
- API Call — the automated refund phase
- Decisions & Parallel Paths — the Threshold Check
- Audit Trail — refund history for compliance