> ## Documentation Index
> Fetch the complete documentation index at: https://developer.tazapay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Simulate Collection Account status on Sandbox

You can create Collection Accounts in [sandbox](https://dashboard-sandbox.tazapay.com/) by default, with no separate enablement needed to start testing.

In sandbox, no real transaction will be associated with this account, so it never activates on its own. When you create one, its `enable` request stays in `processing` until you simulate the next status. You control every transition, which lets you test the full lifecycle end to end: create an entity, approve it, provision a Collection Account, take it to `enabled`, and then simulate incoming payments against it.

## The flow at a glance

1. Create an entity, if you're collecting on behalf of your customers.
2. Simulate the entity status to take it to `approved`.
3. Create the Collection Account, which starts out with an `enable` request.
4. Simulate the Collection Account status to take that request to `succeeded` so the account becomes `enabled`.
5. Simulate a collect to mimic an incoming payment into the enabled account.

<Steps>
  <Step title="Create an entity">
    Skip this step if the Collection Account is for your own collections. It is required only for [collections on behalf of](/collection-accounts/on-behalf-of/introduction) your customers, where the account is attributed to an entity via `on_behalf_of`.

    Create the entity using the [Create Entity](/api-reference/tazapay-api/create-entity) API, or from the [Sandbox dashboard](https://dashboard-sandbox.tazapay.com/) under **Entities**.
  </Step>

  <Step title="Simulate the entity status">
    A newly created entity is `pending`. Take it to `approved` before using it on a Collection Account.

    Full steps and the list of statuses you can simulate are on [Simulate entity status on Sandbox](/api-reference/tazapay-api/simulate-entity-status-in-sandbox).

    Track the transitions with [Entity Webhooks](/api-reference/tazapay-api/entity-webhook).
  </Step>

  <Step title="Create the Collection Account">
    Create the account using the [Create Collection Account](/api-reference/tazapay-api/create-collection-account) API - pass `on_behalf_of` with the entity from Step 1 if you are collecting for a customer - or from the [Sandbox dashboard](https://dashboard-sandbox.tazapay.com/) as described in [Requesting via Dashboard](/collection-accounts/requesting-for-vas/dashboard).

    For the account types and rails you can provision, call [Get Virtual Account Metadata](/api-reference/tazapay-api/virtual-account-metadata) or [Get Wallet Metadata](/api-reference/tazapay-api/wallet-metadata) — the accepted values are provider-configured and can change. See [Collection Accounts Payment Method Type](/api-reference/tazapay-api/collection-accounts-payment-method-type) for a static reference.

    The account is created with status `disabled` and an `enable` request attached:

    ```json Response (trimmed) theme={null}
    {
      "id": "cva_d2dgk0552psfuj1he0",
      "object": "collection_account",
      "type": "virtual_account",
      "payment_method_type": "local_bank_transfer_sgd",
      "status": "disabled",
      "requests": [
        {
          "id": "cvar_dbqlkip52psfuj1heju",
          "object": "collection_account_request",
          "collection_account_id": "cva_d2dgk0552psfuj1he0",
          "type": "enable",
          "status": "processing",
          "status_description": "Activation in progress."
        }
      ]
    }
    ```

    Note the request id (`cvar_` for a virtual account, `cwar_` for a wallet) - this is the object you simulate in the next step. The account's own `status` is never set directly; it is derived from the state of this request. For the complete lifecycle, see [Collection Account Status Flow](/collection-accounts/requesting-for-vas/api#collection-account-status-flow).

    <Note>
      In sandbox the request is not picked up by any provider, so it stays in `processing` indefinitely until you simulate it.
    </Note>
  </Step>

  <Step title="Simulate the Collection Account status">
    Navigate to [**Sandbox dashboard**](https://dashboard-sandbox.tazapay.com/) **-> Collection Accounts -> Virtual Accounts / Wallets tab -> Collection Account Detail Page -> Simulate Status**, then pick the status you want the enablement request to move to.

    Simulate `succeeded` to get a usable account: the request is marked `succeeded`, sandbox bank or wallet details are generated, and the account status flips to `enabled`. Only then can it receive collects.

    You can also step through the intermediate statuses first - for example `processing` → `requires_action` → `approval_hold` → `succeeded` - to check how your integration handles each one.
  </Step>

  <Step title="Simulate a collect">
    With the account `enabled`, fetch it to read the bank or wallet details your payer would use, then mimic an incoming payment from [**Sandbox dashboard**](https://dashboard-sandbox.tazapay.com/) **-> Virtual Accounts/Wallets -> Simulate Collect**.

    You can simulate every intermediate and terminal collect state, for both fiat and crypto. The complete matrix is on [Simulating Collects on Sandbox](/api-reference/tazapay-api/simulate-collects-on-sandbox).

    <Note>
      A simulated collect credits a dummy balance in your test account, which you can then use to fund and test payouts end to end.
    </Note>
  </Step>
</Steps>

***

## Possible values of Collection Account request status

| Target status     | Description                                                                                                      |
| ----------------- | ---------------------------------------------------------------------------------------------------------------- |
| `processing`      | The request is being processed. This is the status a newly created request starts in.                            |
| `requires_action` | The request needs input from you, such as a supporting document. Use this to test your requires-action handling. |
| `approval_hold`   | The request is held pending approval. Not available for disablement requests.                                    |
| `succeeded`       | The request completed. Account details are generated and the account status becomes `enabled`. Terminal.         |
| `failed`          | The request failed permanently. The account stays `disabled`. Terminal.                                          |
| `cancelled`       | The request was cancelled. The account stays `disabled`. Terminal.                                               |

<Note>
  `succeeded`, `failed` and `cancelled` are terminal. Once a request reaches one of them it cannot be simulated any further - create a new Collection Account to run another scenario.
</Note>

## What you can and cannot simulate

| Action                 | Sandbox behaviour                                                                                                                                                                                                                                                                |
| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Creating an account    | Creates an `enable` request that stays in `processing`. Simulate it to reach any status above.                                                                                                                                                                                   |
| Disabling an account   | In sandbox this is synchronous and takes effect immediately - no request is created, so there is nothing to simulate. In production, disabling is asynchronous and does create a request; see [Update Collection Account](/api-reference/tazapay-api/update-collection-account). |
| Re-enabling an account | Takes effect immediately, same as disabling.                                                                                                                                                                                                                                     |

## Webhooks

Simulated transitions behave like real ones, so point your sandbox webhook endpoint at your integration and test against the events it will receive in production:

* [Collection Account Webhooks](/api-reference/tazapay-api/collection-account-webhooks) - `collection_account.creation_succeeded` fires when you simulate `succeeded` and the account becomes `enabled`
* [Collect Webhooks](/api-reference/tazapay-api/collect-webhook) - fired for every state the simulated collect passes through

<Note>
  The request-level events (`collection_account.creation_requires_action`, `creation_under_approval_hold`, `creation_failed`, `creation_cancelled`) are listed under [Upcoming Webhook Events](/api-reference/tazapay-api/collection-account-webhooks#upcoming-webhook-events) and are not delivered yet. Simulating those statuses still updates the request, which you can read back from [Get Collection Account](/api-reference/tazapay-api/get-collection-account).
</Note>

***

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/collection-accounts/overview/quickstart">
    Run the whole flow on sandbox with copy-pasteable API calls.
  </Card>

  <Card title="Collection Account Status Flow" icon="diagram-project" href="/collection-accounts/requesting-for-vas/api#collection-account-status-flow">
    Every state a request passes through, and how the account status follows it.
  </Card>
</CardGroup>
