# Litescrape — 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)

Live search, maps, reviews, shopping, app store and web page data as JSON. Google Search (including News), AI Overview, Shopping, Ads, Local, Maps, Reviews, Posts and Popular Times; Bing search and maps; DuckDuckGo search and local; Yelp; Tripadvisor; Apple Maps; Google Play; Apple App Store; plus rendered web page fetch to Markdown, HTML or text. Flat price per successful call; failed calls (non-2xx) are not charged. Links inside responses (pagination.next and *_link fields) go to Litescrape directly; to follow one, call the matching endpoint here with its parameters.

**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

### Bing Maps places

Bing Maps places. Searches Bing Maps listings when `q` is supplied, or returns one place's details when `place_id` is supplied; at least one of the two is required. Listing rows include the `place_id` to use for a detail lookup. Page listings with `first` and `count`.

`GET /bing/maps`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | No | Search query, up to 2,048 characters. Required unless place_id is present. |
| `cp` | string | No | Map center in latitude~longitude form. |
| `setlang` | string | No | Bing Maps interface language, such as en-US; up to 16 characters. |
| `place_id` | string | No | Bing Maps place identifier from a listing row's place_id, up to 256 characters. Required unless q is present. |
| `first` | integer | No | Listing offset from 0 through 10,000. |
| `count` | integer | No | Number of listings, 1 through 30. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/bing/maps","method":"GET","query":{"q":"<string>","cp":"<string>","setlang":"<string>","place_id":"<string>","first":"<integer>","count":"<integer>","timeout":"<number>"}}'
```

### Google AI Overview

Google AI Overview. Returns only the AI Overview from a Google results page, and accepts the Google Search parameters except fast_mode. When Google shows no AI Overview, ai_overview is null and search_metadata.ai_overview_state is not_served. Credit-based calls are charged $0 in that case; agent payment rails (x402, MPP) settle before the call and always pay the base price.

`GET /google/ai-overview`

**Estimated cost:** Dynamic — use `"dryRun": true` in the Run API request to check the exact cost before calling.

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | No | Search query, up to 2,048 characters. Required unless ludocid or kgmid is supplied. |
| `ludocid` | string | No | Decimal Google CID for a local entity search. Can replace q. |
| `kgmid` | string | No | Google Knowledge Graph machine ID, such as /m/0k8z. Can replace q. |
| `location` | string | No | Human-readable search location, up to 512 characters. Use only one of location, uule, or lat and lon. |
| `uule` | string | No | Pre-encoded Google location token, up to 2,048 characters. Use only one of location, uule, or lat and lon. |
| `lat` | number | No | Latitude between -90 and 90. Supply with lon; conflicts with location and uule. |
| `lon` | number | No | Longitude between -180 and 180. Supply with lat; conflicts with location and uule. |
| `radius` | number | No | Search radius in meters around location or lat and lon, which it requires. 1 to 199 on desktop, 1 to 1,000 on tablet or mobile. |
| `lsig` | string | No | Opaque Google local or Knowledge Graph signature, up to 4,096 characters. |
| `si` | string | No | Opaque cached Google search context, up to 4,096 characters. |
| `ibp` | string | No | Google layout or expansion control, up to 4,096 characters. |
| `uds` | string | No | Opaque Google filter token, up to 4,096 characters. |
| `color_scheme` | string | No | Google's light or dark result presentation. |
| `google_domain` | string | No | A Google domain from Google's supported list, such as google.com or google.co.uk. |
| `gl` | string | No | Lowercase two-letter country code used to localize results. |
| `hl` | string | No | Google interface and result language, such as en, en-US, or de. Defaults to en. |
| `cr` | string | No | Country restriction: one or more countryXX values joined with \|, such as countryUS. |
| `lr` | string | No | Language restriction: one or more lang_xx values joined with \|, such as lang_en. |
| `device` | string | No | Google returns its real layout for the selected device: desktop, tablet, or mobile. |
| `tbs` | string | No | Google search-filter string, such as qdr:w, up to 4,096 characters. |
| `safe` | string | No | Google adult-content filtering: active or off. |
| `nfpr` | string | No | Set 1 to disable Google spelling auto-correction, or 0 to allow it. |
| `filter` | string | No | Google similar-results filtering: 0 or 1. |
| `pws` | string | No | Google personalization flag: 0 or 1. 0 asks for non-personalized results. |
| `peek_pws` | string | No | Google personalization companion flag: 0 or 1, forwarded to Google unchanged. |
| `tbm` | string | No | Google vertical: lcl, vid, nws, shop, or pts. Google Images (isch) is rejected with 400 unsupported_search_vertical. |
| `start` | integer | No | Result offset for pagination. Defaults to 0. |
| `num` | integer | No | Requested result count, 1 to 10. A best-effort hint: Google may return fewer rows, and results are never padded. |
| `as_dt` | string | No | Include (i) or exclude (e) the as_sitesearch host. Requires as_sitesearch. |
| `as_epq` | string | No | Exact phrase the results must contain, up to 2,048 characters. |
| `as_eq` | string | No | Words the results must not contain, up to 2,048 characters. |
| `as_lq` | string | No | Return pages that link to this complete HTTP(S) URL. |
| `as_nlo` | integer | No | Lower bound of a number range. Supply with as_nhi. |
| `as_nhi` | integer | No | Upper bound of a number range. Supply with as_nlo. |
| `as_oq` | string | No | Additional terms of which any may match, up to 2,048 characters. |
| `as_q` | string | No | Additional terms that must all match, up to 2,048 characters. |
| `as_qdr` | string | No | Date range: d, w, m, or y with an optional positive count, such as m3 for the past three months. |
| `as_rq` | string | No | Return pages related to this complete HTTP(S) URL. |
| `as_sitesearch` | string | No | Hostname to include or exclude, such as example.com. A hostname, not a URL. |
| `oq` | string | No | Original query text from a Google URL, up to 2,048 characters; forwarded unchanged. |
| `gs_lp` | string | No | Opaque Google autocomplete-session value from a Google URL, up to 4,096 characters; forwarded unchanged. |
| `sclient` | string | No | Google client label such as gws-wiz-serp: up to 64 letters, digits, dots, underscores, or hyphens. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/ai-overview","method":"GET","query":{"q":"<string>","ludocid":"<string>","kgmid":"<string>","location":"<string>","uule":"<string>","lat":"<number>","lon":"<number>","radius":"<number>","lsig":"<string>","si":"<string>","ibp":"<string>","uds":"<string>","color_scheme":"<string>","google_domain":"<string>","gl":"<string>","hl":"<string>","cr":"<string>","lr":"<string>","device":"<string>","tbs":"<string>","safe":"<string>","nfpr":"<string>","filter":"<string>","pws":"<string>","peek_pws":"<string>","tbm":"<string>","start":"<integer>","num":"<integer>","as_dt":"<string>","as_epq":"<string>","as_eq":"<string>","as_lq":"<string>","as_nlo":"<integer>","as_nhi":"<integer>","as_oq":"<string>","as_q":"<string>","as_qdr":"<string>","as_rq":"<string>","as_sitesearch":"<string>","oq":"<string>","gs_lp":"<string>","sclient":"<string>","timeout":"<number>"}}'
```

### Search Google Maps places

Search Google Maps places. Search with q and type=search to get up to 20 places in local_results, or look up one exact place by place_id, data_cid or data to get place_results. For more places call again with start=20, 40 and so on; each page is a separate billed call. Response links (pagination.next, reviews_link, posts_link, photo_meta_link) go to Litescrape directly; use /google/reviews, /google/maps/posts, /google/maps/photo-meta and /google/maps/popular-times here with the place's IDs.

