# Create an account

You can create business or individual accounts for your users (i.e., customers, merchants) by passing the required information to Moov. Requirements differ per account type and requested [capabilities](https://docs.moov.io/guides/accounts/capabilities/reference/).

The `transfers` capability is automatically requested for every account. If you request any capability beyond `transfers` (for example, `send-funds.ach`, `collect-funds.card-payments`), you'll need to:

- Send Moov the user's [platform terms of service agreement](https://docs.moov.io/guides/accounts/requirements/platform-agreement/) acceptance. This can be done at account creation, or by [patching](https://docs.moov.io/api/moov-accounts/accounts/patch/) the account using the `termsOfService` field.
- Fulfill the [verification and underwriting requirements](https://docs.moov.io/guides/accounts/requirements/) for each requested capability. A capability isn't enabled until its requirements pass — check the capability's status to see what's still outstanding.

If you're creating a business account, depending on the business type, you'll also need to:

- Provide [business representatives](https://docs.moov.io/api/moov-accounts/representatives/) after creating the account.
- [Patch](https://docs.moov.io/api/moov-accounts/accounts/patch/) the account to indicate that business representative ownership information is complete.

Visit our documentation to read more about [creating accounts](https://docs.moov.io/guides/accounts/create-accounts/) and [verification requirements](https://docs.moov.io/guides/accounts/requirements/identity-verification/). Note that the `mode` field (for production or sandbox) is only required when creating a Partner account. All other account requests will ignore the mode field and be set to the calling Partner account's mode.

To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/) you'll need to specify the `/accounts.write` scope.

POST

/accounts

Ask

```shell
curl -X POST "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}" \
  -H "X-Moov-Version: v2026.04.00" \
  -d '{
  "accountType": "business",
  "profile": {
    "business": {
      "businessType": "llc",
      "legalBusinessName": "Whole Body Fitness LLC",
      "website": "wbfllc.com"
    }
  }
}'
```

Ask

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

Ask

```typescript
import { Moov } from "@moovio/sdk";

const moov = new Moov({
  security: {
    username: "",
    password: "",
  },
});

async function run() {
  const result = await moov.accounts.create({
    accountType: "business",
    profile: {
      business: {
        legalBusinessName: "Whole Body Fitness LLC",
      },
    },
  });

console.log(result);
}

run();
```

Ask

```php
declare(strict_types=1);

require 'vendor/autoload.php';

use Moov\MoovPhp;
use Moov\MoovPhp\Models\Components;

$sdk = MoovPhp\Moov::builder()
    ->setSecurity(
        new Components\Security(
            username: '',
            password: '',
        )
    )
    ->build();

$request = new Components\CreateAccount(
    accountType: Components\CreateAccountType::Business,
    profile: new Components\CreateProfile(
        business: new Components\CreateBusinessProfile(
            legalBusinessName: 'Whole Body Fitness LLC',
        ),
    ),
);

$response = $sdk->accounts->create(
    request: $request
);

if ($response->account !== null) {
    // handle response
}
```

Ask

```java
package hello.world;

import io.moov.sdk.Moov;
import io.moov.sdk.models.components.*;
import io.moov.sdk.models.errors.CreateAccountError;
import io.moov.sdk.models.errors.GenericError;
import io.moov.sdk.models.operations.CreateAccountResponse;
import java.lang.Exception;

public class Application {

public static void main(String[] args) throws GenericError, CreateAccountError, Exception {

Moov sdk = Moov.builder()
                .security(Security.builder()
                    .username("")
                    .password("")
                    .build())
            .build();

CreateAccount req = CreateAccount.builder()
                .accountType(CreateAccountType.BUSINESS)
                .profile(CreateProfile.builder()
                    .business(CreateBusinessProfile.builder()
                        .legalBusinessName("Whole Body Fitness LLC")
                        .build())
                    .build())
                .build();

CreateAccountResponse res = sdk.accounts().create()
                .request(req)
                .call();

if (res.account().isPresent()) {
            System.out.println(res.account().get());
        }
    }
}
```

Ask

```python
from moovio_sdk import Moov
from moovio_sdk.models import components
from moovio_sdk.utils import parse_datetime

with Moov(
    security=components.Security(
        username="",
        password="",
    ),
) as moov:

res = moov.accounts.create(account_type=components.CreateAccountType.BUSINESS, profile=components.CreateProfile(
        business=components.CreateBusinessProfile(
            legal_business_name="Whole Body Fitness LLC",
        ),
    ), metadata={
        "optional": "metadata",
    }, terms_of_service={
        "manual": {
            "accepted_date": parse_datetime("2026-07-27T08:57:17.388Z"),
            "accepted_ip": "2001:db8::1",
            "accepted_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36",
            "accepted_domain": "https://rundown-depot.org/",
        },
    }, customer_support={
        "phone": {
            "number": "8185551212",
            "country_code": "1",
        },
        "email": "jordan.lee@classbooker.dev",
        "address": {
            "address_line1": "123 Main Street",
            "address_line2": "Apt 302",
            "city": "Boulder",
            "state_or_province": "CO",
            "postal_code": "80301",
            "country": "US",
        },
    }, settings={
        "card_payment": {
            "statement_descriptor": "Whole Body Fitness",
        },
        "ach_payment": {
            "company_name": "WholeBodyFitness",
        },
    }, capabilities=[
        components.CapabilityID.COLLECT_FUNDS_CARD_PAYMENTS,
        components.CapabilityID.SEND_FUNDS_ACH,
    ], mode=components.Mode.PRODUCTION)

# Handle response
    print(res)
```

Ask

```ruby
require 'moov_ruby'

Models = ::Moov::Models
s = ::Moov::Client.new(
  security: Models::Components::Security.new(
    username: '',
    password: ''
  )
)

req = Models::Components::CreateAccount.new(
  account_type: Models::Components::CreateAccountType::BUSINESS,
  profile: Models::Components::CreateProfile.new(
    business: Models::Components::CreateBusinessProfile.new(
      legal_business_name: 'Whole Body Fitness LLC'
    )
  )
)
res = s.accounts.create(request: req)

unless res.account.nil?
  # handle response
end
```

Ask

```csharp
using Moov.Sdk;
using Moov.Sdk.Models.Components;

var sdk = new MoovClient(security: new Security() {
    Username = "",
    Password = "",
});

CreateAccount req = new CreateAccount() {
    AccountType = CreateAccountType.Business,
    Profile = new CreateProfile() {
        Business = new CreateBusinessProfile() {
            LegalBusinessName = "Whole Body Fitness LLC",
        },
    },
};

var res = await sdk.Accounts.CreateAsync(req);

// handle response
```

The request completed successfully.

Ask
Example

```json
{
  "accountID": "53ca67ea-6fd3-423f-9544-ce2404159d33",
  "accountType": "business",
  "createdOn": "2024-12-16T17:55:20.557151867Z",
  "displayName": "Whole Body Fitness LLC",
  "mode": "sandbox",
  "profile": {
    "business": {
      "legalBusinessName": "Whole Body Fitness LLC",
      "ownersProvided": false
    }
  },
  "settings": {
    "achPayment": {
      "companyName": "Whole Body Fitne"
    },
    "cardPayment": {
      "statementDescriptor": "Whole Body Fitness LLC"
    }
  },
  "updatedOn": "2024-12-16T17:55:20.557151867Z",
  "verification": {
    "status": "unverified",
    "verificationStatus": "unverified"
  }
}
```

### Response headers

A unique identifier used to trace requests.

The server could not understand the request due to invalid syntax.

Ask
Example

```json
{
  "error": "string"
}
```

### Response headers

A unique identifier used to trace requests.

The request contained missing or expired authentication.
