# Simulate onboarding scenarios
You can simulate different sub-entity onboarding scenarios in the sandbox environment using the Onboarding simulator API.
You can use the Onboarding simulator API to:
- [Simulate an onboarding scenario](https://www.checkout.com/docs/platforms/for-saas/onboard-sub-entities/simulate-onboarding-scenarios.md#Simulate_an_onboarding_scenario)
- [Set a sub-entity to a specific status](https://www.checkout.com/docs/platforms/for-saas/onboard-sub-entities/simulate-onboarding-scenarios.md#Set_a_sub-entity_to_a_specific_status)
- [Flag pending requirements for a sub-entity](https://www.checkout.com/docs/platforms/for-saas/onboard-sub-entities/simulate-onboarding-scenarios.md#Flag_pending_requirements_for_a_sub-entity)
Before you start, ensure that you have [created a sub-entity](https://www.checkout.com/docs/platforms/for-saas/onboard-sub-entities/submit-application.md#Onboard_a_sub-entity). You can do this using the [Platforms API](https://api-reference.checkout.com/#tag/Platforms).
You must also [generate an access token](https://www.checkout.com/docs/developer-resources/api/manage-api-keys/oauth-2-0-client-credentials.md) for the sandbox environment.
> **Note**
>
> The Onboarding simulator API is not available in the production environment.
---
## Simulate an onboarding scenario
You can simulate one of the following onboarding scenarios for a sub-entity.
> **Information**
>
> You can also see the full list of supported scenarios by calling the [List scenarios](https://api-reference.checkout.com/#tag/Onboarding-Simulator/paths/~1simulate~1scenarios/get) endpoint. For more information, see [List all scenarios](https://www.checkout.com/docs/platforms/for-saas/onboard-sub-entities/simulate-onboarding-scenarios.md#List_all_scenarios).
| Scenario name and ID | Description |
| --- | --- |
| Happy Path
ID: `happy_path` | Simulates a successful onboarding where the sub-entity is verified without any additional checks.
- The sub-entity status changes to `active`
- No pending requirements in the `requirements_due` array |
| Missing Data
ID: `requirements_due_missing_data` | Simulates an onboarding flow where the sub-entity cannot be verified due to incomplete or missing information.
- The sub-entity status changes to `requirements_due`
- The `requirements_due` array includes the following fields:
- `company.legal_name`
- `company.business_registration_number`
- `contact_details.phone.number`
- `contact_details.email_addresses.primary` |
| Document Verification Required
ID: `requirements_due_documents` | Simulates an onboarding flow where the sub-entity cannot be verified and additional supporting documents are required.
- The sub-entity status changes to `requirements_due`
- The `requirements_due` array includes the following fields:
- `documents.company_verification`
- `documents.identity_verification`
- `documents.proof_of_principal_address` |
| Identity Verification Required
ID: `requirements_due_identity` | Simulates an onboarding flow where the sub-entity cannot be verified and additional identity information is required.
- The sub-entity status changes to `requirements_due`
- The `requirements_due` array includes the following fields:
- `company.representatives.individual.first_name`
- `company.representatives.individual.last_name`
- `company.representatives.individual.date_of_birth` |
| Address Verification Required
ID: `requirements_due_address` | Simulates an onboarding flow where the sub-entity cannot be verified and additional address details are required.
- The sub-entity status changes to `requirements_due`
- The `requirements_due` array includes the following fields:
- `company.principal_address.address_line1`
- `company.principal_address.city`
- `company.principal_address.country`
- `company.principal_address.zip` |
| Processing Details Required
ID: `requirements_due_processing` | Simulates an onboarding flow where the sub-entity cannot be verified and additional processing details are required.
- The sub-entity status changes to `requirements_due`
- The `requirements_due` array includes the following fields:
- `company.processing_details.annual_processing_volume`
- `company.processing_details.average_transaction_value`
- `company.processing_details.currency` |
| Entity Rejected
ID: `entity_rejected` | Simulates an onboarding flow where the sub-entity fails verification and is rejected.
- The sub-entity status changes to `rejected`
- The `requirements_due` array contains no pending requirements |
| Entity Restricted
ID: `entity_restricted` | Simulates an onboarding flow where the sub-entity is restricted after verification.
- The sub-entity status changes to `restricted`
- The `requirements_due` array contains no pending requirements |
| Entity Deactivated
ID: `entity_inactive` | Simulates an onboarding flow where the sub-entity is deactivated.
- The sub-entity status changes to `inactive`
- The `requirements_due` array contains no pending requirements |
| Enable Payments and Payouts
ID: `enable_payments_and_payouts` | Simulates an onboarding flow where an active sub-entity's payment and payout capabilities are enabled.
- The sub-entity status remains unchanged
- The `requirements_due` array contains no pending requirements |
| Disable Payments and Payouts
ID: `disable_payments_and_payouts` | Simulates an onboarding flow where an active sub-entity's payment and payout capabilities are disabled.
- The sub-entity status remains unchanged
- The `requirements_due` array contains no pending requirements |
| Make Payments and Payouts Available
ID: `make_payments_and_payouts_available` | Simulates an onboarding flow where the payment and payout capabilities on the sub-entity's parent entity profile are set to available. This is done before enabling the capabilities of the sub-entity.
- The sub-entity status remains unchanged
- The `requirements_due` array contains no pending requirements |
To simulate an onboarding scenario, call the [Run scenario](https://api-reference.checkout.com/#tag/Onboarding-Simulator/paths/~1simulate~1entities~1%7BentityId%7D~1scenarios~1%7BscenarioId%7D/post) endpoint in the sandbox environment, and provide the following path parameters:
- Sub-entity ID as the `{entityId}` path parameter
- Scenario ID as the `{scenarioId}` path parameter
> **Information**
>
> Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox environment, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md).
**Sandbox**
`POST` `https://{prefix}.api.sandbox.checkout.com/accounts/simulate/entities/{entityId}/scenarios/{scenarioId}`
### Response examples
You can receive one of the following HTTP responses:
**200 – OK**
```json
{
"entity_id": "ent_abc123",
"scenario_id": "happy_path",
"scenario_name": "Happy Path",
"previous_status": "Draft",
"current_status": "Active",
"requirements_due": []
}
```
A successful response returns:
- `scenario_name` field – The scenario name.
- `previous_status` field – The previous status of the sub-entity.
- `current_status` field – The current status of the sub-entity.
- `requirements_due` array – The list of pending requirements for sub-entity verification.
**404 – scenario_not_found**
The scenario you specified was not found. Ensure that you provide the correct `scenario_id`.
**422 – entity_not_found**
The `entityId` you provided does not exist. Ensure that you provide the correct entity ID.
---
## Set a sub-entity to a specific status
You can manually set a sub-entity to a specific [status](https://www.checkout.com/docs/platforms/for-saas/manage-sub-entities/sub-entity-status.md) to simulate status transitions.
Call the [Set entity status](https://api-reference.checkout.com/#tag/Onboarding-Simulator/paths/~1simulate~1entities~1%7BentityId%7D~1status/post) endpoint in the sandbox environment, and provide the sub-entity ID as the `{entityId}` path parameter.
In the request body, set the `status` field to the specific value you want to assign to the sub-entity, which is one of:
- `draft`
- `requirements_due`
- `pending`
- `active`
- `restricted`
- `rejected`
- `inactive`
> **Information**
>
> Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox environment, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md).
**Sandbox**
`POST` `https://{prefix}.api.sandbox.checkout.com/accounts/simulate/entities/{entityId}/status`
### Request example
```json
{ "status": "active" }
```
### Response examples
You can receive one of the following HTTP responses:
**200 – OK**
```json
{
"entity_id": "ent_abc123",
"previous_status": "Draft",
"current_status": "Active"
}
```
A successful response returns:
- `previous_status` field – The previous status of the sub-entity.
- `current_status` field – The current status of the sub-entity.
**400 – invalid_status**
The status value you provided was not recognized. Ensure that you provide a correct status value.
**404 – entity_not_found**
The `entityId` you provided does not exist. Ensure that you provide the correct entity ID.
---
## Flag pending requirements for a sub-entity
You can set a sub-entity to the `requirements_due` status and explicitly flag the specific fields that must be provided. This allows you to simulate onboarding flows where sub-entities can't be verified and additional information must be provided.
Call the [Set requirements due](https://api-reference.checkout.com/#tag/Onboarding-Simulator/paths/~1simulate~1entities~1%7BentityId%7D~1requirements-due/post) endpoint in the sandbox environment, and provide the sub-entity ID as the `{entityId}` path parameter.
In the request body, provide the list of all pending fields you want to flag in the `fields` array. Each field must be a valid value from the [List of available requirements](https://www.checkout.com/docs/platforms/for-saas/onboard-sub-entities/simulate-onboarding-scenarios.md#List_all_available_requirements).
> **Information**
>
> Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox environment, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md).
**Sandbox**
`POST` `https://{prefix}.api.sandbox.checkout.com/accounts/simulate/entities/{entityId}/requirements-due`
### Request example
```json
{
"fields": [
"company.legal_name",
"company.business_registration_number"
]
}
```
### Response examples
You can receive one of the following HTTP responses:
**200 – OK**
```json
{
"entity_id": "ent_abc123",
"previous_status": "Active",
"current_status": "RequirementsDue",
"requirements_due": [
"company.legal_name",
"company.business_registration_number"
]
}
```
A successful response returns:
- `previous_status` field – The previous status of the sub-entity.
- `current_status` field – The current status of the sub-entity.
- `requirements_due` array – The list of pending requirements for sub-entity verification.
**400 – fields_required**
The `fields` array is empty or missing. Ensure that you include a `fields` array with the required list of fields.
**400 – unknown_fields**
One or more fields in the `fields` array are not valid. For the full list of valid fields you can include in this array, see [List of available requirements](https://www.checkout.com/docs/platforms/for-saas/onboard-sub-entities/simulate-onboarding-scenarios.md#List_all_available_requirements).
**404 – entity_not_found**
The `entityId` you provided does not exist. Make sure you provide the correct sub-entity ID.
---
## List all available requirements
You can view the full list of all available requirements that can be used for testing the different onboarding scenarios by calling the [List available requirements](https://api-reference.checkout.com/#tag/Onboarding-Simulator/paths/~1simulate~1requirements-due/get) endpoint in the sandbox environment.
> **Information**
>
> Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox environment, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md).
**Sandbox**
`GET` `https://{prefix}.api.sandbox.checkout.com/accounts/simulate/requirements-due`
### Response example
A successful response returns the full list of all the valid fields that can be used for testing different scenarios.
```json
[
{ "field": "company.additional_trading_names", "type": "array" },
{ "field": "company.business_registration_number", "type": "string" },
{ "field": "company.business_type", "type": "string" },
{ "field": "company.date_of_incorporation", "type": "object" },
{ "field": "company.legal_name", "type": "string" },
{ "field": "company.principal_address", "type": "object" },
{ "field": "company.principal_address.address_line1", "type": "string" },
{ "field": "company.principal_address.address_line_2", "type": "string" },
{ "field": "company.principal_address.city", "type": "string" },
{ "field": "company.principal_address.country", "type": "string" },
{ "field": "company.principal_address.state", "type": "string" },
{ "field": "company.principal_address.zip", "type": "string" },
{ "field": "company.processing_details", "type": "object" },
{ "field": "company.processing_details.annual_processing_volume", "type": "number" },
{ "field": "company.processing_details.average_transaction_value", "type": "number" },
{ "field": "company.processing_details.billing_descriptor", "type": "string" },
{ "field": "company.processing_details.card_transactions", "type": "object" },
{ "field": "company.processing_details.currency", "type": "string" },
{ "field": "company.processing_details.highest_transaction_value", "type": "number" },
{ "field": "company.processing_details.incorporation_jurisdiction", "type": "string" },
{ "field": "company.processing_details.payments.ach", "type": "object" },
{ "field": "company.processing_details.product_processing_catalog", "type": "object" },
{ "field": "company.processing_details.question_incorporation_jurisdiction", "type": "boolean" },
{ "field": "company.processing_details.solicit_charitable_donations", "type": "boolean" },
{ "field": "company.processing_details.target_countries", "type": "array" },
{ "field": "company.registered_address", "type": "object" },
{ "field": "company.registered_address.address_line1", "type": "string" },
{ "field": "company.registered_address.address_line_2", "type": "string" },
{ "field": "company.registered_address.city", "type": "string" },
{ "field": "company.registered_address.state", "type": "string" },
{ "field": "company.regulatory_license_expiration_date", "type": "object" },
{ "field": "company.representatives", "type": "array" },
{ "field": "company.representatives.company.legal_name", "type": "string" },
{ "field": "company.representatives.company.trading_name", "type": "string" },
{ "field": "company.representatives.company_position", "type": "string" },
{ "field": "company.representatives.documents.certified_authorised_signatory", "type": "object" },
{ "field": "company.representatives.documents.identity_verification", "type": "object" },
{ "field": "company.representatives.individual.address", "type": "object" },
{ "field": "company.representatives.individual.date_of_birth", "type": "object" },
{ "field": "company.representatives.individual.email_address", "type": "string" },
{ "field": "company.representatives.individual.first_name", "type": "string" },
{ "field": "company.representatives.individual.last_name", "type": "string" },
{ "field": "company.representatives.individual.middle_name", "type": "string" },
{ "field": "company.representatives.individual.pep_self_declaration", "type": "boolean" },
{ "field": "company.representatives.individual.place_of_birth", "type": "object" },
{ "field": "company.representatives.ownership_percentage", "type": "string" },
{ "field": "company.representatives.roles", "type": "array" },
{ "field": "company.trading_name", "type": "string" },
{ "field": "contact_details.email_addresses.administrative_owner", "type": "string" },
{ "field": "contact_details.email_addresses.invoice_emails", "type": "string" },
{ "field": "contact_details.email_addresses.pci_compliance_contact", "type": "string" },
{ "field": "contact_details.email_addresses.primary", "type": "string" },
{ "field": "contact_details.phone.country_code", "type": "string" },
{ "field": "contact_details.phone.number", "type": "string" },
{ "field": "documents.articles_of_association", "type": "object" },
{ "field": "documents.certified_authorised_signatory", "type": "object" },
{ "field": "documents.company_verification", "type": "object" },
{ "field": "documents.identity_verification", "type": "object" },
{ "field": "documents.proof_of_legality", "type": "object" },
{ "field": "documents.proof_of_principal_address", "type": "object" },
{ "field": "documents.shareholder_structure", "type": "object" },
{ "field": "documents.tax_verification", "type": "object" },
{ "field": "processing_details.financial_details", "type": "array" },
{ "field": "profile.default_holding_currency", "type": "string" },
{ "field": "profile.holding_currencies", "type": "array" },
{ "field": "profile.mccs", "type": "array" },
{ "field": "profile.urls", "type": "array" }
]
```
---
## List all scenarios
You can view the list of all available onboarding scenarios that you can simulate by calling the [List scenarios](https://api-reference.checkout.com/#tag/Onboarding-Simulator/paths/~1simulate~1scenarios/get) endpoint in the sandbox environment.
> **Information**
>
> Your base URL's `{prefix}` value is unique to your account and environment. To learn how to retrieve your base URLs for the sandbox environment, see [API endpoints](https://www.checkout.com/docs/developer-resources/api/api-endpoints.md).
**Sandbox**
`GET` `https://{prefix}.api.sandbox.checkout.com/accounts/simulate/scenarios`
### Response example
A successful response returns the full list of all the available onboarding scenarios that you can simulate.
```json
[
{
"id":"happy_path",
"name":"Happy Path",
"description":"Advance entity straight to Active with no requirements due.",
"action":"set_status",
"status":"active",
"requirements_due":[
]
},
{
"id":"requirements_due_missing_data",
"name":"Missing Data",
"description":"Set entity to RequirementsDue with common missing data fields.",
"action":"set_status",
"status":"requirements_due",
"requirements_due":[
"company.legal_name",
"company.business_registration_number",
"contact_details.phone.number",
"contact_details.email_addresses.primary"
]
},
{
"id":"requirements_due_documents",
"name":"Document Verification Required",
"description":"Set entity to RequirementsDue with document verification requirements.",
"action":"set_status",
"status":"requirements_due",
"requirements_due":[
"documents.company_verification",
"documents.identity_verification",
"documents.proof_of_principal_address"
]
},
{
"id":"requirements_due_identity",
"name":"Identity Verification Required",
"description":"Set entity to RequirementsDue with representative identity fields.",
"action":"set_status",
"status":"requirements_due",
"requirements_due":[
"company.representatives.individual.first_name",
"company.representatives.individual.last_name",
"company.representatives.individual.date_of_birth"
]
},
{
"id":"requirements_due_address",
"name":"Address Verification Required",
"description":"Set entity to RequirementsDue with address-related fields.",
"action":"set_status",
"status":"requirements_due",
"requirements_due":[
"company.principal_address.address_line1",
"company.principal_address.city",
"company.principal_address.country",
"company.principal_address.zip"
]
},
{
"id":"requirements_due_processing",
"name":"Processing Details Required",
"description":"Set entity to RequirementsDue with processing detail fields.",
"action":"set_status",
"status":"requirements_due",
"requirements_due":[
"company.processing_details.annual_processing_volume",
"company.processing_details.average_transaction_value",
"company.processing_details.currency"
]
},
{
"id":"pending",
"name":"Pending",
"description":"Reset entity to Pending status. For ISV sellers, clears requirements due on the data collection work item.",
"action":"set_status",
"status":"pending",
"requirements_due":[
]
},
{
"id":"entity_rejected",
"name":"Entity Rejected",
"description":"Set entity to Rejected status.",
"action":"set_status",
"status":"rejected",
"requirements_due":[
]
},
{
"id":"entity_restricted",
"name":"Entity Restricted",
"description":"Set entity to Restricted status.",
"action":"set_status",
"status":"restricted",
"requirements_due":[
]
},
{
"id":"entity_inactive",
"name":"Entity Deactivated",
"description":"Set entity to Inactive status.",
"action":"set_status",
"status":"inactive",
"requirements_due":[
]
},
{
"id":"enable_payments_and_payouts",
"name":"Enable Payments and Payouts",
"description":"Enable payments and payouts on an Active entity. Checks that the parent entity has these set as available.",
"action":"enable_payments_and_payouts",
"status":"",
"requirements_due":[
]
},
{
"id":"disable_payments_and_payouts",
"name":"Disable Payments and Payouts",
"description":"Disable payments and payouts on an Active entity.",
"action":"disable_payments_and_payouts",
"status":"",
"requirements_due":[
]
},
{
"id":"make_payments_and_payouts_available",
"name":"Make Payments and Payouts Available",
"description":"Set payments and payouts as available on a parent entity profile. Run this on a parent before enabling on sub-entities.",
"action":"make_payments_and_payouts_available",
"status":"",
"requirements_due":[
]
}
]
```