`GET /google/maps`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | No | Search query, such as coffee shops in Austin, TX. Required when type=search. A search needs one of q, place_id, data_cid or data. |
| `type` | string | No | search returns a list of places in local_results; place returns one exact place in place_results. Required when searching by q or by filter data, and type=place is required with an exact-place data sequence. Can be omitted with place_id or data_cid. |
| `place_id` | string | No | Google Place ID for an exact-place lookup. Mutually exclusive with data_cid and an exact-place data sequence. |
| `data_cid` | string | No | Decimal Google CID for an exact-place lookup. Mutually exclusive with place_id and an exact-place data sequence. |
| `data` | string | No | Google Maps protobuf sequence copied from a Maps URL, beginning with ! and at most 8,192 characters. A sequence that identifies one place requires type=place and is mutually exclusive with place_id and data_cid. |
| `ll` | string | No | Map viewport as @latitude,longitude,zoomz or @latitude,longitude,radiusm, for example @30.2672,-97.7431,14z. Already includes its scale, so do not add z or m. Mutually exclusive with location and lat/lon. |
| `location` | string | No | Human-readable location to center the map on, such as Austin, Texas. Requires z or m. Mutually exclusive with ll and lat/lon. |
| `lat` | number | No | Latitude of the map center. Supply with lon and either z or m. Mutually exclusive with ll and location. |
| `lon` | number | No | Longitude of the map center. Supply with lat and either z or m. Mutually exclusive with ll and location. |
| `z` | number | No | Zoom level from 3 through 30. Use with location or lat/lon. Mutually exclusive with m. |
| `m` | number | No | Map radius in meters, from 1 through 15,028,132. Use with location or lat/lon. Mutually exclusive with z. |
| `nearby` | boolean | No | Set to true to remove near me wording from the query so the supplied viewport is used. Requires ll, location or lat/lon. |
| `hl` | string | No | Language code such as en, en-GB, or de. |
| `gl` | string | No | Two-letter country code used to localize results. Defaults to us. |
| `google_domain` | string | No | Google domain used for the request. |
| `start` | integer | No | Result offset in steps of 20: 0, 20, 40 and so on. Each page is a separate call. |
| `min_price` | integer | No | Minimum Google price level, a non-negative integer. Must not exceed max_price. |
| `max_price` | integer | No | Maximum Google price level, a non-negative integer. Must be at least min_price. |
| `min_rating` | number | No | Minimum star rating. Google treats it as a relevance preference, so lower-rated or unrated places may still appear. |
| `open_state` | string | No | now returns places open now; 24h returns places open 24 hours. Cannot be combined with open_on_day or open_at_hour. |
| `open_on_day` | string | No | Return places open on this weekday, optionally at open_at_hour. Cannot be combined with open_state. |
| `open_at_hour` | integer | No | Hour from 0 through 23 at which the place must be open. Requires open_on_day. Cannot be combined with open_state. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/maps","method":"GET","query":{"q":"<string>","type":"<string>","place_id":"<string>","data_cid":"<string>","data":"<string>","ll":"<string>","location":"<string>","lat":"<number>","lon":"<number>","z":"<number>","m":"<number>","nearby":"<boolean>","hl":"<string>","gl":"<string>","google_domain":"<string>","start":"<integer>","min_price":"<integer>","max_price":"<integer>","min_rating":"<number>","open_state":"<string>","open_on_day":"<string>","open_at_hour":"<integer>","timeout":"<number>"}}'
```

### Tripadvisor place details

Tripadvisor place details. Returns one Tripadvisor place in `place_results`: identity, location, rating, images and, for restaurants, contact details, hours and rankings when Tripadvisor supplies them. Get the numeric `place_id` from Tripadvisor Search results.

`GET /tripadvisor/place`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `place_id` | integer | Yes | Numeric Tripadvisor place ID, up to 16 digits. |
| `tripadvisor_domain` | string | No | Supported first-party localized Tripadvisor hostname, such as www.tripadvisor.co.uk. |
| `locale` | string | No | Lowercase language code with an optional uppercase country, such as en or en-US. |
| `currency` | string | No | Three-letter ISO currency code for price fields; case-insensitive. |
| `geo_id` | integer | No | Tripadvisor ID of the place's parent geography. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/tripadvisor/place","method":"GET","query":{"place_id":"<integer>","tripadvisor_domain":"<string>","locale":"<string>","currency":"<string>","geo_id":"<integer>","timeout":"<number>"}}'
```

### Yelp business search

Yelp business search. Returns Yelp businesses in `organic_results`. Pass each row's `place_id` (the encoded business ID) to /yelp/reviews; its `reviews_link` and the `pagination` links go to Litescrape directly. Page with `start`.

`GET /yelp/search`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `find_desc` | string | No | Business name, category, or search terms, up to 500 characters. |
| `find_loc` | string | Yes | Search location, 1 to 500 characters. |
| `yelp_domain` | string | No | Supported first-party localized Yelp hostname, such as www.yelp.co.uk. Links in the response use this hostname. |
| `l` | string | No | Yelp map-bounds token, up to 1,024 characters. |
| `cflt` | string | No | Yelp category identifier, such as coffee. |
| `sortby` | string | No | Result order. |
| `attrs` | string | No | Comma-separated Yelp attribute filters, such as OutdoorSeating; up to 4,096 characters. |
| `start` | integer | No | Result offset from 0 through 10,000. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/yelp/search","method":"GET","query":{"find_desc":"<string>","find_loc":"<string>","yelp_domain":"<string>","l":"<string>","cflt":"<string>","sortby":"<string>","attrs":"<string>","start":"<integer>","timeout":"<number>"}}'
```

### Google Play apps

Google Play apps (Alpha). Search and browse Android apps, categories, device storefronts, and charts. Alpha: the contract may change.

`GET /google/play/apps`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `hl` | string | No | Storefront language, such as en, de, or zh-TW. Maximum 32 characters. |
| `gl` | string | No | Two-letter country code. |
| `q` | string | No | Optional query with 1 to 2,048 UTF-8 bytes of printable text. Excludes category. Omit it to browse the storefront. On the games endpoint, q uses shared Android app search; omit q or choose games_category to browse games. |
| `chart` | string | No | Chart identifier such as topselling_free, topselling_paid, or topgrossing. Excludes q and all pagination selectors. Apps and games charts require phone or an omitted store_device. |
| `next_page_token` | string | No | Use the returned next_page_token with the same parameters. Excludes chart, section_page_token, and see_more_token. |
| `section_page_token` | string | No | Continue one result group using its returned token and the same parameters. Excludes the other pagination selectors and chart. |
| `see_more_token` | string | No | Open a result collection using its returned token and the same parameters. Excludes the other pagination selectors and chart. |
| `apps_category` | string | No | Native app category identifier, such as MEDICAL. Excludes q and an explicit store_device. |
| `store_device` | string | No | Omit for the default phone storefront. An explicit selection excludes q and category. |
| `age` | string | No | Children's age range. Requires apps_category=FAMILY. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/play/apps","method":"GET","query":{"hl":"<string>","gl":"<string>","q":"<string>","chart":"<string>","next_page_token":"<string>","section_page_token":"<string>","see_more_token":"<string>","apps_category":"<string>","store_device":"<string>","age":"<string>","timeout":"<number>"}}'
```

### Bing web search

Bing web search. Returns Bing web results: organic results, ads, answer boxes, Knowledge Graph cards, local, shopping, news and related searches when Bing shows them. Page through organic results with `first` (one-based offset). The `pagination.next` link points at Litescrape directly and won't work with an Orthogonal key; call this endpoint again with the next `first` value instead.

