Skip to main content
A merchant-locked card — called a brand-locked card in Fluz product surfaces — is a virtual card that ties itself to the first merchant it transacts with. Every later authorization at any other merchant is declined. There is no 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.
The lock binds on first use, not at issuance.You cannot choose which merchant the card locks to. You issue an unbound card from a brand-locked program, and the first successful authorization determines the merchant permanently. There is no way to pre-assign, change, or clear the binding after it is set.If your product needs a card that only works at a merchant you nominate up front, this is not that feature — see Choosing the right control.

Step 1 — Find a brand-locked offer

Filter getVirtualCardOffers 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.
Pass the brand-locked 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.
Declines from a merchant mismatch appear in getDeclinedTransactions alongside all other declines. See Decline Codes for interpreting the reason returned.

Common mistakes

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.
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.
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.
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.