Stripe is AnythinkPay's web and non-digital-mobile payment rail, run through Stripe Connect: your project's own Stripe account, connected to Anythink's platform account. Money settles directly to you, minus Stripe's fees and Anythink's platform fee — Anythink never holds customer funds.
For the subscription concepts (plans, statuses, trials), see Create plans and manage subscriptions. This page covers Stripe specifically: connecting your account, one-off payments, saved payment methods, and webhooks.
anythink pay connect # creates the Connect account, opens onboarding
anythink pay status # shows onboarding / charges / payouts state
Note: As with the rest of AnythinkPay,
payisn't proxied by the hostedcliMCP tool — only a locally running CLI (anythink mcp) exposes it. Locally, ask your assistant to runpay connectandpay status.
Onboard with Stripe in test mode (the default for a new Connect account until you complete Stripe's live activation) and use Stripe's test cards — 4242 4242 4242 4242, any future expiry, any CVC — for both subscriptions and one-off payments. No real charge happens, and Stripe's dashboard shows the payment under its own Test mode toggle.
Note: Stripe Connect onboarding and webhook delivery can't be exercised without a real (test-mode) Stripe account and its webhook signing secret — this documentation pass verified everything up to that point (plan creation, subscription creation locally) and confirmed the shape of these endpoints from source, not against live Stripe test mode.
A one-off payment isn't tied to a plan — you set the amount and description directly.
anythink fetch /integrations/anythinkpay/payments --method POST --body \
'{"type":"one_off","amount":25.00,"currency":"gbp","description":"Event ticket","customer_email":"test@user.com"}'
anythink pay payments --page 1 --limit 25
pay payments lists recent payments in a table (id, amount, status, description, date); creating one is a fetch call since there's no dedicated anythink pay create command.
List the last 10 AnythinkPay payments for this project.
For a subscriber who's already saved a card, POST /integrations/anythinkpay/payments/charge-payment-method charges it directly without a new Checkout session — pass the saved payment_method_id, amount and currency; idempotency_key is optional and prevents duplicate charges on retry.
Saved cards live against a Stripe customer, keyed by the subscriber's email.
A subscriber's payment methods show on their subscription's detail page. There's no separate global payment-methods screen in the dashboard today — see them via the API or CLI instead.
anythink pay methods
── Payment Methods (2) ───────────────────────────────
ID Type Brand Last4 Expires
pm_1a2b3c… card visa 4242 12/2027
List saved payment methods on this project.
To let a subscriber add a card without an immediate charge, create a SetupIntent: POST /integrations/anythinkpay/payment-methods/setup-intent. Removing one is DELETE /integrations/anythinkpay/payment-methods/{id}.
GET /integrations/anythinkpay/payment-options?platform=ios&storefront=GBR tells your app which provider(s) to offer for a given platform and (for iOS) App Store storefront, so you don't hardcode the Stripe-vs-Apple decision client-side:
ios always get stripe_web.stripe_web and fall back to apple as a second option.stripe_web regardless of storefront.{ "primary_provider": "stripe_web", "providers": ["stripe_web"], "web_checkout_allowed": true, "storefront": "GBR" }
This behaviour was confirmed against a local project with no Apple IAP configured: every platform and storefront combination returned stripe_web only, matching the fallback rule above.
Settings › Payments › Fees & Calculator shows your current platform fee configuration and a calculator for a given amount. The same data is available as:
GET /integrations/anythinkpay/stripe-connect/fees
GET /integrations/anythinkpay/stripe-connect/stripe-fees
POST /integrations/anythinkpay/stripe-connect/fees/calculate
fees is Anythink's platform fee configuration (what Anythink takes); stripe-fees is Stripe's own processing fee schedule; fees/calculate runs both against a given amount so you can show a subscriber or your own reporting the net payout before it happens.
Stripe webhooks go to AnythinkPay's payments service (verified against your project's Stripe webhook signing secret), not to your project directly. It handles:
| Stripe event | What AnythinkPay does |
|---|---|
checkout.session.completed / .expired |
Marks the matching payment or subscription complete/failed |
payment_intent.succeeded / .payment_failed |
Reconciles a mobile (PaymentIntent-based) payment |
customer.subscription.created / .updated / .deleted |
Syncs subscription status and current period |
invoice_payment.paid |
Records the recurring charge as a payment |
setup_intent.setup_failed |
Marks a saved-card setup as failed |
payment_method.attached / .detached |
Keeps the saved payment methods list in sync |
account.updated |
Refreshes your Stripe Connect onboarding/charges/payouts status |
After a payment succeeds or fails, the AnythinkPay payments service relays a PaymentSucceeded or PaymentFailed event to your project, which a workflow can act on — see Payments recipes for a worked example that emails and pushes on this event.
Limit: The webhook handler tolerates Stripe API version drift for the event types above, but an event type it doesn't recognise returns
200with a "not supported" message rather than failing — Stripe won't retry those, so don't rely on an unlisted event type ever being processed.
| To | Permission |
|---|---|
| View Stripe Connect status, onboard, view fees | Project administrator |
| List and read payments | anythink_payments:read |
| Create payments, charge a saved method | anythink_payments:create |
| Confirm or capture a payment intent | anythink_payments:update |
| List, add or remove your own payment methods | Standard user access |