# 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](/guides/accounts/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](/moovjs/drops/onboarding/).

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](/guides/accounts/capabilities/) and [requirements](/guides/accounts/requirements/). A full example is provided at the end of each section.

## [Get access token](#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.

[cURL](#tab-947628513-2-0)

```zsh
curl -X POST "https://api.moov.io/oauth2/token" \
  -u "PUBLIC_KEY:PRIVATE_KEY" \
  -H "Origin: https://your-domain.com" \
  --data '{
    "grant_type":"client_credentials",
    "client_id":"5clTR_MdVrrkgxw2",
    "client_secret":"dNC-hg7sVm22jc3g_Eogtyu0_1Mqh_4-",
    "scope":"/accounts.write",
    "refresh_token":"i1qxz68gu50zp4i8ceyxqogmq7y0yienm52351c6..."
  }'\
```

> **Note:** Replace `https://your-domain.com` with scheme and domain only (no path) matching a domain registered in your API key's allowed domain list in the Dashboard under **Developers → API keys**. Even if you have multiple domains registered, set only one — the one the current request originates from. `localhost` is not an accepted domain. Failure to set the header correctly will cause subsequent API calls made with the token to fail with a 401.

## [Business account](#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](/guides/accounts/create-accounts/#create-business-account-full-example) for details.

### [Create business account](#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.

Sole proprietors must be created via the business profile with `businessType.soleProprietorship`.

[cURL](#tab-163852947-0-0) [Go SDK](#tab-163852947-0-1) [Moov.js](#tab-163852947-0-2) [Onboarding Drop](#tab-163852947-0-3)

Create account [reference](/api/moov-accounts/accounts/create/)

```zsh
curl -X POST "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "accountType": "business",
    "profile": {
      "business": {
        "legalBusinessName": "Whole Body Fitness LLC",
        "businessType": "llc",
        "website": "wbfllc.com"
      }
    },
    "foreignId": "unique-correlation-id"
  }'\
```

Create account [reference](/api/moov-accounts/accounts/create/)

```go
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](/api/moov-accounts/accounts/create/)

```javascript
const moov = Moov(token);

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

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

Onboarding Drop [reference](/moovjs/drops/onboarding/)

With the onboarding Drop, you request capabilities when creating an account. After this step, you can jump ahead to [step 4](#send-platform-agreement-to-business).

```html
<moov-onboarding></moov-onboarding>
```

```javascript
// 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", "collect-funds.ach"];

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

### [Request capabilities for business](#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](/api/moov-accounts/accounts/list/).

[cURL](#tab-379412658-0-0) [Go SDK](#tab-379412658-0-1) [Moov.js](#tab-379412658-0-2)

Request capabilities [reference](/api/moov-accounts/capabilities/post/)

```zsh
curl -X POST "https://api.moov.io/accounts/{accountID}/capabilities" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "capabilities": [
      "transfers", 
      "send-funds.ach", 
      "collect-funds.ach", 
      "wallet.balance"
    ]
  }'\
```

Request capabilities [reference](/api/moov-accounts/capabilities/post/)

```go
mc, _ := moov.NewClient()

var accountID string

mc.RequestCapabilities(ctx, accountID,
  []moov.CapabilityName{
    moov.CapabilityName_Transfers,
    moov.CapabilityName_SendFundsACH,
    moov.CapabilityName_CollectFundsACH,
    moov.Capability_NameWalletBalance,
  },
)
```

Request capabilities [reference](/api/moov-accounts/capabilities/post/)

```javascript
const moov = Moov(token);

const accountID = "accountID";
const capabilities = [
  "send-funds.ach", 
  "collect-funds.ach"
];

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

### [Send platform agreement to business](#send-platform-agreement-to-business)

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](/moovjs/drops/terms-of-service/).

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.

[Terms of service Drop](#tab-593764128-0-0) [Token](#tab-593764128-0-1) [Manual](#tab-593764128-0-2)

Terms of Service Drop [reference](/moovjs/drops/terms-of-service/)

```html
<moov-terms-of-service></moov-terms-of-service>
```

```javascript
// Get the terms of service Drop
const termsOfService = document.querySelector("moov-terms-of-service");

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

Generate token [reference](/api/moov-accounts/accounts/get-tos/) and update account [reference](/api/moov-accounts/accounts/patch/)

```zsh
# Get the terms of service token
curl -X GET "https://api.moov.io/tos-token" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
```

```zsh
# Send the token when patching the account
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "termsOfService": {
      "token": "terms-of-service-token"
    },
    "foreignID": "unique-correlation-id"
  }'\
```

Update account [reference](/api/moov-accounts/accounts/patch/)

```zsh
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "termsOfService": {
      "manual": {
        "acceptedDate": "accepted-date",
        "acceptedIP": "accepted-ip",
        "acceptedUserAgent": "accepted-user-agent",
        "acceptedDomain": "accepted-domain"
      }
    },
    "foreignID": "unique-correlation-id"
  }'\
```

### [Create representatives](#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.

[cURL](#tab-153264789-0-0) [Go SDK](#tab-153264789-0-1) [Moov.js](#tab-153264789-0-2)

Add a representative [reference](/api/moov-accounts/representatives/create/)

```zsh
curl -X POST "https://api.moov.io/accounts/{accountID}/representatives" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
  --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](/api/moov-accounts/representatives/create/)

```go
mc, _ := moov.NewClient()

var accountID string

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

Add a representative [reference](/api/moov-accounts/representatives/create/)

```javascript
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-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.

[cURL](#tab-683179254-0-0) [Go SDK](#tab-683179254-0-1) [Moov.js](#tab-683179254-0-2)

Update account [reference](/api/moov-accounts/accounts/patch/)

```zsh
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "profile": {
      "business": {
        "ownersProvided": true
      }
    },
    "foreignId": "unique-correlation-id"
  }'\
```

Update account [reference](/api/moov-accounts/accounts/patch/)

```go
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](/api/moov-accounts/accounts/patch/)

```javascript
const moov = Moov(token);

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

moov.accounts.update(accountID, updatedAccount);
```

### [Additional underwriting and verification](#additional-underwriting-and-verification)

Depending on the account and capabilities requested, Moov might require additional [verification](/guides/accounts/requirements/identity-verification/) and [underwriting](/guides/accounts/requirements/underwriting/). You will receive alerts for any missing data in the [Dashboard](https://dashboard.moov.io/signin).

### [Create business account full example](#create-business-account-full-example)

You can consolidate steps 2 through 4 using the create account `POST` [endpoint](/api/moov-accounts/accounts/create/). 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](/guides/accounts/requirements/identity-verification/) and [underwriting](/guides/accounts/requirements/underwriting/) requirements will be listed in the [Dashboard](https://dashboard.moov.io/signin).

[cURL](#tab-674183529-4-0) [Go SDK](#tab-674183529-4-1) [Moov.js](#tab-674183529-4-2)

Create account [reference](/api/moov-accounts/accounts/create/)

```zsh
curl -X POST "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
  -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": [
    "send-funds.ach", 
    "collect-funds.ach"
  ],
  "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_HjpyuXBabiXPi6T83fUKRJkA3dsFID6fzitMpm2qrOh4"
  }
}'\
```

