---
title: prepareBuyExactReserveIn
description: Prepare a buy that spends an exact USDC amount and requires a minimum AVM out.
---

> **For AI agents:** the complete documentation index is at [llms.txt](/llms.txt). Append `.md` to any page URL for its markdown version.

Encodes `buyWithExactReserveTokensIn`. The wallet spends **exactly** `amount` USDC (plus the usual fee split inside the market) and reverts if minted AVM is below the slippage-adjusted minimum.

Does not send. For a "spend at most this USDC" ticket, use [prepareBuyForReserveBudget](/developers/prepare-buy-for-reserve-budget) instead — that helper submits the cheaper exact-output selector.

## Import

```ts
import { createSv3Client } from "@repo/contract-client";
```

## Usage

```ts
import { parseUsdc } from "@repo/contract-client";

const prepared = await sv3.trade.prepareBuyExactReserveIn({
  market,
  amount: parseUsdc("10"),
  slippageBps: 100n,
});

prepared.functionName; // 'buyWithExactReserveTokensIn'
prepared.constraints.minOut;
```

Optional `authorization: 'auto' | 'permit' | 'allowance'` is accepted here. It does not send an approval; it only records the intended route for [getRequirements](/developers/get-requirements).

## Return Value

`Promise<PreparedAction>` — frozen `to` / `data` / `args` / `deadline` / `constraints.minOut`.

## Parameters

### market

- **Type:** `Address`

```ts
await sv3.trade.prepareBuyExactReserveIn({
  market,
  amount: parseUsdc("10"),
  slippageBps: 100n,
});
```

### amount

- **Type:** `bigint` (`UsdcRaw`)

Exact gross USDC in, 6 decimals.

```ts
await sv3.trade.prepareBuyExactReserveIn({
  market,
  amount: 10_000_000n,
  slippageBps: 100n,
});
```

### slippageBps

- **Type:** `bigint`

Required. Applied to quoted `avmOut` to set `minOut`.

```ts
await sv3.trade.prepareBuyExactReserveIn({
  market,
  amount: parseUsdc("10"),
  slippageBps: 25n,
});
```

### authorization (optional)

- **Type:** `'auto' | 'permit' | 'allowance'`
- **Default:** `'auto'`

```ts
await sv3.trade.prepareBuyExactReserveIn({
  market,
  amount: parseUsdc("10"),
  slippageBps: 100n,
  authorization: "allowance",
});
```

## Error

| Error                                               | When                |
| --------------------------------------------------- | ------------------- |
| `WalletClientRequiredError`                         | No wallet / account |
| `ProtocolRevertError` `BelowMinimum` / `ZeroAmount` | Amount cannot mint  |

## Tips

- Pair with [quoteBuyExactReserveIn](/developers/math/quote-buy-exact-reserve-in) for the slider. Prepare only when the user confirms.
- `withSlippage` is also exported on `sv3.trade` if you need limits without encoding calldata.
