Crypto vs. card
The two ways a buyer can pay, who can accept each one, and when card is offered.
Swop has two payment rails. A rail is the network the money travels on. Your integration code is the same for both; what differs is who can accept them and when they're offered.
At a glance
| Crypto (USDC) | Card | |
|---|---|---|
| What the buyer uses | Any wallet holding USDC. AI agents pay automatically. | Credit or debit card, through Stripe |
| Who can accept | Every Swop account, immediately | Accounts that have completed merchant verification |
| Identity checks | Never. Crypto is not gated on KYC. | Merchant verification in the Swop app |
| How you turn it on | It's the default | Send paymentRail: "buyer_choice" when you create the checkout |
| What you receive | USDC in your Swop wallet | USDC in your Swop wallet |
| Fee | 0.5% (minimum 0.015 USDC), from your proceeds | Shown separately on each checkout |
How a crypto payment works
- Swop creates a payment request for the exact amount, tied to that checkout.
- The buyer's wallet sends USDC. On Solana this usually confirms in seconds.
- Swop watches the blockchain, matches the transfer to the checkout, and marks it
paid.
No one has to press "confirm". The blockchain transfer is the confirmation, and once it's final it can't be reversed by the buyer the way a card chargeback can.
How a card payment works
- Your page asks Swop for a card payment (
card-payment-intents) and gets a StripeclientSecret. - Stripe's Payment Element collects the card. Card numbers go from the buyer's browser to Stripe only.
- When Stripe confirms the charge, Swop records the order. Your payout arrives as USDC.
When is card offered?
cardOffered is true only when all of these hold:
- You asked for it with
paymentRail: "buyer_choice". - Your account is currently verified for card.
- Every item in the cart is a physical product.
- Any royalties on the cart can be paid on card.
Otherwise Swop quietly falls back to crypto only and cardOffered is false. The checkout still works.
Is my key card-enabled?
Call GET /me. cardEnabled tells you whether card is available to this key right now. A key can have the commerce.card scope ticked and still show cardEnabled: false until verification completes. Nothing breaks in the meantime.