Create accounts

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 (coming soon). 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.

The examples are broken out into individual steps, but a full example is provided at the end of each section. Before you create an account, familiarize yourself with capabilities and requirements.

Get access token

This initial step is only required if you’re going to use Moov’s onboarding Drop.

Create an access token, which you’ll later include as the onboarding.token when onboarding accounts with Drops.

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';

const moov = new Moov({
  accountID: "YOUR_MOOV_ACCOUNT_ID",
  publicKey: "PUBLIC_KEY",
  secretKey: "PRIVATE_KEY",
  domain: "YOUR_DOMAIN"
});

const scopes = [SCOPES.ACCOUNTS_CREATE];
try {
  const {token} = await moov.generateToken(scopes);
  // Do something with token
} catch(err) {
  // Handle any errors
}

Business account

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.

Create business account

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.

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
curl -X POST "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "accountType": "business",
    "profile": {
      "business": {
        "legalBusinessName": "Whole Body Fitness LLC",
        "businessType": "llc",
        "website": "wbfllc.com"
      }
    },
    "foreignId": "your-correlation-id"
  }'\

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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",
    },
  },
})

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
const moov = new Moov(credentialsObject);

const accountPayload = {
  accountType: "business",
  profile: {
    business: {
      legalBusinessName: "Whole Body Fitness LLC",
      businessType: "llc",
      website: "wbfllc.com"
    }
  },
  foreignId: "your-correlation-id"
};

const account = await moov.accounts.create(accountPayload);

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
const moov = Moov(token);

const accountPayload = {
  accountType: "business",
  profile: {
    business: {
      legalBusinessName: "Whole Body Fitness LLC",
      businessType: "llc",
      website: "wbfllc.com"
    }
  },
  foreignId: "your-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 4.

1
<moov-onboarding></moov-onboarding>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// 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 = ["transfers", "send-funds", "collect-funds", "wallet"];

// Open the onboarding flow when ready
onboarding.open = true;

Request capabilities for business

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
curl -X POST "https://api.moov.io/accounts/{accountID}/capabilities" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "capabilities": [
      "transfers", 
      "send-funds", 
      "collect-funds", 
      "wallet"
    ]
  }'\

Request capabilities reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
mc, _ := moov.NewClient()

mc.RequestCapabilities(ctx, account.AccountID,
  []moov.CapabilityName{
    moov.CapabilityName_Transfers,
    moov.CapabilityName_SendFunds,
    moov.CapabilityName_CollectFunds,
    moov.CapabilityName_Wallet,
  },
)

Request capabilities reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
const moov = new Moov(credentialsObject);

const accountID = "accountID";
const capabilities = [
  "transfers", 
  "send-funds", 
  "collect-funds", 
  "wallet"
];

const response = await moov.capabilities.requestCapabilities(accountID, capabilities);

Request capabilities reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
const moov = Moov(token);

const accountID = "accountID";
const capabilities = [
  "transfers", 
  "send-funds", 
  "collect-funds", 
  "wallet"
];

moov.accounts.capabilities.request({accountID, capabilities});

Send platform agreement to business

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.

Generate token reference and update account reference

1
2
3
# Get the terms of service token
curl -X GET "https://api.moov.io/tos-token" \
  -H "Authorization: Bearer {token}" \
1
2
3
4
5
6
7
8
9
# Send the token when patching the account
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "termsOfService": {
      "token": "terms-of-service-token"
    },
    "foreignID": "your-correlation-id"
  }'\

Update account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "termsOfService": {
      "acceptedDate": "accepted-date",
      "acceptedIP": "accepted-ip",
      "acceptedUserAgent": "accepted-user-agent",
      "acceptedDomain": "accepted-domain"
    },
    "foreignID": "your-correlation-id"
  }'\

Terms of Service Drop reference

1
<moov-terms-of-service></moov-terms-of-service>
1
2
3
4
5
// Get the terms of service Drop
const termsOfService = document.querySelector("moov-terms-of-service");

// Provide the token
termsOfService.token = "eyjh...";

Create representatives

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.

Add a representative reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
curl -X POST "https://api.moov.io/accounts/{accountID}/representatives" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "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"
    }
  }'

Add a representative reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
mc, _ := moov.NewClient()

mc.CreateRepresentative(ctx, account.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",
  },
})

Add a representative reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const moov = new Moov(credentialsObject);

const accountID = "accountID";
const representativePayload = {
  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"
  }
};

const account = await moov.representatives.create(accountID, representativePayload);

