Card issuing tutorial beta
Create and manage spending cards in the Spending cards section of the Dashboard, or with the Moov API.

Use case
For the purposes of this guide, we’ll assume you are a developer building a platform for the following use case:
- Your Moov account: A platform that enables customers to accept payments and use those funds for business-related purchases
- Customer: A business that will use the virtual card to make payments with funds from its Moov wallet
Prerequisites
This guide assumes that you have onboarded business customers with the card-issuing capability. To learn more about onboarding, read our hosted onboarding guide. We also assume that your customer's Moov wallet has already been funded with a balance.
Read our wallet and source guides for more information on funding a wallet.
Your customer's card-issuing wallet will be used as the funds source for the issued card. Card-issuing wallets are automatically created when the card-issuing capability is enabled. Card-issuing wallets can be loaded with funds from another source, typically with a wallet-to-wallet transfer from the default wallet. Only funds in the card-issuing wallet can be used with issued cards.
Request a virtual spending card
After successfully onboarding and verifying your customer's business, you can request a virtual card.
Navigate to Spending cards and create a new card. When you create a spending card, you can set the following:
| Setting | Description |
|---|---|
| Single use | Set to automatically close the card after the first authorization. Once a card is issued, this setting cannot be changed. |
| Limits | Set limits such as specific amounts or transaction counts for a period of time such as every day or per transaction |
| Category restrictions | Allow or block certain merchant categories such as advertising and gambling |
| Merchant restrictions | Allow or block specific merchants, independent of merchant category restrictions |
| Spend schedule | Set spend schedules such as certain days of the week or a specific time of day |
| Spend cutoff | Set a spend cutoff (expiry) date and time |
Use the create spending card endpoint. You have the option of submitting the following parameters:
| Parameter | Description |
|---|---|
authorizedUserAccountID |
The unique identifier for the Moov wallet associated with the authorized user |
billingAddress |
Billing address of the issued card's authorized user |
controls |
Choose controls such as velocity limits, merchant restrictions, schedules, expiry, and whether or not the card is single use |
expiration |
The expiration date of the card or token |
metadata |
Free-form key-value pair list. Useful for storing information that is not captured elsewhere |
nickname |
Descriptive name for the issued spending card |
curl -X POST "https://api.moov.io/issuing/{accountID}/cards" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2026.07.00" \
--data-raw '{
"authorizedUserAccountID": "string",
"billingAddress": {
"addressLine1": "123 Main Street",
"city": "Denver",
"stateOrProvince": "CO",
"postalCode": "80301",
"country": "US"
},
"controls": {
"singleUse": false,
"velocityLimits" : [
{
"amount": 1000,
"interval": "per-transaction"
}
]
},
"expiration": {
"month": "01",
"year": "27"
},
"nickname": "supplies purchase"
}'
Optional card controls
You can limit the usage of an issued card by setting controls in the card creation request. The following controls are currently supported:
allowedSchedule: Limits card usage to specific days and times. Set tonullto remove all schedule restrictions.expiresOn: When a cutoff date and time are set, all authorizations after this datetime are declined regardless of other controls. Set tonullfor no cutoff.merchantCategoryRestrictions: Restricts card usage by merchant category. If none are set, some categories might be blocked by card networks by default.merchantRestrictions: Restricts card usage to specific merchants, or blocks specific merchants.singleUse: Iftrue, the card closes after the first successful authorization.velocityLimits: Sets spending limits per time interval.
Most controls can be updated with the PATCH update spending card endpoint. The singleUse control cannot be updated after card creation.
The following example demonstrates a card configured to close after the first successful authorization (singleUse) and enforces a per-transaction spending limit of $50.00 (amount is in cents).
{
"controls": {
"singleUse": true,
"velocityLimits": [
{
"amount": 5000,
"interval": "per-transaction"
}
]
}
}
Once the virtual card has been issued, the customer can then use the card to make purchases within the amount of their wallet balance.
Issued card Drop
Once an issued card is in an active state, your customer can securely access the full PCI-compliant card details for making transactions through the Issued card Drop, a secure interface for displaying sensitive card information.
// Card issuing Moov Drop
const issuedCard = document.querySelector("moov-issued-card");
// After generating a token, set it on the issued card element
issuedCard.oauthToken = "some-generated-token";
// Include the accountID of the Moov account to which the card was issued and the ID of the issued card to display
issuedCard.accountID = "account-id";
issuedCard.issuedCardID = "card-id";
Manage spending cards
You can freeze, close, or edit a card after it's issued.
- Freeze: Temporarily suspends the card so it cannot approve authorizations. A card can be switched between a frozen state and an active state as needed.
- Close: Permanently deactivates the card so it can no longer approve authorizations. A card also automatically closes when it expires.
- Edit: Update the card name, controls (limits, restrictions, schedules), and spend cutoff (expiry date). You can't change the single-use setting after a card is issued.
Navigate to Spending cards > Cards to view cards and their authorized users. New authorized users / employees will need to be onboarded to use their card and access the Dashboard.
Click on a card to view details like spend controls. From the card details view:
- Click Freeze to freeze the card
- Click More > Close card to close the card
- Click More > Edit card details to edit the card

