merchantId parameter on createVirtualCard. Merchant locking is a property of the card program, not of the individual card. You get a merchant-locked card by issuing against a brand-locked offerId; everything else about the request is identical to a standard card.
Step 1 — Find a brand-locked offer
FiltergetVirtualCardOffers with cardBrandLocked: true. Only programs enabled for your account are returned, so always discover offers at runtime rather than hardcoding an ID.
Filter fields
Sample response
Read
rewardValue per offer — do not assume the standard rate. Cashback on brand-locked programs is set independently of the standard virtual card programs and is frequently different, in both directions: some brand-locked BINs earn a materially lower flat rate, while specific merchants carry boosted rates that only apply on brand-locked cards. programLimits also varies by program and caps what spendLimit you can request.Sandbox
Staging exposes one brand-locked program for testing:
See Test Virtual Card Offers for the full sandbox offer list.
Step 2 — Issue the card
Restricted Access
This mutation requires a Bearer token with the
CREATE_VIRTUALCARD scope.offerId to createVirtualCard. No other field changes behavior with respect to the merchant lock.
cURL
The billing address still has to be verifiable. Whether passed inline as
billingAddress or referenced by userAddressId, it must be a real, deliverable US address — no PO boxes. It is validated against USPS data via Smarty during cardholder setup, and an unverifiable address fails the whole request with VC-0025. See Address Formatting Requirements.TypeScript
Choosing the right control
“Lock this card to a merchant” means three different things in practice. Only one of them is the brand lock described on this page.Brand lock and category lock are not the same control. A category lock restricts the card to every merchant matching a chosen MCC — a fuel-locked card works at any qualifying gas station. A brand lock restricts the card to exactly one merchant, but you do not get to choose which one in advance. They solve different problems and are configured in different places.
What cardholders experience
- The card behaves like any other virtual card until its first successful authorization.
- After that authorization, the merchant is fixed. Attempts elsewhere are declined at authorization — there is no partial approval and no prompt.
- The binding survives locking and unlocking the card, and is not affected by editing the nickname, spend limit, or lock date.
- Wallet provisioning is unaffected, but note that Apple Pay and Google Pay transactions typically earn no cashback regardless of program.
getDeclinedTransactions alongside all other declines. See Decline Codes for interpreting the reason returned.
Common mistakes
Passing a merchant identifier to createVirtualCard
Passing a merchant identifier to createVirtualCard
There is no such field.
CreateVirtualCardInput accepts no merchant, brand, or MCC parameter — extra keys are rejected as invalid input with ARG-0001. Merchant locking comes entirely from the program you select with offerId.Hardcoding a brand-locked offerId
Hardcoding a brand-locked offerId
Offer availability is per-account and programs are added and retired over time. Always call
getVirtualCardOffers with cardBrandLocked: true and handle the empty-result case, rather than persisting an ID from a previous integration or from the sandbox table above.Assuming the standard cashback rate applies
Assuming the standard cashback rate applies
Brand-locked programs carry their own reward rates. Read
rewardValue off the offer you actually issue against, and do not display a rate to your users that you inherited from a standard program.Testing the lock with a single transaction
Testing the lock with a single transaction
One successful authorization only proves the card works — it does not prove the lock engaged. To verify end to end, transact once at merchant A, then attempt merchant B and confirm the decline.
Issue Cards
The full
createVirtualCard reference — funding, limits, and lifecycle controls.Get Virtual Card Offers
Enumerate every program available to your account.
Decline Codes
Interpreting declines, including merchant mismatches.
Test Virtual Card Offers
Sandbox offer IDs for every program, including brand-locked.