# Join Massive — Orthogonal API

> Pay-per-use API on Orthogonal. Each call is billed to your Orthogonal balance.
> Base API: `https://api.orthogonal.com/v1/run` · [llms.txt](https://orthogonal.com/llms.txt) · [browse all APIs](https://orthogonal.com/discover)

One API to chat with AI, browse, and search the live web. The Massive Web Render API turns hard-to-reach web content into clean, structured data. Supports AI completions (ChatGPT, Gemini, Perplexity, Copilot), web search with geotargeting, and full browser rendering with antibot bypass.

**Verified:** no

## Access

**Run API:** `POST https://api.orthogonal.com/v1/run`
**Auth:** `Authorization: Bearer $ORTHOGONAL_API_KEY`
Get an API key at https://orthogonal.com/dashboard/settings/api-keys

Every call goes through the unified Run API: send the API `slug`, the endpoint `path`, and the `query`/`body` parameters. The response is `{ "success": true, "price": "<usd>", "data": { ... } }`.

## Endpoints

### Async Search Results

Retrieve results or status of a queued search.

`GET /search/results`

**Estimated cost:** $0.00625

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `id` | string | Yes | UUID of the queued search |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/search/results","method":"GET","query":{"id":"<string>"}}'
```

### Batch Search

Queue multiple searches (up to 1000 terms).

`POST /search/batches`

**Estimated cost:** $0.0625

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `terms` | array | Yes | Array of search terms (max 1000) |
| `engine` | string | No | Search engine (google) |
| `serps` | integer | No | Results pages per query |
| `country` | string | No | Two-letter ISO country code |
| `mode` | string | No | async (default for batches) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/search/batches","body":{"terms":"<array>","engine":"<string>","serps":"<integer>","country":"<string>","mode":"<string>"}}'
```

### Batch Search Status

Retrieve status of batch searches.

`GET /search/batches`

**Estimated cost:** $0.00625

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `id` | string | Yes | UUID of the batch |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/search/batches","method":"GET","query":{"id":"<string>"}}'
```

### Search Devices

Retrieve supported device names for search emulation.

`GET /search/devices`

**Estimated cost:** $0.00125

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/search/devices","method":"GET"}'
```

### Async AI Completion

Retrieve completion or status of a queued AI conversation.

`GET /ai/completions`

**Estimated cost:** $0.00625

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `id` | string | Yes | UUID of the queued conversation |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/ai/completions","method":"GET","query":{"id":"<string>"}}'
```

### Batch AI Completions

Queue multiple LLM conversations (up to 1000 prompts).

`POST /ai/batches`

**Estimated cost:** $0.3125

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `prompts` | array | Yes | Array of chat prompts (max 1000) |
| `model` | string | No | AI model: chatgpt, gemini, perplexity, copilot |
| `country` | string | No | Two-letter ISO country code |
| `language` | string | No | Language name or ISO code |
| `format` | string | No | Output format: json or rendered |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/ai/batches","body":{"prompts":"<array>","model":"<string>","country":"<string>","language":"<string>","format":"<string>"}}'
```

### Batch AI Status

Retrieve status of batch AI conversations.

`GET /ai/batches`

**Estimated cost:** $0.00625

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `id` | string | Yes | UUID of the batch |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/ai/batches","method":"GET","query":{"id":"<string>"}}'
```

### AI Devices

Retrieve supported device names for AI emulation.

`GET /ai/devices`

**Estimated cost:** $0.00125

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/ai/devices","method":"GET"}'
```

### Async Browse Content

Retrieve content or status of a queued browser request.

`GET /browser/content`

**Estimated cost:** $0.00625

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `id` | string | Yes | UUID of the queued request |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/browser/content","method":"GET","query":{"id":"<string>"}}'
```

### Batch Browse

Queue multiple browsing requests (up to 1000 URLs).

`POST /browser/batches`

**Estimated cost:** $0.0625

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `urls` | array | Yes | Array of URLs (max 1000) |
| `difficulty` | string | No | Difficulty: low, medium, high |
| `speed` | string | No | Speed: light, ridiculous |
| `country` | string | No | Two-letter ISO country code |
| `format` | string | No | Output: rendered, raw, markdown |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/browser/batches","body":{"urls":"<array>","difficulty":"<string>","speed":"<string>","country":"<string>","format":"<string>"}}'
```

### Batch Browse Status

Retrieve status of batch browsing requests.

`GET /browser/batches`

**Estimated cost:** $0.00625

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `id` | string | Yes | UUID of the batch |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/browser/batches","method":"GET","query":{"id":"<string>"}}'
```

### Browser Devices

Retrieve supported device names for browser emulation.

`GET /browser/devices`

**Estimated cost:** $0.00125

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/browser/devices","method":"GET"}'
```

### Search Results

Retrieve search results or queue a search for later retrieval. Supports Google engine with geotargeting by country, subdivision, and city. Returns structured SERP data.

`GET /search`

**Estimated cost:** $0.0125

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `terms` | string | Yes | The broad or exact word or phrase to query |
| `engine` | string | No | Search engine (google) |
| `serps` | integer | No | Number of results pages (1-10, default 1) |
| `size` | integer | No | Results per page (0-100) |
| `offset` | integer | No | Initial results to skip |
| `device` | string | No | Device name to emulate |
| `uule` | string | No | Proprietary encoded string for emulating search location |
| `country` | string | No | Two-letter ISO country code |
| `subdivision` | string | No | First-level subdivision code |
| `city` | string | No | City name |
| `language` | string | No | Language name or ISO code |
| `display` | string | No | Display language for the search interface |
| `url` | string | No | Encoded results page URL (up to 2047 chars); overrides other params |
| `awaiting` | string | No | Lazy features to wait for (ai, answers, ads); repeatable |
| `expiration` | integer | No | Cache expiration in days (0 disables) |
| `callback` | string | No | Encoded callback URL or SQS queue URL/ARN for async notification |
| `mode` | string | No | sync or async mode |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/search","method":"GET","query":{"terms":"<string>","engine":"<string>","serps":"<integer>","size":"<integer>","offset":"<integer>","device":"<string>","uule":"<string>","country":"<string>","subdivision":"<string>","city":"<string>","language":"<string>","display":"<string>","url":"<string>","awaiting":"<string>","expiration":"<integer>","callback":"<string>","mode":"<string>"}}'
```

### Browse Content

Retrieve web content with full JS rendering. Supports antibot bypass, difficulty levels, speed tiers, CAPTCHA handling, and output as rendered HTML, raw HTML, or markdown.

`GET /browser`

**Estimated cost:** $0.0125

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | URL of the page to browse |
| `difficulty` | string | No | Difficulty pool: low or medium (high is planned) |
| `speed` | string | No | Speed: light, ridiculous |
| `device` | string | No | Device name to emulate |
| `session` | string | No | Unique identifier (max 255 chars) for sticky session routing to same egress node for up to 12 minutes |
| `country` | string | No | Two-letter ISO country code |
| `subdivision` | string | No | Subdivision code |
| `city` | string | No | City name |
| `captcha` | string | No | CAPTCHA resolution: solved, ignored, or rejected |
| `readiness` | string | No | Ready event: load or domcontentloaded |
| `delay` | number | No | Supplemental delay in seconds (0.1-10) |
| `format` | string | No | Output: rendered, raw, or markdown |
| `expiration` | integer | No | Cache expiration in days (0 disables) |
| `callback` | string | No | Encoded callback URL or SQS queue URL/ARN for async notification |
| `mode` | string | No | sync or async mode |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/browser","method":"GET","query":{"url":"<string>","difficulty":"<string>","speed":"<string>","device":"<string>","session":"<string>","country":"<string>","subdivision":"<string>","city":"<string>","captcha":"<string>","readiness":"<string>","delay":"<number>","format":"<string>","expiration":"<integer>","callback":"<string>","mode":"<string>"}}'
```

### AI Completion

Retrieve an LLM completion. Supports ChatGPT, Gemini, Perplexity, and Copilot with geotargeting.

`GET /ai`

**Estimated cost:** $0.0625

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `prompt` | string | Yes | Question or instruction (max 2047 chars) |
| `model` | string | No | AI model: chatgpt, gemini, perplexity, copilot |
| `device` | string | No | Device name to emulate |
| `country` | string | No | Two-letter ISO country code |
| `subdivision` | string | No | Subdivision code |
| `city` | string | No | City name |
| `language` | string | No | Language name or ISO code (planned) |
| `format` | string | No | Output format: json or rendered |
| `expiration` | integer | No | Cache expiration in days (0 disables) |
| `callback` | string | No | Encoded callback URL or SQS queue URL/ARN for async notification |
| `mode` | string | No | sync or async mode |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"join-massive","path":"/ai","method":"GET","query":{"prompt":"<string>","model":"<string>","device":"<string>","country":"<string>","subdivision":"<string>","city":"<string>","language":"<string>","format":"<string>","expiration":"<integer>","callback":"<string>","mode":"<string>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/join-massive