Add a representative reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
const moov = Moov(token);

const accountID = "accountID";
const representativePayload = {
  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"
  }
};

const account = await moov.representatives.create(accountID, representativePayload);

Update account with beneficial owners

Update the account to alert Moov that you have finished creating representatives. At least one controller should have been created in step 4.

Update account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "profile": {
      "business": {
        "ownersProvided": true
      }
    },
    "foreignId": "your-correlation-id"
  }'\

Update account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
mc, _ := moov.NewClient()

account := moov.Account{
  AccountID:   "accountID",
  AccountType: moov.AccountType_Business,
  Profile: moov.Profile{
    Business: &moov.Business{
      OwnersProvided: true,
    },
  },
}

mc.UpdateAccount(ctx, account)

Update account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const moov = new Moov(credentialsObject);

const accountID = "accountID"
const updatedAccount = {
  profile: {
    business: {
      ownersProvided: true,
    }
  } 
};

const account = await moov.accounts.patch(accountID, updatedAccount);

Update account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const moov = Moov(token);

const accountID = "accountID"
const updatedAccount = {
  profile: {
    business: {
      ownersProvided: true,
    }
  } 
};

moov.accounts.update(accountID, updatedAccount);

Additional underwriting and verification

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.

Create business account full example

You can consolidate steps 2 through 4 using the create account POST endpoint. 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).

Any additional verification and underwriting requirements will be listed in the Dashboard.

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
curl -X POST "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}" \
  -H "X-Wait-For: connection" \
  --data-raw '{
  "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": "your-correlation-id",
  "metadata": {
    "property1": "string",
    "property2": "string"
  },
  "mode": "production",
  "settings": {
    "cardPayment": {
      "statementDescriptor": "Whole Body Fitness"
    }
  },
  "termsOfService": {
    "token": "kgT1uxoMAk7QKuyJcmQE8nqW_HjpyuXBabiXPi6T83fUQoxsyWYPcYzuHQTqrt7YRp4gCwyDQvb6U5REM9Pgl2EloCe35t-eiMAbUWGo3Kerxme6aqNcKrP_6-v0MTXViOEJ96IBxPFTvMV7EROI2dq3u4e-x4BbGSCedAX-ViAQND6hcreCDXwrO6sHuzh5Xi2IzSqZHxaovnWEboaxuZKRJkA3dsFID6fzitMpm2qrOh4"
  },
}'\

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
mc, _ := moov.NewClient()

thirdPartyID := "" // your system identifier

mc.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",
    },
  },
})

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
const moov = new Moov(credentialsObject);

const accountPayload = {
  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: "your-correlation-id",
  metadata: {
    property1: "string",
    property2: "string"
  },
  mode: "production",
  settings: {
    cardPayment: {
      statementDescriptor: "Whole Body Fitness"
    }
  },
  termsOfService: {
    token: "kgT1uxoMAk7QKuyJcmQE8nqW_HjpyuXBabiXPi6T83fUQoxsyWYPcYzuHQTqrt7YRp4gCwyDQvb6U5REM9Pgl2EloCe35t-eiMAbUWGo3Kerxme6aqNcKrP_6-v0MTXViOEJ96IBxPFTvMV7EROI2dq3u4e-x4BbGSCedAX-ViAQND6hcreCDXwrO6sHuzh5Xi2IzSqZHxaovnWEboaxuZKRJkA3dsFID6fzitMpm2qrOh4"
  },
};

const account = await moov.accounts.create(accountPayload);

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
const moov = Moov(token);

const accountPayload = {
  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: "your-correlation-id",
  metadata: {
    property1: "string",
    property2: "string"
  },
  mode: "production",
  settings: {
    cardPayment: {
      statementDescriptor: "Whole Body Fitness"
    }
  },
  termsOfService: {
    token: "kgT1uxoMAk7QKuyJcmQE8nqW_HjpyuXBabiXPi6T83fUQoxsyWYPcYzuHQTqrt7YRp4gCwyDQvb6U5REM9Pgl2EloCe35t-eiMAbUWGo3Kerxme6aqNcKrP_6-v0MTXViOEJ96IBxPFTvMV7EROI2dq3u4e-x4BbGSCedAX-ViAQND6hcreCDXwrO6sHuzh5Xi2IzSqZHxaovnWEboaxuZKRJkA3dsFID6fzitMpm2qrOh4"
  },
};

const account = await moov.accounts.create({accountPayload});

Individual account

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.

