Create an individual account
Before you start, review create accounts for how to get an access token if you're using the onboarding Drop.
The examples below break up all the small tasks needed to create an individual Moov account. When using the API, SDKs, or Moov.js, steps 1-3 can be consolidated into one request. See the full example for details.
Sole proprietors need to be created with a business account.
Create individual account
You can provide a variety of information when creating an account. The example below only includes the minimum required fields. The response object will include the newly created accountID which you will need to update the account.
Create account reference
curl -X POST "https://api.moov.io/accounts" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2026.07.00" \
--data-raw '{
"accountType": "individual",
"profile": {
"individual": {
"email": "julesjacksonyoga@moov.io",
"name": {
"firstName": "Jules",
"lastName": "Jackson"
}
}
},
"foreignID": "unique-correlation-id"
}'
Create account reference
mc, _ := moov.NewClient()
mc.CreateAccount(ctx, moov.CreateAccount{
Type: moov.AccountType_Individual,
Profile: moov.CreateProfile{
Individual: &moov.CreateIndividualProfile{
Name: moov.Name{
FirstName: "Jules",
LastName: "Jackson",
},
Email: "julesjacksonyoga@moov.io",
},
},
})
Create account reference
const moov = Moov(token);
const accountPayload = {
accountType: "individual",
profile: {
individual: {
email: "julesjacksonyoga@moov.io",
name: {
firstName: "Jules",
lastName: "Jackson"
}
}
},
foreignID: "unique-correlation-id"
};
const account = await moov.accounts.create(accountPayload);
Onboarding Drop reference
With the onboarding Drop, you request capabilities when creating an account. After this step, you can jump ahead to step 3.
<moov-onboarding></moov-onboarding>
// Get the onboarding Drop
const onboarding = 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 = ["send-funds.ach"];
// Open the onboarding flow when ready
onboarding.open = true;
Request capabilities for individual
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 GET endpoint.
Request capabilities reference
curl -X POST "https://api.moov.io/accounts/{accountID}/capabilities" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2026.07.00" \
--data-raw '{
"capabilities": [
"send-funds.ach"
]
}'
Request capabilities reference
mc, _ := moov.NewClient()
var accountID string
mc.RequestCapabilities(ctx, accountID,
[]moov.CapabilityName{
moov.CapabilityName_Transfers,
moov.CapabilityName_SendFundsACH,
moov.Capability_NameWalletBalance,
},
)
Request capabilities reference
const moov = Moov(token);
const accountID = "accountID";
const capabilities = [
"send-funds.ach"
];
moov.accounts.capabilities.request({accountID, capabilities});
Send platform agreement to individual
Record the individual's acceptance of Moov's platform agreement with a token or manual entry (Moov recommends the manual method for server integrations). The platform agreement guide explains each option and who can use the API flows.
Generate token reference and update account reference
# Get the terms of service token
curl -X GET "https://api.moov.io/tos-token" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2026.07.00"
# Send the token when patching the account
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2026.07.00" \
--data-raw '{
"termsOfService": {
"token": "terms-of-service-token"
},
"foreignID": "unique-correlation-id"
}'
Update account reference
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2026.07.00" \
--data-raw '{
"termsOfService": {
"manual": {
"acceptedDate": "accepted-date",
"acceptedIP": "accepted-ip",
"acceptedUserAgent": "accepted-user-agent",
"acceptedDomain": "accepted-domain"
}
},
"foreignID": "unique-correlation-id"
}'
Terms of Service Drop reference
<moov-terms-of-service></moov-terms-of-service>
// Get the terms of service Drop
const termsOfService = document.querySelector("moov-terms-of-service");
// Provide the token
termsOfService.token = "eyjh...";
Complete verification and underwriting
Depending on the capabilities requested, Moov might require additional verification and underwriting. Outstanding items appear in the Dashboard and in each capability'srequirements.currentlyDue. Check capability status until each capability is enabled, and use troubleshoot capabilities to fix errors.Full example
You can consolidate steps 1 through 3 using the create account POST endpoint. The example below includes all the fields you can send to Moov in one step when creating an individual account.
Any additional verification and underwriting requirements appear in the Dashboard and in each capability's requirements.currentlyDue. See check capability status.
Create account reference
curl -X POST "https://api.moov.io/accounts" \
-H "Authorization: Bearer {token}" \
-H "x-moov-version: v2026.07.00" \
-H "X-Wait-For: connection" \
--data-raw '{
"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_HjpyuXBabiXPi6T83fUKRJkA3dsFID6fzitMpm2qrOh4"
}
}'
Create account reference
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",
},
})
Create account reference
const moov = Moov(token);
const accountPayload = {
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"
},
};
const account = await moov.accounts.create(accountPayload);
Next steps
After the account is created, optionally connect it to your account, then link a source like a bank account or card so it can start moving money.