> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.multion.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.multion.ai/_mcp/server.

# Node.js SDK

> MultiOn for TypeScript/Node.js

## Installation

```bash
npm install --save multion
# or
yarn add multion
```

In Deno (1.25+) you can import by doing:

```ts
import { MultiOnClient } from "npm:multion";
```

## Usage

```typescript
import { MultiOnClient, MultiOn } from 'multion';

const multion = new MultiOnClient({
  apiKey: "YOUR_API_KEY", // Defaults to process.env.MULTION_API_KEY
});

const response = await multion.browse({
  cmd: "what is the weather today?",
  url: "https://www.google.com"
})
```

## Request and Response Types

The SDK exports all request and response types as TypeScript interfaces. Simply import them under the `MultiOn` namespace:

```ts
import { MultiOn } from "multion"; 

const message: MultiOn.Message = {
  url: "https://www.google.com",
  includeScreenshot: true,
}
```

## Exception Handling

When the API returns a non-success status code (4xx or 5xx response),
a subclass of `MultiOnError` will be thrown:

```ts
import { MultiOnError } from 'multion';

try {
  await multion.browse(...);
} catch (err) {
  if (err instanceof MultiOnError) {
    console.log(err.statusCode); 
    console.log(err.message);
    console.log(err.body); 
  }
}
```

## Advanced

### Retries

The MultiOn Node SDK is instrumented with automatic retries with exponential backoff. A request will be
retried as long as the request is deemed retriable and the number of retry attempts has not grown larger
than the configured retry limit (default: 2).

A request is deemed retriable when any of the following HTTP status codes is returned:

* [408](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408) (Timeout)
* [429](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) (Too Many Requests)
* [5XX](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500) (Internal Server Errors)

Use the `maxRetries` request option to configure this behavior.

```ts
const response = multion.browse({ url: "https://google.com" }, {
  maxRetries: 0 // override maxRetries at the request level
});
```

### Timeouts

The SDK defaults to a 60 second timout. Use the `timeoutInSeconds` option to
configure this behavior.

```ts
const response = multion.browse({ url: "https://google.com" }, {
  timeoutInSeconds: 30 // override timeout to 30s
});
```

### Custom HTTP client

The SDK provides a way for you to customize the underlying HTTP client / Fetch function. If you're
running in an unsupported environment, this provides a way for you to break the glass and
ensure the SDK works.

```ts
import { MultiOnClient } from 'multion';

const multion = new MultiOnClient({
  apiKey: "...",
  fetcher: // provide your implementation here
});
```

## Runtime compatiblity

The SDK defaults to `node-fetch` but will use the global fetch client if present. The SDK
works in the following runtimes:

The following runtimes are supported:

* Node.js 18+
* Vercel
* Cloudflare Workers
* Deno v1.25+
* Bun 1.0+

#### [GitHub](https://github.com/MULTI-ON/multion-typescript)

#### [npm](https://www.npmjs.com/package/multion)