Create individual account

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.

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
curl -X POST "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "accountType": "individual",
    "profile": {
      "individual": {
        "email": "julesjacksonyoga@moov.io",
        "name": {
          "firstName": "Jules",
          "lastName": "Jackson"
        }
      }
    },
    "foreignID": "your-correlation-id"
  }'\

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
const moov = new Moov(credentialsObject);

const accountPayload = {  
  accountType: "individual",
  profile: {
    individual: {
      email: "julesjacksonyoga@moov.io",
      name: {
        firstName: "Jules",
        lastName: "Jackson"
      }
    }
  },
  foreignID: "your-correlation-id"
};

const account = await moov.accounts.create(accountPayload);

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
const moov = Moov(token);

const accountPayload = {  
  accountType: "individual",
  profile: {
    individual: {
      email: "julesjacksonyoga@moov.io",
      name: {
        firstName: "Jules",
        lastName: "Jackson"
      }
    }
  },
  foreignID: "your-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.

1
<moov-onboarding></moov-onboarding>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// 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 = ["transfers", "send-funds", "wallet"];

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

1
2
3
4
5
6
7
8
9
curl -X POST "https://api.moov.io/accounts/{accountID}/capabilities" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "capabilities": [
      "transfers",
      "send-funds",
      "wallet"
    ]
  }'\

Request capabilities reference

1
2
3
4
5
6
7
8
9
mc, _ := moov.NewClient()

mc.RequestCapabilities(ctx, account.AccountID,
  []moov.CapabilityName{
    moov.CapabilityName_Transfers,
    moov.CapabilityName_SendFunds,
    moov.CapabilityName_Wallet,
  },
)

Request capabilities reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
const moov = new Moov(credentialsObject);

const accountID = "accountID";
const capabilities = [
  "transfers",
  "send-funds",
  "wallet"
];

const response = await moov.capabilities.requestCapabilities(accountID, capabilities);

Request capabilities reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
const moov = Moov(token);

const accountID = "accountID";
const capabilities = [
  "transfers",
  "send-funds",
  "wallet"
];

moov.accounts.capabilities.request({accountID, capabilities});

Send platform agreement to individual

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.

Generate token reference and update account reference

1
2
3
# Get the terms of service token
curl -X GET "https://api.moov.io/tos-token" \
  -H "Authorization: Bearer {token}" \
1
2
3
4
5
6
7
8
9
# Send the token when patching the account
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "termsOfService": {
      "token": "terms-of-service-token"
    },
    "foreignID": "your-correlation-id"
  }'\

Update account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
  -H "Authorization: Bearer {token}" \
  --data-raw '{
    "termsOfService": {
      "acceptedDate": "accepted-date",
      "acceptedIP": "accepted-ip",
      "acceptedUserAgent": "accepted-user-agent",
      "acceptedDomain": "accepted-domain"
    },
    "foreignID": "your-correlation-id"
  }'\

Terms of Service Drop reference

1
<moov-terms-of-service></moov-terms-of-service>
1
2
3
4
5
// Get the terms of service Drop
const termsOfService = document.querySelector("moov-terms-of-service");

// Provide the token
termsOfService.token = "eyjh...";

Create individual account full example

You can consolidate steps 1 through 3 using the create account POST endpoint. The below example includes all the fields you can send to Moov in one step when creating an individual account.

Any additional verification and underwriting requirements will be listed in the Dashboard.

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
curl -X POST "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}" \
  -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": "your-correlation-id",
  "metadata": {
    "property1": "string",
    "property2": "string"
  },
  "mode": "production",
  "settings": {
    "cardPayment": {
      "statementDescriptor": "Jules Jackson"
    }
  },
  "termsOfService": {
    "token": "kgT1uxoMAk7QKuyJcmQE8nqW_HjpyuXBabiXPi6T83fUQoxsyWYPcYzuHQTqrt7YRp4gCwyDQvb6U5REM9Pgl2EloCe35t-eiMAbUWGo3Kerxme6aqNcKrP_6-v0MTXViOEJ96IBxPFTvMV7EROI2dq3u4e-x4BbGSCedAX-ViAQND6hcreCDXwrO6sHuzh5Xi2IzSqZHxaovnWEboaxuZKRJkA3dsFID6fzitMpm2qrOh4"
  },
}'\

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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: "your-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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
const moov = new Moov(credentialsObject);

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: "your-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);

Create account reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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: "your-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 you’ve successfully created accounts, the next step is to link a funding source like a card or bank account so you can start moving money.

Summary Beta