Why Base Pay?
USDC on Base is a fully-backed digital dollar that settles in seconds and costs pennies in gas. Base Pay lets you accept those dollars with a single click—no cards, no FX fees, no chargebacks.- Any user can pay – works with every Base Account (smart-wallet) out of the box.
- USDC, not gas – you charge in dollars; gas sponsorship is handled automatically.
- Fast – most payments confirm in <2 seconds on Base.
- Funded accounts – users pay with USDC from their Base Account or Coinbase Account.
- No extra fees – you receive the full amount.
Please Follow the Brand GuidelinesIf you intend on using the BasePayButton, please follow the Brand Guidelines to ensure consistency across your application.
Client-side (Browser SDK)
Interactive Playground: Try out the
pay()
and getPaymentStatus()
functions in our Base Pay SDK Playground before integrating them into your app.Browser (SDK)
Important: The
testnet
parameter in getPaymentStatus()
must match the value used in the original pay()
call. If you initiated a payment on testnet with testnet: true
, you must also pass testnet: true
when checking its status.
Collect user information (optional)
Need an email, phone, or shipping address at checkout? Pass apayerInfo
object:
type | returns |
---|---|
email | string |
name | { firstName, familyName } |
phoneNumber | { number, country } |
physicalAddress | full address object |
onchainAddress | string |
Required by default — set
optional: true
to avoid aborting the payment if the user declines.How to validate the user’s information?You can use the
callbackURL
to validate the user’s information on the server side.Learn more about this in the callbackURL reference.Polling example
Backend (SDK)
Add the Base Pay Button
Use the pre-built component for a native look-and-feel:Checkout.tsx
Please Follow the Brand GuidelinesIf you intend on using the BasePayButton, please follow the Brand Guidelines to ensure consistency across your application.
Test on Base Sepolia
- Get test USDC from the Circle Faucet (select “Base Sepolia”).
-
Pass
testnet: true
in yourpay()
andgetPaymentStatus()
calls. - Use Sepolia BaseScan to watch the transaction.