`GET /bing/search`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `engine` | string | No | Search engine. Optional; the only accepted value is bing. |
| `q` | string | Yes | Search query, up to 2,048 characters with no control characters. Bing search operators are preserved. |
| `location` | string | No | Optional city-level search origin, up to 256 characters. |
| `lat` | number | No | Optional search-origin latitude from -90 through 90. Independent of lon and location. |
| `lon` | number | No | Optional search-origin longitude from -180 through 180. Independent of lat and location. |
| `mkt` | string | No | Bing market in language-country form, such as en-US; case-insensitive. Mutually exclusive with cc. |
| `cc` | string | No | Two-letter ISO country code of the search origin, such as US; case-insensitive. Mutually exclusive with mkt. |
| `first` | integer | No | One-based offset of the first organic result. |
| `safeSearch` | string | No | Adult-content filtering: off, moderate, or strict. Case-insensitive. |
| `filters` | string | No | Native Bing display or date filters, up to 8,192 characters with no control characters. |
| `device` | string | No | Request profile: desktop, tablet, or mobile. Case-insensitive. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/bing/search","method":"GET","query":{"engine":"<string>","q":"<string>","location":"<string>","lat":"<number>","lon":"<number>","mkt":"<string>","cc":"<string>","first":"<integer>","safeSearch":"<string>","filters":"<string>","device":"<string>","timeout":"<number>"}}'
```

### Google Play games

Google Play games (Alpha). Browse games, categories, device storefronts, and charts, or query the shared Android app search. Alpha: the contract may change.

`GET /google/play/games`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `hl` | string | No | Storefront language, such as en, de, or zh-TW. Maximum 32 characters. |
| `gl` | string | No | Two-letter country code. |
| `q` | string | No | Optional query with 1 to 2,048 UTF-8 bytes of printable text. Excludes category. Omit it to browse the storefront. On the games endpoint, q uses shared Android app search; omit q or choose games_category to browse games. |
| `chart` | string | No | Chart identifier such as topselling_free, topselling_paid, or topgrossing. Excludes q and all pagination selectors. Apps and games charts require phone or an omitted store_device. |
| `next_page_token` | string | No | Use the returned next_page_token with the same parameters. Excludes chart, section_page_token, and see_more_token. |
| `section_page_token` | string | No | Continue one result group using its returned token and the same parameters. Excludes the other pagination selectors and chart. |
| `see_more_token` | string | No | Open a result collection using its returned token and the same parameters. Excludes the other pagination selectors and chart. |
| `games_category` | string | No | Native game category identifier, such as GAME_PUZZLE. Excludes q and an explicit store_device. |
| `store_device` | string | No | Omit for the default phone storefront. An explicit selection excludes q and category. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/play/games","method":"GET","query":{"hl":"<string>","gl":"<string>","q":"<string>","chart":"<string>","next_page_token":"<string>","section_page_token":"<string>","see_more_token":"<string>","games_category":"<string>","store_device":"<string>","timeout":"<number>"}}'
```

### Google Local results

Google Local results. Returns Google Local business listings in `local_results`, with ratings, addresses, hours and links when Google shows them. Desktop pages hold up to 20 results and tablet or mobile pages up to 10; page with `start`. The `pagination` links go to Litescrape directly and won't work with an Orthogonal key. Each row's `place_id` is Google's decimal CID, which can be passed back as `ludocid`.

`GET /google/local`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Local search query, 1 to 2,048 characters with no control characters. |
| `location` | string | No | Human-readable search location, up to 512 characters. Mutually exclusive with uule. |
| `uule` | string | No | Canonical Google named-location token (starting w+CAIQICI), up to 2,048 characters. Mutually exclusive with location. |
| `google_domain` | string | No | Google domain used for the request. |
| `gl` | string | No | Two-letter country code used to localize results; case-insensitive. |
| `hl` | string | No | Language code such as en, en-US, or fr. |
| `ludocid` | string | No | Decimal Google local CID of one business, up to 128 digits. |
| `tbs` | string | No | Native Google filter token, up to 4,096 characters. Google may ignore some values. |
| `start` | integer | No | Result offset from 0 through 10,000. Offsets beyond Google's 1,000-result window return an empty page. |
| `device` | string | No | Google device layout. Desktop returns up to 20 results per page; tablet and mobile up to 10. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/local","method":"GET","query":{"q":"<string>","location":"<string>","uule":"<string>","google_domain":"<string>","gl":"<string>","hl":"<string>","ludocid":"<string>","tbs":"<string>","start":"<integer>","device":"<string>","timeout":"<number>"}}'
```

### DuckDuckGo local places

DuckDuckGo local places. Returns places from DuckDuckGo's local results in `local_results`. Supply either `bbox` or both `lat` and `lon` to set the map area.

`GET /duckduckgo/maps`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Place or category query, 1 to 500 characters. |
| `bbox` | string | No | Map rectangle as top,left,bottom,right (latitude,longitude of the top-left corner, then of the bottom-right corner); must not wrap the antimeridian. Use instead of lat/lon; one of the two is required. |
| `lat` | number | No | Map center latitude from -90 through 90. Requires lon; use instead of bbox. |
| `lon` | number | No | Map center longitude from -180 through 180. Requires lat; use instead of bbox. |
| `strict_bbox` | boolean | No | Exclude results outside the requested bounds. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/duckduckgo/maps","method":"GET","query":{"q":"<string>","bbox":"<string>","lat":"<number>","lon":"<number>","strict_bbox":"<boolean>","timeout":"<number>"}}'
```

### Tripadvisor search

Tripadvisor search. Returns Tripadvisor hotels, restaurants, attractions and places in `search_results`. Pass each row's numeric `place_id` to /tripadvisor/place and /tripadvisor/reviews; the row's `place_api_link` and `reviews_api_link` go to Litescrape directly. Page with `start` and `num`.

`GET /tripadvisor/search`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search text, 1 to 500 characters. |
| `tripadvisor_domain` | string | No | Supported first-party localized Tripadvisor hostname, such as www.tripadvisor.co.uk. |
| `locale` | string | No | Lowercase language code with an optional uppercase country, such as en or en-US. |
| `geo_id` | integer | No | Tripadvisor geography ID to search within. |
| `lat` | number | No | Search center latitude from -90 through 90. Requires lon. |
| `lon` | number | No | Search center longitude from -180 through 180. Requires lat. |
| `place_type` | string | No | Restrict results to one entity type. |
| `start` | integer | No | Result offset from 0 through 10,000. Offsets and positions count any leading exact match. |
| `num` | integer | No | Maximum number of search_results, 1 through 30, including any leading exact match. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/tripadvisor/search","method":"GET","query":{"q":"<string>","tripadvisor_domain":"<string>","locale":"<string>","geo_id":"<integer>","lat":"<number>","lon":"<number>","place_type":"<string>","start":"<integer>","num":"<integer>","timeout":"<number>"}}'
```

### Apple App Store reviews

Apple App Store reviews (Alpha). Read storefront-specific app reviews. iOS pages contain up to 25 reviews; Mac pages contain up to 10 and use Apple’s newest-first ordering. Alpha: the contract may change.

`GET /apple/app-store/reviews`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | No | Two-letter Apple storefront country. UK is accepted as an alias for GB. |
| `product_id` | string | Yes | Positive decimal Apple app identifier, up to 20 digits. |
| `sort` | string | No | mostrecent or mosthelpful. Apple's Mac storefront always returns newest first. |
| `page` | integer | No | One-based page number, from 1 through 2,147,483,647. Exhausted pages return an empty review list. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/apple/app-store/reviews","method":"GET","query":{"country":"<string>","product_id":"<string>","sort":"<string>","page":"<integer>","timeout":"<number>"}}'
```

### Apple App Store search

Apple App Store search (Alpha). Search iPhone, iPad, and Mac apps or developers by storefront. Alpha: the contract may change.