Create account [reference](/api/moov-accounts/accounts/create/)

```go
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_SendFundsACH,
    moov.CapabilityName_CollectFundsACH,
  },
  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](/api/moov-accounts/accounts/create/)

```javascript
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: [
    "send-funds.ach", 
    "collect-funds.ach"
  ],
  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"
  },
};

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

## [Individual account](#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](/guides/accounts/create-accounts/#create-individual-account-full-example) for details.

Sole proprietors need to be created with a [business account](#business-account).

### [Create individual account](#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.

[cURL](#tab-627195483-0-0) [Go SDK](#tab-627195483-0-1) [Moov.js](#tab-627195483-0-2) [Onboarding Drop](#tab-627195483-0-3)

Create account [reference](/api/moov-accounts/accounts/create/)

```zsh
curl -X POST "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "accountType": "individual",
    "profile": {
      "individual": {
        "email": "julesjacksonyoga@moov.io",
        "name": {
          "firstName": "Jules",
          "lastName": "Jackson"
        }
      }
    },
    "foreignID": "unique-correlation-id"
  }'\
```

Create account [reference](/api/moov-accounts/accounts/create/)

```go
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](/api/moov-accounts/accounts/create/)

```javascript
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](/moovjs/drops/onboarding/)

With the onboarding Drop, you request capabilities when creating an account. After this step, you can jump ahead to [step 3](#send-platform-agreement-to-individual).

```html
<moov-onboarding></moov-onboarding>
```

```javascript
// 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-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](/api/moov-accounts/accounts/list/).

[cURL](#tab-381249576-0-0) [Go SDK](#tab-381249576-0-1) [Moov.js](#tab-381249576-0-2)

Request capabilities [reference](/api/moov-accounts/capabilities/post/)

```zsh
curl -X POST "https://api.moov.io/accounts/{accountID}/capabilities" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "capabilities": [
      "send-funds.ach"
    ]
  }'\
```

Request capabilities [reference](/api/moov-accounts/capabilities/post/)

```go
mc, _ := moov.NewClient()

var accountID string

mc.RequestCapabilities(ctx, accountID,
  []moov.CapabilityName{
    moov.CapabilityName_Transfers,
    moov.CapabilityName_SendFundsACH,
    moov.Capability_NameWalletBalance,
  },
)
```

Request capabilities [reference](/api/moov-accounts/capabilities/post/)

```javascript
const moov = Moov(token);

const accountID = "accountID";
const capabilities = [
  "send-funds.ach"
];

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

### [Send platform agreement to individual](#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**.

[Token](#tab-845921763-0-0) [Manual](#tab-845921763-0-1) [Terms of service Drop](#tab-845921763-0-2)

Generate token [reference](/api/moov-accounts/accounts/get-tos/) and update account [reference](/api/moov-accounts/accounts/patch/)

```zsh
# Get the terms of service token
curl -X GET "https://api.moov.io/tos-token" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
```

```zsh
# Send the token when patching the account
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "termsOfService": {
      "token": "terms-of-service-token"
    },
    "foreignID": "unique-correlation-id"
  }'\
```

Update account [reference](/api/moov-accounts/accounts/patch/)

```zsh
curl -X PATCH "https://api.moov.io/accounts/{accountID}" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.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](/moovjs/drops/terms-of-service/)

```html
<moov-terms-of-service></moov-terms-of-service>
```

```javascript
// 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](#create-individual-account-full-example)

You can consolidate steps 1 through 3 using the create account `POST` [endpoint](/api/moov-accounts/accounts/create/). The below example includes all the fields you can send to Moov in one step when creating an individual account.

Any additional [verification](/guides/accounts/requirements/identity-verification/) and [underwriting](/guides/accounts/requirements/underwriting/) requirements will be listed in the [Dashboard](https://dashboard.moov.io/signin).

[cURL](#tab-351967482-6-0) [Go SDK](#tab-351967482-6-1) [Moov.js](#tab-351967482-6-2)

Create account [reference](/api/moov-accounts/accounts/create/)

```zsh
curl -X POST "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.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](/api/moov-accounts/accounts/create/)

```go
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](/api/moov-accounts/accounts/create/)

```javascript
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](#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.

[Funding sources](/guides/sources/)

[Move money](/guides/money-movement/)
