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

# Error Dictionary

Use this page to look up machine-readable error codes and subcodes returned by the API.

Error responses use a consistent JSON body with `code`, `message`, `subcode`, and `trace_id` fields. Use the tables below to look up `code` and `subcode` values.

```json lines wrap theme={null}
{
  "code": "VALIDATION_ERROR",
  "message": "Order with this orderID was not found",
  "subcode": "ORDER_RESOURCE_NOT_FOUND",
  "trace_id": "7914195803436782579"
}
```

## Error codes

| Name | Description | HTTP status |
| - | - | - |
| `AUTHENTICATION_FAILED` | The request could not be authenticated. Check that the credentials supplied with the request are valid. | 401 |
| `FAILED_PRECONDITION` | The request could not be completed because a required precondition was not met. | 400 |
| `INTERNAL_ERROR` | An unexpected internal error occurred while processing the request. If this persists, contact support. | 500 |
| `NOT_IMPLEMENTED` | This endpoint or operation is not yet implemented. | 501 |
| `PERMISSION_DENIED` | You do not have permission to perform this action with the current API key. | 403 |
| `RATE_LIMIT_EXCEEDED` | You have exceeded the request rate limit. Reduce your request rate and retry after a backoff period. | 429 |
| `REQUIRED_FIELD_MISSING` | A required request field was not provided. | 400 |
| `RESOURCE_NOT_FOUND` | The requested resource could not be found. | 404 |
| `SERVICE_UNAVAILABLE` | The service is temporarily unavailable. Retry the request after a backoff period. | 503 |
| `VALIDATION_ERROR` | One or more request fields are invalid or incompatible. | 400 |