`GET /apple/app-store/search`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | No | Two-letter Apple storefront country. UK is accepted as an alias for GB. |
| `term` | string | Yes | Search term with 1 to 2,048 UTF-8 bytes of printable text, and at most 4,096 bytes after URL encoding. |
| `lang` | string | No | Language-region code, such as en-us or fr-fr. |
| `num` | integer | No | Maximum results after filtering, from 1 through 200. |
| `disallow_explicit` | boolean | No | Exclude explicit results when true. |
| `property` | string | No | Use developer to match developer names, ignoring case. |
| `category_id` | integer | No | Filter results by a native genre identifier, from 1 through 2,147,483,647. |
| `device` | string | No | mobile for iPhone apps, tablet for iPad apps, or desktop for Mac apps. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/apple/app-store/search","method":"GET","query":{"country":"<string>","term":"<string>","lang":"<string>","num":"<integer>","disallow_explicit":"<boolean>","property":"<string>","category_id":"<integer>","device":"<string>","timeout":"<number>"}}'
```

### Fetch Google Maps reviews

Fetch Google Maps reviews. Returns reviews for one place identified by place_id or data_id, both of which appear in Google Maps responses. For more reviews call again with the returned next_page_token and the same place, language, country, sort and filters; tokens expire after 30 minutes. The reviews_link and pagination.next links go to Litescrape directly and won't work with an Orthogonal key.

`GET /google/reviews`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `place_id` | string | No | Google Place ID. Exactly one of place_id or data_id is required. |
| `data_id` | string | No | Hexadecimal Google Maps feature ID, such as the data_id in a Google Maps response. Exactly one of place_id or data_id is required. |
| `hl` | string | No | Review language code such as en, en-GB, or de. |
| `gl` | string | No | Two-letter country code used to localize results, normalized to lowercase. Defaults to us. |
| `sort_by` | string | No | Review order: qualityScore (most relevant), newestFirst, ratingHigh or ratingLow. |
| `topic_id` | string | No | Return only reviews about one topic. Use a topics[].id from a previous response. Mutually exclusive with query. |
| `query` | string | No | Free-text filter that returns reviews mentioning these words. Mutually exclusive with topic_id. |
| `num` | integer | No | Number of reviews to return. An initial unfiltered request returns 8 by default and accepts 1 through 100; requests with topic_id, query or next_page_token return 10 by default and accept 1 through 20. |
| `next_page_token` | string | No | Opaque token from a previous response. Send it with the same place, language, country, sort and filters. Tokens expire after 30 minutes. |
| `source_metadata` | boolean | No | Set to true to include each review source's icon and rating scale. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/reviews","method":"GET","query":{"place_id":"<string>","data_id":"<string>","hl":"<string>","gl":"<string>","sort_by":"<string>","topic_id":"<string>","query":"<string>","num":"<integer>","next_page_token":"<string>","source_metadata":"<boolean>","timeout":"<number>"}}'
```

### Google Play reviews

Google Play reviews (Alpha). Filter and paginate product reviews, including available developer replies. Alpha: the contract may change.

`GET /google/play/reviews`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `hl` | string | No | Storefront language, such as en, de, or zh-TW. Maximum 32 characters. |
| `gl` | string | No | Two-letter country code. |
| `product_id` | string | Yes | Native Google Play product identifier, with 1 to 512 letters, digits, underscores, dots, or hyphens. |
| `store` | string | No | Product catalog containing this identifier. |
| `platform` | string | No | Platform associated with the reviews. |
| `rating` | integer | No | Only reviews with this rating, from 1 through 5. |
| `sort_by` | integer | No | 1 for relevant, 2 for newest, or 3 for rating. |
| `num` | integer | No | Number of reviews, from 1 through 199. |
| `next_page_token` | string | No | Returned review continuation. Preserve product, store, language, country, platform, rating, sort order, and count. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/play/reviews","method":"GET","query":{"hl":"<string>","gl":"<string>","product_id":"<string>","store":"<string>","platform":"<string>","rating":"<integer>","sort_by":"<integer>","num":"<integer>","next_page_token":"<string>","timeout":"<number>"}}'
```

### DuckDuckGo web search

DuckDuckGo web search. Returns ranked DuckDuckGo web results in `organic_results`. Page with `start`. The `pagination.next` link points at Litescrape directly and won't work with an Orthogonal key; call this endpoint again with the next `start` value instead.

`GET /duckduckgo/search`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Search text, 1 to 500 characters. |
| `kl` | string | No | DuckDuckGo region and language token, such as us-en; up to 32 characters. |
| `search_assist` | boolean | No | Use DuckDuckGo query assistance. Mutually exclusive with m. |
| `safe` | string | No | Safe-search level: 1 is strict, -1 is moderate, -2 is off. |
| `df` | string | No | Date filter: d (past day), w (past week), m (past month), y (past year), or a YYYY-MM-DD..YYYY-MM-DD range. |
| `start` | integer | No | Result offset from 0 through 10,000. |
| `m` | integer | No | Number of results, 1 through 50. Mutually exclusive with search_assist. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/duckduckgo/search","method":"GET","query":{"q":"<string>","kl":"<string>","search_assist":"<boolean>","safe":"<string>","df":"<string>","start":"<integer>","m":"<integer>","timeout":"<number>"}}'
```

### Google Search

Google Search. Returns a Google results page as JSON: organic results plus every other result group Google served, such as ads, AI Overview, knowledge graph, and local results. Supply at least one of q, ludocid, or kgmid; page through results with start. Set tbm=nws for Google News (lcl, vid, shop and pts also work); Google Images (tbm=isch) is not supported. Set fast_mode=true to return organic results only. num is a best-effort hint, so organic_results can be shorter than requested or empty (most often with fast_mode and a small num); an empty result is still a successful, billed call.

