> ## Documentation Index
> Fetch the complete documentation index at: https://docs.myproceeds.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Accept cards and Link (Stripe)

> Let buyers pay your paywall with a card or a Stripe Link account over MPP, settled to your own Stripe account.

Proceeds supports the MPP [Stripe charge](https://mpp.dev/payment-methods/stripe/charge) method. A buyer or agent with a card or a [Link](https://link.com) account can pay your paywall in the same request, with no wallet and no stablecoins.

Cards are one more rail on the same charge URL. There is no separate card URL:

```text theme={null}
https://myproceeds.xyz/api/pay/{serviceId}/{slug}
```

When a paywall accepts cards, the `402` challenge lists Stripe next to the other rails it accepts. The buyer's client picks the one it can pay.

> [!NOTE]
>
> Card payments settle to **your connected Stripe account**, not your Proceeds wallet. Proceeds creates the charge on your account as a direct charge, so you are the merchant of record and see the payment in your Stripe Dashboard.

## Requirements

| Requirement | Detail |
| - | - |
| Connected Stripe account | A Stripe account that can accept charges, connected in **Settings**. |
| Stripe profile | The `profile_…` ID for your Stripe account. Proceeds reads it when you connect, or you can paste it. See [Connect Stripe](#1-connect-stripe). |
| Stripe machine-payment requirements | The account has to meet Stripe's prerequisites for MPP. See [Stripe charge](https://mpp.dev/payment-methods/stripe/charge). |
| Price of at least **\$0.50** | Stripe rejects card charges under 50 cents. Below \$0.50 the card option is not offered. On a tiered paywall this is the charged tier's price. |
| Whole cents | Prices like `0.50`, `0.99`, and `1.25` qualify. A price like `0.505` does not. |
| Card payments on for the paywall | On by default. You can turn it off per paywall. |

Cards are charged in **USD**. The card amount is the paywall price: a `0.50` USDC price is a 50 cent card charge.

> [!NOTE]
>
> The $0.50 floor is Stripe's minimum card charge. A paywall priced under $0.50 can still be paid on its other rails. It just doesn't offer cards.

## 1. Connect Stripe

**1. Open Settings**

Open the profile menu at the bottom of the left sidebar and choose **Settings**.

**2. Connect with Stripe**

Under **Card payments (Stripe)**, click **Connect with Stripe** and approve Proceeds on your Stripe account. You return to Proceeds when it's done.

**3. Confirm the connection**

Proceeds reads your Stripe profile (`profile_…`) automatically. If Stripe doesn't return one, paste it under **Stripe profile**. Cards stay off until the connection is ready: a profile id, charges enabled, and a live or test mode that matches.

A Stripe account can only be linked to one Proceeds account. To disconnect, use Settings, or remove the Proceeds app from your Stripe account.

## 2. Turn on cards for a paywall

1. In **Paywalls**, edit the paywall.
2. Set the **Price** to `0.50` or more, in whole cents. On a tiered paywall each tier is checked on its own, so each tier you want to sell by card has to meet that floor.
3. In **Paywall Details**, check that **Accept card payments (Stripe)** is on. It is on by default.

![Paywall drawer with the price set to 0.500000 USD and Accept card payments (Stripe) switched on. The note under the toggle says Settles to your connected Stripe account.](https://mintcdn.com/proceeds/dzzICcCAByPS4Jec/images/drawer-cards-toggle-on.png?fit=max\&auto=format\&n=dzzICcCAByPS4Jec\&q=85\&s=14ca3463883d8b46cb36a8cd61b67644)

Accept card payments (Stripe) turned on

The toggle appears once the Stripe connection is ready to take payments (a Stripe profile, charges enabled, and a live or test mode that matches). A connection by itself is not enough. Under it you'll see *Settles to your connected Stripe account.* If an exact price is under \$0.50 or isn't whole cents, the note says the card option isn't offered at this price. On a tiered paywall that note stays on the settlement line when at least one tier qualifies; a tier that doesn't qualify still isn't offered as a card payment.

Save the paywall. Changes apply on the next request.

## 3. See the card option in the challenge

```bash theme={null}
curl -i https://myproceeds.xyz/api/pay/{serviceId}/{slug}
```

If cards are on and the connection is ready, the `402` response includes a `WWW-Authenticate: Payment` challenge with `method="stripe"` next to your other methods. The decoded `request` for the Stripe challenge looks like this:

```json Illustrative challenge request theme={null}
{
  "amount": "50",
  "currency": "usd",
  "decimals": 2,
  "description": "Access to current-weather",
  "methodDetails": {
    "networkId": "profile_…",
    "paymentMethodTypes": ["card", "link"],
    "metadata": {
      "proceeds_paywall_id": "…",
      "proceeds_service_id": "…"
    }
  }
}
```

> [!NOTE]
>
> This example is illustrative. Your values come from your paywall and your connected Stripe account. `amount` is in the smallest currency unit: with `"decimals": 2`, `"50"` is \$0.50.

Don't see `method="stripe"`? Check all of these:

* **Accept card payments (Stripe)** is on for the paywall.
* In **Settings**, the Stripe connection shows **Connected**. That line means the connection is active, it has a Stripe profile id (`profile_…`), charges are enabled, and its live or test mode matches. Anything short of that is spelled out on the status line (profile still needed, charges not enabled, or a live/test mismatch).
* The charged price is at least \$0.50 in whole cents. On a tiered paywall, that is the tier the buyer pays.

`paymentMethodTypes` tells the buyer's client that a card or a Link account is accepted.

## How buyers pay

Buyers and agents pay with a client that supports MPP Stripe charge. The client creates a one-time Shared Payment Token for the charge and retries the request with it. Proceeds confirms the payment on your Stripe account and then proxies your API response.

You don't run any Stripe or `mppx` code. For the client side, see the [MPP Stripe charge reference](https://mpp.dev/payment-methods/stripe/charge) and [Link](https://link.com).

Share the same charge URL and buyer prompt as for any paywall. See [Sell to agents](https://docs.myproceeds.xyz/guides/accept-payments-from-agents.md).

## Reconcile payments

Card payments that complete show in [Transactions](https://docs.myproceeds.xyz/dashboard/transactions.md) as `Completed`, with the Stripe PaymentIntent (`pi_…`) as the payment reference. Check [Events](https://docs.myproceeds.xyz/dashboard/events.md) when a card attempt doesn't show up there. Funds settle in your Stripe account on Stripe's payout schedule, so reconcile them in your Stripe Dashboard.

## Pricing tip

Stripe's card processing fees apply to your Stripe account on each charge. Because part of Stripe's fee is a fixed amount per charge, a lower price keeps less of the payment. See [Stripe's pricing](https://stripe.com/pricing). If your calls are cheap, keep card-eligible endpoints at a price that covers fees, or leave cards off and take those calls on [other rails](https://docs.myproceeds.xyz/guides/configure-pricing.md).

## Test it

When your Stripe connection is in test mode, the console **Test Payment** flow includes a **Card (Stripe test)** option. That is the Stripe connection's mode, not the console **Mainnet mode** switch. See [Test paywalls](https://docs.myproceeds.xyz/quickstart/test-paywalls.md). Live card payments use the buyer's own client, as above.

> [card] [Configure pricing](https://docs.myproceeds.xyz/guides/configure-pricing.md)
>
> Set prices, including the \$0.50 floor for cards.

> [card] [MPP Stripe charge](https://mpp.dev/payment-methods/stripe/charge)
>
> The protocol reference for buyers and client builders.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.