## Common

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `AUTH_AUTHORIZATION_FAILED` | `INTERNAL_ERROR` | An unexpected error occurred while authorizing the request. If this persists, contact support. | 500 |
| `AUTH_RESOURCE_ACCESS_DENIED` | `PERMISSION_DENIED` | You do not have permission to access this resource with the current API key. | 403 |
| `AUTH_RESOURCE_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No resource was found matching the request, or you do not have access to it. | 404 |
| `AUTH_UNAUTHENTICATED` | `AUTHENTICATION_FAILED` | The request could not be authenticated. Check that the credentials supplied with the request are valid. | 401 |
| `ENDPOINT_NOT_IMPLEMENTED` | `NOT_IMPLEMENTED` | This endpoint is not yet implemented. | 501 |
| `MTLS_CERTIFICATE_INVALID` | `PERMISSION_DENIED` | The presented client certificate is not a valid identity for this organization or environment. | 403 |
| `MTLS_CERTIFICATE_REQUIRED` | `PERMISSION_DENIED` | A valid client certificate was not presented with the request. | 403 |
| `MTLS_CERTIFICATE_REVOKED` | `PERMISSION_DENIED` | The presented client certificate has been revoked. | 403 |
| `SERVER_MAINTENANCE_MODE_ACTIVE` | `SERVICE_UNAVAILABLE` | The API is currently in maintenance mode and not accepting this request. Maintenance windows can be extended; check [https://status.prime.coinbase.com](https://status.prime.coinbase.com) before retrying. | 503 |
| `SERVER_RATE_LIMIT_EXCEEDED` | `RATE_LIMIT_EXCEEDED` | You have exceeded the request rate limit for this endpoint. Reduce your request rate and retry after a backoff period. | 429 |

## Activity

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `ACTIVITY_ACCESS_DENIED` | `PERMISSION_DENIED` | You do not have permission to access the requested activity data for the given entity or portfolio. | 403 |
| `ACTIVITY_CATEGORY_INVALID` | `VALIDATION_ERROR` | The categories field contains a value that is not a supported activity category. | 400 |
| `ACTIVITY_NOT_FOUND` | `RESOURCE_NOT_FOUND` | The requested activity could not be found, either because the activity\_id does not exist or it does not belong to the specified portfolio\_id. | 404 |
| `ACTIVITY_PORTFOLIO_ID_MISMATCH` | `VALIDATION_ERROR` | The requested activity exists but does not belong to the portfolio\_id provided in the request. | 400 |
| `ACTIVITY_REQUEST_INVALID` | `VALIDATION_ERROR` | The activity request contains an invalid argument, such as a malformed filter or identifier. | 400 |
| `ACTIVITY_STATUS_INVALID` | `VALIDATION_ERROR` | The statuses field contains a value that is not a supported activity status. | 400 |
| `ACTIVITY_TIME_RANGE_INVALID` | `VALIDATION_ERROR` | The start\_time or end\_time field is not a valid RFC 3339 timestamp, or end\_time is earlier than start\_time. | 400 |

## Address book

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `ADDRESS_BOOK_ADDRESS_REQUIRED` | `REQUIRED_FIELD_MISSING` | The address field is required to create an address book entry. | 400 |
| `ADDRESS_BOOK_CURRENCY_SYMBOL_REQUIRED` | `REQUIRED_FIELD_MISSING` | The currency\_symbol field is required to create an address book entry. | 400 |
| `ADDRESS_BOOK_FAILED_PRECONDITION` | `VALIDATION_ERROR` | The address book entry could not be created or retrieved because a precondition was not met. | 400 |
| `ADDRESS_BOOK_INVALID_ARGUMENT` | `VALIDATION_ERROR` | The address book request contains an invalid argument, such as a malformed address or currency\_symbol. | 400 |
| `ADDRESS_BOOK_NAME_REQUIRED` | `REQUIRED_FIELD_MISSING` | The name field is required to create an address book entry. | 400 |
| `ADDRESS_BOOK_NOT_FOUND` | `RESOURCE_NOT_FOUND` | The requested address book entry could not be found for the given portfolio\_id. | 404 |

## Advanced Transfer

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `ADVANCED_TRANSFER_AMOUNT_INVALID` | `VALIDATION_ERROR` | The amount on one or more fund movements is not a valid positive decimal value. | 400 |
| `ADVANCED_TRANSFER_CANCEL_PRECONDITION_FAILED` | `FAILED_PRECONDITION` | The advanced transfer cannot be cancelled because it is no longer in a cancellable state. | 400 |
| `ADVANCED_TRANSFER_COUNTERPARTY_INVALID` | `VALIDATION_ERROR` | The fund movements in this advanced transfer do not all settle against the same counterparty; all legs must share a single counterparty. | 400 |
| `ADVANCED_TRANSFER_COUNTERPARTY_REQUIRED` | `REQUIRED_FIELD_MISSING` | One or more fund movements is missing its counterparty identifier. | 400 |
| `ADVANCED_TRANSFER_DATE_INVALID` | `VALIDATION_ERROR` | The settlement\_date, settlement\_time, or trade\_date field is not in the expected format. | 400 |
| `ADVANCED_TRANSFER_ID_INVALID` | `VALIDATION_ERROR` | The advanced\_transfer\_id provided does not correspond to a transfer that can be cancelled. | 400 |
| `ADVANCED_TRANSFER_NOT_ENABLED` | `PERMISSION_DENIED` | Advanced Transfers are not enabled for this portfolio, or the specific transfer configuration requested is not enabled for this portfolio. | 403 |
| `ADVANCED_TRANSFER_NOT_FOUND` | `RESOURCE_NOT_FOUND` | A resource referenced by the advanced transfer request could not be found. | 404 |
| `ADVANCED_TRANSFER_PRECONDITION_FAILED` | `FAILED_PRECONDITION` | The advanced transfer cannot be processed because a precondition was not met, such as no wallet being available in the portfolio for one of the fund movement currencies. | 400 |
| `ADVANCED_TRANSFER_REQUEST_INVALID` | `VALIDATION_ERROR` | The advanced transfer request is malformed or fails validation, such as a missing portfolio\_id, a missing or unsupported transfer type, or an invalid fund movement. | 400 |
| `ADVANCED_TRANSFER_SERVICE_UNAVAILABLE` | `SERVICE_UNAVAILABLE` | The service needed to process this advanced transfer request is currently unavailable or has reached a rate limit. | 503 |
| `ADVANCED_TRANSFER_TOO_MANY_FUND_MOVEMENTS` | `VALIDATION_ERROR` | The advanced transfer includes more fund movements than the maximum number of legs allowed per transfer. | 400 |

## Allocation

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `ALLOCATION_DESTINATION_PORTFOLIO_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | One or more entries in allocation\_legs is missing a destination\_portfolio\_id. | 400 |
| `ALLOCATION_ID_INVALID` | `VALIDATION_ERROR` | The allocation\_id field is not a valid UUID. | 400 |
| `ALLOCATION_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The allocation\_id field is required but was not provided. | 400 |
| `ALLOCATION_LIMIT_EXCEEDED` | `VALIDATION_ERROR` | The limit field exceeds the maximum number of allocations that can be returned in a single request. | 400 |
| `ALLOCATION_NETTING_ID_INVALID` | `VALIDATION_ERROR` | The netting\_id field is not a valid UUID. | 400 |
| `ALLOCATION_NETTING_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The netting\_id field is required but was not provided. | 400 |
| `ALLOCATION_NOT_FOUND` | `RESOURCE_NOT_FOUND` | The requested allocation could not be found, either because it does not exist or because the orders being allocated could not be retrieved. | 404 |
| `ALLOCATION_ORDER_ALREADY_ALLOCATED` | `VALIDATION_ERROR` | At least one order in order\_ids has already been allocated and cannot be allocated again. | 400 |
| `ALLOCATION_ORDER_NOT_TERMINAL` | `VALIDATION_ERROR` | At least one order in order\_ids has not reached a terminal state, so it cannot be allocated until it finishes processing. | 400 |
| `ALLOCATION_ORDER_TOO_OLD` | `VALIDATION_ERROR` | At least one order in order\_ids exceeds the maximum age allowed for allocation and can no longer be allocated. | 400 |
| `ALLOCATION_ORDERS_MIXED_PRODUCTS` | `VALIDATION_ERROR` | The orders referenced in order\_ids span more than one product. All orders in a single allocation request must be for the same product\_id. | 400 |
| `ALLOCATION_ORDERS_MIXED_SIDES` | `VALIDATION_ERROR` | The orders referenced in order\_ids include both buy and sell sides. All orders in a single allocation request must share the same side. | 400 |
| `ALLOCATION_PRECONDITION_FAILED` | `FAILED_PRECONDITION` | The allocation could not be processed because buying power or account information for the source or destination portfolio could not be retrieved. | 400 |
| `ALLOCATION_REQUEST_INVALID` | `VALIDATION_ERROR` | One or more allocation request fields, such as product\_id, order\_ids, allocation\_legs, or size\_type, are missing or invalid. | 400 |
| `ALLOCATION_SOURCE_PORTFOLIO_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The source\_portfolio\_id field is required to identify the portfolio the allocation is coming from. | 400 |
| `ALLOCATION_START_DATE_REQUIRED` | `REQUIRED_FIELD_MISSING` | The start\_date field is required when listing portfolio allocations. | 400 |

## API Key

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `API_KEY_ALREADY_ROTATED` | `VALIDATION_ERROR` | A rotation has already been initiated for this API key. Only one rotation may be pending at a time. | 400 |
| `API_KEY_INVALID_DURATION` | `VALIDATION_ERROR` | The duration\_seconds field exceeds the maximum allowed rotation timespan of 30 days. | 400 |

## Asset

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `ASSET_NOT_FOUND` | `RESOURCE_NOT_FOUND` | The requested asset could not be found, for example because the currency symbol or asset identifier does not correspond to a supported asset. | 404 |
| `ASSET_REQUEST_INVALID` | `VALIDATION_ERROR` | The asset lookup request contains an invalid argument, such as an unsupported currency symbol or malformed asset identifier. | 400 |
| `ASSET_SERVICE_UNAVAILABLE` | `SERVICE_UNAVAILABLE` | Asset information could not be retrieved at this time. | 503 |

## Commission

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `COMMISSION_PRODUCT_ID_INVALID` | `VALIDATION_ERROR` | The product\_id is not a recognized trading pair. | 400 |
| `COMMISSION_TRADING_NOT_ENABLED` | `VALIDATION_ERROR` | The portfolio\_id belongs to a portfolio that is not enabled for trading, so a trading commission rate cannot be calculated for it. | 400 |

## Conversion

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `CONVERSION_AMOUNT_INVALID` | `VALIDATION_ERROR` | The amount field is not a valid decimal number. | 400 |
| `CONVERSION_DESTINATION_INVALID` | `VALIDATION_ERROR` | The destination field is not a valid UUID. | 400 |
| `CONVERSION_DESTINATION_REQUIRED` | `REQUIRED_FIELD_MISSING` | The destination field is required but was not provided. | 400 |
| `CONVERSION_FAILED_PRECONDITION` | `FAILED_PRECONDITION` | The conversion could not be completed because a required condition was not met, such as insufficient available balance in the source wallet. | 400 |
| `CONVERSION_FEE_FEATURE_DISABLED` | `PERMISSION_DENIED` | The conversion fees API is not enabled for this entity. | 403 |
| `CONVERSION_FEE_NOT_ENABLED_FOR_ORG` | `PERMISSION_DENIED` | Stablecoin conversion fee configuration has not been set up for this entity's owning organization. | 403 |
| `CONVERSION_IDEMPOTENCY_KEY_INVALID` | `VALIDATION_ERROR` | The idempotency\_key field is not a valid UUID. | 400 |
| `CONVERSION_PERMISSION_DENIED` | `PERMISSION_DENIED` | You do not have permission to convert funds using the specified wallet\_id or portfolio. | 403 |
| `CONVERSION_REQUEST_INVALID` | `VALIDATION_ERROR` | The conversion request was rejected as invalid, for example due to an unsupported asset pair or a duplicate transaction. | 400 |
| `CONVERSION_SOURCE_SYMBOL_REQUIRED` | `REQUIRED_FIELD_MISSING` | The source\_symbol field is required but was not provided. | 400 |
| `CONVERSION_WALLET_NOT_FOUND` | `RESOURCE_NOT_FOUND` | The wallet identified by wallet\_id or destination could not be found, or does not belong to the specified portfolio\_id. | 404 |

## Entity

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `ENTITY_BALANCES_INVALID_ARGUMENT` | `VALIDATION_ERROR` | The entity balances request contains an invalid cursor or filter. | 400 |
| `ENTITY_BALANCES_LIMIT_INVALID` | `VALIDATION_ERROR` | The limit parameter for entity balances is out of the valid range. | 400 |
| `ENTITY_BALANCES_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No balances were found for the requested entity. | 404 |
| `ENTITY_ID_INVALID` | `VALIDATION_ERROR` | The entity\_id is not a valid UUID. | 400 |
| `ENTITY_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The entity\_id field is required but was not provided. | 400 |
| `ENTITY_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No entity was found matching the provided entity\_id. | 404 |

