Follow this step by step guide to create accounts with our API, SDKs, and Moov.js.
The easiest way to create accounts will be through our hosted onboarding process. You can create business or individual accounts, pre-fill data, and send a form link directly to merchants to complete.
The examples on this page show the flow of creating both business and individual accounts with our API, SDKs, and Moov.js, including the use of Moov's pre-built onboarding Drop. We strongly recommend using Moov.js's pre-built onboarding Drop.
As part of the verification process, an address is required for business accounts requesting wallet, send funds, collect funds, or card issuing capabilities. The following address types cannot be the main address provided for a Moov account:
❌ PO Box
❌ Commercial mailing receiving agency
❌ Registered agent
Before you create an account, familiarize yourself with capabilities and requirements. A full example is provided at the end of each section.
The examples below have been broken up into all the small tasks needed to create a business Moov account. However, when using the API, SDKs, or Moov.js, steps 2-4 can be consolidated into one step. See the full example for details.
You can provide a variety of information when creating an account. The example below only includes the minium required fields. The response object will include the newly created accountID which you will need to update the account.
mc,_:=moov.NewClient()mc.CreateAccount(ctx,moov.CreateAccount{Type:moov.AccountType_Business,Profile:moov.CreateProfile{Business:&moov.CreateBusinessProfile{Name:"Whole Body Fitness LLC",Type:"llc",Website:"wbfllc.com",},},})
constmoov=Moov(token);constaccountPayload={accountType:"business",profile:{business:{legalBusinessName:"Whole Body Fitness LLC",businessType:"llc",website:"wbfllc.com"}},foreignId:"unique-correlation-id"};constaccount=awaitmoov.accounts.create({accountPayload});
With the onboarding Drop, you request capabilities when creating an account. After this step, you can jump ahead to step 4.
1
<moov-onboarding></moov-onboarding>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Get the onboarding Drop
constonboarding=document.querySelector("moov-onboarding");// After generating a token, set it on the onboarding element
onboarding.token="some-generated-token";// Include your accountID, which can be found in the Dashboard
onboarding.facilitatorAccountID="your-account-id";// Request capabilities
onboarding.capabilities=["transfers","send-funds","collect-funds","wallet"];// Open the onboarding flow when ready
onboarding.open=true;
Request capabilities for the account you've created by passing the accountID. You can find the account ID in the create account response, or you can find it by using the list accounts GETendpoint.
The platform agreement is sent via a token. To send a token, you must generate the token and then update the account with that token. Terms of service tokens must be created on the client-side for the user to accept. You can then pass the token to your server when creating or updating the account. The easiest way to do this is with the Moov TOS Drop.
Note in addition to the Drop, the tabs below show the API methods to generate and pass a token. The API implementations outlined below are not available to everyone. If you are not authorized by Moov to use the API flows, you will receive a 400 error.
// Get the terms of service Drop
consttermsOfService=document.querySelector("moov-terms-of-service");// Provide the token
termsOfService.token="eyjh...";
Moov must verify business representatives before a business account send funds or collect funds from other accounts. A beneficial owner is any individual with ≥25% ownership of the business (owner), or someone with significant responsibility to control or manage the business (controller).
An account is not required to have an owner, but must have at least one controller. An account can have a maximum of 7 representatives.
mc,_:=moov.NewClient()varaccountIDstringmc.CreateRepresentative(ctx,accountID,moov.CreateRepresentative{Address:&moov.Address{AddressLine1:"12 Main Street",City:"Cabot Cove",StateOrProvince:"ME",PostalCode:"04103",Country:"US",},BirthDate:&moov.Date{Day:10,Month:11,Year:1985,},Email:"amanda@classbooker.dev",GovernmentID:&moov.GovernmentID{SSN:&moov.SSN{Full:"111111111",LastFour:"1111",},},Name:moov.Name{FirstName:"Amanda",LastName:"Yang",},Phone:&moov.Phone{Number:"8185551212",CountryCode:"1",},Responsibilities:&moov.Responsibilities{IsController:false,IsOwner:true,OwnershipPercentage:38,JobTitle:"CEO",},})
constmoov=Moov(token);constaccountID="accountID";constrepresentativePayload={address:{addressLine1:"12 Main Street",city:"Cabot Cove",stateOrProvince:"ME",postalCode:"04103",country:"US"},birthDate:{day:10,month:11,year:1985},email:"amanda@classbooker.dev",governmentID:{ssn:{full:"111111111",lastFour:"1111"}},name:{firstName:"Amanda",lastName:"Yang"},phone:{number:"8185551212",countryCode:"1"},responsibilities:{isController:false,isOwner:true,ownershipPercentage:38,jobTitle:"CEO"}};constaccount=awaitmoov.representatives.create(accountID,representativePayload);
Depending on the account and capabilities requested, Moov might require additional verification and underwriting. You will receive alerts for any missing data in the Dashboard.
You can consolidate steps 2 through 4 using the create account POSTendpoint. The below example includes all the fields you can send to Moov in one step when creating a business account. After creating an account, you would still need to add representatives and provide beneficial owner confirmation (starting at steps 5 and 6).
mc,_:=moov.NewClient()thirdPartyID:=""// your system identifiermc.CreateAccount(ctx,moov.CreateAccount{Type:moov.AccountType_Business,Profile:moov.CreateProfile{Business:&moov.CreateBusinessProfile{Address:&moov.Address{AddressLine1:"123 Main Street",AddressLine2:"Apt 302",City:"Boulder",StateOrProvince:"CO",PostalCode:"80301",Country:"US",},Type:moov.BusinessType_Llc,Description:"Local fitness center paying out instructors",DBA:"Whole Body Fitness",Email:"julesj@classbooker.dev",IndustryCodes:&moov.IndustryCodes{Naics:"713940",Sic:"7991",Mcc:"7997",},Name:"Whole Body Fitness LLC",Phone:&moov.Phone{Number:"8185551212",CountryCode:"1",},TaxID:&moov.TaxID{EIN:moov.EIN{Number:"123456789",},},Website:"www.wholebodyfitnessgym.com",},},RequestedCapabilities:[]moov.CapabilityName{moov.CapabilityName_Transfers,moov.CapabilityName_SendFunds,moov.CapabilityName_CollectFunds,moov.CapabilityName_Wallet,},CustomerSupport:&moov.CustomerSupport{Address:&moov.Address{AddressLine1:"123 Main Street",AddressLine2:"Unit 302",City:"Boulder",StateOrProvince:"CO",PostalCode:"80301",Country:"US",},Email:"julesj@classbooker.dev",Phone:&moov.Phone{Number:"8185551212",CountryCode:"1",},},ForeignID:thirdPartyID,Metadata:map[string]string{"Property1":"string","Property2":"string",},AccountSettings:&moov.AccountSettings{CardPayment:&moov.CardPaymentSettings{StatementDescriptor:"Jules Jackson",},},})
constmoov=Moov(token);constaccountPayload={accountType:"business",profile:{business:{address:{addressLine1:"123 Main Street",addressLine2:"Unit 302",city:"Boulder",stateOrProvince:"CO",postalCode:"80301",country:"US"},businessType:"llc",description:"Local fitness center paying out instructors",doingBusinessAs:"Whole Body Fitness",email:"amanda@classbooker.dev",industryCodes:{naics:"713940",sic:"7991",mcc:"7997"},legalBusinessName:"Whole Body Fitness LLC",phone:{number:"8185551212",countryCode:"1"},taxID:{ein:{number:"123-45-6789"}},website:"www.wholebodyfitnessgym.com",}},capabilities:["transfers","send-funds","collect-funds","wallet"],customerSupport:{address:{addressLine1:"123 Main Street",addressLine2:"Unit 302",city:"Boulder",stateOrProvince:"CO",postalCode:"80301",country:"US"},email:"amanda@classbooker.dev",phone:{number:"8185551212",countryCode:"1"},website:"www.wholebodyfitnessgym.com"},foreignId:"unique-correlation-id",metadata:{property1:"string",property2:"string"},mode:"production",settings:{cardPayment:{statementDescriptor:"Whole Body Fitness"}},termsOfService:{token:"kgT1uxoMAk7QKuyJcmQE8nqW_HjpyuXBabiXPi6T83fUQoxsyWYPcYzuHQTqrt7YRp4gCwyDQvb6U5REM9Pgl2EloCe35t-eiMAbUWGo3Kerxme6aqNcKrP_6-v0MTXViOEJ96IBxPFTvMV7EROI2dq3u4e-x4BbGSCedAX-ViAQND6hcreCDXwrO6sHuzh5Xi2IzSqZHxaovnWEboaxuZKRJkA3dsFID6fzitMpm2qrOh4"},};constaccount=awaitmoov.accounts.create({accountPayload});
The examples below have been broken up into all the small tasks needed to create an individual Moov account. However, when using the API, SDKs, or Moov.js, steps 2-4 can be consolidated into one step. See the full example for details.
You can provide a variety of information when creating an account. The example below only includes the minium required fields. The response object will include the newly created accountID which you will need to update the account.
With the onboarding Drop, you request capabilities when creating an account. After this step, you can jump ahead to step 3.
1
<moov-onboarding></moov-onboarding>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Get the onboarding Drop
constonboarding=document.querySelector("moov-onboarding");// After generating a token, set it on the onboarding element
onboarding.token="some-generated-token";// Include your accountID, which can be found in the Dashboard
onboarding.facilitatorAccountID="your-account-id";// Request capabilities
onboarding.capabilities=["transfers","send-funds","wallet"];// Open the onboarding flow when ready
onboarding.open=true;
Request capabilities for the account you've created by passing the accountID. You can find the account ID in the create account response, or you can find it by using the list accounts GETendpoint.
You can send the platform agreement via a token, or manually using the accountID. To send a token, you must generate the token and then update the account with that token. To send Moov the acceptance manually, you must capture the information from the customer and send it to Moov. Moov recommends anyone using a server integration update the terms of service using the manual method.
// Get the terms of service Drop
consttermsOfService=document.querySelector("moov-terms-of-service");// Provide the token
termsOfService.token="eyjh...";
You can consolidate steps 1 through 3 using the create account POSTendpoint. The below example includes all the fields you can send to Moov in one step when creating an individual account.
mc,_:=moov.NewClient()mc.CreateAccount(ctx,moov.CreateAccount{Type:moov.AccountType_Individual,Profile:moov.CreateProfile{Individual:&moov.CreateIndividualProfile{Address:&moov.Address{AddressLine1:"123 Main Street",AddressLine2:"Apt 302",City:"Boulder",StateOrProvince:"CO",PostalCode:"80301",Country:"US",},BirthDate:&moov.Date{Day:9,Month:5,Year:1985,},Email:"julesjacksonyoga@moov.io",GovernmentID:&moov.GovernmentID{SSN:&moov.SSN{Full:"111111111",LastFour:"1111",},},Name:moov.Name{FirstName:"Jules",LastName:"Jackson",},Phone:&moov.Phone{Number:"8185551212",CountryCode:"1",},},},RequestedCapabilities:[]moov.CapabilityName{moov.CapabilityName_Transfers,moov.CapabilityName_SendFunds,moov.CapabilityName_Wallet,},ForeignID:"unique-correlation-id",Metadata:map[string]string{"Property1":"string","Property2":"string",},AccountSettings:&moov.AccountSettings{CardPayment:&moov.CardPaymentSettings{StatementDescriptor:"Jules Jackson",},},TermsOfService:&moov.TermsOfServicePayload{Token:"kgT1uxoMAk7QKuyJcmQE8nqW_HjpyuXBabiXPi6T83fUQoxsyWYPcYzuHQTqrt7YRp4gCwyDQvb6U5REM9Pgl2EloCe35t-eiMAbUWGo3Kerxme6aqNcKrP_6-v0MTXViOEJ96IBxPFTvMV7EROI2dq3u4e-x4BbGSCedAX-ViAQND6hcreCDXwrO6sHuzh5Xi2IzSqZHxaovnWEboaxuZKRJkA3dsFID6fzitMpm2qrOh4",},})
constmoov=Moov(token);constaccountPayload={accountType:"individual",profile:{individual:{address:{addressLine1:"123 Main Street",addressLine2:"Apt 302",city:"Boulder",stateOrProvince:"CO",postalCode:"80301",country:"US"},birthDate:{day:"09",month:"05",year:"1985"},email:"julesjacksonyoga@moov.io",governmentID:{ssn:{full:"111111111",lastFour:"1111"}},name:{firstName:"Jules",lastName:"Jackson"},phone:{number:"8185551212",countryCode:"1"},}},capabilities:["transfers","send-funds","wallet"],foreignId:"unique-correlation-id",metadata:{property1:"string",property2:"string"},mode:"production",settings:{cardPayment:{statementDescriptor:"Jules Jackson"}},termsOfService:{token:"kgT1uxoMAk7QKuyJcmQE8nqW_HjpyuXBabiXPi6T83fUQoxsyWYPcYzuHQTqrt7YRp4gCwyDQvb6U5REM9Pgl2EloCe35t-eiMAbUWGo3Kerxme6aqNcKrP_6-v0MTXViOEJ96IBxPFTvMV7EROI2dq3u4e-x4BbGSCedAX-ViAQND6hcreCDXwrO6sHuzh5Xi2IzSqZHxaovnWEboaxuZKRJkA3dsFID6fzitMpm2qrOh4"},};constaccount=awaitmoov.accounts.create({accountPayload});