# Pause and unpause assets

Source: https://docs.settlemint.com/docs/developer-guides/asset-servicing/pause-unpause-asset
Enable or disable all transfers for an asset via API.



Pausing an asset temporarily disables all transfers, minting, and burning operations. This is used for emergency stops, maintenance, or compliance holds.

Pause and unpause operations change the transfer state for one asset while preserving the surrounding DALP platform state.

<Mermaid
  chart="`
flowchart TD
Emergency[&#x22;Emergency operator&#x22;] --> API[&#x22;DALP pause API&#x22;]
API --> Role[&#x22;Emergency role check&#x22;]
API --> Asset[&#x22;Target asset&#x22;]
Asset --> PauseState[&#x22;Paused or active state&#x22;]
PauseState --> Transfers[&#x22;Transfers&#x22;]
PauseState --> Minting[&#x22;Minting&#x22;]
PauseState --> Burns[&#x22;Burns&#x22;]
Transfers --> Holders[&#x22;Holder activity&#x22;]
`"
/>

For the web interface approach, see the [user guide](/docs/user-guides/asset-servicing/pause-unpause-asset).

## Prerequisites [#prerequisites]

* Platform URL (e.g., `https://your-platform.example.com`)
* API key from a user with **Emergency** role on this asset (see [Getting Started](/docs/developer-guides/api-integration/getting-started) for API key setup)
* Wallet verification method enabled on your account (e.g., pincode or 2FA)

<Callout type="info" title="New assets start paused">
  Assets are automatically paused upon creation. You must unpause them before any transfers can occur.
</Callout>

## Pausing an asset [#pausing-an-asset]

<Steps>
  <Step>
    ### Prepare pause request [#prepare-pause-request]

    Construct the API request to pause the asset:

    ```bash
    curl -X PATCH "https://your-platform.example.com/api/v2/tokens/0x9459D52E60edBD3178f00F9055f6C117a21b4220/pause-state" \
      -H "X-Api-Key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "walletVerification": {
          "secretVerificationCode": "123456",
          "verificationType": "PINCODE"
        }
      }'
    ```

    <Callout type="info" title="Asset address in path">
      The asset contract address is part of the URL path: `/api/v2/tokens/{tokenAddress}/pause-state`.
    </Callout>
  </Step>

  <Step>
    ### Execute pause [#execute-pause]

    When you execute the request, the platform:

    1. **Validates your permissions** - Confirms you have Emergency role on this asset
    2. **Verifies your wallet** - Uses your pincode/2FA to authorize the blockchain transaction
    3. **Pauses the asset** - Sets the pause flag on-chain, blocking all transfers
  </Step>

  <Step>
    ### Handle response [#handle-response]

    A synchronous response wraps the updated asset data in `data` and includes transaction metadata:

    ```json
    {
      "data": {
        "id": "0x9459D52E60edBD3178f00F9055f6C117a21b4220",
        "name": "ACME Holdings Common Stock",
        "symbol": "ACME",
        "decimals": 0,
        "totalSupply": "1000",
        "type": "equity",
        "pausable": {
          "paused": true
        }
      },
      "meta": {
        "txHashes": ["0x..."]
      },
      "links": {
        "self": "/v2/tokens/0x9459D52E60edBD3178f00F9055f6C117a21b4220/pause-state"
      }
    }
    ```

    The `data.pausable.paused` field confirms the asset is now paused. The response includes the full asset object with additional fields like `accessControl`, `identity`, and `userPermissions`. If you request asynchronous processing, the API returns a `transactionId`, `status`, and `statusUrl` instead.
  </Step>
</Steps>

## Unpausing an asset [#unpausing-an-asset]

<Steps>
  <Step>
    ### Prepare unpause request [#prepare-unpause-request]

    Construct the API request to unpause the asset:

    ```bash
    curl -X DELETE "https://your-platform.example.com/api/v2/tokens/0x9459D52E60edBD3178f00F9055f6C117a21b4220/pause-state" \
      -H "X-Api-Key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "walletVerification": {
          "secretVerificationCode": "123456",
          "verificationType": "PINCODE"
        }
      }'
    ```
  </Step>

  <Step>
    ### Execute unpause [#execute-unpause]

    When you execute the request, the platform:

    1. **Validates your permissions** - Confirms you have Emergency role on this asset
    2. **Verifies your wallet** - Uses your pincode/2FA to authorize the blockchain transaction
    3. **Unpauses the asset** - Clears the pause flag, enabling all transfers
  </Step>

  <Step>
    ### Handle response [#handle-response-1]

    A synchronous response wraps the updated asset data in `data` and includes transaction metadata:

    ```json
    {
      "data": {
        "id": "0x9459D52E60edBD3178f00F9055f6C117a21b4220",
        "name": "ACME Holdings Common Stock",
        "symbol": "ACME",
        "decimals": 0,
        "totalSupply": "1000",
        "type": "equity",
        "pausable": {
          "paused": false
        }
      },
      "meta": {
        "txHashes": ["0x..."]
      },
      "links": {
        "self": "/v2/tokens/0x9459D52E60edBD3178f00F9055f6C117a21b4220/pause-state"
      }
    }
    ```

    The `data.pausable.paused` field confirms the asset is now active. The response includes the full asset object with additional fields like `accessControl`, `identity`, and `userPermissions`. If you request asynchronous processing, the API returns a `transactionId`, `status`, and `statusUrl` instead.
  </Step>
</Steps>

## Request parameters [#request-parameters]

| Parameter                                   | Type   | Required | Description                               |
| ------------------------------------------- | ------ | -------- | ----------------------------------------- |
| `walletVerification`                        | object | Yes      | Your wallet verification                  |
| `walletVerification.secretVerificationCode` | string | Yes      | Your 6-digit PINCODE or TOTP code         |
| `walletVerification.verificationType`       | string | Yes      | `"PINCODE"`, `"OTP"`, or `"SECRET_CODES"` |

## What pausing affects [#what-pausing-affects]

When an asset is paused, the following operations are **blocked**:

* **User transfers** - Normal wallet-to-wallet transfers
* **Minting** - Creating new units
* **Burning** - Destroying existing units
* **Forced transfers** - Administrative transfers

These operations **continue to work** while paused:

* **Viewing balances** - Read-only operations
* **Checking compliance** - Identity and claim verification
* **Role management** - Adding/removing administrators
* **Pause/unpause** - Can toggle pause state

<Callout type="warning" title="All transfers stop">
  Pausing affects ALL asset holders immediately. Use sparingly and communicate with stakeholders.
</Callout>

## Check pause status [#check-pause-status]

Query the asset to see current pause state:

```bash
curl -X GET "https://your-platform.example.com/api/v2/tokens/0x9459D52E60edBD3178f00F9055f6C117a21b4220" \
  -H "X-Api-Key: YOUR_API_KEY"
```

The response wraps pause status in the `data.pausable` field:

```json
{
  "data": {
    "id": "0x9459D52E60edBD3178f00F9055f6C117a21b4220",
    "name": "ACME Holdings Common Stock",
    "symbol": "ACME",
    "decimals": 0,
    "totalSupply": "1000",
    "type": "equity",
    "pausable": {
      "paused": false
    }
  },
  "links": {
    "self": "/v2/tokens/0x9459D52E60edBD3178f00F9055f6C117a21b4220"
  }
}
```

Use `data.pausable.paused` to check whether the asset is paused. The `data` object includes the full asset object with additional fields.

## Troubleshooting [#troubleshooting]

| Issue                          | Solution                                               |
| ------------------------------ | ------------------------------------------------------ |
| `401 Unauthorized`             | API key is invalid, expired, or disabled               |
| `403 USER_NOT_AUTHORIZED`      | Ensure your account has `emergency` role on this asset |
| `Asset already paused`         | Check status first, asset may already be paused        |
| `Asset already unpaused`       | Check status first, asset may already be unpaused      |
| `Cannot transfer while paused` | Unpause the asset before attempting transfers          |

## Related guides [#related-guides]

* [Forced Transfer](/docs/developer-guides/asset-servicing/forced-transfer) - Administrative transfers
* [Mint Assets](/docs/developer-guides/asset-servicing/mint-assets) - Issue assets to investors