## FCM

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `FCM_ACCOUNT_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No futures (FCM) account is configured for the given entity\_id. | 404 |
| `FCM_BALANCE_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No futures balance data was found for the given entity\_id. | 404 |
| `FCM_EQUITY_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No end-of-day equity data was found for the futures account associated with the given entity\_id. | 404 |
| `FCM_INVALID_ARGUMENT` | `VALIDATION_ERROR` | The request contained an invalid argument for this futures operation, such as an unrecognized entity\_id or an invalid amount or currency. | 400 |
| `FCM_RISK_LIMITS_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No risk limit data was found for the futures account associated with the given entity\_id. | 404 |
| `FCM_SWEEP_CURRENCY_REQUIRED` | `REQUIRED_FIELD_MISSING` | The currency field is required when scheduling a futures sweep. | 400 |
| `FCM_SWEEP_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No sweep request was found for the given entity\_id, including when there is no pending sweep available to cancel. | 404 |
| `FCM_TARGET_DERIVATIVES_EXCESS_INVALID` | `VALIDATION_ERROR` | The target\_derivatives\_excess field must be a valid, non-negative decimal value. | 400 |

## Financing

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `BUYING_POWER_BASE_CURRENCY_REQUIRED` | `REQUIRED_FIELD_MISSING` | The base\_currency field is required but was not provided. | 400 |
| `BUYING_POWER_CURRENCY_INVALID` | `VALIDATION_ERROR` | The requested currency pair is not valid or not supported for buying power. | 400 |
| `BUYING_POWER_FAILED_PRECONDITION` | `VALIDATION_ERROR` | The buying power request failed a precondition, such as the portfolio not being in a state that supports the requested currency pair. | 400 |
| `BUYING_POWER_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No buying power data was found for the requested portfolio and currency pair. | 404 |
| `BUYING_POWER_PERMISSION_DENIED` | `PERMISSION_DENIED` | You do not have permission to view buying power for the requested portfolio and currency pair. | 403 |
| `BUYING_POWER_QUOTE_CURRENCY_REQUIRED` | `REQUIRED_FIELD_MISSING` | The quote\_currency field is required but was not provided. | 400 |
| `CROSS_MARGIN_FAILED_PRECONDITION` | `VALIDATION_ERROR` | The cross margin or funding settings request failed a precondition, such as the entity or portfolio not being in a state that supports the requested operation. | 400 |
| `CROSS_MARGIN_INVALID_ARGUMENT` | `VALIDATION_ERROR` | The cross margin or funding settings request contains an invalid argument, such as a portfolio\_id, entity\_id, or liquidation\_id that does not belong to the specified entity. | 400 |
| `CROSS_MARGIN_NOT_ENABLED` | `PERMISSION_DENIED` | Cross margin is not enabled for the requested entity. | 403 |
| `FINANCING_ACCRUALS_DATE_INVALID` | `VALIDATION_ERROR` | The start\_date to end\_date range provided for interest accruals is not valid for the requested portfolio. | 400 |
| `FINANCING_ACCRUALS_INVALID_ARGUMENT` | `VALIDATION_ERROR` | One or more parameters in the interest accruals request are invalid, such as entity\_id, portfolio\_id, start\_date, or end\_date. | 400 |
| `FINANCING_ACCRUALS_RANGE_EXCEEDED` | `VALIDATION_ERROR` | The requested start\_date to end\_date range exceeds the maximum trailing period of 12 months for interest accruals. | 400 |
| `FINANCING_END_DATE_INVALID` | `VALIDATION_ERROR` | The end\_date value is not a valid RFC 3339 timestamp. | 400 |
| `FINANCING_END_DATE_REQUIRED` | `REQUIRED_FIELD_MISSING` | The end\_date field is required but was not provided. | 400 |
| `FINANCING_FAILED_PRECONDITION` | `FAILED_PRECONDITION` | The interest accruals request failed a precondition, such as an invalid date range for the requested entity or portfolio. | 400 |
| `FINANCING_PORTFOLIO_MARGIN_NOT_ENABLED` | `AUTHENTICATION_FAILED` | Portfolio margin is not enabled for the requested portfolio or entity, so this financing endpoint cannot return data. | 401 |
| `FINANCING_PTC_DISABLED_FOR_PM_ENTITY` | `RESOURCE_NOT_FOUND` | Post-trade credit information is not available for this portfolio because its entity has portfolio margin enabled. | 404 |
| `FINANCING_SERVICE_UNAVAILABLE` | `SERVICE_UNAVAILABLE` | Financing data cannot be retrieved right now. This is a service-wide condition unrelated to your request or account. | 503 |
| `FINANCING_START_DATE_INVALID` | `VALIDATION_ERROR` | The start\_date value is not a valid RFC 3339 timestamp. | 400 |
| `FINANCING_START_DATE_REQUIRED` | `REQUIRED_FIELD_MISSING` | The start\_date field is required but was not provided. | 400 |
| `FINANCING_WITHDRAWAL_POWER_INVALID_ARGUMENT` | `VALIDATION_ERROR` | One or more parameters in the withdrawal power request are invalid, such as portfolio\_id or symbol. | 400 |
| `FINANCING_WITHDRAWAL_POWER_SYMBOL_REQUIRED` | `REQUIRED_FIELD_MISSING` | The symbol field is required but was not provided. | 400 |
| `FUNDING_SETTINGS_EXCESS_TARGET_AMOUNT_INVALID` | `VALIDATION_ERROR` | The excess\_funds\_target\_amount field is missing, is not a valid decimal number, or is negative. | 400 |
| `LOCATE_AMOUNT_REQUIRED` | `REQUIRED_FIELD_MISSING` | The amount field is required but was not provided. | 400 |
| `LOCATE_AVAILABILITY_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No locate availability data was found for the requested entity and date. | 404 |
| `LOCATE_DATE_INVALID` | `VALIDATION_ERROR` | The locate\_date value is not a valid YYYY-MM-DD date. | 400 |
| `LOCATE_DATE_REQUIRED` | `REQUIRED_FIELD_MISSING` | The locate\_date field is required but was not provided. | 400 |
| `LOCATE_FAILED_PRECONDITION` | `FAILED_PRECONDITION` | The stock locate request failed a precondition, such as no availability for the requested currency or portfolio margin not being enabled. | 400 |
| `LOCATE_IDS_INVALID` | `VALIDATION_ERROR` | One or more values in locate\_ids are not valid UUIDs. | 400 |
| `LOCATE_REQUEST_INVALID` | `VALIDATION_ERROR` | The stock locate request is invalid — for example, both locate\_date and locate\_ids are missing, or the requested locate\_date is in the past or too far in the future. | 400 |
| `LOCATE_SYMBOL_REQUIRED` | `REQUIRED_FIELD_MISSING` | The symbol field is required but was not provided. | 400 |
| `MARGIN_CONVERSION_FAILED_PRECONDITION` | `VALIDATION_ERROR` | The margin conversions request failed a precondition, such as the portfolio not being in a state that supports margin conversions. | 400 |
| `MARGIN_CONVERSION_REQUEST_INVALID` | `VALIDATION_ERROR` | One or more parameters in the margin conversions request are invalid, such as portfolio\_id, start\_date, or end\_date. | 400 |
| `MARGIN_INFORMATION_REQUEST_INVALID` | `VALIDATION_ERROR` | One or more parameters in the margin information request are invalid, such as entity\_id. | 400 |
| `MARGIN_SUMMARY_FAILED_PRECONDITION` | `VALIDATION_ERROR` | The margin summaries request failed a precondition, such as the entity not being in a state that supports margin summaries. | 400 |
| `MARGIN_SUMMARY_RANGE_INVALID` | `VALIDATION_ERROR` | The requested start\_date to end\_date range exceeds the maximum trailing period of 3 months for margin summaries. | 400 |
| `TIERED_PRICING_EFFECTIVE_AT_INVALID` | `VALIDATION_ERROR` | The effective\_at value is not a valid RFC 3339 timestamp. | 400 |
| `TIERED_PRICING_FAILED_PRECONDITION` | `FAILED_PRECONDITION` | The tiered pricing request failed a precondition, such as the entity not being enabled for tiered pricing. | 400 |
| `TIERED_PRICING_REQUEST_INVALID` | `VALIDATION_ERROR` | One or more parameters in the tiered pricing request are invalid, such as entity\_id or effective\_at. | 400 |

## Market data

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `MARKET_DATA_INVALID_ARGUMENT` | `VALIDATION_ERROR` | The request contained an invalid argument, such as an unrecognized entity\_id, cursor, or sort\_direction. | 400 |
| `MARKET_DATA_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No market data was found for the given entity\_id. | 404 |

