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

# API

> API reference for AnyAPI: every `anyapi.api.*` operation with input and output types.

Every `anyapi.api.*` operation is listed below with parameter shapes and return types from the plugin Zod schemas.

> [!NOTE]
>
> **New to Corsair?** See [API access](https://docs.corsair.dev/concepts/api.md), [authentication](https://docs.corsair.dev/concepts/auth.md), and [error handling](https://docs.corsair.dev/concepts/error-handling).

## Account

### getBalance

`account.getBalance`

Get the AnyAPI wallet balance in USD

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.account.getBalance({});
```

**Input:** *empty object*

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `usd` | `number` | Yes | Remaining wallet balance in USD |

***

## Apis

### get

`apis.get`

Get one AnyAPI endpoint by SKU: its input and output JSON Schema, price and recent latency

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.apis.get({ sku: 'linkedin.company' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `sku` | `string` | Yes | AnyAPI endpoint id, e.g. linkedin.company or google.search |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `slug` | `string` | Yes | — |
| `name` | `string` | No | — |
| `description` | `string` | No | — |
| `category` | `string` | No | — |
| `platformId` | `string` | No | — |
| `execution` | `object` | No | — |
| `pricing` | `object` | No | — |
| `failover` | `boolean` | No | — |
| `inputSchema` | `object` | No | — |
| `outputSchema` | `object` | No | — |
| `latency` | `object` | No | — |

> **execution full type**
>
> ```ts theme={null}
> {
>   mode: string
> }
> ```

> **pricing full type**
>
> ```ts theme={null}
> {
> }
> ```

> **inputSchema full type**
>
> ```ts theme={null}
> {
> }
> ```

> **outputSchema full type**
>
> ```ts theme={null}
> {
> }
> ```

> **latency full type**
>
> ```ts theme={null}
> {
>   p50Ms?: number | null,
>   p95Ms?: number | null,
>   p99Ms?: number | null,
>   sample?: number | null
> }
> ```

***

### list

`apis.list`

List AnyAPI endpoints, optionally in one category, with their SKUs and prices

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.apis.list({ category: 'search' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `category` | `string` | No | Limit to one category, e.g. search |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `apis` | `object[]` | Yes | — |

> **apis full type**
>
> ```ts theme={null}
> {
>   slug: string,
>   name?: string | null,
>   description?: string | null,
>   category?: string | null,
>   platformId?: string | null,
>   execution?: {
>     mode: string
>   } | null,
>   pricing?: {
>   } | null,
>   failover?: boolean | null
> }[]
> ```

***

### quote

`apis.quote`

Price an AnyAPI run for an exact input and validate the input, without running or charging anything

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.apis.quote({ sku: 'linkedin.company', input: { url: 'https://www.linkedin.com/company/vercel' } });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `sku` | `string` | Yes | AnyAPI endpoint id, e.g. linkedin.company or google.search |
| `input` | `object` | Yes | The endpoint's input, matching its inputSchema from apis.get |

> **input full type**
>
> ```ts theme={null}
> {
> }
> ```

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `maxCostUsd` | `number` | Yes | — |
| `minCostUsd` | `number` | No | — |
| `baseUsd` | `number` | No | — |
| `perItemUsd` | `number` | No | — |
| `exact` | `boolean` | No | — |
| `pricing` | `string` | No | — |

***

### run

`apis.run`

Run any AnyAPI endpoint by SKU with its input (read the schema with apis.get first); returns the result, its USD cost and a resultId

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.apis.run({ sku: 'youtube.video_transcript', input: { url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ' }, maxCostUsd: 0.01 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `sku` | `string` | Yes | AnyAPI endpoint id, e.g. linkedin.company or google.search |
| `input` | `object` | Yes | The endpoint's input, matching its inputSchema from apis.get |
| `fields` | `string` | No | Comma-separated keys to keep on each result item, e.g. name,followerCount |
| `maxItems` | `number` | No | Cap the number of result rows returned |
| `summary` | `boolean` | No | Return only an outline of the result with per-field sizes |
| `jq` | `string` | No | jq expression applied to the result; its output replaces `output` |
| `maxCostUsd` | `number` | No | Most this call may cost in USD. Sources priced above it are skipped; if none fits, the call is refused without charge. |
| `idempotencyKey` | `string` | No | Reuse the same key to retry a call without paying twice. Scoped to your account for 24 hours. |

> **input full type**
>
> ```ts theme={null}
> {
> }
> ```

**Output:** `object`

> **Output full type**
>
> ```ts theme={null}
> {
>   output: any,
>   provider?: string | null,
>   costUsd: number,
>   items?: number | null,
>   replayed?: boolean | null,
>   source?: {
>     id: string,
>     name?: string | null,
>     kind?: string | null
>   } | null,
>   resultId?: string | null,
>   hint?: string | null,
>   jqError?: string | null
> } | {
>   requestId: string,
>   sku: string,
>   status: queued | running | succeeded | failed | expired,
>   createdAt: string,
>   completedAt?: string | null,
>   expiresAt?: string | null,
>   retryAfterSeconds?: number | null,
>   serviceOutcome?: string | null,
>   settlementState?: string | null,
>   resultExpired?: boolean | null,
>   result?: {
>   } | null,
>   error?: {
>   } | null
> }
> ```

***

### search

`apis.search`

Search the AnyAPI catalog of 470+ data endpoints by what you need, such as linkedin company employees; returns SKUs with prices

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.apis.search({ query: 'linkedin company employees', limit: 5 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `query` | `string` | No | What you need, in your own words, e.g. "linkedin company page" |
| `category` | `string` | No | Limit to one category, e.g. social |
| `platform` | `string` | No | Limit to one platform, e.g. linkedin |
| `limit` | `number` | No | — |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `results` | `object[]` | Yes | — |
| `total` | `number` | No | — |

> **results full type**
>
> ```ts theme={null}
> {
>   slug: string,
>   name?: string | null,
>   description?: string | null,
>   category?: string | null,
>   platformId?: string | null,
>   execution?: {
>     mode: string
>   } | null,
>   pricing?: {
>   } | null,
>   failover?: boolean | null
> }[]
> ```

***

## Google

### search

`google.search`

Search Google and get organic results (title, link, snippet), with country, language, location and time filters

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.google.search({ query: 'model context protocol servers', gl: 'us', limit: 10 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `query` | `string` | Yes | The Google search query |
| `page` | `number` | No | Results page, from 1 |
| `limit` | `number` | No | — |
| `gl` | `string` | No | Two-letter country code, e.g. us |
| `hl` | `string` | No | Two-letter language code, e.g. en |
| `location` | `string` | No | Finer location than gl, e.g. Austin, Texas, United States |
| `timeframe` | `1h \| 1d \| 7d \| 1y \| all` | No | — |
| `autocorrect` | `boolean` | No | — |
| `maxCostUsd` | `number` | No | Most this call may cost in USD. Sources priced above it are skipped; if none fits, the call is refused without charge. |
| `idempotencyKey` | `string` | No | Reuse the same key to retry a call without paying twice. Scoped to your account for 24 hours. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `output` | `object` | Yes | — |
| `provider` | `string` | No | — |
| `costUsd` | `number` | Yes | USD charged for this call |
| `items` | `number` | No | — |
| `replayed` | `boolean` | No | — |
| `source` | `object` | No | — |
| `resultId` | `string` | No | Re-read and re-shape this result for free with results.get for about 15 minutes |
| `hint` | `string` | No | — |
| `jqError` | `string` | No | — |

> **output full type**
>
> ```ts theme={null}
> {
>   found: boolean,
>   data?: {
>     query?: string | null,
>     results?: {
>       position?: number | null,
>       title?: string | null,
>       link?: string | null,
>       snippet?: string | null
>     }[] | null,
>     nextCursor?: string | null
>   } | null
> }
> ```

> **source full type**
>
> ```ts theme={null}
> {
>   id: string,
>   name?: string | null,
>   kind?: string | null
> }
> ```

***

## Instagram

### getProfile

`instagram.getProfile`

Get an Instagram profile by handle: bio, follower, following and post counts, verified and business flags

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.instagram.getProfile({ handle: 'nasa' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `handle` | `string` | Yes | Instagram username without the @ |
| `maxCostUsd` | `number` | No | Most this call may cost in USD. Sources priced above it are skipped; if none fits, the call is refused without charge. |
| `idempotencyKey` | `string` | No | Reuse the same key to retry a call without paying twice. Scoped to your account for 24 hours. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `output` | `object` | Yes | — |
| `provider` | `string` | No | — |
| `costUsd` | `number` | Yes | USD charged for this call |
| `items` | `number` | No | — |
| `replayed` | `boolean` | No | — |
| `source` | `object` | No | — |
| `resultId` | `string` | No | Re-read and re-shape this result for free with results.get for about 15 minutes |
| `hint` | `string` | No | — |
| `jqError` | `string` | No | — |

> **output full type**
>
> ```ts theme={null}
> {
>   found: boolean,
>   data?: {
>     userId?: string | null,
>     handle?: string | null,
>     displayName?: string | null,
>     bio?: string | null,
>     followers?: number | null,
>     following?: number | null,
>     posts?: number | null,
>     verified?: boolean | null,
>     private?: boolean | null,
>     isBusiness?: boolean | null,
>     avatarUrl?: string | null
>   } | null
> }
> ```

> **source full type**
>
> ```ts theme={null}
> {
>   id: string,
>   name?: string | null,
>   kind?: string | null
> }
> ```

***

## Linkedin

### getCompany

`linkedin.getCompany`

Get a LinkedIn company page by URL: description, industry, website, employee and follower counts, locations

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.linkedin.getCompany({ url: 'https://www.linkedin.com/company/vercel' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `url` | `string` | Yes | Full LinkedIn company page URL |
| `maxCostUsd` | `number` | No | Most this call may cost in USD. Sources priced above it are skipped; if none fits, the call is refused without charge. |
| `idempotencyKey` | `string` | No | Reuse the same key to retry a call without paying twice. Scoped to your account for 24 hours. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `output` | `object` | Yes | — |
| `provider` | `string` | No | — |
| `costUsd` | `number` | Yes | USD charged for this call |
| `items` | `number` | No | — |
| `replayed` | `boolean` | No | — |
| `source` | `object` | No | — |
| `resultId` | `string` | No | Re-read and re-shape this result for free with results.get for about 15 minutes |
| `hint` | `string` | No | — |
| `jqError` | `string` | No | — |

> **output full type**
>
> ```ts theme={null}
> {
>   found: boolean,
>   data?: {
>     id?: string | null,
>     name?: string | null,
>     universalName?: string | null,
>     linkedinUrl?: string | null,
>     website?: string | null,
>     tagline?: string | null,
>     description?: string | null,
>     industry?: string | null,
>     companyType?: string | null,
>     employeeCount?: number | null,
>     followerCount?: number | null,
>     specialities?: any[] | null,
>     locations?: any[] | null
>   } | null
> }
> ```

> **source full type**
>
> ```ts theme={null}
> {
>   id: string,
>   name?: string | null,
>   kind?: string | null
> }
> ```

***

### getProfile

`linkedin.getProfile`

Get a LinkedIn profile by URL: headline, about, location, followers, experience, education and skills

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.linkedin.getProfile({ url: 'https://www.linkedin.com/in/williamhgates' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `url` | `string` | Yes | Full LinkedIn profile URL |
| `maxCostUsd` | `number` | No | Most this call may cost in USD. Sources priced above it are skipped; if none fits, the call is refused without charge. |
| `idempotencyKey` | `string` | No | Reuse the same key to retry a call without paying twice. Scoped to your account for 24 hours. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `output` | `object` | Yes | — |
| `provider` | `string` | No | — |
| `costUsd` | `number` | Yes | USD charged for this call |
| `items` | `number` | No | — |
| `replayed` | `boolean` | No | — |
| `source` | `object` | No | — |
| `resultId` | `string` | No | Re-read and re-shape this result for free with results.get for about 15 minutes |
| `hint` | `string` | No | — |
| `jqError` | `string` | No | — |

> **output full type**
>
> ```ts theme={null}
> {
>   found: boolean,
>   data?: {
>     id?: string | null,
>     publicIdentifier?: string | null,
>     url?: string | null,
>     firstName?: string | null,
>     lastName?: string | null,
>     headline?: string | null,
>     about?: string | null,
>     location?: string | null,
>     city?: string | null,
>     country?: string | null,
>     followerCount?: number | null,
>     connectionsCount?: number | null,
>     openToWork?: boolean | null,
>     currentPosition?: any[] | null,
>     experience?: any[] | null,
>     education?: any[] | null,
>     skills?: any[] | null
>   } | null
> }
> ```

> **source full type**
>
> ```ts theme={null}
> {
>   id: string,
>   name?: string | null,
>   kind?: string | null
> }
> ```

***

## Maps

### search

`maps.search`

Search Google Maps places in a location: name, address, phone, website, rating and review count

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.maps.search({ query: 'coffee shop', location: 'Austin, USA', limit: 5 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `query` | `string` | Yes | What you would type in Google Maps, e.g. coffee shop |
| `location` | `string` | Yes | City plus country, e.g. Austin, USA |
| `limit` | `number` | No | — |
| `language` | `string` | No | Two-letter language code |
| `placeMinimumStars` | `two \| twoAndHalf \| three \| threeAndHalf \| four \| fourAndHalf` | No | — |
| `website` | `allPlaces \| withWebsite \| withoutWebsite` | No | — |
| `categoryFilterWords` | `string[]` | No | Google Maps category names to keep |
| `maxCostUsd` | `number` | No | Most this call may cost in USD. Sources priced above it are skipped; if none fits, the call is refused without charge. |
| `idempotencyKey` | `string` | No | Reuse the same key to retry a call without paying twice. Scoped to your account for 24 hours. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `output` | `object` | Yes | — |
| `provider` | `string` | No | — |
| `costUsd` | `number` | Yes | USD charged for this call |
| `items` | `number` | No | — |
| `replayed` | `boolean` | No | — |
| `source` | `object` | No | — |
| `resultId` | `string` | No | Re-read and re-shape this result for free with results.get for about 15 minutes |
| `hint` | `string` | No | — |
| `jqError` | `string` | No | — |

> **output full type**
>
> ```ts theme={null}
> {
>   found: boolean,
>   data?: {
>     items?: {
>       placeId?: string | null,
>       name?: string | null,
>       category?: string | null,
>       address?: string | null,
>       city?: string | null,
>       phone?: string | null,
>       website?: string | null,
>       url?: string | null,
>       rating?: number | null,
>       reviewCount?: number | null,
>       latitude?: number | null,
>       longitude?: number | null,
>       permanentlyClosed?: boolean | null
>     }[] | null,
>     nextCursor?: string | null
>   } | null
> }
> ```

> **source full type**
>
> ```ts theme={null}
> {
>   id: string,
>   name?: string | null,
>   kind?: string | null
> }
> ```

***

## Reddit

### search

`reddit.search`

Search Reddit posts across all subreddits, with sort and time filters

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.reddit.search({ query: 'model context protocol', sort: 'top', timeframe: 'week' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `query` | `string` | Yes | Search across all of Reddit |
| `sort` | `relevance \| hot \| top \| new \| comments` | No | — |
| `timeframe` | `hour \| day \| week \| month \| year \| all` | No | — |
| `cursor` | `string` | No | nextCursor from the previous page |
| `maxCostUsd` | `number` | No | Most this call may cost in USD. Sources priced above it are skipped; if none fits, the call is refused without charge. |
| `idempotencyKey` | `string` | No | Reuse the same key to retry a call without paying twice. Scoped to your account for 24 hours. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `output` | `object` | Yes | — |
| `provider` | `string` | No | — |
| `costUsd` | `number` | Yes | USD charged for this call |
| `items` | `number` | No | — |
| `replayed` | `boolean` | No | — |
| `source` | `object` | No | — |
| `resultId` | `string` | No | Re-read and re-shape this result for free with results.get for about 15 minutes |
| `hint` | `string` | No | — |
| `jqError` | `string` | No | — |

> **output full type**
>
> ```ts theme={null}
> {
>   found: boolean,
>   data?: {
>     posts?: {
>       id?: string | null,
>       title?: string | null,
>       subreddit?: string | null,
>       author?: string | null,
>       score?: number | null,
>       numComments?: number | null,
>       permalink?: string | null,
>       url?: string | null,
>       selftext?: string | null,
>       createdUtc?: number | null
>     }[] | null,
>     nextCursor?: string | null
>   } | null
> }
> ```

> **source full type**
>
> ```ts theme={null}
> {
>   id: string,
>   name?: string | null,
>   kind?: string | null
> }
> ```

***

## Requests

### get

`requests.get`

Get the status and, once finished, the result of a durable AnyAPI run that answered queued or running

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.requests.get({ requestId: '5f0c2d3e-8a51-4c2b-9d0e-1f2a3b4c5d6e' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `requestId` | `string` | Yes | requestId from a durable run that answered queued or running |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `requestId` | `string` | Yes | — |
| `sku` | `string` | Yes | — |
| `status` | `queued \| running \| succeeded \| failed \| expired` | Yes | — |
| `createdAt` | `string` | Yes | — |
| `completedAt` | `string` | No | — |
| `expiresAt` | `string` | No | — |
| `retryAfterSeconds` | `number` | No | — |
| `serviceOutcome` | `string` | No | — |
| `settlementState` | `string` | No | — |
| `resultExpired` | `boolean` | No | — |
| `result` | `object` | No | — |
| `error` | `object` | No | — |

> **result full type**
>
> ```ts theme={null}
> {
> }
> ```

> **error full type**
>
> ```ts theme={null}
> {
> }
> ```

***

## Results

### get

`results.get`

Re-read and re-shape a run result for free (fields, maxItems, summary, jq) within about 15 minutes of the run

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.results.get({ resultId: 'd668386e-e52f-4383-8951-8f6b9a1c3df9', fields: 'name,industry' });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `resultId` | `string` | Yes | resultId from an earlier run |
| `fields` | `string` | No | Comma-separated keys to keep on each result item, e.g. name,followerCount |
| `maxItems` | `number` | No | Cap the number of result rows returned |
| `summary` | `boolean` | No | Return only an outline of the result with per-field sizes |
| `jq` | `string` | No | jq expression applied to the result; its output replaces `output` |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `output` | `any` | Yes | — |
| `provider` | `string` | No | — |
| `costUsd` | `number` | Yes | USD charged for the original run. The re-read itself is free, so do not add this to a running total. |
| `items` | `number` | No | — |
| `replayed` | `boolean` | No | — |
| `source` | `object` | No | — |
| `resultId` | `string` | No | Re-read and re-shape this result for free with results.get for about 15 minutes |
| `hint` | `string` | No | — |
| `jqError` | `string` | No | — |

> **source full type**
>
> ```ts theme={null}
> {
>   id: string,
>   name?: string | null,
>   kind?: string | null
> }
> ```

***

## Twitter

### search

`twitter.search`

Search X (Twitter) posts with advanced-search syntax, Latest or Top, with paging

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.twitter.search({ query: '"model context protocol" -is:retweet', queryType: 'Top', limit: 20 });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `query` | `string` | Yes | X advanced-search query. Bare words are ANDed; quote phrases and group OR terms in brackets. |
| `queryType` | `Latest \| Top \| Photos \| Videos` | No | — |
| `limit` | `number` | No | — |
| `cursor` | `string` | No | nextCursor from the previous page |
| `maxCostUsd` | `number` | No | Most this call may cost in USD. Sources priced above it are skipped; if none fits, the call is refused without charge. |
| `idempotencyKey` | `string` | No | Reuse the same key to retry a call without paying twice. Scoped to your account for 24 hours. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `output` | `object` | Yes | — |
| `provider` | `string` | No | — |
| `costUsd` | `number` | Yes | USD charged for this call |
| `items` | `number` | No | — |
| `replayed` | `boolean` | No | — |
| `source` | `object` | No | — |
| `resultId` | `string` | No | Re-read and re-shape this result for free with results.get for about 15 minutes |
| `hint` | `string` | No | — |
| `jqError` | `string` | No | — |

> **output full type**
>
> ```ts theme={null}
> {
>   found: boolean,
>   data?: {
>     items?: {
>       id?: string | null,
>       url?: string | null,
>       text?: string | null,
>       createdUtc?: number | null,
>       authorUsername?: string | null,
>       authorName?: string | null,
>       likeCount?: number | null,
>       retweetCount?: number | null,
>       replyCount?: number | null,
>       viewCount?: number | null
>     }[] | null,
>     nextCursor?: string | null
>   } | null
> }
> ```

> **source full type**
>
> ```ts theme={null}
> {
>   id: string,
>   name?: string | null,
>   kind?: string | null
> }
> ```

***

## Web

### scrape

`web.scrape`

Scrape any web page, including ones that block bots, as clean markdown and/or HTML

**Risk:** `read`

```ts theme={null}
await corsair.anyapi.api.web.scrape({ url: 'https://modelcontextprotocol.io', formats: ['markdown'], onlyMainContent: true });
```

**Input**

| Name | Type | Required | Description |
| - | - | - | - |
| `url` | `string` | Yes | Full page URL, including https\:// |
| `formats` | `markdown \| html \| rawHtml[]` | No | Defaults to markdown and html |
| `onlyMainContent` | `boolean` | No | Drop navigation, headers and footers |
| `includeTags` | `string[]` | No | CSS selectors to keep |
| `excludeTags` | `string[]` | No | CSS selectors to drop |
| `waitFor` | `number` | No | Milliseconds to wait for the page to render |
| `mobile` | `boolean` | No | — |
| `blockAds` | `boolean` | No | — |
| `maxCostUsd` | `number` | No | Most this call may cost in USD. Sources priced above it are skipped; if none fits, the call is refused without charge. |
| `idempotencyKey` | `string` | No | Reuse the same key to retry a call without paying twice. Scoped to your account for 24 hours. |

**Output**

| Name | Type | Required | Description |
| - | - | - | - |
| `output` | `object` | Yes | — |
| `provider` | `string` | No | — |
| `costUsd` | `number` | Yes | USD charged for this call |
| `items` | `number` | No | — |
| `replayed` | `boolean` | No | — |
| `source` | `object` | No | — |
| `resultId` | `string` | No | Re-read and re-shape this result for free with results.get for about 15 minutes |
| `hint` | `string` | No | — |
| `jqError` | `string` | No | — |

> **output full type**
>
> ```ts theme={null}
> {
>   found: boolean,
>   data?: {
>     url?: string | null,
>     statusCode?: number | null,
>     title?: string | null,
>     description?: string | null,
>     language?: string | null,
>     markdown?: string | null,
>     html?: string | null,
>     rawHtml?: string | null
>   } | null
> }
> ```

> **source full type**
>
> ```ts theme={null}
> {
>   id: string,
>   name?: string | null,
>   kind?: string | null
> }
> ```

***


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.