# Context.dev — 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)

API for retrieving context data from any website. Web scraping, brand retrieval, AI data extraction, screenshots, and more.

**Verified:** yes

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

### Scrape Fonts

Scrape font information from a website including font families, usage statistics, fallbacks, and element/word counts.

`GET /web/fonts`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | Domain name to extract fonts from (e.g., 'example.com', 'google.com'). The domain will be automatically normalized and validated. |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/fonts","method":"GET","query":{"domain":"<string>","timeoutMS":"<integer>"}}'
```

### Scrape raw HTML from a URL

Scrapes the given URL and returns the raw HTML content of the page.

`GET /web/scrape/html`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | Full URL to scrape (must include http:// or https:// protocol) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/scrape/html","method":"GET","query":{"url":"<string>"}}'
```

### Scrape images from a URL

Scrapes all images from the given URL. Extracts images from img, svg, picture/source, link, and video elements including inline SVGs, base64 data URIs, and standard URLs.

`GET /web/scrape/images`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | Full URL to scrape images from (must include http:// or https:// protocol) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/scrape/images","method":"GET","query":{"url":"<string>"}}'
```

### Scrape URL and convert to Markdown

Scrapes the given URL, converts the HTML content to Markdown, and returns the result.

`GET /web/scrape/markdown`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | Full URL to scrape and convert to markdown (must include http:// or https:// protocol) |
| `includeLinks` | boolean | No | Preserve hyperlinks in Markdown output |
| `includeImages` | boolean | No | Include image references in Markdown output |
| `shortenBase64Images` | boolean | No | Shorten base64-encoded image data in the Markdown output |
| `useMainContentOnly` | boolean | No | Extract only the main content of the page, excluding headers, footers, sidebars, and navigation |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/scrape/markdown","method":"GET","query":{"url":"<string>","includeLinks":"<boolean>","includeImages":"<boolean>","shortenBase64Images":"<boolean>","useMainContentOnly":"<boolean>"}}'
```

### Crawl website sitemap

Crawls the sitemap of the given domain and returns all discovered page URLs. Supports sitemap index files (recursive), parallel fetching with concurrency control, deduplication, and filters out non-page resources (images, PDFs, etc.).

`GET /web/scrape/sitemap`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | Domain name to crawl sitemaps for (e.g., 'example.com'). The domain will be automatically normalized and validated. |
| `maxLinks` | integer | No | Maximum number of links to return from the sitemap crawl. Defaults to 10,000. Minimum is 1, maximum is 100,000. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/scrape/sitemap","method":"GET","query":{"domain":"<string>","maxLinks":"<integer>"}}'
```

### Scrape Styleguide

Extract a comprehensive design system from a website including colors, typography, spacing, shadows, and UI components.

`GET /web/styleguide`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | No | Domain name to extract styleguide from (e.g., 'example.com', 'google.com'). The domain will be automatically normalized and validated. |
| `directUrl` | string | No | A specific URL to fetch the styleguide from directly, bypassing domain resolution (e.g., 'https://example.com/design-system'). |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/styleguide","method":"GET","query":{"domain":"<string>","directUrl":"<string>","timeoutMS":"<integer>"}}'
```

### Extract products from a brand's website

Beta feature: Extract product information from a brand's website. We will analyze the website and return a list of products with details such as name, description, image, pricing, features, and more.

`POST /brand/ai/products`

**Estimated cost:** $0.03

_No parameters required._

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/ai/products"}'
```

### Retrieve brand data by email address

Retrieve brand information using an email address while detecting disposable and free email addresses. This endpoint extracts the domain from the email address and returns brand data for that domain. Disposable and free email addresses (like gmail.com, yahoo.com) will throw a 422 error.

`GET /brand/retrieve-by-email`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | Yes | Email address to retrieve brand data for (e.g., 'contact@example.com'). The domain will be extracted from the email. Free email providers (gmail.com, yahoo.com, etc.) and disposable email addresses are not allowed. |
| `maxSpeed` | boolean | No | Optional parameter to optimize the API call for maximum speed. When set to true, the API will skip time-consuming operations for faster response at the cost of less comprehensive data. |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/retrieve-by-email","method":"GET","query":{"email":"<string>","maxSpeed":"<boolean>","timeoutMS":"<integer>"}}'
```

### Retrieve brand data by ISIN

Retrieve brand information using an ISIN (International Securities Identification Number). This endpoint looks up the company associated with the ISIN and returns its brand data.

`GET /brand/retrieve-by-isin`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `isin` | string | Yes | ISIN (International Securities Identification Number) to retrieve brand data for (e.g., 'AU000000IMD5', 'US0378331005'). Must be exactly 12 characters: 2 letters followed by 9 alphanumeric characters and ending with a digit. |
| `maxSpeed` | boolean | No | Optional parameter to optimize the API call for maximum speed. When set to true, the API will skip time-consuming operations for faster response at the cost of less comprehensive data. |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/retrieve-by-isin","method":"GET","query":{"isin":"<string>","maxSpeed":"<boolean>","timeoutMS":"<integer>"}}'
```

### Query website data using AI

Use AI to extract specific data points from a brand's website. The AI will crawl the website and extract the requested information based on the provided data points.

`POST /brand/ai/query`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | The domain name to analyze |
| `timeoutMS` | integer | No | Optional timeout in milliseconds. Max 300000ms (5 minutes). |
| `specific_pages` | object | No | Optional object specifying which pages to analyze |
| `data_to_extract` | array | Yes | Array of data points to extract. Each item requires: datapoint_name (string), datapoint_type (text\|number\|date\|boolean\|list\|url), datapoint_description (string), datapoint_example (string) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/ai/query","body":{"domain":"<string>","timeoutMS":"<integer>","specific_pages":"<object>","data_to_extract":"<array>"}}'
```

### Classify NAICS Industries

Classify any brand into 2022 NAICS industry codes from its domain or name.

`GET /web/naics`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `input` | string | Yes | Brand domain or title to retrieve NAICS code for. If a valid domain is provided in `input`, it will be used for classification, otherwise, we will search for the brand using the provided title. |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |
| `minResults` | integer | No | Minimum number of NAICS codes to return. Must be at least 1. Defaults to 1. |
| `maxResults` | integer | No | Maximum number of NAICS codes to return. Must be between 1 and 10. Defaults to 5. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/naics","method":"GET","query":{"input":"<string>","timeoutMS":"<integer>","minResults":"<integer>","maxResults":"<integer>"}}'
```

### Search the Web

Performs an intelligent web search. Costs 1 credit per returned result.

`POST /web/search`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | The search query |
| `include_domains` | array | No | Only include results from these domains (e.g. ["arxiv.org", "github.com"]) |
| `exclude_domains` | array | No | Exclude results from these domains (e.g. ["pinterest.com", "reddit.com"]) |
| `freshness` | string | No | Filter results by recency |
| `queryFanout` | boolean | No | When true, uses an LLM to expand the query into multiple diverse search queries that are executed in parallel, improving recall by covering different angles and phrasings of the original intent |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/search","body":{"query":"<string>","include_domains":"<array>","exclude_domains":"<array>","freshness":"<string>","queryFanout":"<boolean>"}}'
```

### Prefetch brand data for a domain

Signal that you may fetch brand data for a particular domain soon to improve latency. This endpoint does not charge credits and is available for paid customers to optimize future requests. [You must be on a paid plan to use this endpoint]

`POST /brand/prefetch`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | Domain name to prefetch brand data for |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/prefetch","body":{"domain":"<string>","timeoutMS":"<integer>"}}'
```

### Retrieve simplified brand data by domain

Returns a simplified version of brand data containing only essential information: domain, title, colors, logos, and backdrops. This endpoint is optimized for faster responses and reduced data transfer.

`GET /brand/retrieve-simplified`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | Domain name to retrieve simplified brand data for |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/retrieve-simplified","method":"GET","query":{"domain":"<string>","timeoutMS":"<integer>"}}'
```

### Extract a single product from a URL

Beta feature: Given a single URL, determines if it is a product detail page, classifies the platform/product type, and extracts the product information. Supports Amazon, TikTok Shop, Etsy, and generic ecommerce sites.

`POST /brand/ai/product`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | The product page URL to extract product data from. |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/ai/product","body":{"url":"<string>","timeoutMS":"<integer>"}}'
```

### Identify brand from transaction data

Endpoint specially designed for platforms that want to identify transaction data by the transaction title.

`GET /brand/transaction_identifier`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `transaction_info` | string | Yes | Transaction information to identify the brand |
| `maxSpeed` | boolean | No | Optional parameter to optimize the API call for maximum speed. When set to true, the API will skip time-consuming operations for faster response at the cost of less comprehensive data. |
| `country_gl` | string | No | Optional country code (GL parameter) to specify the country. This affects the geographic location used for search queries. |
| `city` | string | No | Optional city name to prioritize when searching for the brand. |
| `mcc` | string | No | Optional Merchant Category Code (MCC) to help identify the business category/industry. |
| `phone` | number | No | Optional phone number from the transaction to help verify brand match. |
| `high_confidence_only` | boolean | No | When set to true, the API will perform an additional verification steps to ensure the identified brand matches the transaction with high confidence. Defaults to false. |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/transaction_identifier","method":"GET","query":{"transaction_info":"<string>","maxSpeed":"<boolean>","country_gl":"<string>","city":"<string>","mcc":"<string>","phone":"<number>","high_confidence_only":"<boolean>","timeoutMS":"<integer>"}}'
```

### Retrieve brand data by domain

Retrieve logos, backdrops, colors, industry, description, and more from any domain

`GET /brand/retrieve`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | Domain name to retrieve brand data for (e.g., 'example.com', 'google.com'). Cannot be used with name or ticker parameters. |
| `maxSpeed` | boolean | No | Optional parameter to optimize the API call for maximum speed. When set to true, the API will skip time-consuming operations for faster response at the cost of less comprehensive data. Works with all three lookup methods. |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/retrieve","method":"GET","query":{"domain":"<string>","maxSpeed":"<boolean>","timeoutMS":"<integer>"}}'
```

### Retrieve brand data by company name

Retrieve brand information using a company name. This endpoint searches for the company by name and returns its brand data.

`GET /brand/retrieve-by-name`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Company name to retrieve brand data for (e.g., 'Apple Inc', 'Microsoft Corporation'). Must be 3-30 characters. |
| `maxSpeed` | boolean | No | Optional parameter to optimize the API call for maximum speed. When set to true, the API will skip time-consuming operations for faster response at the cost of less comprehensive data. |
| `country_gl` | string | No | Optional country code (GL parameter) to specify the country. This affects the geographic location used for search queries. |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/retrieve-by-name","method":"GET","query":{"name":"<string>","maxSpeed":"<boolean>","country_gl":"<string>","timeoutMS":"<integer>"}}'
```

### Prefetch brand data by email

Signal that you may fetch brand data for a particular domain soon to improve latency. This endpoint accepts an email address, extracts the domain from it, validates that it's not a disposable or free email provider, and queues the domain for prefetching. This endpoint does not charge credits and is available for paid customers to optimize future requests. [You must be on a paid plan to use this endpoint]

`POST /brand/prefetch-by-email`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | Yes | Email address to prefetch brand data for. The domain will be extracted from the email. Free email providers (gmail.com, yahoo.com, etc.) and disposable email addresses are not allowed. |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/prefetch-by-email","body":{"email":"<string>","timeoutMS":"<integer>"}}'
```

### Scrape Screenshot

Capture a screenshot of a website. Supports both viewport (standard browser view) and full page screenshots.

`GET /web/screenshot`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | No | Domain name to take screenshot of (e.g., 'example.com', 'google.com'). The domain will be automatically normalized and validated. |
| `directUrl` | string | No | A specific URL to screenshot directly, bypassing domain resolution (e.g., 'https://example.com/pricing'). When provided, the screenshot is taken of this exact URL. |
| `fullScreenshot` | string | No | Optional parameter to determine screenshot type. If 'true', takes a full page screenshot capturing all content. If 'false' or not provided, takes a viewport screenshot (standard browser view). |
| `page` | string | No | Optional parameter to specify which page type to screenshot. If provided, the system will scrape the domain's links and use heuristics to find the most appropriate URL for the specified page type (30 supported languages). If not provided, screenshots the main domain landing page. Only applicable when using 'domain', not 'directUrl'. |
| `prioritize` | string | No | Optional parameter to prioritize screenshot capture. If 'speed', optimizes for faster capture with basic quality. If 'quality', optimizes for higher quality with longer wait times. Defaults to 'quality' if not provided. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/screenshot","method":"GET","query":{"domain":"<string>","directUrl":"<string>","fullScreenshot":"<string>","page":"<string>","prioritize":"<string>"}}'
```

### Retrieve brand data by stock ticker

Retrieve brand information using a stock ticker symbol. This endpoint looks up the company associated with the ticker and returns its brand data.

`GET /brand/retrieve-by-ticker`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | Stock ticker symbol to retrieve brand data for (e.g., 'AAPL', 'GOOGL', 'BRK.A'). Must be 1-15 characters, letters/numbers/dots only. |
| `ticker_exchange` | string | No | Optional stock exchange for the ticker. Defaults to NASDAQ if not specified. |
| `maxSpeed` | boolean | No | Optional parameter to optimize the API call for maximum speed. When set to true, the API will skip time-consuming operations for faster response at the cost of less comprehensive data. |
| `timeoutMS` | integer | No | Optional timeout in milliseconds for the request. If the request takes longer than this value, it will be aborted with a 408 status code. Maximum allowed value is 300000ms (5 minutes). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/brand/retrieve-by-ticker","method":"GET","query":{"ticker":"<string>","ticker_exchange":"<string>","maxSpeed":"<boolean>","timeoutMS":"<integer>"}}'
```

### Crawl website and extract Markdown

Performs a crawl starting from a given URL, extracts page content as Markdown, and returns results for all crawled pages. Only follows links within the same domain as the starting URL. Costs 1 credit per successful page crawled.

`POST /web/crawl`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | The starting URL for the crawl (must include http:// or https:// protocol) |
| `maxPages` | integer | No | Maximum number of pages to crawl. Hard cap: 500. |
| `maxDepth` | integer | No | Maximum link depth from the starting URL (0 = only the starting page) |
| `urlRegex` | string | No | Regex pattern. Only URLs matching this pattern will be followed and scraped. |
| `includeLinks` | boolean | No | Preserve hyperlinks in the Markdown output |
| `includeImages` | boolean | No | Include image references in the Markdown output |
| `shortenBase64Images` | boolean | No | Truncate base64-encoded image data in the Markdown output |
| `useMainContentOnly` | boolean | No | Extract only the main content, stripping headers, footers, sidebars, and navigation |
| `followSubdomains` | boolean | No | When true, follow links on subdomains of the starting URL's domain (e.g. docs.example.com when starting from example.com). www and apex are always treated as equivalent. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/crawl","body":{"url":"<string>","maxPages":"<integer>","maxDepth":"<integer>","urlRegex":"<string>","includeLinks":"<boolean>","includeImages":"<boolean>","shortenBase64Images":"<boolean>","useMainContentOnly":"<boolean>","followSubdomains":"<boolean>"}}'
```

### Find Website Competitors

Analyze a company's landing page and web search evidence to return direct competitors for the same product or market.

`GET /web/competitors`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | Company domain to analyze, such as stripe.com. |
| `numCompetitors` | string | No | Exact number of direct competitors to return. Defaults to 5. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/competitors","method":"GET","query":{"domain":"<string>","numCompetitors":"<string>"}}'
```

### Retrieve Person

Retrieve and normalize a person profile from identifiers such as LinkedIn URL.

`POST /people/retrieve`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `identifiers` | object | Yes | Known identifiers for the person. Must include linkedinUrl. |
| `timeoutMS` | integer | No | Optional timeout in milliseconds. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/people/retrieve","body":{"identifiers":"<object>","timeoutMS":"<integer>"}}'
```

### Classify SIC Industries

Classify any brand into Standard Industrial Classification (SIC) codes from its domain or name.

`GET /web/sic`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `input` | string | Yes | Brand domain or title to retrieve SIC code for. |
| `type` | string | No | Which SIC dataset to classify against: original_sic or latest_sec_sic. |
| `minResults` | integer | No | Minimum number of SIC codes to return. Must be at least 1. Defaults to 1. |
| `maxResults` | integer | No | Maximum number of SIC codes to return. Must be between 1 and 10. Defaults to 5. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/sic","method":"GET","query":{"input":"<string>","type":"<string>","minResults":"<integer>","maxResults":"<integer>"}}'
```

### Extract Structured Website Data

Crawl a website, use the provided JSON Schema and instructions to prioritize relevant internal links, and extract structured data from the selected pages.

`POST /web/extract`

**Estimated cost:** $0.03

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | The starting website URL to crawl and extract from. Must include http:// or https://. |
| `schema` | object | Yes | JSON Schema for the returned data object. |
| `instructions` | string | No | Optional extraction guidance, such as which facts to prioritize or how to interpret fields. |
| `factCheck` | boolean | No | When true, every returned value must be grounded in facts stated on the page. |
| `followSubdomains` | boolean | No | When true, follow links on subdomains of the starting URL's domain. |
| `maxPages` | integer | No | Maximum number of pages to analyze for extraction. Hard cap: 50. Defaults to 5. |
| `maxDepth` | integer | No | Optional maximum link depth from the starting URL (0 = only the starting page). |
| `includeFrames` | boolean | No | When true, iframe contents are included in Markdown before extraction. |
| `maxAgeMs` | integer | No | Return cached scrape results if younger than this many milliseconds. |
| `waitForMs` | integer | No | Optional browser wait time in milliseconds after initial page load for each crawled page. |
| `stopAfterMs` | integer | No | Soft time budget for the crawl in milliseconds. Min: 10000. Max: 110000. Default: 80000. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"context-dev","path":"/web/extract","body":{"url":"<string>","schema":"<object>","instructions":"<string>","factCheck":"<boolean>","followSubdomains":"<boolean>","maxPages":"<integer>","maxDepth":"<integer>","includeFrames":"<boolean>","maxAgeMs":"<integer>","waitForMs":"<integer>","stopAfterMs":"<integer>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/context-dev
