# System settings

The API provides network discovery and deployment-wide controls for testnets and price-based Signing Policies.

## Discover supported networks

Call `GET /v1/system-info` before presenting network, network family, or asset choices. This endpoint requires no authentication.

```bash
curl -s "$CV_BASE/v1/system-info" \
  | jq '.supported_blockchain_networks'
```

The response contains:

| Field | Use |
|---|---|
| `network_families` | Network family IDs, display names, and whether wallets can currently be generated for the family |
| `networks` | CAIP-2 IDs, display names, search tokens, family IDs, testnet markers, enabled states, and supported assets |
| `networks[].assets` | Asset IDs used in Signing Policy conditions and human-readable names; the native asset appears first |

Render selectors from this response instead of maintaining a client-side network list. Show only entries with `enabled: true` for new wallet and policy writes. A testnet remains present with `is_testnet: true` and `enabled: false` when testnet support is disabled.

## Read the current settings

`GET /v1/system-settings` requires only the `Authorization` header. The `view_system_resources` Administrative Policy capability governs access.

```bash
curl -s "$CV_BASE/v1/system-settings" \
  -H "Authorization: ApiKey $API_KEY_UUID"
```

Example response:

```json
{
  "version": 4,
  "settings": [
    { "setting_type": "testnet", "enabled": false },
    { "setting_type": "price_based_policies", "enabled": true }
  ]
}
```

`testnet` is disabled by default. `price_based_policies` is enabled by default.

## Update settings safely

`PATCH /v1/system-settings` is a partial update. Send only settings you intend to change and include the version from your most recent read as `previous_version`. The caller needs the `modify_system_settings` capability and all four authentication headers.

```bash
curl -s -X PATCH "$CV_BASE/v1/system-settings" \
  -H "Authorization: ApiKey $API_KEY_UUID" \
  -H "X-Request-Timestamp: $TS_HEX" \
  -H "X-Request-Nonce: $NONCE_HEX" \
  -H "X-Request-Assertion: $ASSERTION" \
  -H "Content-Type: application/json" \
  -d '{
    "previous_version": 4,
    "settings": [
      { "setting_type": "testnet", "enabled": true }
    ]
  }'
```

The endpoint returns the complete updated settings document with `200`, or a `202` processing response. If it returns `202`, [poll the request](/api-reference#tag/requests) until processing completes.

## Handle conflicts and dependencies

* `409 resource_conflict`: another caller updated the settings after your read. Fetch the current document, review it, and retry with its version.
* `422 invalid_inputs`: the settings list is empty or contains the same setting more than once.
* A dependency conflict prevents disabling testnets while wallets or Signing Policies reference testnet networks.
* A dependency conflict prevents disabling price-based policies while a Signing Policy contains a USD value condition.

After a setting is disabled, the API rejects new dependent wallet or policy writes. Remove the dependencies first, then retry the settings update.

See the [System Settings API reference](/api-reference#tag/systemsettings) for the complete schemas and error responses.