`GET /google/search`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `fast_mode` | boolean | No | Set true to return only organic_results, search_metadata and search_parameters, skipping AI Overview and all other result groups. Fast mode often returns fewer organic rows than standard mode, and with a small num organic_results can be empty. Only lowercase true or false are accepted. |
| `q` | string | No | Search query, up to 2,048 characters. Required unless ludocid or kgmid is supplied. |
| `ludocid` | string | No | Decimal Google CID for a local entity search. Can replace q. |
| `kgmid` | string | No | Google Knowledge Graph machine ID, such as /m/0k8z. Can replace q. |
| `location` | string | No | Human-readable search location, up to 512 characters. Use only one of location, uule, or lat and lon. |
| `uule` | string | No | Pre-encoded Google location token, up to 2,048 characters. Use only one of location, uule, or lat and lon. |
| `lat` | number | No | Latitude between -90 and 90. Supply with lon; conflicts with location and uule. |
| `lon` | number | No | Longitude between -180 and 180. Supply with lat; conflicts with location and uule. |
| `radius` | number | No | Search radius in meters around location or lat and lon, which it requires. 1 to 199 on desktop, 1 to 1,000 on tablet or mobile. |
| `lsig` | string | No | Opaque Google local or Knowledge Graph signature, up to 4,096 characters. |
| `si` | string | No | Opaque cached Google search context, up to 4,096 characters. |
| `ibp` | string | No | Google layout or expansion control, up to 4,096 characters. |
| `uds` | string | No | Opaque Google filter token, up to 4,096 characters. |
| `color_scheme` | string | No | Google's light or dark result presentation. |
| `google_domain` | string | No | A Google domain from Google's supported list, such as google.com or google.co.uk. |
| `gl` | string | No | Lowercase two-letter country code used to localize results. |
| `hl` | string | No | Google interface and result language, such as en, en-US, or de. Defaults to en. |
| `cr` | string | No | Country restriction: one or more countryXX values joined with \|, such as countryUS. |
| `lr` | string | No | Language restriction: one or more lang_xx values joined with \|, such as lang_en. |
| `device` | string | No | Google returns its real layout for the selected device: desktop, tablet, or mobile. |
| `tbs` | string | No | Google search-filter string, such as qdr:w, up to 4,096 characters. |
| `safe` | string | No | Google adult-content filtering: active or off. |
| `nfpr` | string | No | Set 1 to disable Google spelling auto-correction, or 0 to allow it. |
| `filter` | string | No | Google similar-results filtering: 0 or 1. |
| `pws` | string | No | Google personalization flag: 0 or 1. 0 asks for non-personalized results. |
| `peek_pws` | string | No | Google personalization companion flag: 0 or 1, forwarded to Google unchanged. |
| `tbm` | string | No | Google vertical: lcl, vid, nws, shop, or pts. Google Images (isch) is rejected with 400 unsupported_search_vertical. |
| `start` | integer | No | Result offset for pagination. Defaults to 0. |
| `num` | integer | No | Requested result count, 1 to 10. A best-effort hint: Google may return fewer rows, sometimes none, and results are never padded. With fast_mode=true small values often come back short or empty; omit num or leave fast_mode off for more reliable results. |
| `as_dt` | string | No | Include (i) or exclude (e) the as_sitesearch host. Requires as_sitesearch. |
| `as_epq` | string | No | Exact phrase the results must contain, up to 2,048 characters. |
| `as_eq` | string | No | Words the results must not contain, up to 2,048 characters. |
| `as_lq` | string | No | Return pages that link to this complete HTTP(S) URL. |
| `as_nlo` | integer | No | Lower bound of a number range. Supply with as_nhi. |
| `as_nhi` | integer | No | Upper bound of a number range. Supply with as_nlo. |
| `as_oq` | string | No | Additional terms of which any may match, up to 2,048 characters. |
| `as_q` | string | No | Additional terms that must all match, up to 2,048 characters. |
| `as_qdr` | string | No | Date range: d, w, m, or y with an optional positive count, such as m3 for the past three months. |
| `as_rq` | string | No | Return pages related to this complete HTTP(S) URL. |
| `as_sitesearch` | string | No | Hostname to include or exclude, such as example.com. A hostname, not a URL. |
| `oq` | string | No | Original query text from a Google URL, up to 2,048 characters; forwarded unchanged. |
| `gs_lp` | string | No | Opaque Google autocomplete-session value from a Google URL, up to 4,096 characters; forwarded unchanged. |
| `sclient` | string | No | Google client label such as gws-wiz-serp: up to 64 letters, digits, dots, underscores, or hyphens. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/search","method":"GET","query":{"fast_mode":"<boolean>","q":"<string>","ludocid":"<string>","kgmid":"<string>","location":"<string>","uule":"<string>","lat":"<number>","lon":"<number>","radius":"<number>","lsig":"<string>","si":"<string>","ibp":"<string>","uds":"<string>","color_scheme":"<string>","google_domain":"<string>","gl":"<string>","hl":"<string>","cr":"<string>","lr":"<string>","device":"<string>","tbs":"<string>","safe":"<string>","nfpr":"<string>","filter":"<string>","pws":"<string>","peek_pws":"<string>","tbm":"<string>","start":"<integer>","num":"<integer>","as_dt":"<string>","as_epq":"<string>","as_eq":"<string>","as_lq":"<string>","as_nlo":"<integer>","as_nhi":"<integer>","as_oq":"<string>","as_q":"<string>","as_qdr":"<string>","as_rq":"<string>","as_sitesearch":"<string>","oq":"<string>","gs_lp":"<string>","sclient":"<string>","timeout":"<number>"}}'
```

### Google Shopping Product

Google Shopping Product. Returns one Google Shopping product's merchant offers, specifications, reviews and related products. Supply q plus gpcid (optionally with headline_offer_docid and image_docid) or prds. A shopping result's litescrape_product_link carries these values in its query string; the link itself points at Litescrape directly and won't work with an Orthogonal key.

`GET /google/shopping/product`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Required search term from the shopping request that found the product. Google resolves the product page against it as well as the identifiers. |
| `gpcid` | string | No | Product cluster ID from a shopping result. Required unless prds is supplied. A shopping result's litescrape_product_link carries it in its query string. |
| `headline_offer_docid` | string | No | Optional headline offer document ID from the same shopping result; use with gpcid. |
| `image_docid` | string | No | Optional image document ID from the same shopping result; use with gpcid. |
| `prds` | string | No | Google product selector token from a previous response. Mutually exclusive with gpcid and its companion document IDs. |
| `location` | string | No | Human-readable search location, such as Austin, Texas. At most 63 UTF-8 bytes. Mutually exclusive with uule. |
| `uule` | string | No | Pre-encoded Google location token. Mutually exclusive with location. |
| `google_domain` | string | No | Google domain used for the request. |
| `gl` | string | No | Two-letter country code used to localize results. |
| `hl` | string | No | Language code such as en, en-GB, or de. |
| `device` | string | No | Google device layout. Each device is served Google's real layout for it. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/shopping/product","method":"GET","query":{"q":"<string>","gpcid":"<string>","headline_offer_docid":"<string>","image_docid":"<string>","prds":"<string>","location":"<string>","uule":"<string>","google_domain":"<string>","gl":"<string>","hl":"<string>","device":"<string>","timeout":"<number>"}}'
```

### Google Shopping

Google Shopping. Returns the Google Shopping product grid, category blocks, sponsored listings and refinement filters. Google applies one refinement at a time, so min_price/max_price, on_sale, free_shipping and small_business are mutually exclusive; sort_by combines with any one of them. A larger num reads further pages but is still one call. For one product's offers, call /google/shopping/product with the query parameters from its litescrape_product_link (the link itself goes to Litescrape directly).

`GET /google/shopping`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | No | Product search term, up to 2,048 characters. Required unless shoprs is supplied. This is a search, not an exact product ID lookup. |
| `shoprs` | string | No | Refinement token from a previous response's filters. An explicit refinement parameter replaces the refinement it carries. |
| `min_price` | number | No | Lower price bound in the storefront currency. Cannot be combined with on_sale, free_shipping or small_business. |
| `max_price` | number | No | Upper price bound in the storefront currency, at or above min_price. Cannot be combined with on_sale, free_shipping or small_business. |
| `sort_by` | string | No | Sort order: 1 price low to high, 2 price high to low, 3 rating high to low, 4 relevance (the default). Combines with any one refinement. |
| `free_shipping` | boolean | No | Show only products with free shipping. Cannot be combined with another refinement. |
| `on_sale` | boolean | No | Show only products Google marks as on sale. Cannot be combined with another refinement. |
| `small_business` | boolean | No | Show only products from small businesses. Cannot be combined with another refinement. |
| `start` | integer | No | Result offset. |
| `num` | integer | No | Number of products to return. Google serves 40 products per page; a larger num reads further pages within the same call and returns fewer only when Google has no more products. |
| `location` | string | No | Human-readable search location, such as Austin, Texas. At most 63 UTF-8 bytes. Mutually exclusive with uule. |
| `uule` | string | No | Pre-encoded Google location token. Mutually exclusive with location. |
| `google_domain` | string | No | Google domain used for the request. |
| `gl` | string | No | Two-letter country code used to localize results. |
| `hl` | string | No | Language code such as en, en-GB, or de. |
| `device` | string | No | Google device layout. Each device is served Google's real layout for it. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/shopping","method":"GET","query":{"q":"<string>","shoprs":"<string>","min_price":"<number>","max_price":"<number>","sort_by":"<string>","free_shipping":"<boolean>","on_sale":"<boolean>","small_business":"<boolean>","start":"<integer>","num":"<integer>","location":"<string>","uule":"<string>","google_domain":"<string>","gl":"<string>","hl":"<string>","device":"<string>","timeout":"<number>"}}'
```

### Google Ads

Google Ads. Returns the Google results page for a query at a named location, including the ads, local_ads, and shopping_results groups when Google serves them. q and location are required. A missing group means Google did not serve that kind of result.

`GET /google/ads`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Google Ads query, up to 2,048 characters with no control characters. |
| `location` | string | Yes | Named location to search from, up to 512 characters and at most 63 bytes once URL-encoded. |
| `hl` | string | No | Google interface and result language, such as en, en-US, or de. Defaults to en. |
| `safe` | string | No | Google adult-content filtering: active or off. |
| `nfpr` | string | No | Set 1 to disable Google spelling auto-correction, or 0 to allow it. |
| `device` | string | No | Google returns its real layout for the selected device: desktop, tablet, or mobile. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/ads","method":"GET","query":{"q":"<string>","location":"<string>","hl":"<string>","safe":"<string>","nfpr":"<string>","device":"<string>","timeout":"<number>"}}'
```

