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

# Introduction

> Build embedded shopping experiences - product discovery, universal cart, and order management - with a single SDK

The **Henry SDK** gives your application a full commerce stack out of the box. Search any merchant's catalog, build multi-merchant carts, launch checkout in seconds, and track orders - all through a type-safe TypeScript SDK backed by a single API key.

<CardGroup cols={2}>
  <Card title="Product Discovery" icon="magnifying-glass" href="/v1/sdk/server/guides/product-discovery">
    Search any merchant's catalog and fetch rich product details with variants,
    pricing, and images
  </Card>

  <Card title="Universal Cart" icon="cart-shopping" href="/v1/sdk/server/guides/universal-cart">
    Build carts with items from any merchant - create, add, update, remove, and
    fetch in one place
  </Card>

  <Card title="Checkout" icon="credit-card" href="/v1/sdk/server/guides/checkout">
    Purchase your carts via headless checkout or the hosted frame
  </Card>

  <Card title="Order Management" icon="receipt" href="/v1/sdk/server/guides/order-management">
    Track and manage every order through to completion and beyond
  </Card>
</CardGroup>

***

## Get started in minutes

<Steps>
  <Step title="Get your API key">
    Go to the [Henry Dashboard](https://app.henrylabs.ai) and create an app to get your API key.
  </Step>

  <Step title="Install the SDK">
    <CodeGroup>
      ```bash npm theme={null}
      npm install @henrylabs/js
      ```

      ```bash bun theme={null}
      bun add @henrylabs/js
      ```

      ```bash pnpm theme={null}
      pnpm add @henrylabs/js
      ```

      ```bash yarn theme={null}
      yarn add @henrylabs/js
      ```
    </CodeGroup>
  </Step>

  <Step title="Initialize the client">
    ```typescript theme={null}
    import HenrySDK from '@henrylabs/sdk';

    const henry = new HenrySDK({
      apiKey: process.env.HENRY_SDK_API_KEY!,
    });
    ```

    <Info>
      Always initialize server-side. Your API key must never be exposed in browser or mobile code.
    </Info>
  </Step>

  <Step title="Make your first request">
    ```typescript theme={null}
    const search = await henry.products.search({ type: 'global', filters: { type: 'text', query: 'Nike Air Max' } });

    // poll until results are ready
    let result = search;
    while (result.status === 'pending' || result.status === 'processing') {
      await new Promise(r => setTimeout(r, 1000));
      result = await henry.products.pollSearch({ refId: search.refId });
    }

    console.log(result.result?.products[0]);
    ```
  </Step>
</Steps>

***

## Explore the guides

<CardGroup cols={3}>
  <Card title="Quickstart" icon="rocket" href="/v1/sdk/server/getting-started/quickstart">
    End-to-end walkthrough - search → cart → checkout → order in one file
  </Card>

  <Card title="Core Concepts" icon="book-open" href="/v1/sdk/server/getting-started/core-concepts">
    Understand async jobs, cart lifecycle, and checkout modes
  </Card>

  <Card title="API Reference" icon="code" href="/api-reference">
    Full endpoint reference with live playground
  </Card>
</CardGroup>
