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

# Quickstart

> Install the SDK, read live state, and build a first deposit quote.

## Install

<CodeGroup>
  ```bash pnpm theme={null}
  pnpm add @arc/shlp-sdk viem
  ```

  ```bash npm theme={null}
  npm install @arc/shlp-sdk viem
  ```
</CodeGroup>

## Create a client

```ts theme={null}
import { createShlpClient } from "@arc/shlp-sdk";

const shlp = createShlpClient({
  apiBaseUrl: "https://shlp-web-production.up.railway.app",
  signer: walletProvider,
  fetch,
  timeoutMs: 10_000,
  retries: 2,
});
```

## Read readiness and vault state

```ts theme={null}
import { summarizeReadiness } from "@arc/shlp-sdk";

const [health, vault] = await Promise.all([
  shlp.getHealth(),
  shlp.getVault(),
]);

const readiness = summarizeReadiness(health, vault);

if (!readiness.canDisplay) {
  showUnavailableState(readiness.reasonCodes);
}

if (!readiness.canDeposit) {
  disableDeposit(readiness.reasonCodes);
}
```

## Quote a deposit

```ts theme={null}
import { parseUsdc } from "@arc/shlp-sdk/format";

const quote = await shlp.quoteDepositAction({
  amount: parseUsdc("100"),
  account: wallet.address,
  receiver: wallet.address,
  slippageBps: 50,
});

for (const requirement of quote.requirements ?? []) {
  await shlp.sendApiTransaction(requirement.tx, wallet.address);
}

await shlp.sendApiTransaction(quote.tx, wallet.address);
```

<Info>
  Deposit quotes are server-side gated. If deposits are paused or operations are not ready, the endpoint returns a typed business error instead of calldata.
</Info>

## Verify before partner demos

```bash theme={null}
API_BASE=https://shlp-web-production.up.railway.app npm run smoke:api
PARTNER_READY_REQUIRED=1 API_BASE=https://shlp-web-production.up.railway.app npm run readiness:partner
```

The strict readiness command must pass before external partner write-flow demos.