### Fetch Google Maps photo metadata

Fetch Google Maps photo metadata. Returns the contributor, place, coordinates, type and date of one Google Maps photo. Pass the photo's data_id from a Google Maps place response; its photo_meta_link points at Litescrape directly and won't work with an Orthogonal key.

`GET /google/maps/photo-meta`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `data_id` | string | Yes | Required Google Maps photo ID. Copy the nested photo data_id from a Google Maps place response; its photo_meta_link points at Litescrape directly and won't work with an Orthogonal key. |
| `hl` | string | No | Language code such as en, en-GB, or de. |
| `gl` | string | No | Two-letter country code used to localize results. |
| `google_domain` | string | No | Google domain used for the request. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/maps/photo-meta","method":"GET","query":{"data_id":"<string>","hl":"<string>","gl":"<string>","google_domain":"<string>","timeout":"<number>"}}'
```

### Fetch Google Maps posts

Fetch Google Maps posts. Returns the posts a business published on Google Maps. Pass the place's data_id from a Google Maps response (its posts_link points at Litescrape directly and won't work with an Orthogonal key), then call again with next_page_token to continue.

`GET /google/maps/posts`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `data_id` | string | Yes | Required hexadecimal Maps feature ID. Copy data_id from a Google Maps place response; its posts_link points at Litescrape directly and won't work with an Orthogonal key. |
| `next_page_token` | string | No | Opaque continuation token returned by a previous Maps Posts response. |
| `hl` | string | No | Language code such as en, en-GB, or de. |
| `gl` | string | No | Two-letter country code used to localize results. |
| `google_domain` | string | No | Google domain used for the request. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/maps/posts","method":"GET","query":{"data_id":"<string>","next_page_token":"<string>","hl":"<string>","gl":"<string>","google_domain":"<string>","timeout":"<number>"}}'
```

### Fetch Google Maps live foot traffic

Fetch Google Maps live foot traffic. Returns popular_times for one place: the live busyness score compared with the usual score for this time, plus the usual hourly curve for each weekday. Scores are relative from 0 through 100, not head counts. A place without published popular times returns popular_times as null, which still counts as a successful, billed call.

`GET /google/maps/popular-times`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `place_id` | string | Yes | Required Google Place ID, up to 512 letters, digits, _ or -. Copy it from a Google Maps search or place response. |
| `hl` | string | No | Language code such as en, en-GB, or de. |
| `gl` | string | No | Two-letter country code used to localize results. Defaults to us. |
| `google_domain` | string | No | Google domain used for the request. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/maps/popular-times","method":"GET","query":{"place_id":"<string>","hl":"<string>","gl":"<string>","google_domain":"<string>","timeout":"<number>"}}'
```

### Fetch a Google Maps contributor's reviews

Fetch a Google Maps contributor's reviews. Returns the public review history of one Google Maps contributor, up to 200 reviews in one response. There is no pagination; search_information.truncated is true when the profile has more reviews than were returned.

`GET /google/contributor-reviews`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `contributor_id` | string | Yes | Required 10 to 32 digit contributor ID, from a Google Maps contributor URL (/maps/contrib/{id}/reviews) or user.contributor_id in a Google Reviews response. |
| `hl` | string | No | Review and interface language such as en, en-US, or fr. |
| `gl` | string | No | Two-letter country code used to localize results, normalized to lowercase. Defaults to us. |
| `limit` | integer | No | Maximum number of reviews to return, from 1 through 200. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/contributor-reviews","method":"GET","query":{"contributor_id":"<string>","hl":"<string>","gl":"<string>","limit":"<integer>","timeout":"<number>"}}'
```

### Yelp business reviews

Yelp business reviews. Returns public reviews for one Yelp business in `reviews`. Get the encoded business ID from `place_id` in Yelp Search results. Page with `start` and `num`; the `pagination.next` link points at Litescrape directly and won't work with an Orthogonal key.

`GET /yelp/reviews`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `place_id` | string | Yes | Encoded Yelp business ID: letters, numbers, underscores, and hyphens. |
| `yelp_domain` | string | No | Supported first-party localized Yelp hostname, such as www.yelp.co.uk. Links in the response use this hostname. |
| `hl` | string | No | Review language: a two-letter code with an optional two-letter region, such as en or fr-FR. |
| `q` | string | No | Not supported: Yelp does not offer review text filtering. Any value returns 422 unsupported_parameter. |
| `sortby` | string | No | Review order. |
| `rating` | string | No | Comma-separated star ratings to include, each from 1 through 5. |
| `not_recommended` | boolean | No | Not supported: Yelp does not expose its not-recommended reviews. true returns 422 unsupported_parameter. |
| `start` | integer | No | Review offset from 0 through 10,000. |
| `num` | integer | No | Number of reviews, 1 through 49. |
| `not_recommended_start` | integer | No | Not supported, because not_recommended is not supported. Any value returns 400. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/yelp/reviews","method":"GET","query":{"place_id":"<string>","yelp_domain":"<string>","hl":"<string>","q":"<string>","sortby":"<string>","rating":"<string>","not_recommended":"<boolean>","start":"<integer>","num":"<integer>","not_recommended_start":"<integer>","timeout":"<number>"}}'
```

### Fetch Apple Maps reviews

Fetch Apple Maps reviews. Returns Apple's own rating summary and written reviews for one Apple Maps place; ratings and reviews attributed to other providers are omitted. reviews can be empty when a rating summary exists, and there is no pagination.

`GET /apple/maps/reviews`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `muid` | string | Yes | Exactly one unsigned 64-bit decimal Apple Maps place ID, such as the muid in an Apple Maps Places response. |
| `locale` | string | No | Apple-supported language-region locale such as en-US, en-GB, fr-FR, ja-JP, or zh-TW. Controls language and regional formatting. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/apple/maps/reviews","method":"GET","query":{"muid":"<string>","locale":"<string>","timeout":"<number>"}}'
```

### Tripadvisor reviews

Tripadvisor reviews. Returns public reviews for one Tripadvisor place in `reviews`, in Tripadvisor's order; rows Tripadvisor promotes carry `featured: true` and can appear ahead of newer reviews. Get the numeric `place_id` from Tripadvisor Search results. Page with `start` and `num`; the `pagination.next` link points at Litescrape directly and won't work with an Orthogonal key.

`GET /tripadvisor/reviews`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `place_id` | integer | Yes | Numeric Tripadvisor place ID, up to 16 digits. |
| `tripadvisor_domain` | string | No | Supported first-party localized Tripadvisor hostname, such as www.tripadvisor.co.uk. |
| `locale` | string | No | Lowercase language code with an optional uppercase country, such as en or en-US. |
| `start` | integer | No | Review offset from 0 through 10,000. |
| `num` | integer | No | Number of reviews, 1 through 50. |
| `sort_by` | string | No | Review order: recent (newest first) or relevance. |
| `translate` | boolean | No | Request Tripadvisor's machine translation of reviews. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/tripadvisor/reviews","method":"GET","query":{"place_id":"<integer>","tripadvisor_domain":"<string>","locale":"<string>","start":"<integer>","num":"<integer>","sort_by":"<string>","translate":"<boolean>","timeout":"<number>"}}'
```

### Fetch Apple Maps places

Fetch Apple Maps places. Resolve one to 50 unsigned 64-bit decimal Apple Maps MUIDs. Returns place_results in the requested order.

`GET /apple/maps/places`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `muid` | string | Yes | One to 50 comma-separated unsigned 64-bit decimal Apple Maps place IDs. |
| `locale` | string | No | Apple-supported language-region locale such as en-US, en-GB, fr-FR, ja-JP, or zh-TW. Controls language and regional formatting. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/apple/maps/places","method":"GET","query":{"muid":"<string>","locale":"<string>","timeout":"<number>"}}'
```

