--- title: "Create account (v3)" slug: "create-account-v3" updated: 2026-07-09T07:00:03Z published: 2026-07-09T07:00:03Z canonical: "docs.xendit.co/create-account-v3" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.xendit.co/llms.txt > Use this file to discover all available pages before exploring further. # Create account (v3) Post/v3/accounts Creates a new sub-account linked to your master account. The v3 Accounts API provides richer sub-account management with explicit identity and configuration options. It supersedes the v2 `/v2/accounts` endpoint. **Key changes from v2:** - `email` is now required on create - Sub-account identity (country + entity type) is now required on create - `configuration` replaces `configurations` with a new shape - Webhook recipient values changed: `MASTER` → `MASTER_ACCOUNT`, `SUB` → `SUB_ACCOUNT` - Response includes `identity` and `configuration` objects instead of top-level `legal_name` / `country_of_incorporation` The API key used for the request determines which master account the sub-account is linked to — you do not need to pass a business ID or environment mode explicitly. > Use an API key with **Account Write** permission to perform this request. **Country of incorporation** By default, `identity.country_of_incorporation` must match your master account's country of operation. Cross-country sub-accounts are only allowed if explicitly enabled for your account — contact your account manager to enable this. **Entity types by country** Available `identity.entity_type` values depend on `identity.country_of_incorporation`: | Country | Available entity types | | --- | --- | | ID | `CORPORATION`, `SOLE_PROPRIETORSHIP`, `PARTNERSHIP`, `NON_PROFIT`, `INDIVIDUAL`, `COOPERATIVE` | | PH | `CORPORATION`, `SOLE_PROPRIETORSHIP`, `PARTNERSHIP`, `INDIVIDUAL`, `ONE_PERSON_CORPORATION` | | VN | `CORPORATION`, `SOLE_PROPRIETORSHIP`, `PARTNERSHIP`, `LIMITED_LIABILITY_COMPANY` | | TH | `CORPORATION`, `PARTNERSHIP`, `NON_PROFIT`, `INDIVIDUAL` | | MY | `CORPORATION`, `SOLE_PROPRIETORSHIP`, `PARTNERSHIP`, `NON_PROFIT` | | SG | `CORPORATION`, `PARTNERSHIP` | | HK | `CORPORATION`, `PARTNERSHIP` | | MX | `CORPORATION`, `SOLE_PROPRIETORSHIP`, `PARTNERSHIP`, `NON_PROFIT` | Any other country of incorporation follows the SG entity type list. **Test mode restrictions** When using a Test API key, the following constraints apply: | Field | Restriction | | --- | --- | | `identity.entity_type` | Must be `CORPORATION` | | `identity.country_of_incorporation` | Must match your master account's country | | `configuration.users.send_email_invite` | Must be `false` or omitted | | `configuration.webhooks.recipient` | Must be `MASTER_ACCOUNT` or omitted | Sub-accounts created in Test mode are provisioned immediately with status `LIVE`, and their `identity` and `configuration` are returned with default values. They are only available in Test mode and will never go live. SecurityHTTPType basic Body parametersCorporation (SG) ```json { "name": "Acme Corp", "email": "owner@acme.com", "identity": { "country_of_incorporation": "SG", "entity_type": "CORPORATION" }, "configuration": { "users": { "send_email_invite": true }, "webhooks": { "recipient": "MASTER_ACCOUNT" } } } ``` Minimal request (ID, defaults) The entire `configuration` block is optional for every entity type. When omitted, no email invite is sent (`send_email_invite: false`) and webhooks default to `MASTER_ACCOUNT`. ```json { "name": "Toko Berkah", "email": "owner@tokoberkah.co.id", "identity": { "country_of_incorporation": "ID", "entity_type": "INDIVIDUAL" } } ``` Test mode With a Test API key, `entity_type` must be `CORPORATION`, the country must match your master account's country, and `configuration` must be omitted or use the default values. ```json { "name": "Acme Corp (Test)", "email": "owner@acme.com", "identity": { "country_of_incorporation": "SG", "entity_type": "CORPORATION" } } ``` Expand Allobject namestring Required Sub-account display name emailstring (email) Required Email address for the sub-account owner. This becomes the sub-account's default email address, and is the first email to receive the invitation (when `configuration.users.send_email_invite` is `true`) to access the dashboard and continue filling in the sub-account's KYC information. identity The legal identity of the sub-account's business. `country_of_incorporation` is an ISO 3166-1 alpha-2 country code. It must match your master account's country of operation unless cross-country sub-accounts are explicitly enabled for your account. The available `entity_type` values depend on `country_of_incorporation` — see the per-country variants below. Any country not listed follows the Singapore (SG) entity type list. OneOfIndonesia (ID)object (Indonesia (ID))country_of_incorporationstring RequiredValid values[ "ID" ] entity_typestring RequiredValid values[ "CORPORATION", "SOLE_PROPRIETORSHIP", "PARTNERSHIP", "NON_PROFIT", "INDIVIDUAL", "COOPERATIVE" ] Philippines (PH)object (Philippines (PH))country_of_incorporationstring RequiredValid values[ "PH" ] entity_typestring RequiredValid values[ "CORPORATION", "SOLE_PROPRIETORSHIP", "PARTNERSHIP", "INDIVIDUAL", "ONE_PERSON_CORPORATION" ] Vietnam (VN)object (Vietnam (VN))country_of_incorporationstring RequiredValid values[ "VN" ] entity_typestring RequiredValid values[ "CORPORATION", "SOLE_PROPRIETORSHIP", "PARTNERSHIP", "LIMITED_LIABILITY_COMPANY" ] Thailand (TH)object (Thailand (TH))country_of_incorporationstring RequiredValid values[ "TH" ] entity_typestring RequiredValid values[ "CORPORATION", "PARTNERSHIP", "NON_PROFIT", "INDIVIDUAL" ] Malaysia (MY)object (Malaysia (MY))country_of_incorporationstring RequiredValid values[ "MY" ] entity_typestring RequiredValid values[ "CORPORATION", "SOLE_PROPRIETORSHIP", "PARTNERSHIP", "NON_PROFIT" ] Singapore (SG)object (Singapore (SG))country_of_incorporationstring RequiredValid values[ "SG" ] entity_typestring RequiredValid values[ "CORPORATION", "PARTNERSHIP" ] Hong Kong (HK)object (Hong Kong (HK))country_of_incorporationstring RequiredValid values[ "HK" ] entity_typestring RequiredValid values[ "CORPORATION", "PARTNERSHIP" ] Mexico (MX)object (Mexico (MX))country_of_incorporationstring RequiredValid values[ "MX" ] entity_typestring RequiredValid values[ "CORPORATION", "SOLE_PROPRIETORSHIP", "PARTNERSHIP", "NON_PROFIT" ] configurationobject (AccountConfigurationV3) Optional behaviour configuration for the sub-account usersobject send_email_inviteboolean Required If `true`, sends an email invitation to `email` on account creation so the owner can access the sub-account dashboard and continue filling in the sub-account's KYC information. Available for every entity type. Only applies in Live mode. Defaultfalse webhooksobject recipientstring Required Where webhooks for the sub-account's transactions are delivered: - `MASTER_ACCOUNT` — webhooks are sent to the URLs configured in the master account's settings (default) - `SUB_ACCOUNT` — webhooks are sent to the URLs configured in the sub-account's own settings Valid values[ "MASTER_ACCOUNT", "SUB_ACCOUNT" ]Default"MASTER_ACCOUNT" Responses200 Sub-account created successfully. Returns a Sub-Account V3 object. Corporation (SG) ```json { "id": "5cafeb170a2b18519b1b8761", "name": "Acme Corp", "email": "owner@acme.com", "status": "REGISTERED", "identity": { "country_of_incorporation": "SG", "entity_type": "CORPORATION" }, "configuration": { "users": { "send_email_invite": true }, "webhooks": { "recipient": "MASTER_ACCOUNT" } }, "created_at": "2026-07-07T10:00:00Z", "updated_at": "2026-07-07T10:00:00Z" } ``` Minimal request (ID, defaults) ```json { "id": "5cafeb170a2b18519b1b8762", "name": "Toko Berkah", "email": "owner@tokoberkah.co.id", "status": "REGISTERED", "identity": { "country_of_incorporation": "ID", "entity_type": "INDIVIDUAL" }, "configuration": { "users": { "send_email_invite": false }, "webhooks": { "recipient": "MASTER_ACCOUNT" } }, "created_at": "2026-07-07T10:00:00Z", "updated_at": "2026-07-07T10:00:00Z" } ``` Test mode Test mode sub-accounts are provisioned immediately with status `LIVE`, and `identity` and `configuration` are returned with default values. ```json { "id": "5cafeb170a2b18519b1b8763", "name": "Acme Corp (Test)", "email": "owner@acme.com", "status": "LIVE", "identity": { "country_of_incorporation": "SG", "entity_type": "CORPORATION" }, "configuration": { "users": { "send_email_invite": false }, "webhooks": { "recipient": "MASTER_ACCOUNT" } }, "created_at": "2026-07-07T10:00:00Z", "updated_at": "2026-07-07T10:00:00Z" } ``` Expand Allobject A Sub-Account V3 object idstring ID of the sub-account. Use this in the `for-user-id` header to create transactions on behalf of the sub-account. Example5cafeb170a2b18519b1b8761 namestring Sub-account display name emailstring (email) Email address of the sub-account owner statusstring Status of the sub-account. Sub-accounts created in Test mode always report `LIVE`. Valid values[ "REGISTERED", "AWAITING_DOCS", "PENDING_VERIFICATION", "AWAITING_RESUBMISSION", "LIVE", "DECLINED", "DORMANT", "SUSPENDED", "CLOSED" ] identity The legal identity of the sub-account's business. `country_of_incorporation` is an ISO 3166-1 alpha-2 country code. It must match your master account's country of operation unless cross-country sub-accounts are explicitly enabled for your account. The available `entity_type` values depend on `country_of_incorporation` — see the per-country variants below. Any country not listed follows the Singapore (SG) entity type list. OneOfIndonesia (ID)object (Indonesia (ID))country_of_incorporationstring Valid values[ "ID" ] entity_typestring Valid values[ "CORPORATION", "SOLE_PROPRIETORSHIP", "PARTNERSHIP", "NON_PROFIT", "INDIVIDUAL", "COOPERATIVE" ] Philippines (PH)object (Philippines (PH))country_of_incorporationstring Valid values[ "PH" ] entity_typestring Valid values[ "CORPORATION", "SOLE_PROPRIETORSHIP", "PARTNERSHIP", "INDIVIDUAL", "ONE_PERSON_CORPORATION" ] Vietnam (VN)object (Vietnam (VN))country_of_incorporationstring Valid values[ "VN" ] entity_typestring Valid values[ "CORPORATION", "SOLE_PROPRIETORSHIP", "PARTNERSHIP", "LIMITED_LIABILITY_COMPANY" ] Thailand (TH)object (Thailand (TH))country_of_incorporationstring Valid values[ "TH" ] entity_typestring Valid values[ "CORPORATION", "PARTNERSHIP", "NON_PROFIT", "INDIVIDUAL" ] Malaysia (MY)object (Malaysia (MY))country_of_incorporationstring Valid values[ "MY" ] entity_typestring Valid values[ "CORPORATION", "SOLE_PROPRIETORSHIP", "PARTNERSHIP", "NON_PROFIT" ] Singapore (SG)object (Singapore (SG))country_of_incorporationstring Valid values[ "SG" ] entity_typestring Valid values[ "CORPORATION", "PARTNERSHIP" ] Hong Kong (HK)object (Hong Kong (HK))country_of_incorporationstring Valid values[ "HK" ] entity_typestring Valid values[ "CORPORATION", "PARTNERSHIP" ] Mexico (MX)object (Mexico (MX))country_of_incorporationstring Valid values[ "MX" ] entity_typestring Valid values[ "CORPORATION", "SOLE_PROPRIETORSHIP", "PARTNERSHIP", "NON_PROFIT" ] configurationobject (AccountConfigurationV3) Optional behaviour configuration for the sub-account usersobject send_email_inviteboolean If `true`, sends an email invitation to `email` on account creation so the owner can access the sub-account dashboard and continue filling in the sub-account's KYC information. Available for every entity type. Only applies in Live mode. Defaultfalse webhooksobject recipientstring Where webhooks for the sub-account's transactions are delivered: - `MASTER_ACCOUNT` — webhooks are sent to the URLs configured in the master account's settings (default) - `SUB_ACCOUNT` — webhooks are sent to the URLs configured in the sub-account's own settings Valid values[ "MASTER_ACCOUNT", "SUB_ACCOUNT" ]Default"MASTER_ACCOUNT" created_atstring (date-time) Timestamp of when the sub-account was created updated_atstring (date-time) Timestamp of when the sub-account was last updated 400 Invalid request. | Error code | Description | | --- | --- | | `API_VALIDATION_ERROR` | Inputs are failing validation — a required field is missing or malformed | | `INVALID_DATA_PROVIDED` | A field value is invalid — unsupported entity type for the given country, cross-country sub-account not allowed, or Test mode restriction violated | | `MAXIMUM_ACCOUNT_REACHED` | You have reached the Test mode sub-account limit (500). This limit does not apply in Live mode. | InvalidDataProvided ```json { "error_code": "INVALID_DATA_PROVIDED", "message": "Invalid 'identity.entity_type' provided. Check allowed entity types for the provided country." } ``` InvalidDataProvidedTestMode ```json { "error_code": "INVALID_DATA_PROVIDED", "message": "Invalid 'identity.entity_type' provided. Only CORPORATION is supported in TEST mode." } ``` MaximumAccountReached ```json { "error_code": "MAXIMUM_ACCOUNT_REACHED", "message": "You may only create 500 Accounts in TEST mode. Contact help@xendit.co if you need a higher limit" } ``` object error_codestring messagestring 401 Unauthorized. | Error code | Description | | --- | --- | | `INVALID_CREDENTIALS` | The API key is missing/invalid, or the account it belongs to is not enabled for xenPlatform | InvalidCredentials ```json { "error_code": "INVALID_CREDENTIALS", "message": "Your credentials are not valid to make this request" } ``` object error_codestring messagestring 403 Forbidden. | Error code | Description | | --- | --- | | `DISALLOWED_OPERATION` | Operation not permitted for your account | DisallowedOperation ```json { "error_code": "DISALLOWED_OPERATION", "message": "You are not authorized to create accounts" } ``` object error_codestring messagestring 404 Not found. | Error code | Description | | --- | --- | | `BUSINESS_NOT_FOUND_ERROR` | Master account not found | BusinessNotFound ```json { "error_code": "BUSINESS_NOT_FOUND_ERROR", "message": "Business not found" } ``` object error_codestring messagestring