stripesolid
Install: claude install-skill intentic/intentic
# Stripe (connected)
Key in `$STRIPE_API_KEY`. Base is `https://api.stripe.com/v1`. Requests are **form-encoded, never JSON**, and a
GET wants its parameters in the query string, so define this helper once per shell:
```sh
stripe() { local m="$1" p="$2"; shift 2
curl -s $([ "$m" = GET ] && echo -G) -X "$m" -H "Authorization: Bearer $STRIPE_API_KEY" \
"https://api.stripe.com/v1/$p" "$@"; }
```
`-G` folds each `-d` into the query string on a GET, so `stripe GET charges -d limit=20` is one call and
`--data-urlencode` is what a value holding quotes or spaces needs.
**Amounts are in the currency's smallest unit.** `amount: 1050` on a `usd` charge is $10.50 — divide by 100 before
quoting a figure. Zero-decimal currencies (`jpy`, `krw`) are the exception: 1050 is ¥1050.
**Say which account you read.** `sk_test_…` is test mode and touches no real money; `sk_live_…` is the real one:
`case "$STRIPE_API_KEY" in sk_live*) echo live;; *) echo test;; esac`, and
`stripe GET account | jq '{id, name: .settings.dashboard.display_name}'` names it.
**A restricted key refuses per resource.** A 403 naming a resource means the key was not granted that scope, not
that the data is missing. Report it that way and ask for a wider key rather than concluding the account is empty.
- List customers: `stripe GET customers -d limit=20 | jq -c '.data[] | {id, email, name, created}'`
- Find one by email: `stripe GET customers/search --data-urlencode "query=email:'<EMAIL>'" | jq -c '.data[] | {id,