*Card issuing is currently in a closed beta and requires underwriting — contact us for more information.
Moov makes spending money in a wallet easy by enabling platforms to issue cards to their customers. This guide covers how to issue and spend on a card.
Assuming you’ve already completed a basic setup of your own account, you’ll need to generate an access token. You will include a new access token as the Moov Drop onboarding.token whenever you onboard a customer.
1
2
3
4
curl -X POST "https://api.moov.io/oauth2/token"\
-u "PUBLIC_KEY:PRIVATE_KEY"\
--data-urlencode "grant_type=client_credentials"\
--data-urlencode "scope=/accounts.write"\
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import{Moov,SCOPES}from'@moovio/node';constmoov=newMoov({accountID:"YOUR_MOOV_ACCOUNT_ID",publicKey:"PUBLIC_KEY",secretKey:"PRIVATE_KEY",domain:"YOUR_DOMAIN"});constscopes=[SCOPES.ACCOUNTS_CREATE];try{const{token}=awaitmoov.generateToken(scopes);// Do something with token
}catch(err){// Handle any errors
}
Customers looking to use their wallet as the funding source for the card will need to request both the wallet and card-issuing (beta) capabilities. These accounts will need to be verified and undergo underwriting.
The following example uses the create account POSTendpoint.
// create Moov instance with generated token
constmoov=newMoov(credentialsObject);// create Moov account, likely on form submit
constaccountPayload={accountType:"business",profile:{business:{legalBusinessName:"Whole Body Fitness LLC",businessType:"llc",website:"wbfllc.com"}},capabilities:["wallet","card-issuing"]};moov.accounts.create(accountPayload).then((account)=>{console.log(account);}).catch((err)=>{console.error(err);});// Generate a new token server-side with the accountID and update the token within your frontend app. You can chain methods together
moov.setToken("new-token");// add a representative to account
constaccountID="accountID";constrepresentativePayload={name:{firstName:"George",lastName:"Glass"},address:{addressLine1:"12 Main Street",city:"Cabot Cove",stateOrProvince:"ME",postalCode:"04103",country:"US"},birthDate:{day:10,month:11,year:1985},email:"georgeg@classbooker.dev",governmentID:{ssn:{full:"111111111",lastFour:"1111"}},responsibilities:{isController:false,isOwner:true,ownershipPercentage:38,jobTitle:"CEO"}}moov.accounts.representatives.create(accountID,representativePayload);
// create Moov instance with generated token
constmoov=Moov(token);// create Moov account, likely on form submit
constaccountPayload={accountType:"business",profile:{business:{legalBusinessName:"Whole Body Fitness LLC",businessType:"llc",website:"wbfllc.com"}},capabilities:["wallet","card-issuing"]};moov.accounts.create({accountPayload}).then((account)=>{console.log(account);}).catch((err)=>{console.error(err);});// Generate a new token server-side with the accountID and update the token within your frontend app. You can chain methods together
moov.setToken("new-token");// add a representative to account
constaccountID="accountID";constrepresentativePayload={name:{firstName:"George",lastName:"Glass"},address:{addressLine1:"12 Main Street",city:"Cabot Cove",stateOrProvince:"ME",postalCode:"04103",country:"US"},birthDate:{day:10,month:11,year:1985},email:"georgeg@classbooker.dev",governmentID:{ssn:{full:"111111111",lastFour:"1111"}},responsibilities:{isController:false,isOwner:true,ownershipPercentage:38,jobTitle:"CEO"}};moov.accounts.representatives.create(accountID,representativePayload);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Card issuing Moov Drop
constonboarding=document.querySelector("moov-onboarding");// After generating a token, set it on the onboarding element
onboarding.token="some-generated-token";// Include your own accountID which can be found in the Moov Dashboard
onboarding.facilitatorAccountID="your-account-id";// Wallet and card issuing capabilities are needed for this flow
onboarding.capabilities=["wallet","card-issuing"];// Funding will occur with the Moov wallet
onboarding.paymentMethodTypes=["moov-wallet"];// Open the onboarding flow when ready
onboarding.open=true;
Once you’ve onboarded your customer and they’ve gone through business verification, you can request a card for that customer. You’ll do this through the card issuing endpoint in the Moov API. When requesting a card, you have the option to specify a spend limit as well as a descriptive memo. If you don’t specify a spend limit, the maximum amount the card can spend will be the amount of the balance held in the customer’s wallet.
After you request the card, your customer will be provided a virtual card with a 16-digit card number, expiration date, and security code. The customer can then use the card to make purchases within the amount of their spend limit or wallet balance, depending on which is lower.
Once the card has been successfully created, you can retrieve full details about the card by passing the customer’s account ID and the card ID to the GET issued card endpoint.