# Trace A Payment

Answer a question about money that already moved in Stripe, why a charge failed, what...

- Repository: https://github.com/ParadevAI/Paradev (15823 stars)
- Category: Business
- License: see repository
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add ParadevAI/Paradev --skill trace-a-payment -g -a claude-code -y`
Codex: `npx skills add ParadevAI/Paradev --skill trace-a-payment -g -a codex -y`
Cursor: `npx skills add ParadevAI/Paradev --skill trace-a-payment -g -a cursor -y`
Gemini CLI: `npx skills add ParadevAI/Paradev --skill trace-a-payment -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add ParadevAI/Paradev`

## Description

Answer a question about money that already moved in Stripe, why a charge failed, what a customer was billed, where an invoice or payout stands, by reading the object chain instead of guessing from a dashboard total. Use when the user pastes a Stripe id, asks why a payment failed, asks what a customer is paying, or wants revenue, invoice, or subscription state.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Read the chain, not one object

A Stripe answer is only as good as the objects it was read from. Every question
about money that already moved has an exact object chain behind it, and the
chain is short. Walk it.

## 1. Say which account and which mode you are in

Start with `get_stripe_account_info`. Live mode and a sandbox are separate
worlds that share nothing: an id created in one returns "No such charge" in the
other, which reads like a deleted record rather than a wrong environment. Name
the account and the mode in your answer so the user can tell whether you looked
where they meant.

## 2. Let the id prefix tell you what you are holding

Stripe ids are typed. `ch_` is a charge, `pi_` a PaymentIntent, `cus_` a
customer, `in_` an invoice, `sub_` a subscription, `cs_` a Checkout Session,
`re_` a refund, `dp_` a dispute, `po_` a payout, `txn_` a balance transaction.
Use `stripe_api_search` to find the right method, `stripe_api_details` to get
its real parameters, then `stripe_api_read`. Never invent a field name: the
details tool exists so you do not have to.

## 3. For a failure, read the decline, not the status

`status: "requires_payment_method"` says nothing a user can act on. The cause
lives in two places:

- The PaymentIntent's `last_payment_error`: the decline code and message.
- The charge's `outcome`: `network_status`, `reason`, `risk_level`,
  `seller_message`, which is the sentence written for you to pass on, and
  `advice_code`.

The rest: https://github.com/ParadevAI/Paradev/blob/HEAD/plugins/stripe/skills/trace-a-payment/SKILL.md
