Cofounder CLI
Payments
Take payments with Stripe — test in a sandbox, connect your live account, and manage products, prices, payment links, and invoices.
Cofounder connects your company to Stripe. Agents start in a Stripe test sandbox, where they can build and try your checkout without touching your real account or charging anyone. When you're ready to take real money, connect your live Stripe account.
Check where things stand
Run this first. It shows whether the company has a test sandbox, whether you've claimed it, whether a live account is connected, and how far your app's payment setup has got:
| MCP | CLI | API |
|---|---|---|
payments_get | cofounder payments get | GET /cofounder-cli/v1/company/stripe |
Try it in a test sandbox
| MCP | CLI | API |
|---|---|---|
payments_onboard | cofounder payments onboard --country US | POST /cofounder-cli/v1/company/stripe/onboarding |
payments_claim_link_get | cofounder payments claim-link get | GET /cofounder-cli/v1/company/stripe/claim-link |
onboard creates the company's Stripe test account, or returns the
existing one. --country is the business's two-letter country code. It
returns a link for the founder to open in a browser and claim the sandbox
under their own Stripe login. claim-link get returns that link again
without starting over.
Connect your live Stripe account
| MCP | CLI | API |
|---|---|---|
payments_connect_live | cofounder payments connect-live | POST /cofounder-cli/v1/company/stripe/connect-live |
payments_dashboard_link_create | cofounder payments dashboard-link create | POST /cofounder-cli/v1/company/stripe/dashboard |
connect-live returns a link the founder opens in a browser to approve the
Cofounder Stripe App on their existing Stripe account. You don't need a
sandbox first. Connecting doesn't turn on payments in your app by itself.
dashboard-link create returns a browser link to your Stripe dashboard.
Never paste Stripe keys into chat or command arguments. These commands return a Cofounder link rather than a Stripe one; Stripe's own claim and dashboard links open only in your signed-in browser.
Test or live
Every command below works on the test sandbox unless you pass
--mode live (mode: "live" on MCP), which needs connect-live done
first. In live mode, writes change your real Stripe account and customers
can pay you real money.
On MCP, each Stripe write takes an idempotency_key; the CLI fills one in
for you (--idempotency-key). If a write fails partway, retry with the
same key so Stripe doesn't make the object twice. Stripe forgets keys after
about 24 hours, so after that, check whether the first attempt went through
before you retry.
Read your Stripe data
| MCP | CLI | API |
|---|---|---|
payments_account_get | cofounder payments account get | GET /cofounder-cli/v1/company/stripe/data/account |
payments_balance_get | cofounder payments balance get --mode live | GET /cofounder-cli/v1/company/stripe/data/balance |
payments_list | cofounder payments list --resource customers | GET /cofounder-cli/v1/company/stripe/data/{resource} |
payments_invoices_get | cofounder payments invoices get --invoice-id <id> | GET /cofounder-cli/v1/company/stripe/data/invoices/{invoice_id} |
balance get shows available and pending funds. list returns one page
at a time of products, prices, portal-configurations, webhooks,
events, customers, subscriptions, invoices, charges, refunds,
payment-intents, payouts, or payment-links; pass the returned
next_cursor as --cursor for the next page.
Sell something
Create a product, give it a price, then share a payment link:
| MCP | CLI | API |
|---|---|---|
payments_products_create | cofounder payments products create --name "Pro plan" | POST /cofounder-cli/v1/company/stripe/data/products |
payments_prices_create | cofounder payments prices create --product <prod_id> --unit-amount 2900 --currency usd --recurring-interval month | POST /cofounder-cli/v1/company/stripe/data/prices |
payments_products_update | cofounder payments products update --product-id <prod_id> --default-price <price_id> | POST /cofounder-cli/v1/company/stripe/data/products/{product_id} |
payments_payment_links_create | cofounder payments payment-links create --line-items '[{"price":"<price_id>","quantity":1}]' | POST /cofounder-cli/v1/company/stripe/data/payment-links |
payments_payment_links_update | cofounder payments payment-links update --link-id <id> --no-active | POST /cofounder-cli/v1/company/stripe/data/payment-links/{link_id} |
Amounts are in the currency's smallest unit, so 2900 in usd is $29.00.
Leave out --recurring-interval for a one-time price, or use day,
week, month, or year. payment-links update --no-active stops a link
from taking payments; --active turns it back on.
Send an invoice
| MCP | CLI | API |
|---|---|---|
payments_invoices_create | cofounder payments invoices create --customer-email ada@example.com --currency usd --line-items '[{"description":"Setup","unit_amount":50000}]' | POST /cofounder-cli/v1/company/stripe/data/invoices |
payments_invoices_send | cofounder payments invoices send --invoice-id <id> --expected-customer-email ada@example.com --expected-amount-due 50000 --expected-currency usd | POST /cofounder-cli/v1/company/stripe/data/invoices/{invoice_id}/send |
invoices create makes a draft and sends nothing. It finds the customer by
email or creates one, and the invoice is due in 7 days unless you set
--days-until-due. invoices send only goes ahead if the invoice's
recipient, amount, and currency still match what you pass. In live mode,
Stripe emails the invoice to the customer, so review it with
invoices get first. Test mode sends no email.
Customer portal and webhooks
| MCP | CLI | API |
|---|---|---|
payments_portal_update | cofounder payments portal update --configuration-id <id> --headline "Acme billing" --privacy-policy-url <url> | POST /cofounder-cli/v1/company/stripe/data/portal-configurations/{configuration_id} |
payments_webhooks_update | cofounder payments webhooks update --webhook-id <id> --url <url> --enabled-event invoice.paid | POST /cofounder-cli/v1/company/stripe/data/webhooks/{webhook_id} |
portal update sets the headline and links (return URL, privacy policy,
terms of service) on the page where customers manage their billing.
webhooks update changes an existing webhook's URL, events, or on/off
state (--disabled); it doesn't create new ones. Find the IDs with
cofounder payments list --resource portal-configurations or
--resource webhooks.
Next steps
To reach customers by email, phone, social, and ads, go to Communicate and Sell.