## Onchain

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `ONCHAIN_ADDRESS_GROUP_REQUEST_INVALID` | `VALIDATION_ERROR` | The onchain address group create, update, or delete request contained invalid data and could not be processed. | 400 |
| `ONCHAIN_TRANSACTION_CHAIN_ID_INVALID` | `VALIDATION_ERROR` | The chain\_id field is not a valid integer, or it must be 1 when using the Flashbots RPC endpoint. | 400 |
| `ONCHAIN_TRANSACTION_CHAIN_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The chain\_id field is required within evm\_params for transactions on EVM-based networks. | 400 |
| `ONCHAIN_TRANSACTION_DISABLE_DYNAMIC_NONCE_INVALID` | `VALIDATION_ERROR` | The disable\_dynamic\_nonce field must be false when replaced\_transaction\_id is set to replace an existing transaction. | 400 |
| `ONCHAIN_TRANSACTION_EVM_PARAMS_INVALID` | `VALIDATION_ERROR` | The evm\_params field was provided but the destination wallet is on a non-EVM network, such as Solana, where EVM-specific parameters are not supported. | 400 |
| `ONCHAIN_TRANSACTION_EVM_PARAMS_REQUIRED` | `REQUIRED_FIELD_MISSING` | The evm\_params field is required when the destination wallet is on an EVM-based network. | 400 |
| `ONCHAIN_TRANSACTION_NETWORK_NAME_REQUIRED` | `REQUIRED_FIELD_MISSING` | The network\_name field is required when submitting a transaction through a custom RPC endpoint. | 400 |
| `ONCHAIN_TRANSACTION_RAW_UNSIGNED_TXN_INVALID` | `VALIDATION_ERROR` | The raw\_unsigned\_txn field is not a valid hex-encoded string. | 400 |
| `ONCHAIN_TRANSACTION_RAW_UNSIGNED_TXN_REQUIRED` | `REQUIRED_FIELD_MISSING` | The raw\_unsigned\_txn field is required but was not provided. | 400 |
| `ONCHAIN_TRANSACTION_REPLACED_TRANSACTION_ID_INVALID` | `VALIDATION_ERROR` | The replaced\_transaction\_id field is not a valid transaction identifier. | 400 |
| `ONCHAIN_TRANSACTION_REQUEST_INVALID` | `VALIDATION_ERROR` | The onchain transaction request failed validation because of an invalid parameter, an unsupported wallet type, or a malformed evm\_params value. | 400 |
| `ONCHAIN_TRANSACTION_RPC_URL_INVALID` | `VALIDATION_ERROR` | The custom RPC endpoint provided cannot be used, either because the wallet is not on an EVM-based network or because the call to that endpoint failed. | 400 |

## Order

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `ORDER_BEING_REPLACED` | `FAILED_PRECONDITION` | The order is currently being replaced (edited) and cannot be canceled while that is in progress. | 400 |
| `ORDER_CANCEL_DUPLICATE` | `VALIDATION_ERROR` | A cancel request for this order has already been submitted and is still being processed. | 400 |
| `ORDER_CANCEL_NOT_ALLOWED` | `PERMISSION_DENIED` | This order is not allowed to be canceled. | 403 |
| `ORDER_CLIENT_ORDER_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The client\_order\_id field is required to accept a quote. | 400 |
| `ORDER_CLIENT_QUOTE_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The client\_quote\_id field is required for a quote request. | 400 |
| `ORDER_DISPLAY_SIZE_INVALID` | `VALIDATION_ERROR` | The display size is invalid, either because both display size fields were specified or because the display size field does not match the currency of the order size. | 400 |
| `ORDER_DUPLICATE_CLIENT_ORDER_ID` | `VALIDATION_ERROR` | An order with this client\_order\_id already exists. Use a unique client\_order\_id for each new order. | 400 |
| `ORDER_FAILED_PRECONDITION` | `FAILED_PRECONDITION` | The order request could not be completed because a required precondition was not met, for example an account needed to process the order could not be found or created. | 400 |
| `ORDER_FILLS_END_DATE_INVALID` | `VALIDATION_ERROR` | The end\_date field is not a valid timestamp. | 400 |
| `ORDER_FILLS_LIMIT_INVALID` | `VALIDATION_ERROR` | The limit field for a fills query is outside the allowed range of 1 to 3000. | 400 |
| `ORDER_FILLS_START_DATE_INVALID` | `VALIDATION_ERROR` | The start\_date field is not a valid timestamp. | 400 |
| `ORDER_FILLS_START_DATE_REQUIRED` | `REQUIRED_FIELD_MISSING` | The start\_date field is required for this fills query. | 400 |
| `ORDER_FOK_NOT_ENABLED` | `VALIDATION_ERROR` | The FILL\_OR\_KILL time-in-force is not enabled for this portfolio. | 400 |
| `ORDER_FULLY_FILLED` | `FAILED_PRECONDITION` | The order is fully filled and can no longer be canceled. | 400 |
| `ORDER_ID_INVALID` | `VALIDATION_ERROR` | The order\_id provided is not a valid UUID. | 400 |
| `ORDER_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The order\_id field is missing from the request. | 400 |
| `ORDER_LIMIT_EXCEEDED` | `VALIDATION_ERROR` | The query would return more results than this endpoint allows. Narrow the query or use the Websocket API for a full stream of results. | 400 |
| `ORDER_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No order was found matching the provided order\_id. | 404 |
| `ORDER_PEG_NOT_ENABLED` | `VALIDATION_ERROR` | PEG orders are not enabled for this portfolio. | 400 |
| `ORDER_PEG_OFFSET_TYPE_INVALID` | `VALIDATION_ERROR` | The peg\_offset\_type is not a supported value for a PEG order. | 400 |
| `ORDER_PRICE_INVALID` | `VALIDATION_ERROR` | The order price is invalid, either because limit\_price could not be parsed as a number or because a limit price was supplied for a market order. | 400 |
| `ORDER_PRODUCT_ID_INVALID` | `VALIDATION_ERROR` | The product\_id is not a valid or currently tradable product for this request. | 400 |
| `ORDER_PRODUCT_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The product\_id field is required for this request. | 400 |
| `ORDER_QUOTE_DURATION_INVALID` | `VALIDATION_ERROR` | The quote\_duration\_ms field is outside the allowed range. | 400 |
| `ORDER_QUOTE_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The quote\_id field is required to accept a quote. | 400 |
| `ORDER_REJECTED` | `VALIDATION_ERROR` | The order was rejected during processing and was not placed. | 400 |
| `ORDER_REQUEST_INVALID` | `VALIDATION_ERROR` | The order request failed validation, such as an invalid stp\_id, price, size, or commission\_rate. | 400 |
| `ORDER_RESOURCE_NOT_FOUND` | `VALIDATION_ERROR` | No order matching the given order\_id was found for this portfolio. | 400 |
| `ORDER_RFQ_NOT_ENABLED` | `PERMISSION_DENIED` | This portfolio is not allowed to submit RFQ (request-for-quote) requests. | 403 |
| `ORDER_RFQ_SIQ_NOT_ENABLED` | `PERMISSION_DENIED` | Size-in-quote RFQ requests are not enabled for this portfolio. | 403 |
| `ORDER_SERVICE_UNAVAILABLE` | `SERVICE_UNAVAILABLE` | The trading service needed to process this order request is temporarily unavailable. | 503 |
| `ORDER_SESSION_INVALID` | `VALIDATION_ERROR` | The FCM trading session associated with this order is not valid for the requested cancel operation. | 400 |
| `ORDER_SIDE_INVALID` | `VALIDATION_ERROR` | The side field is not a supported order side. Specify BUY or SELL. | 400 |
| `ORDER_SIDE_REQUIRED` | `REQUIRED_FIELD_MISSING` | The side field is required and was not provided. | 400 |
| `ORDER_SIZE_INVALID` | `VALIDATION_ERROR` | The order size is invalid, either because it could not be parsed as a number or because both base\_quantity and quote\_value were specified. | 400 |
| `ORDER_SIZE_REQUIRED` | `REQUIRED_FIELD_MISSING` | The order size is missing. Specify either base\_quantity or quote\_value. | 400 |
| `ORDER_STATUS_INVALID` | `VALIDATION_ERROR` | The requested order\_status values include non-terminal statuses (such as OPEN or PENDING), which this endpoint does not support. Use the Open Orders endpoint, or the Websocket/FIX API, to retrieve non-terminal orders. | 400 |
| `ORDER_STOP_LIMIT_NOT_ENABLED` | `VALIDATION_ERROR` | STOP\_LIMIT orders are not enabled for this portfolio. | 400 |
| `ORDER_STOP_PRICE_INVALID` | `VALIDATION_ERROR` | The stop\_price for a STOP\_LIMIT order is missing or could not be parsed as a number. | 400 |
| `ORDER_TIF_NOT_ENABLED` | `VALIDATION_ERROR` | The requested time\_in\_force (such as FILL\_OR\_KILL) is not enabled for this portfolio. | 400 |
| `ORDER_TIME_IN_FORCE_INVALID` | `VALIDATION_ERROR` | The time\_in\_force value is not compatible with the requested order type or post-only flag. | 400 |
| `ORDER_TIME_RANGE_INVALID` | `VALIDATION_ERROR` | The order is missing a start\_time or end\_time required for its order type or time-in-force. | 400 |
| `ORDER_TYPE_BLOCK_UNSUPPORTED` | `VALIDATION_ERROR` | Orders of type BLOCK cannot be created or previewed through this endpoint. | 400 |
| `ORDER_TYPE_NOT_ALLOWED` | `VALIDATION_ERROR` | The requested order type is not allowed on this endpoint (for example, BLOCK or RFQ orders submitted via CreateOrder). | 400 |
| `ORDER_TYPE_RFQ_UNSUPPORTED` | `VALIDATION_ERROR` | Orders of type RFQ cannot be created or previewed through this endpoint. Use the RFQ (/rfq) and accept quote (/accept\_quote) endpoints instead. | 400 |

## Payment method

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `PAYMENT_METHOD_ID_INVALID` | `VALIDATION_ERROR` | The payment\_method\_id field is not a valid identifier. | 400 |
| `PAYMENT_METHOD_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The payment\_method\_id field is required but was not provided. | 400 |
| `PAYMENT_METHOD_NOT_FOUND` | `RESOURCE_NOT_FOUND` | The requested payment method could not be found, either because the payment\_method\_id does not exist or it does not belong to the specified entity\_id. | 404 |
| `PAYMENT_METHOD_REQUEST_INVALID` | `VALIDATION_ERROR` | The payment method request contains an invalid argument. | 400 |

