# CCIP v1.5.0 Error Codes and Messages API Reference
Source: https://docs.chain.link/ccip/v1/evm/api-reference/v1.5.0/errors

> For the complete documentation index, see [llms.txt](/llms.txt).

> **NOTE: Integrate Chainlink CCIP v1.5.0 into your project**
>
> ### npm
>
> If you use [NPM](https://www.npmjs.com/), install the [@chainlink/contracts-ccip NPM package](https://www.npmjs.com/package/@chainlink/contracts-ccip):
>
> ```shell
> npm install @chainlink/contracts-ccip@1.5.0
> ```
>
> ### yarn
>
> If you use [Yarn](https://yarnpkg.com/), install the [@chainlink/contracts-ccip NPM package](https://www.npmjs.com/package/@chainlink/contracts-ccip):
>
> ```shell
> yarn add @chainlink/contracts-ccip@1.5.0
> ```
>
> ### foundry
>
> If you use [Foundry](https://book.getfoundry.sh/), install the package:
>
> ```shell
> forge install smartcontractkit/ccip@5c711214167b7e6f05cf6de74bdab9f6e26763b2
> ```

If you get errors when invoking the `ccipSend` [function](/ccip/v1/evm/api-reference/v1.5.0/i-router-client#ccipsend), the errors might be thrown either by the CCIP router or by one of the downstream contracts called by the CCIP router. Below is a compiled list of potential errors you might encounter. Referencing this list will enable you to capture and handle these exceptions gracefully.

## Router Errors

| Error                         | Parameters                 | Error selector | Description                                                                                         |
| ----------------------------- | -------------------------- | -------------- | --------------------------------------------------------------------------------------------------- |
| `UnsupportedDestinationChain` | `uint64 destChainSelector` | `0xae236d9c`   | Thrown when the destination chain is not supported.                                                 |
| `InsufficientFeeTokenAmount`  | -                          | `0x07da6ee6`   | Thrown when the CCIP fees are paid with native tokens, but not enough is sent with the transaction. |
| `InvalidMsgValue`             | -                          | `0x1841b4e1`   | Thrown when the CCIP fees are *not* paid in native tokens, but `msg.value` is non-zero.             |

## OnRamp Errors

| Error                         | Parameters                              | Error selector | Description                                                                                                             |
| ----------------------------- | --------------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------- |
| `CannotSendZeroTokens`        | -                                       | `0x5cf04449`   | Thrown when the user tries to send a zero amount of tokens.                                                             |
| `InvalidAddress`              | `bytes encodedAddress`                  | `0x370d875f`   | Thrown when the receiver address is invalid.                                                                            |
| `InvalidChainSelector`        | `uint64 chainSelector`                  | `0xd9a9cd68`   | Thrown when an invalid destination chain selector is used.                                                              |
| `InvalidExtraArgsTag`         | -                                       | `0x5247fdce`   | Thrown when an invalid extra arguments tag is used.                                                                     |
| `MaxFeeBalanceReached`        | -                                       | `0xe5c7a491`   | Thrown when the onRamp has reached its maximum fee storage capacity. If it is full, it cannot process new transactions. |
| `MessageGasLimitTooHigh`      | -                                       | `0x4c4fc93a`   | Thrown when the gas limit is too high.                                                                                  |
| `MessageTooLarge`             | `uint256 maxSize`, `uint256 actualSize` | `0x86933789`   | Thrown when the message size exceeds the maximum allowed size.                                                          |
| `MustBeCalledByRouter`        | -                                       | `0x1c0a3529`   | This error should never be thrown as the router always makes the call.                                                  |
| `NotAFeeToken`                | `address token`                         | `0xa7499d20`   | Thrown when an unsupported fee token is used.                                                                           |
| `RouterMustSetOriginalSender` | -                                       | `0xa4ec7479`   | This error should never be thrown as the router always sets the sender.                                                 |
| `SenderNotAllowed`            | `address sender`                        | `0xd0d25976`   | Thrown when the sender is not allowlisted.                                                                              |
| `UnsupportedNumberOfTokens`   | -                                       | `0x4c056b6a`   | Thrown when too many tokens are involved in the transfer.                                                               |
| `UnsupportedToken`            | `IERC20 token`                          | `0xbf16aab6`   | Thrown when an unsupported transfer token is used.                                                                      |

## Rate Limiter Errors

| Error                               | Parameters                                                              | Error selector | Description                                                                                                                                                                                                                      |
| ----------------------------------- | ----------------------------------------------------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `AggregateValueMaxCapacityExceeded` | `uint256 capacity`, `uint256 requested`                                 | `0xf94ebcd1`   | Thrown when the user requests to transfer more value than the capacity of the aggregate rate limit bucket.                                                                                                                       |
| `AggregateValueRateLimitReached`    | `uint256 minWaitInSeconds`, `uint256 available`                         | `0x15279c08`   | Thrown when the user requests to transfer more value than currently available in the bucket. The user might have to wait for at least `minWaitInSeconds` for enough availability or transfer the currently `available` amount.   |
| `BucketOverfilled`                  | -                                                                       | `0x9725942a`   | This error should never be thrown as it indicates an invalid bucket state.                                                                                                                                                       |
| `PriceNotFoundForToken`             | `address token`                                                         | `0x9a655f7b`   | Thrown when a price cannot be found for a specific token.                                                                                                                                                                        |
| `TokenMaxCapacityExceeded`          | `uint256 capacity`, `uint256 requested`, `address tokenAddress`         | `0x1a76572a`   | Thrown when the user requests to transfer more of a token than the capacity of the bucket.                                                                                                                                       |
| `TokenRateLimitReached`             | `uint256 minWaitInSeconds`, `uint256 available`, `address tokenAddress` | `0xd0c8d23a`   | Thrown when the user requests to transfer more of a token than currently available in the bucket. The user might have to wait at least `minWaitInSeconds` for enough availability, or transfer the currently `available` amount. |

## Token (ERC20) Errors

| Error                                      | Description                                                   |
| ------------------------------------------ | ------------------------------------------------------------- |
| `ERC20: burn amount exceeds balance`       | Thrown when the amount to be burned exceeds the pool balance. |
| `ERC20: transfer amount exceeds allowance` | Thrown when the transfer amount exceeds the allowance.        |

## Price Registry Errors

| Error               | Parameters                                                            | Error selector | Description                                |
| ------------------- | --------------------------------------------------------------------- | -------------- | ------------------------------------------ |
| `ChainNotSupported` | `uint64 chain`                                                        | `0x2e59db3a`   | Thrown when a chain is not supported.      |
| `StaleGasPrice`     | `uint64 destChainSelector`, `uint256 threshold`, `uint256 timePassed` | `0xf08bcb3e`   | Thrown when the gas price is stale.        |
| `TokenNotSupported` | `address token`                                                       | `0x06439c6b`   | Thrown when a token is not supported.      |
| `StaleTokenPrice`   | `address token`, `uint256 threshold`, `uint256 timePassed`            | `0xc65fdfca`   | Thrown when the price of a token is stale. |