Get paid by agents
Put a price on something your product already does. Agents pay a link. You get paid in Stripe or to a USDC wallet. You keep the data.
What you are setting up
A pay link, not a storefront
You create one link per thing you sell, for example a full company dossier. Agents pay that link. People can open the same link in a browser if they need to. Your marketing site stays as it is.
Your login is not the merchant
Signing in makes you the account owner. Opening Accept creates your first seller, the checkout identity that owns the links and the money. Add more later if you have separate products.
We do not need your API
Rill hosts the paywall. You do not install an SDK to take the first payment. You add a webhook only when you want your own product to unlock automatically after a pay.
The file stays yours
We do not store, cache, or resell what you return after payment. The receipt is one-time proof. The agent gets whatever you send for that receipt, once.
What you can sell
Two shapes. One-shot: one pay unlocks one call or one artifact (the default). Credit top-up: one pay adds a fixed number of credits to the buyer's account on your side, set with sku_kind=credit_topup, credits, and credit_unit on the pay link. Both arrive on the same payment.succeeded webhook; credit top-ups carry metadata.credits so your backend can add them. Do not map a pay onto a seat plan that renews.
How your product unlocks
Share the gate, not the pricing page
Create a pay link and copy the gate URL. That is what agents pay. A pricing page is not a paywall.
A webhook tells your backend to fulfill
When a pay succeeds, Rill calls you with which product was bought and a receipt. You grant access in your own system, the same way you would after any other payment notification.
Prove it with a test pay
Switch the dashboard to Test. Register the webhook in Test, send a test event, then pay the gate with a Test wallet key (rill_vw_test_*). Test wallets start with a sample balance, so you do not need Checkout or a funded till. Confirm payment.succeeded on your Test endpoint (receipt_id and request_id). Test never uses Live money or Live funding links.
When you need more than a hosted link
Hosted gate is enough for most teams
Share the link, listen for the webhook, fulfill on your side. No SDK.
Protect a route in your own app only if you need to
The accept-echo example shows a webhook unlock you can copy. Use the Accept kit later if a route in your app must stay locked until a receipt is shown.
Go live
Copy your seller key
Open Accept. We create the seller for you. Save the key if we show it; it appears once.
Create the pay link
Give it a name, a path your team recognizes, and a price. Copy the gate URL and keep it for agents and for your own test.
Turn payments on
Turn on agent payments for that seller. Until this is on, agents cannot finish a pay.
Add a webhook
Subscribe to successful pays so your backend can unlock. Skip this only if you will fulfill by hand.
Pay it once yourself
In Test, pay the gate with rill_pay_url (or a Test wallet on Home). You should see unlocked proof and a signed payment.succeeded. Ledger and open-rail both emit that event. POST /webhooks/:id/test sends a sample payment.succeeded with receipt_id if you want to verify your handler first.
Choose how you get paid
Stripe Connect (where Stripe is available): create an Express account or link an existing one. Agent pays that land on Stripe credit seller balance, then Transfer to you. Or set a pay-to wallet (payout_wallet_address, EVM 0x…) so x402/MPP USDC settles straight to you. Connect stays optional. Card and ledger payouts still need Connect. Test payouts run on their own. Live auto payout turns on by itself once Stripe enables payouts on your account and you have completed one Test pay; manual payout from the dashboard is available as soon as Stripe enables payouts.
Good to know
- You set the price. There is no platform fee today. A later fee would be a small withhold on payout, not a cut of your product.
- A receipt is one pay. Do not map it onto a monthly plan that has to renew or cancel. Price a single capability or a one-shot credit top-up.
- Payouts start after Stripe says you can receive them and the seller balance is at least $1, unless you set a pay-to wallet. Test mode remits automatically for Connect. Live auto payout turns on when Stripe has enabled payouts on your account and you have completed one Test pay; Rill can pause it per seller. Manual payout from the dashboard is available as soon as Stripe enables payouts.
- Agent pays use USDC on Base (x402, contract 0x8335…2913) and USDC.e on Tempo (MPP, contract 0x20c0…8b50), plus Stripe card and Link at $0.50 and above. Prices are in USD. Default settlement converts stablecoin at Stripe and the cash sits as fiat USD. If you set payout_wallet_address, open-rail USDC goes to that wallet instead and you hold crypto. Test uses Base Sepolia and Tempo testnet. There is no card chargeback on the stablecoin rail. If you need to refund, do it with the buyer out of band.
- Rill pays your gate from a small set of public addresses. If you allowlist payers, the current Live and Test addresses are on the Spend page and in GET /agent/capabilities under open_rails.spend_payer_addresses.
- Spend logs keep the upstream response body by default so buyers can replay a receipt. Turn Keep API responses off on the Accept page and Rill stores only status and headers for pays to your hosts.
- How to verify a webhook, including the signed payload and an example payment.succeeded event, is on the Webhooks API page.
- Test checklist: switch to Test, create the webhook in Test, POST /webhooks/:id/test (or dashboard Send test / rill_webhooks action=test), pay the gate once with rill_vw_test_*, confirm the unlock from payment.succeeded. The test event is a signed payment.succeeded with receipt_id, metadata.credits, and test:true — do not grant live access from it.
- Pay-to wallet: PATCH /sellers/me with payout_wallet_address (0x + 40 hex). Open-rail x402/MPP then pays that address. Leave it empty to keep Stripe deposit + Connect. Sellers in countries without Stripe can get paid this way.
Before you go live
You set the price and you fulfill unlocks. Open-rail agent pays are typically irreversible. Card chargebacks apply to wallet top-ups, not to settled agent pays. See the Terms of use.