## Portfolio

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `PORTFOLIO_BALANCES_INVALID_ARGUMENT` | `VALIDATION_ERROR` | The portfolio balances request contains an invalid cursor or filter. | 400 |
| `PORTFOLIO_BALANCES_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No balances were found for the requested portfolio. | 404 |
| `PORTFOLIO_ID_INVALID` | `VALIDATION_ERROR` | The portfolio\_id is not a valid UUID. | 400 |
| `PORTFOLIO_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The portfolio\_id field is required but was not provided. | 400 |
| `PORTFOLIO_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No portfolio was found matching the provided portfolio\_id. | 404 |
| `PORTFOLIO_TYPE_UNSUPPORTED` | `VALIDATION_ERROR` | The portfolio's type does not support this operation. | 400 |
| `PORTFOLIO_USERS_CURSOR_INVALID` | `VALIDATION_ERROR` | The pagination cursor does not match any user in the result set. | 400 |
| `PORTFOLIO_USERS_LIMIT_INVALID` | `VALIDATION_ERROR` | The limit parameter for portfolio users is out of the valid range. | 400 |

## Position

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `ENTITY_POSITION_INVALID_ARGUMENT` | `VALIDATION_ERROR` | The position request contains an invalid argument, such as a malformed portfolio\_id or other filter. | 400 |
| `ENTITY_POSITION_LIMIT_INVALID` | `VALIDATION_ERROR` | The limit field must be greater than 0 and no greater than the maximum allowed value. | 400 |
| `ENTITY_POSITION_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No position data was found for the given entity or portfolio. | 404 |