### Google Play books

Google Play books (Alpha). Search and browse ebooks, audiobooks, series, categories, and charts. Alpha: the contract may change.

`GET /google/play/books`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `hl` | string | No | Storefront language, such as en, de, or zh-TW. Maximum 32 characters. |
| `gl` | string | No | Two-letter country code. |
| `q` | string | No | Optional query with 1 to 2,048 UTF-8 bytes of printable text. Excludes category. Omit it to browse the storefront. On the games endpoint, q uses shared Android app search; omit q or choose games_category to browse games. |
| `chart` | string | No | Chart identifier such as topselling_free, topselling_paid, or topgrossing. Excludes q and all pagination selectors. Apps and games charts require phone or an omitted store_device. |
| `next_page_token` | string | No | Use the returned next_page_token with the same parameters. Excludes chart, section_page_token, and see_more_token. |
| `section_page_token` | string | No | Continue one result group using its returned token and the same parameters. Excludes the other pagination selectors and chart. |
| `see_more_token` | string | No | Open a result collection using its returned token and the same parameters. Excludes the other pagination selectors and chart. |
| `books_category` | string | No | Native book category identifier, such as coll_1689 for children's books. Excludes q. |
| `age` | string | No | Children's age range. Requires books_category=coll_1689. |
| `price` | integer | No | 1 for free books or 2 for paid books. Requires q. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/play/books","method":"GET","query":{"hl":"<string>","gl":"<string>","q":"<string>","chart":"<string>","next_page_token":"<string>","section_page_token":"<string>","see_more_token":"<string>","books_category":"<string>","age":"<string>","price":"<integer>","timeout":"<number>"}}'
```

### Google Play product

Google Play product (Alpha). Read app, ebook, audiobook, movie, or TV product details. Alpha: the contract may change.

`GET /google/play/product`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `hl` | string | No | Storefront language, such as en, de, or zh-TW. Maximum 32 characters. |
| `gl` | string | No | Two-letter country code. |
| `product_id` | string | Yes | Native Google Play product identifier, with 1 to 512 letters, digits, underscores, dots, or hyphens. |
| `store` | string | No | Product catalog containing this identifier. |
| `season_id` | string | No | Native season identifier, such as tvseason-OVPad1njPzI.P. Requires store=tv. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/play/product","method":"GET","query":{"hl":"<string>","gl":"<string>","product_id":"<string>","store":"<string>","season_id":"<string>","timeout":"<number>"}}'
```

### Google Play movies

Google Play movies (Alpha). Search and browse movies, TV shows, episodes, categories, and charts. Alpha: the contract may change.

`GET /google/play/movies`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `hl` | string | No | Storefront language, such as en, de, or zh-TW. Maximum 32 characters. |
| `gl` | string | No | Two-letter country code. |
| `q` | string | No | Optional query with 1 to 2,048 UTF-8 bytes of printable text. Excludes category. Omit it to browse the storefront. On the games endpoint, q uses shared Android app search; omit q or choose games_category to browse games. |
| `chart` | string | No | Chart identifier such as topselling_free, topselling_paid, or topgrossing. Excludes q and all pagination selectors. Apps and games charts require phone or an omitted store_device. |
| `next_page_token` | string | No | Use the returned next_page_token with the same parameters. Excludes chart, section_page_token, and see_more_token. |
| `section_page_token` | string | No | Continue one result group using its returned token and the same parameters. Excludes the other pagination selectors and chart. |
| `see_more_token` | string | No | Open a result collection using its returned token and the same parameters. Excludes the other pagination selectors and chart. |
| `movies_category` | string | No | Native movie category identifier, such as FAMILY for family movies. Excludes q. |
| `age` | string | No | Children's age range. Requires movies_category=FAMILY. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/google/play/movies","method":"GET","query":{"hl":"<string>","gl":"<string>","q":"<string>","chart":"<string>","next_page_token":"<string>","section_page_token":"<string>","see_more_token":"<string>","movies_category":"<string>","age":"<string>","timeout":"<number>"}}'
```

### Apple App Store product

Apple App Store product (Alpha). Read app details, version history, screenshots, ratings, privacy disclosures, and related apps. Alpha: the contract may change.

`GET /apple/app-store/product`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | No | Two-letter Apple storefront country. UK is accepted as an alias for GB. |
| `product_id` | string | Yes | Positive decimal Apple app identifier, up to 20 digits. |
| `type` | string | No | App product type. Only app is supported. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/apple/app-store/product","method":"GET","query":{"country":"<string>","product_id":"<string>","type":"<string>","timeout":"<number>"}}'
```

### Fetch

Fetch (Alpha). Fetch a public HTTP(S) page and return LLM-ready content. respond_with selects content (default), markdown, html, text or frontmatter, or a '+' combination. page_timeout bounds page loading; timeout bounds the whole call (at most 90 seconds). Always fetches fresh. If the site serves an error page such as a 404, that page is returned and the call counts as successful and billed; set assert_status_code to reject unexpected statuses. Cookies, injected scripts, viewport and markdown options go in the JSON body. Alpha: the contract may change.

