> ## 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         |

## 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         |
