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

# Errors

> Handle product states and infrastructure failures without parsing messages.

Use SDK helpers instead of parsing raw error messages.

```ts theme={null}
import {
  isActionBlockedError,
  shlpApiErrorCode,
} from "@arc/shlp-sdk/errors";

try {
  await shlp.quoteDepositAction(input);
} catch (error) {
  const code = shlpApiErrorCode(error);

  if (isActionBlockedError(error)) {
    showProductState(code);
    return;
  }

  showRetryableError();
}
```

## Product-state examples

| Code                    | Partner behavior                                     |
| ----------------------- | ---------------------------------------------------- |
| `DEPOSITS_PAUSED`       | Disable deposit                                      |
| `DEPOSITS_NOT_READY`    | Disable deposit and explain operations are not ready |
| `OPERATIONS_NOT_READY`  | Disable keeper-dependent action                      |
| `MIN_DEPOSIT_NOT_MET`   | Ask for a larger amount                              |
| `CAP_EXCEEDED`          | Show cap reached                                     |
| `BUFFER_SHORT`          | Offer queued redeem                                  |
| `INSUFFICIENT_SHARES`   | Ask user to reduce amount                            |
| `REDEEM_NOT_CLAIMABLE`  | Keep request pending                                 |
| `REDEEM_NOT_CANCELABLE` | Hide cancel action                                   |

## Infrastructure examples

Treat `VAULT_READ_FAILED`, `INDEXER_UNAVAILABLE`, and upstream fetch errors as retryable or temporarily unavailable states. Keep existing user balances visible only when the API has returned fresh enough data.
