Skip to content
cccskills
FreePublished on GitHubEnglish overview

refund-and-dispute

Handle Stripe refunds and payment disputes by checking the original charge, remaining refundable amount, currency, and account mode. Follow human confirmation for refunds, distinguish disputes from refunds, and report the actual payment status.

OriginalShow the original description

Move money back to a customer in Stripe, or respond to a dispute, with the checks that belong in front of an irreversible write — read the charge first, fix the exact amount, and clear Stripe's human confirmation step. Use when the user asks to refund a payment, cancel and refund a subscription, or handle a chargeback or dispute.

ParadevAI/Paradev15,724 stars(GitHub 15,724 + cccskills 0)
Works withStripe

Run score Not tested

See how to install

Good for

  • Issuing a full refund
  • Refunding part of a payment
  • Canceling and refunding a subscription
  • Submitting evidence or accepting a payment dispute

Overview

What it does

Checks Stripe payment details before handling a full or partial refund, or responding to a chargeback dispute. It reads the charge to confirm the amount, currency, amount already refunded, payment status, and whether a dispute is open. It states the proposed refund details before making a change. After processing, it reports the refund ID, amount, status, and whether the account is in live or test mode.

When it helps

Use it when a customer requests a refund, when handling a subscription cancellation and refund, or when responding to a cardholder dispute. For a dispute, it reviews the case and handles either submitting evidence or deliberately accepting it. Subscription cancellation and refund are treated as separate actions.

Example requests

  • “Check how much of this payment has already been refunded, then refund the remaining amount.”
  • “Review this dispute and handle submitting the evidence.”

Notes

Stripe read and write MCP tools are required. Refunds cannot be undone, so the charge and amount are checked before proceeding. If Stripe returns a confirmation URL, the user must approve the refund on Stripe and then the same operation is retried. Approval expires after 24 hours. Refunding a charge with an open dispute can cause a double loss, so it requires a different response.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Document check

AI checked the SKILL.md for operations that need care and for setup requirements. The score comes only from actually running the skill (hands-on test).

SafetyAre sending data, deleting files, and running commands disclosed?
AGoodIt checks before irreversible refunds and requires human Stripe approval.
Easy setupDoes it need few tools or API keys, and are they documented?
BPartly lackingStripe read/write MCP tools are required; setup steps are absent.

Not counted in the score. Rated by AI (OpenAI Codex) as of Oct 29, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (1)

  • SKILL.md4.9 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

A refund is not a retryable call

Every other Stripe read can be run again for free. A refund cannot. Treat the write as the last step of a short checklist, never as the first attempt at understanding the request.

1. Read the charge before you touch it

The checks live on the charge, so a pi_ id is not where this starts: read the PaymentIntent, follow latest_charge, and read that charge. Skipping the hop is how an agent misses an open dispute, because refunded, amount_refunded, and disputed are not PaymentIntent fields and reading them off one yields undefined rather than an error.

A latest_charge of null ends the job rather than starting it: the PaymentIntent was never confirmed, or no attempt produced a charge, so there is nothing to refund. Say that and stop.

On the charge, check four fields:

  • amount and currency: the only authority for what can be refunded.
  • amount_refunded: a charge refunded in part looks fully refundable from a dashboard glance.
  • status and refunded: a failed or already-refunded charge needs a different answer, not a write.
  • disputed: if a dispute is open, refunding is the wrong instrument. See step 5.

Confirm the mode with get_stripe_account_info first. A live-mode refund issued because the id was assumed to be a sandbox id cannot be undone.

2. Fix the amount in the smallest currency unit, explicitly

Omitting amount refunds the whole charge. A partial refund takes an integer in the smallest unit of the charge's currency, so a $12.34 refund is 1234 and a 1234 yen refund is 1234. Never derive the figure from a human-readable total in the conversation when the charge object is one read away, and say the figure and currency back to the user before writing.

3. State the intent, then write once