Use the update spending card PATCH endpoint. Set state to frozen to freeze a card, active to reactivate it, or closed to close it. You can also update nickname, metadata, billingAddress, and spend controls.
curl -X PATCH "https://api.moov.io/issuing/{accountID}/cards/{issuedCardID}" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2026.07.00" \
-d '{
"state": "frozen"
}'
See update an issued card for more details.
View issued card authorizations
Each time a card is used to make a purchase from a merchant, Moov processes the authorization request in real time. The outcomes of these requests can be tracked through the card authorization API.
Below is an example of the card authorization response:
[
{
"authorizationID": "string",
"issuedCardID": "string",
"fundingWalletID": "string",
"network": "visa",
"authorizedAmount": "-14.89",
"status": "pending",
"merchantData": {
"networkID": "string",
"name": "Whole Body Fitness",
"city": "San Francisco",
"country": "US",
"postalCode": "94107",
"state": "CA",
"mcc": "7298"
},
"createdOn": "2026-08-24T14:15:22Z",
"cardTransactions": [
"string"
]
}
]
View completed card transactions
When a pending authorization is successfully captured and funds have settled, a card transaction resource is created. This indicates that the funds related to that transaction have been moved. We retain details from the original authorization for reconciliation and tracking purposes.
List all card transactions for a Moov account with the list card transactions GET endpoint. See view completed card transactions for an example response.
Check card activity
Check a card's activity record for all settled and pending transactions.
Navigate to Spending cards > View activity to view card activity. Search by card ID or sort by status:
- Cleared
- Pending
- Declined
- Canceled
- Expired
Click on a row item to view activity details. The examples below show a cleared and a declined transaction.


Starting with API v2026.10.00, you can query a card's activity records. Each record represents the use of an issued card and will contain one of authorizationID or cardTransactionID.
- Activity that has an authorization request includes
authorizationID.cardTransactionIDis omitted. - Activity that does not have a corresponding authorization request includes
cardTransactionIDand omitsauthorizationIDandauthorizedAmount.
Use the list card activity endpoint to see activity records using any of the following query parameters:
skipcountissuedCardIDauthorizedUserAccountIDstatusesstartDateTimeendDateTime
The example below queries an issuedCardID.
curl -X GET "https://api.moov.io/issuing/{accountID}/activity?issuedCardID=d04885c9-ea6b-43a7-9186-63d9fbd57716" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2026.10.00"
Example response:
[
{
"authorizationID": "d9ee8dde-b1eb-492f-bea1-d8e09bccbc52",
"cardTransactionID": "d5a1aab9-eb96-409a-ab95-88ac99cf00a5",
"status": "pending",
"issuedCardID": "d04885c9-ea6b-43a7-9186-63d9fbd57716",
"lastFourCardNumber": "0869",
"authorizedUserAccountID": "d84897e9-ba6b-56a7-8123-84d8fbd68819",
"authorizedAmount": "-14.89",
"clearedAmount": "-14.89",
"declineReason": "insufficient-funds",
"createdOn": "2026-08-24T14:15:22Z",
"merchantData": {
"networkID": "123456789012345",
"name": "Whole Body Fitness",
"city": "San Francisco",
"country": "US",
"postalCode": "94107",
"state": "CA",
"mcc": "7298"
}
}
]
Simulations in test mode
To try the cards you issued, simulate authorizations, clearings, and reversals with the requests in spending card simulations.