# Create a business account

> Create a business Moov account with the API, SDKs, Moov.js, or onboarding Drop. Request capabilities, send the platform agreement, and add representatives.

> AI agents: search and read all Moov docs with the docs MCP server at https://docs.moov.io/mcp (no API key). Setup: https://docs.moov.io/guides/developer-tools/mcp-ai/docs-mcp/index.md

Create a business Moov account step by step with the API, SDKs, Moov.js, or the onboarding Drop.

Before you start, review [create accounts](/guides/accounts/create-accounts/index.md) for address restrictions and how to get an access token if you're using the onboarding Drop. Sole proprietors are created as business accounts.

The examples below break up all the small tasks needed to create a business Moov account. When using the API, SDKs, or Moov.js, steps 1-3 *can* be consolidated into one request. See the [full example](#full-example) for details.

## Create business 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.

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

For card acceptance, if a dedicated customer support phone number is not provided with the business account details, the business phone number may be displayed in the statement descriptor instead. As a best practice, include a dedicated customer support number.

**cURL**

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

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

**Go SDK**

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

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

**Moov.js**

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

```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**

Onboarding Drop [reference](/moovjs/drops/onboarding/index.md)

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-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 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/index.md).

**cURL**

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

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

**Go SDK**

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

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

**Moov.js**

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

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

Record the business's acceptance of Moov's platform agreement with the [terms of service Drop](/moovjs/drops/terms-of-service/index.md) (easiest), a token, or manual entry. The [platform agreement](/guides/accounts/requirements/platform-agreement/index.md) guide explains each option and who can use the API flows.

**Terms of service Drop**

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

```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...";
```

**Token**

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

```zsh
# 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"
```

```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: v2026.07.00" \
  --data-raw '{
    "termsOfService": {
      "token": "terms-of-service-token"
    },
    "foreignID": "unique-correlation-id"
  }'
```

**Manual**

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

```zsh
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"
  }'
```

## Create representatives

Add at least one controller and every owner with ≥25% ownership (up to 7 representatives). See [business representatives](/guides/accounts/requirements/business-representatives/index.md) for who qualifies and what data each one needs.

**cURL**

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

```zsh
curl -X POST "https://api.moov.io/accounts/{accountID}/representatives" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2026.07.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"
    }
  }'
```

**Go SDK**

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

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

**Moov.js**

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

```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 representative = await moov.accounts.representatives.create({
  accountID,
  representative: 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.

**cURL**

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

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

**Go SDK**

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

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

var accountID string

update := moov.PatchAccount{
  ForeignID: "unique-correlation-id",
  Profile: moov.PatchProfile{
    Business: &moov.PatchBusinessProfile{
      OwnersProvided: true,
    },
  },
}

mc.PatchAccount(ctx, accountID, update)
```

**Moov.js**

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

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

moov.accounts.patch({
  accountID: "accountID",
  profile: {
    business: {
      ownersProvided: true
    }
  },
  foreignID: "unique-correlation-id"
});
```

## Complete verification and underwriting

Depending on the account and capabilities requested, Moov might require additional [verification](/guides/accounts/requirements/identity-verification/index.md) and [underwriting](/guides/accounts/requirements/underwriting/index.md). Outstanding items appear in the [Dashboard](https://dashboard.moov.io/signin) and in each capability's `requirements.currentlyDue`. [Check capability status](/guides/accounts/capabilities/enablement/index.md#check-capability-status) until each capability is `enabled`, and use [troubleshoot capabilities](/guides/accounts/capabilities/troubleshoot/index.md) to fix errors.

## Full example

You can consolidate steps 1 through 3 using the create account `POST` [endpoint](/api/moov-accounts/accounts/create/index.md). The example below includes all the fields you can send to Moov in one step when creating a business account. After creating the account, you still need to add representatives and confirm beneficial owners (steps 4 and 5).

Any additional [verification](/guides/accounts/requirements/identity-verification/index.md) and [underwriting](/guides/accounts/requirements/underwriting/index.md) requirements appear in the [Dashboard](https://dashboard.moov.io/signin) and in each capability's `requirements.currentlyDue`. See [check capability status](/guides/accounts/capabilities/enablement/index.md#check-capability-status).

**cURL**

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

```zsh
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": "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"
  }
}'
```

**Go SDK**

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

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

**Moov.js**

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

```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);
```

## Next steps

After the account is created, optionally [connect it to your account](/guides/accounts/create-accounts/index.md#create-an-account-connection), then link a [source](/guides/sources/index.md) like a bank account or card so it can start moving money.