Before calling stripe_api_write, tell the user in one line what you are about to do: the charge id, the amount, the currency, the mode, and the reason (duplicate, fraudulent, or requested_by_customer). The reason is not decoration; fraudulent affects how Stripe treats the customer later, so do not pick it for a routine cancellation.

4. Expect Stripe's confirmation step and let the human do it

Stripe requires human confirmation before it performs certain writes, refunds among them. The call comes back with a confirmation URL instead of a refund. When that happens:

  • Pass the URL to the user and stop. They review the real amount on Stripe's own page and approve it there.
  • The approval expires after 24 hours.
  • After they approve, retry the same call once. Approval alone does not perform the refund.

Do not loop retrying while you wait, and do not route around the step by asking for an API key. The confirmation is the control that makes an agent with write access safe.

If a write errors ambiguously, list the charge's refunds before retrying and check whether one already landed. Reporting a refund that did not happen and issuing a second one are both worse than a slow answer.

5. A dispute is not a refund

A chargeback is the issuer taking the money back on the customer's word. Opening a refund on a disputed charge can cost you the amount twice and still lose the dispute. Read the dispute, then either submit evidence through its evidence fields or accept it deliberately. Say which one you did and why.

6. Report what actually changed

The refund id, the amount and currency, the status (pending and succeeded mean different things to the customer), and the mode. Tell the user the money typically reaches the customer in five to ten business days, because the next question is always when it arrives.

Anti-patterns

  • Refunding to make a dispute go away. It does not, and it can double the loss.
  • "Refund the last payment." Name the charge you picked and why, or the user cannot catch you picking the wrong one.
  • Guessing a partial amount from the thread. Read the charge.
  • Running the checklist against a PaymentIntent. The refund and dispute fields live on the charge; a PaymentIntent answers those questions with undefined, which reads like "no".
  • Treating a confirmation URL as an error. It is the system working.
  • Refunding when the user asked to cancel. Cancelling a subscription stops future invoices and refunds nothing. Do the one that was asked for, and say which.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

10x

FreeSummary

Review how you use Superset and identify unused features that fit your workflow. Get a short list of suggestions, learn about each option, and set up selected features such as scheduled agents, parallel workspaces, or shared tasks.

  • Find unused Superset features worth exploring
  • Set up scheduled agent tasks
  • Start parallel work in separate workspaces
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

automate

FreeSummary

Set up recurring tasks in Superset with an agent prompt, a schedule or event trigger, and a chosen execution workspace. After explicit confirmation, create the automation, check its saved settings, and review a real first run.

  • Scheduling a daily or weekly agent task
  • Starting agent work when a GitHub pull request opens
  • Triggering tasks from selected Slack reactions
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

browser

FreeSummary

Browse pages, click controls, fill fields, and inspect screenshots or console messages through Superset's browser pane. Use it to preview a running web app, check interface behavior, and work through browser tasks in a visible session.

  • Preview a locally running web app
  • Capture screenshots of a page
  • Inspect console errors
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

Build Stripe payments, subscriptions, and invoicing using verified documentation and API parameter definitions. The skill guides product selection, sandbox testing, and webhook handling, where server notifications determine payment and subscription state.

  • Choose Stripe products for payments or recurring billing
  • Implement Checkout or invoice flows
  • Investigate Stripe code that compiles but behaves incorrectly
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

cdp-verification

FreeSummary

Verify a UI change or reproduce a bug in the running desktop app using the Chrome DevTools Protocol (CDP), a browser debugging interface. Follow the real user journey and compare screenshots with measurements such as route, scroll position, and persisted state.

  • Reproducing a UI bug in the running app
  • Verifying a UI change end to end
  • Checking behavior after a route or workspace switch
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

ci-triage

FreeSummary

Diagnose failed GitHub Actions runs by finding the first meaningful error, separating code problems from infrastructure issues and intermittent failures, and comparing the base branch. Get a focused report explaining the PR’s involvement and recommended next steps.

  • Investigating failed PR checks
  • Separating intermittent test failures from code defects
  • Checking whether the base branch already fails
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

See all skills by ParadevAI

Report a problem with this skill