`POST /web/fetch`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | Public HTTP(S) URL to capture, 1-8,192 characters. Include http:// or https://; bare domains are rejected. The host must be public, on port 80 or 443, without embedded credentials. |
| `remove_overlay` | boolean | No | Remove modal and cookie-banner overlays from the page. |
| `detach_invisibles` | boolean | No | Drop display:none elements from the page. |
| `wait_for_selector` | string | No | CSS selector to wait for after navigation, 1-2,048 characters. POST also accepts a list of 1-16 selectors. |
| `set_cookies` | array | No | POST only. 1-100 cookies in Set-Cookie syntax (name=value; Path=/; Domain=...), one line each, up to 4,096 characters. |
| `user_agent` | string | No | User-Agent for the page request, 1-1,024 characters without control characters. Defaults to the browser's own. |
| `inject_page_script` | array | No | POST only. 1-8 scripts (source, or a URL to a script), up to 8,192 characters each, run in the main frame. |
| `inject_frame_script` | array | No | POST only. 1-8 scripts (source, or a URL to a script), up to 8,192 characters each, run in every frame. |
| `page_timeout` | integer | No | Seconds from 1 through 180 for page loading and browser operations. Cannot extend the total request budget set by timeout. |
| `locale` | string | No | Browser locale as a language tag, 2-64 characters. Defaults to the browser's own. |
| `referer` | string | No | HTTP(S) URL sent as the Referer. |
| `assert_status_code` | integer | No | Expected origin HTTP status, 100-599. A different status is rejected; otherwise a rendered error page is a successful capture. |
| `viewport` | object | No | POST only. Browser viewport; width and height are required. Default: 1280 x 1280. |
| `robots_txt` | string | No | User agent, 1-256 characters, to check against the site's robots.txt; disallowed URLs are rejected. |
| `respond_timing` | string | No | Page readiness condition to reach before responding. |
| `respond_with` | string | No | Output format: content (default; main content as Markdown, or the whole page when extraction keeps too little), markdown (whole page as Markdown), html, text, frontmatter (content plus front matter), or a '+' combination such as markdown+frontmatter. |
| `with_links_summary` | boolean | No | true, false or all: add a links list to the response. |
| `with_images_summary` | boolean | No | Add an images list to the response. |
| `retain_images` | string | No | Images to keep: all (default), alt (alt text only) or none. |
| `retain_links` | string | No | Links to keep: all (default), text (link text only), none, or gpt-oss (citation format with a links summary). |
| `retain_media` | string | No | How video, audio and embedded video appear: none, text, link (default), image or html. |
| `preset` | string | No | Option preset. Fills only the options the request leaves unset. |
| `no_gfm` | boolean | No | true, false or table: disable GitHub-flavored Markdown, or only its tables. |
| `target_selector` | string | No | CSS selector to extract, 1-2,048 characters; POST also accepts a list of 1-16 selectors. Implies waiting for the selector. Match-all selectors are rejected. |
| `remove_selector` | string | No | CSS selector removed before extraction, 1-2,048 characters; POST also accepts a list of 1-16 selectors. |
| `keep_img_data_url` | boolean | No | Keep inline data: images in Markdown. |
| `with_iframe` | boolean | No | true, false or quoted: include iframe content before extraction. |
| `with_shadow_dom` | boolean | No | Include open shadow DOM content before extraction. |
| `engine` | string | No | auto (default; lightweight HTTP first, a browser when needed), browser, or curl (no JavaScript). |
| `token_budget` | integer | No | Integer 1-10,000,000. Reject the page when its token count exceeds the budget. |
| `markdown` | object | No | POST only. Markdown formatting options. |
| `markdown_chunking` | string | No | true, h1-h5, structured or s1-s5: split the Markdown and return chunks. |
| `max_tokens` | integer | No | Integer 500-10,000,000. Trim content to this many tokens. |
| `base` | string | No | Resolve relative links against the requested URL (initial, default) or the final URL after redirects (final). |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/web/fetch","query":{"timeout":"<number>"},"body":{"url":"<string>","remove_overlay":"<boolean>","detach_invisibles":"<boolean>","wait_for_selector":"<string>","set_cookies":"<array>","user_agent":"<string>","inject_page_script":"<array>","inject_frame_script":"<array>","page_timeout":"<integer>","locale":"<string>","referer":"<string>","assert_status_code":"<integer>","viewport":"<object>","robots_txt":"<string>","respond_timing":"<string>","respond_with":"<string>","with_links_summary":"<boolean>","with_images_summary":"<boolean>","retain_images":"<string>","retain_links":"<string>","retain_media":"<string>","preset":"<string>","no_gfm":"<boolean>","target_selector":"<string>","remove_selector":"<string>","keep_img_data_url":"<boolean>","with_iframe":"<boolean>","with_shadow_dom":"<boolean>","engine":"<string>","token_budget":"<integer>","markdown":"<object>","markdown_chunking":"<string>","max_tokens":"<integer>","base":"<string>"}}'
```

### Fetch

Fetch (Alpha). Fetch a public HTTP(S) page and return LLM-ready content. respond_with selects content (default), markdown, html, text or frontmatter, or a '+' combination. page_timeout bounds page loading; timeout bounds the whole call (at most 90 seconds). Always fetches fresh. If the site serves an error page such as a 404, that page is returned and the call counts as successful and billed; set assert_status_code to reject unexpected statuses. Cookies, scripts, viewport and markdown options are only available on POST. Alpha: the contract may change.

`GET /web/fetch`

**Estimated cost:** $0.00018

**Docs:** https://litescrape.com/docs/reference

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `assert_status_code` | integer | No | Expected origin HTTP status, 100-599. A different status is rejected; otherwise a rendered error page is a successful capture. |
| `base` | string | No | Resolve relative links against the requested URL (initial, default) or the final URL after redirects (final). |
| `detach_invisibles` | boolean | No | Drop display:none elements from the page. |
| `engine` | string | No | auto (default; lightweight HTTP first, a browser when needed), browser, or curl (no JavaScript). |
| `keep_img_data_url` | boolean | No | Keep inline data: images in Markdown. |
| `locale` | string | No | Browser locale as a language tag, 2-64 characters. Defaults to the browser's own. |
| `markdown_chunking` | string | No | true, h1-h5, structured or s1-s5: split the Markdown and return chunks. |
| `max_tokens` | integer | No | Integer 500-10,000,000. Trim content to this many tokens. |
| `no_gfm` | boolean | No | true, false or table: disable GitHub-flavored Markdown, or only its tables. |
| `page_timeout` | integer | No | Seconds from 1 through 180 for page loading and browser operations. Cannot extend the total request budget set by timeout. |
| `preset` | string | No | Option preset. Fills only the options the request leaves unset. |
| `referer` | string | No | HTTP(S) URL sent as the Referer. |
| `remove_overlay` | boolean | No | Remove modal and cookie-banner overlays from the page. |
| `remove_selector` | string | No | CSS selector removed before extraction, 1-2,048 characters; POST also accepts a list of 1-16 selectors. |
| `respond_timing` | string | No | Page readiness condition to reach before responding. |
| `respond_with` | string | No | Output format: content (default; main content as Markdown, or the whole page when extraction keeps too little), markdown (whole page as Markdown), html, text, frontmatter (content plus front matter), or a '+' combination such as markdown+frontmatter. |
| `retain_images` | string | No | Images to keep: all (default), alt (alt text only) or none. |
| `retain_links` | string | No | Links to keep: all (default), text (link text only), none, or gpt-oss (citation format with a links summary). |
| `retain_media` | string | No | How video, audio and embedded video appear: none, text, link (default), image or html. |
| `robots_txt` | string | No | User agent, 1-256 characters, to check against the site's robots.txt; disallowed URLs are rejected. |
| `target_selector` | string | No | CSS selector to extract, 1-2,048 characters; POST also accepts a list of 1-16 selectors. Implies waiting for the selector. Match-all selectors are rejected. |
| `token_budget` | integer | No | Integer 1-10,000,000. Reject the page when its token count exceeds the budget. |
| `url` | string | Yes | Public HTTP(S) URL to capture, 1-8,192 characters. Include http:// or https://; bare domains are rejected. The host must be public, on port 80 or 443, without embedded credentials. |
| `user_agent` | string | No | User-Agent for the page request, 1-1,024 characters without control characters. Defaults to the browser's own. |
| `wait_for_selector` | string | No | CSS selector to wait for after navigation, 1-2,048 characters. POST also accepts a list of 1-16 selectors. |
| `with_iframe` | boolean | No | true, false or quoted: include iframe content before extraction. |
| `with_images_summary` | boolean | No | Add an images list to the response. |
| `with_links_summary` | boolean | No | true, false or all: add a links list to the response. |
| `with_shadow_dom` | boolean | No | Include open shadow DOM content before extraction. |
| `timeout` | number | No | Optional budget in seconds for the whole request, including queueing. Must be greater than 0 and at most 90. On expiry the call returns 503 request_deadline_exceeded with retryable=true and is not charged. Omit to keep the standard server deadline. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"litescrape","path":"/web/fetch","method":"GET","query":{"assert_status_code":"<integer>","base":"<string>","detach_invisibles":"<boolean>","engine":"<string>","keep_img_data_url":"<boolean>","locale":"<string>","markdown_chunking":"<string>","max_tokens":"<integer>","no_gfm":"<boolean>","page_timeout":"<integer>","preset":"<string>","referer":"<string>","remove_overlay":"<boolean>","remove_selector":"<string>","respond_timing":"<string>","respond_with":"<string>","retain_images":"<string>","retain_links":"<string>","retain_media":"<string>","robots_txt":"<string>","target_selector":"<string>","token_budget":"<integer>","url":"<string>","user_agent":"<string>","wait_for_selector":"<string>","with_iframe":"<boolean>","with_images_summary":"<boolean>","with_links_summary":"<boolean>","with_shadow_dom":"<boolean>","timeout":"<number>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/litescrape