## Product

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `CANDLE_REQUEST_INVALID` | `VALIDATION_ERROR` | The request for candle data is invalid because a field, such as start\_time or end\_time, is missing or malformed. | 400 |
| `CANDLE_TIME_RANGE_INVALID` | `VALIDATION_ERROR` | The requested start\_time and end\_time combination is not a valid candle time range for the given granularity. | 400 |
| `PRODUCT_FUTURES_NOT_ENABLED` | `VALIDATION_ERROR` | Futures products are not enabled for the specified portfolio\_id. | 400 |
| `PRODUCT_LIMIT_INVALID` | `VALIDATION_ERROR` | The limit field must be a positive number. | 400 |
| `PRODUCT_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No products were found matching the requested criteria. | 404 |
| `PRODUCT_OPTIONS_NOT_ENABLED` | `VALIDATION_ERROR` | Options products are not enabled for the specified portfolio\_id. | 400 |

## Rewards

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `REWARDS_API_FEATURE_DISABLED` | `PERMISSION_DENIED` | The Rewards Rate API is not enabled for this entity or portfolio. | 403 |
| `REWARDS_ENTITY_NOT_ENROLLED` | `FAILED_PRECONDITION` | The entity is not enrolled in Prime Rewards. | 400 |
| `REWARDS_REQUEST_INVALID` | `VALIDATION_ERROR` | The rewards rate request is invalid. | 400 |

## Staking

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `STAKING_ACTION_TYPE_UNSUPPORTED` | `VALIDATION_ERROR` | The action\_type field is not a supported staking action (initiate, unstake, or claim rewards). | 400 |
| `STAKING_AMOUNT_EXCEEDS_BONDABLE_BALANCE` | `VALIDATION_ERROR` | The requested amount to stake exceeds the portfolio's available bondable balance for the given currency. | 400 |
| `STAKING_AMOUNT_EXCEEDS_UNBONDABLE_BALANCE` | `VALIDATION_ERROR` | The requested unstake amount is greater than the wallet's, validator's, or portfolio's available unbondable balance. | 400 |
| `STAKING_AMOUNT_INVALID` | `VALIDATION_ERROR` | The amount field is not a valid positive decimal number, or does not match the sum of the provided validator allocation amounts. | 400 |
| `STAKING_AMOUNT_REQUIRED` | `REQUIRED_FIELD_MISSING` | The amount field is required but was not provided. | 400 |
| `STAKING_AMOUNT_VALIDATOR_PROVIDER_CONFLICT` | `VALIDATION_ERROR` | The amount and validator\_provider fields are mutually exclusive; specify at most one. | 400 |
| `STAKING_BALANCE_NOT_FOUND` | `FAILED_PRECONDITION` | No balance could be found for the requested currency\_symbol on this portfolio. | 400 |
| `STAKING_CURRENCY_SYMBOL_REQUIRED` | `REQUIRED_FIELD_MISSING` | The currency\_symbol field is required for this staking or unstaking operation. | 400 |
| `STAKING_CURRENCY_UNSUPPORTED` | `VALIDATION_ERROR` | The requested currency or wallet's asset is not supported for this staking operation. | 400 |
| `STAKING_CUSTOM_AMOUNT_NOT_SUPPORTED` | `VALIDATION_ERROR` | A custom amount cannot be specified for this currency and action combination. | 400 |
| `STAKING_DELEGATED_ADDRESS_NOT_FOUND` | `VALIDATION_ERROR` | The wallet has no delegated-to address on record, which is required for this currency's staking flow. | 400 |
| `STAKING_DESTINATION_ADDRESS_INVALID` | `VALIDATION_ERROR` | The resolved destination address for this staking, unstaking, or claim-rewards action is empty or malformed. | 400 |
| `STAKING_END_DATE_INVALID` | `VALIDATION_ERROR` | The end\_date field is not a valid date in YYYY-MM-DD format. | 400 |
| `STAKING_IDEMPOTENCY_KEY_INVALID` | `VALIDATION_ERROR` | The idempotency\_key provided is not a valid UUID. | 400 |
| `STAKING_IDEMPOTENCY_KEY_REQUIRED` | `REQUIRED_FIELD_MISSING` | The idempotency\_key field is required for this staking or unstaking operation. | 400 |
| `STAKING_INSUFFICIENT_BALANCE` | `VALIDATION_ERROR` | The wallet has no stakeable, unbondable, or claimable balance available for this operation. | 400 |
| `STAKING_NO_ELIGIBLE_WALLETS` | `VALIDATION_ERROR` | No wallet eligible for staking or unstaking was found for the given portfolio\_id and currency\_symbol. | 400 |
| `STAKING_NO_VALIDATORS_AVAILABLE` | `VALIDATION_ERROR` | No Coinbase-operated validators are currently available for the requested currency. | 400 |
| `STAKING_NOT_ENABLED` | `PERMISSION_DENIED` | Wallet-level staking has not been enabled for this portfolio. | 403 |
| `STAKING_PRECONDITION_FAILED` | `FAILED_PRECONDITION` | The requested staking, unstaking, or claim-rewards action is not currently allowed for this wallet. | 400 |
| `STAKING_PROVIDER_NO_UNBONDABLE_BALANCE` | `FAILED_PRECONDITION` | No unbondable balance is currently available for the specified validator\_provider on this portfolio and currency. | 400 |
| `STAKING_PROVIDER_UNSTAKE_NOT_ENABLED` | `PERMISSION_DENIED` | Provider-level unstaking (unstaking all validators for a given validator\_provider) is not enabled for this portfolio. | 403 |
| `STAKING_REQUEST_INVALID` | `VALIDATION_ERROR` | The staking, unstaking, or claim-rewards request contained an invalid parameter, such as an unsupported amount, address, option, or allocation. | 400 |
| `STAKING_SERVICE_UNAVAILABLE` | `SERVICE_UNAVAILABLE` | The staking service could not process the request after repeated attempts. | 503 |
| `STAKING_UNSTAKE_NOT_AVAILABLE` | `VALIDATION_ERROR` | A full unstake is not currently available for this wallet. | 400 |
| `STAKING_VALIDATOR_ADDRESS_NOT_SUPPORTED` | `VALIDATION_ERROR` | A custom validator\_address cannot be specified for this currency. | 400 |
| `STAKING_VALIDATOR_ALLOCATION_INCOMPLETE` | `VALIDATION_ERROR` | Each entry in validator\_allocations must include both a validator\_address and an amount. | 400 |
| `STAKING_VALIDATOR_ALLOCATIONS_NOT_ENABLED` | `PERMISSION_DENIED` | The validator\_allocations field is not enabled for this portfolio. | 403 |
| `STAKING_VALIDATOR_ALLOCATIONS_UNSUPPORTED_CURRENCY` | `VALIDATION_ERROR` | The validator\_allocations field is only supported for ETH unstaking. | 400 |
| `STAKING_VALIDATOR_NOT_ELIGIBLE` | `VALIDATION_ERROR` | The specified validator\_address does not belong to this wallet or is not eligible for validator allocations. | 400 |
| `STAKING_VALIDATOR_PROVIDER_NOT_SUPPORTED` | `VALIDATION_ERROR` | The validator\_provider value provided is not a supported provider. | 400 |
| `STAKING_VALIDATOR_PROVIDER_REQUIRED` | `REQUIRED_FIELD_MISSING` | The validator\_provider field is required for a provider-scoped unstake request. | 400 |
| `STAKING_WALLET_COLD_ADDRESS_NOT_FOUND` | `VALIDATION_ERROR` | The wallet does not have a cold address on record, which is required to complete this staking operation. | 400 |
| `STAKING_WALLET_OR_PORTFOLIO_INVALID` | `VALIDATION_ERROR` | The wallet\_id does not exist, is not a valid identifier, or does not belong to the given portfolio\_id. | 400 |

## Transaction

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `TRANSACTION_CURSOR_INVALID` | `VALIDATION_ERROR` | The cursor field is not a valid pagination token. Omit it or use the cursor value returned from a previous response. | 400 |
| `TRANSACTION_FILTER_INVALID` | `VALIDATION_ERROR` | The combination of request filters is invalid, such as specifying symbols together with the ONCHAIN\_TRANSACTION type. | 400 |
| `TRANSACTION_ID_INVALID` | `VALIDATION_ERROR` | The transaction\_id field is not a valid UUID. | 400 |
| `TRANSACTION_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The transaction\_id field is required but was not provided. | 400 |
| `TRANSACTION_IDS_INVALID` | `VALIDATION_ERROR` | One or more values in transaction\_ids are missing, exceed the maximum allowed count, or are not valid UUIDs. | 400 |
| `TRANSACTION_LIMIT_EXCEEDED` | `VALIDATION_ERROR` | The limit field exceeds the maximum number of transactions that can be returned in a single request. | 400 |
| `TRANSACTION_NOT_FOUND` | `RESOURCE_NOT_FOUND` | The requested transaction could not be found for this portfolio, or a transaction referenced in transaction\_ids does not belong to it. | 404 |
| `TRANSACTION_PARAMS_INVALID` | `VALIDATION_ERROR` | One or more request parameters, such as portfolio\_id, transaction\_ids, cursor, or limit, failed validation. | 400 |
| `TRANSACTION_SERVICE_UNAVAILABLE` | `SERVICE_UNAVAILABLE` | The transaction data needed to fulfill this request is temporarily unavailable. | 503 |
| `TRANSACTION_TRAVEL_RULE_DATA_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No travel rule data is available for the specified transaction. | 404 |
| `TRANSACTION_TRAVEL_RULE_PARTY_INVALID` | `VALIDATION_ERROR` | The originator or beneficiary information provided for the travel rule submission is missing or fails identity validation. | 400 |
| `TRANSACTION_TRAVEL_RULE_STATUS_INVALID` | `VALIDATION_ERROR` | The travel\_rule\_status filter contains a value that is not recognized. | 400 |
| `TRANSACTION_TYPE_UNSUPPORTED` | `VALIDATION_ERROR` | The transaction does not support the requested operation, such as submitting travel rule data for a transaction that is not a deposit. | 400 |

## Wallet

| Name | Parent error code | Description | HTTP status |
| - | - | - | - |
| `WALLET_AMOUNT_REQUIRED` | `REQUIRED_FIELD_MISSING` | The amount field is required but was not provided. | 400 |
| `WALLET_BALANCES_LIMIT_INVALID` | `VALIDATION_ERROR` | The limit field is outside the allowed range for this request. | 400 |
| `WALLET_COUNTERPARTY_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The counterparty\_id field is required when destination\_type is a counterparty destination. | 400 |
| `WALLET_CURRENCY_SYMBOL_REQUIRED` | `REQUIRED_FIELD_MISSING` | The currency\_symbol field is required but was not provided. | 400 |
| `WALLET_DEPOSIT_REQUEST_INVALID` | `VALIDATION_ERROR` | The deposit request is invalid or not supported for this wallet. | 400 |
| `WALLET_DEPOSIT_TYPE_REQUIRED` | `REQUIRED_FIELD_MISSING` | The deposit\_type field is required but was not provided. | 400 |
| `WALLET_DESTINATION_TYPE_INVALID` | `VALIDATION_ERROR` | The destination\_type field is not a supported value for this operation. | 400 |
| `WALLET_DESTINATION_TYPE_REQUIRED` | `REQUIRED_FIELD_MISSING` | The destination\_type field is required but was not provided. | 400 |
| `WALLET_EXTERNAL_ID_INVALID` | `VALIDATION_ERROR` | The external\_id field is not valid UTF-8, or exceeds 255 bytes. | 400 |
| `WALLET_FAILED_PRECONDITION` | `FAILED_PRECONDITION` | The wallet request failed a precondition, such as the wallet not being able to accept the requested action. | 400 |
| `WALLET_ID_INVALID` | `VALIDATION_ERROR` | The wallet\_id field is not a valid UUID. | 400 |
| `WALLET_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The wallet\_id field is required but was not included in the request. | 400 |
| `WALLET_IDEMPOTENCY_KEY_INVALID` | `VALIDATION_ERROR` | The idempotency\_key field is not a valid UUID. | 400 |
| `WALLET_IDEMPOTENCY_KEY_REQUIRED` | `REQUIRED_FIELD_MISSING` | The idempotency\_key field is required but was not provided. | 400 |
| `WALLET_METADATA_INVALID` | `VALIDATION_ERROR` | The metadata field is not a valid JSON object, or a nested value within it is not a JSON object with string values. | 400 |
| `WALLET_NAME_REQUIRED` | `REQUIRED_FIELD_MISSING` | The name field is required but was not provided. | 400 |
| `WALLET_NETWORK_FAMILY_NOT_ALLOWED` | `VALIDATION_ERROR` | The network\_family field must not be set when wallet\_type is not ONCHAIN. | 400 |
| `WALLET_NETWORK_FAMILY_REQUIRED` | `REQUIRED_FIELD_MISSING` | The network\_family field is required when wallet\_type is ONCHAIN. | 400 |
| `WALLET_NETWORK_ID_REQUIRED` | `REQUIRED_FIELD_MISSING` | The network\_id field is required but was not provided. | 400 |
| `WALLET_NETWORK_INVALID` | `VALIDATION_ERROR` | The network identifier is malformed. It must be in the format {network_id}-{network_type} (e.g. base-mainnet), with no spaces, and each part no longer than 20 characters. | 400 |
| `WALLET_NETWORK_REQUIRED` | `VALIDATION_ERROR` | A network must be specified for crypto deposits because the wallet does not have a default network configured. | 400 |
| `WALLET_NETWORK_TYPE_NOT_SUPPORTED` | `VALIDATION_ERROR` | The network type portion of network\_id is not a supported value for this environment. | 400 |
| `WALLET_NETWORK_TYPE_REQUIRED` | `REQUIRED_FIELD_MISSING` | The type field on the network object is required but was not provided. | 400 |
| `WALLET_NOT_DEPOSITABLE` | `FAILED_PRECONDITION` | The wallet cannot accept deposits. | 400 |
| `WALLET_NOT_FOUND` | `RESOURCE_NOT_FOUND` | No wallet was found matching the provided wallet\_id, or it does not belong to the specified portfolio. | 404 |
| `WALLET_ONCHAIN_SETUP_UNAVAILABLE` | `FAILED_PRECONDITION` | Onchain wallet setup for this network family has not been completed yet, and must be done through the Prime web application before creating this wallet via the API. | 400 |
| `WALLET_ONCHAIN_SYMBOLS_NOT_ALLOWED` | `VALIDATION_ERROR` | The symbols filter cannot be set when the wallet type is ONCHAIN. | 400 |
| `WALLET_PORTFOLIO_CREDIT_FROZEN` | `PERMISSION_DENIED` | The portfolio's credit is frozen, preventing this transaction. Contact support to resolve this. | 403 |
| `WALLET_REQUEST_INVALID` | `VALIDATION_ERROR` | The request contains an invalid argument for this wallet operation. | 400 |
| `WALLET_SERVICE_UNAVAILABLE` | `SERVICE_UNAVAILABLE` | The service needed to fetch or process wallet data is temporarily unavailable, or wallet balances could not be resolved. | 503 |
| `WALLET_SYMBOL_REQUIRED` | `REQUIRED_FIELD_MISSING` | The symbol field is required for wallet types other than ONCHAIN. | 400 |
| `WALLET_TRANSFER_DESTINATION_INVALID` | `VALIDATION_ERROR` | The destination wallet ID is not a valid UUID, or is the same as the source wallet\_id. | 400 |
| `WALLET_TRANSFER_DESTINATION_REQUIRED` | `REQUIRED_FIELD_MISSING` | The destination wallet ID is required for an internal wallet transfer. | 400 |
| `WALLET_TYPE_NOT_SUPPORTED` | `VALIDATION_ERROR` | The wallet's type does not support this operation. | 400 |
| `WALLET_VISIBILITY_STATUSES_INVALID` | `VALIDATION_ERROR` | The visibility\_statuses filter contains more values than are allowed. | 400 |
