Using a Crypto Card with Apple Pay and Google Pay

How users add a virtual crypto card to Apple Pay or Google Pay, where the verification code comes from, and how to build a setup flow that never gets stuck.

A virtual card is great online. But your users also want to buy coffee, pay for a taxi and shop in stores. They do not carry a card number around on paper. They carry a phone.

That is where Apple Pay and Google Pay come in. Once a crypto card sits in a phone wallet, the user can tap their phone at a card terminal and pay with the stablecoins they loaded. No plastic card is needed.

This guide explains how adding a crypto card to a phone wallet works, where the verification code comes from, how to build the setup screen in your app, and the mistakes that leave users stuck halfway.

#Why phone wallets matter for crypto cards

Our crypto cards are virtual Visa cards. A virtual card has a number, an expiry date and a security code, but nothing to put in a card reader. For online shopping, that is all you need. For shops, it is not.

A phone wallet closes that gap. It turns the virtual card into something you can tap. For most users, this is the moment the card stops feeling like a "crypto thing" and starts feeling like a normal payment card.

There is a second benefit: safety. When a user pays with a phone wallet, the shop never sees the real card number. The phone sends a separate device number and a one-time code for each payment. If a shop's system is ever breached, the user's real card details are not in it.

#What the user needs before they start

Before a user can add their card, a few things must be true:

#How adding the card works, step by step

Here is the full flow, from the user's first tap to their first payment:

  1. The user opens Apple Wallet or Google Wallet and chooses to add a card.
  2. They type in the card number, expiry date and security code. Your app can show these on the card screen so they can copy them.
  3. The wallet asks the card program to approve the card for this phone.
  4. The card program asks the user to verify that they own the card. It creates a one-time code.
  5. Our platform receives that code and holds it for a short time.
  6. Your server receives a signed card.wallet_otp webhook. It tells you a code is waiting. It does not contain the code.
  7. Your app calls GET /v1/cards/{id}/otp with the user's id. The response has kind: "wallet_provisioning" and the code.
  8. Your app shows the code. The user types it into the wallet screen.
  9. The card appears in the wallet. The user can now tap to pay.

The same endpoint also returns 3-D Secure codes for online checkouts. The kind field tells you which is which. Our guide on how 3-D Secure works on a crypto debit card covers the checkout side.

#Where the code does NOT come from

This is the single most common point of confusion.

With a bank card, the wallet usually says "We sent a code to your phone number." Users then wait for a text message. With our card program, no text message is sent and no email is sent. The code only reaches your platform, through the API, and you show it to your user.

The phone wallet's own screen may still say something generic like "verify your card." Your users will not know where to look unless you tell them. So the first job of your setup screen is a clear sentence: "Your code will appear here, in this app."

#Building a good setup screen

A good wallet setup flow feels like one smooth task, not a puzzle split across two apps. These tips help:

#Common mistakes

MistakeWhat happensThe fix
Help page says "wait for an SMS"Users wait for a code that never comesPoint users to your app
A background job fetches the codeThe code is used up and the user sees nothingFetch only when the user is looking
Full API responses are loggedA live code ends up on diskRemove the code field before logging
Webhook signature is not checkedAnyone could fake an eventVerify x-cryptoinfra-signature on the raw body
User sets up a frozen cardTaps fail at the shopShow the card status and unfreeze first
No screen lock on the phoneThe wallet will not accept any cardMention it in your guide

The webhooks guide shows exactly how to check the signature header.

#What happens after the card is in the wallet

Once added, the card in the wallet is the same card your user holds in your app. A few things are worth explaining to users:

Card fees for payments are listed with every other card fee. The live schedule is on the pricing page, so show users real numbers from there instead of guessing.

#A quick checklist before launch

#Give your users a card they can tap

A phone wallet is what turns a virtual crypto card into an everyday card. The work on your side is small: one webhook, one endpoint and a clear screen. Get it right once, and your users can pay in shops from their first day. Sign up for a merchant account and start building your card program today.

Launch your own crypto brand.

Wallets, payouts, cards and swaps under your name. Start free and test in the sandbox.