Node.js SDK

Installation

npm install --save multion
# or
yarn add multion

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

import { MultiOnClient } from "npm:multion";

Usage

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:

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:

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 (Timeout)
  • 429 (Too Many Requests)
  • 5XX (Internal Server Errors)

Use the maxRetries request option to configure this behavior.

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.

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.

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+