# Cart & Checkout Hooks

## `useIgCart()`

Use this hook if your site manages user carts through the Storefront **Cart** API.

Requires the `cartOrCheckoutToken` (cart ID). The hook will add cart attributes needed for experiments and optionally backfill currency based on the cart.

Returns a `wrapCustomAttributes` function. This function will add Intelligems-required line item properties to any existing line item properties (for example, for shipping tests).

<pre class="language-typescript" data-overflow="wrap"><code class="lang-typescript">interface WrapStorefrontItemCustomAttributesParams {
  productId?: string;
  variantId?: string;
  subscribeAndSave?: boolean;
  customAttributes?: {
    key: string;
    value: string;
  }[] | null;
};

interface WrapStorefrontItemCustomAttributesResponse {
  key: string;
  value: string;
}[];

<strong>const useIgCart: (cartOrCheckoutToken?: string | null) => {
</strong>  isReady: boolean;
  wrapCustomAttributes: (
    options: WrapStorefrontItemCustomAttributesParams
  ) => WrapStorefrontItemCustomAttributesResponse;
};
</code></pre>

## `useIgCartAttributes()`

Returns the attribute array you can attach when creating or updating carts in custom Storefront API flows.

```typescript
const useIgCartAttributes: () => {
  isReady: boolean;
  attributes: { key: string; value: string }[];
};
```
