# API Ninjas — 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 Ninjas: 140+ utility and data APIs covering finance and market data, geolocation, transportation, banking identifiers, validation, health and nutrition, text processing, and more. All endpoints are stateless lookups or calculations.

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

### Get current stock price

Returns the current price of a stock or market index. Requires a `ticker` such as AAPL or ^DJI. For past prices and OHLC bars use /stockpricehistorical.

`GET /v1/stockprice`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/stockprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | Stock or index ticker symbol (e.g., AAPL or ^DJI). |

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

### Get city data

Get city data from either a name or population range. Returns a list of cities that satisfies the parameters.

`GET /v1/city`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/city

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Name of city. |
| `country` | string | No | Country filter. Must be an ISO-3166 alpha-2 country code (e.g. US). |
| `min_lat` | number | No | Minimum latitude coordinate. |
| `max_lat` | number | No | Maximum latitude coordinate. |
| `min_lon` | number | No | Minimum longitude coordinate. |
| `max_lon` | number | No | Maximum longitude coordinate. |
| `min_population` | number | No | Minimum city population. |
| `max_population` | number | No | Maximum city population. |
| `limit` | number | No | How many results to return. Must be between 1 and 30. Default is 1. To get more than 30 results, use the offset parameter. (Default: 1) |
| `offset` | number | No | Number of results to offset for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/city","method":"GET","query":{"name":"<string>","country":"<string>","min_lat":"<number>","max_lat":"<number>","min_lon":"<number>","max_lon":"<number>","min_population":"<number>","max_population":"<number>","limit":"<number>","offset":"<number>"}}'
```

### Get historical commodity prices

Returns a historical price series for a commodity over an optional Unix start/end range and interval. Requires a `name`. For the latest price use /commodityprice.

`GET /v1/commoditypricehistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/commodityprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Name of commodity. |
| `period` | string | No | Time interval between data points. (Allowed: 1m, 5m, 15m, 30m, 1h, 4h, 1d) (Default: 1h) |
| `start` | number | No | Start timestamp in Unix format. |
| `end` | number | No | End timestamp in Unix format. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/commoditypricehistorical","method":"GET","query":{"name":"<string>","period":"<string>","start":"<number>","end":"<number>"}}'
```

### Get current prices for all supported commodities in a single call

Returns an enriched live price object for all 30 supported commodities in one call. Optional filters narrow the result set.

`GET /v1/commoditysnapshot`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/commodityprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `category` | string | No | Filter to a single product category. (Allowed: precious_metals, base_metals, energy, grains, softs, livestock) |
| `exchange` | string | No | Filter to commodities listed on a single exchange. (Allowed: CME, NYMEX, COMEX, ICE) |

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

### Get current commodity price (single or batch)

Returns the current price for a single commodity (`name`). Optional `currency` and `unit` parameters convert the response from the native USD/USX quote into any supported currency and unit.

`GET /v1/commodityprice`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/commodityprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Name of a single commodity. (Allowed: gold, soybean_oil, wheat, platinum, micro_silver, lean_hogs, corn, oat, aluminum, soybean_meal, silver, soybean, lumber, live_cattle, sugar, natural_gas, crude_oil, orange_juice, coffee, cotton, copper, micro_gold, feeder_cattle, rough_rice, palladium, cocoa, brent_crude_oil, gasoline_rbob, heating_oil, class_3_milk) |
| `currency` | string | No | ISO 4217 currency code to convert the price into (e.g., EUR, GBP, INR). When provided, USX prices are first normalized to USD before conversion. Defaults to the native USD/USX quote. |
| `unit` | string | No | Target mass/volume/energy unit to convert the price into (e.g., kg, g, lb, metric_ton, liter). Bushel and board_feet are commodity-specific and cannot be cross-converted. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/commodityprice","method":"GET","query":{"name":"<string>","currency":"<string>","unit":"<string>"}}'
```

### Converts an existing currency and amount into a new currency.

Converts an `amount` from one currency to another. Requires `have`, `want` and `amount`. For the raw rate without converting a figure use /exchangerate.

`GET /v1/convertcurrency`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/convertcurrency

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `have` | string | Yes | Currency you currently hold. Must be 3-character currency code (e.g. USD). |
| `want` | string | Yes | Currency you want to convert to. Must be 3-character currency code (e.g. USD). |
| `amount` | number | Yes | Amount of currency to convert. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/convertcurrency","method":"GET","query":{"have":"<string>","want":"<string>","amount":"<number>"}}'
```

### Get a country's flag as an SVG image in base64 format.

Returns one country's flag as a base64-encoded SVG image. Requires a 2-letter ISO-3166 alpha-2 `country` code. For URLs of all supported flags use /allcountryflags.

`GET /v1/countryflag`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/countryflag

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | Yes | 2-letter ISO-3166 alpha-2 country code (e.g. US, CA, FR). For countries in the United Kingdom, use GB for Great Britain, GB-ENG for England, GB-SCT for Scotland, GB-WLS for Wales, GB-NIR for Northern Ireland. |

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

### List 2-letter ISO country codes for all supported countries (premium only).

Returns the 2-letter ISO codes of every supported country. For statistics about a specific country use /country.

`GET /v1/allcountries`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/country

_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":"api-ninjas","path":"/v1/allcountries","method":"GET"}'
```

### Get country data from given parameters.

Returns geographic, demographic, and economic statistics for countries matching filters such as name, currency, GDP, population, area, or unemployment rate.

`GET /v1/country`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/country

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Plain English name, 2-letter ISO-3166 alpha-2, or 3-letter ISO-3166 alpha-3 code of country. |
| `currency` | string | No | 3-letter currency code of country (e.g. USD). |
| `min_gdp` | string | No | Minimum gross domestic product (GDP) of country, in US Dollars. |
| `max_gdp` | string | No | Maximum gross domestic product (GDP) of country, in US Dollars. |
| `min_population` | string | No | Minimum population of country (in thousands). |
| `max_population` | string | No | Maximum population of country (in thousands). |
| `min_area` | string | No | Minimum surface area of country in km2. |
| `max_area` | string | No | Maximum surface area of country in km2. |
| `min_unemployment` | string | No | Minimum unemployment rate in %. |
| `max_unemployment` | string | No | Maximum unemployment rate in %. |
| `min_gdp_growth` | string | No | Minimum GDP growth rate in %. |
| `max_gdp_growth` | string | No | Maximum GDP growth rate in %. |
| `min_infant_mortality` | string | No | Minimum infant mortality rate per 1,000 live births. |
| `max_infant_mortality` | string | No | Maximum infant mortality rate per 1,000 live births. |
| `min_fertility` | string | No | Minimum fertility rate (average number of children per woman). |
| `max_fertility` | string | No | Maximum fertility rate (average number of children per woman). |
| `min_urban_pop_rate` | string | No | Minimum urban population rate in %. |
| `max_urban_pop_rate` | string | No | Maximum urban population rate in %. |
| `limit` | number | No | How many results to return. Must be between 1 and 30. Default is 5. (Default: 5) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/country","method":"GET","query":{"name":"<string>","currency":"<string>","min_gdp":"<string>","max_gdp":"<string>","min_population":"<string>","max_population":"<string>","min_area":"<string>","max_area":"<string>","min_unemployment":"<string>","max_unemployment":"<string>","min_gdp_growth":"<string>","max_gdp_growth":"<string>","min_infant_mortality":"<string>","max_infant_mortality":"<string>","min_fertility":"<string>","max_fertility":"<string>","min_urban_pop_rate":"<string>","max_urban_pop_rate":"<string>","limit":"<number>"}}'
```

### Get air quality by city or location coordinates.

Returns the Air Quality Index plus CO, NO2, O3, SO2, PM2.5 and PM10 concentrations for a location. Requires a `city` or `lat`/`lon`; `state` and `country` disambiguate city names.

`GET /v1/airquality`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/airquality

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `lat` | string | No | Latitude of desired location. Provide both lat and lon, or use city instead. |
| `lon` | string | No | Longitude of desired location. Provide both lat and lon, or use city instead. |
| `city` | string | No | City name. Provide either city or both lat and lon. |
| `state` | string | No | US state (for United States cities only). |
| `country` | string | No | Country name. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/airquality","method":"GET","query":{"lat":"<string>","lon":"<string>","city":"<string>","state":"<string>","country":"<string>"}}'
```

### Get SEC-reported corporate crypto treasury holdings

Crypto asset positions reported to the SEC in quarterly XBRL filings. Coverage is limited to SEC filers (holders listed only outside the US are not included), and each position is as of the filer's reported period end. With no parameters, returns the largest current positions ranked by dollar value. Positions whose unit count does not reconcile with the filer's own fair value are excluded unless include_unverified is set.

`GET /v1/cryptotreasury`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cryptoprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Stock ticker of the filer, e.g. MSTR. Private filers have no ticker; use cik. |
| `cik` | string | No | SEC Central Index Key of the filer, with or without leading zeros. |
| `asset` | string | No | Restrict to one crypto asset. UNKNOWN returns positions whose asset the filing did not state and which could not be identified. (Allowed: BITCOIN, ETHEREUM, SOLANA, XRP, LITECOIN, DOGECOIN, CARDANO, INJECTIVE, CANTON, STABLECOIN, UNKNOWN) |
| `entity_type` | string | No | OPERATING is a company holding crypto on its balance sheet. ETP is an exchange-traded product whose holdings are the fund itself. PRIVATE is a filer with no listed ticker. (Allowed: OPERATING, ETP, PRIVATE) |
| `period` | string | No | Reporting period end as YYYY-MM-DD, or 'latest'. Defaults to the most recent period. |
| `include_unverified` | boolean | No | Include positions whose unit count does not reconcile with the filer's own reported fair value. Excluded by default; when included they are reproduced exactly as filed and carry a warning. (Default: False) |
| `limit` | number | No | Maximum results to return, up to 50. |
| `offset` | number | No | Number of results to skip, for pagination. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/cryptotreasury","method":"GET","query":{"ticker":"<string>","cik":"<string>","asset":"<string>","entity_type":"<string>","period":"<string>","include_unverified":"<boolean>","limit":"<number>","offset":"<number>"}}'
```

### Generate a barcode

Generates a barcode image encoding `text`. Optional `type`, `format` and `include_text` control the symbology and output. Requires `text`.

`GET /v1/barcodegenerate`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/barcode

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `text` | string | Yes | Text to encode in the barcode. |
| `type` | string | No | Type of barcode to generate. (Allowed: code39, code128, ean, ean13, ean8, gs1, gtin, isbn, isbn10, isbn13, issn, jan, pzn, upc, upca) (Default: upc) |
| `format` | string | No | Image format to return. (Allowed: png, svg) (Default: png) |
| `include_text` | boolean | No | Whether to include the text below the barcode. (Default: True) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/barcodegenerate","method":"GET","query":{"text":"<string>","type":"<string>","format":"<string>","include_text":"<boolean>"}}'
```

### Get balance sheet data for a specific company, period, and year

Returns balance sheet data from SEC 10-Q and 10-K filings for one company, fiscal period and year. Requires `ticker` or `cik`. For which periods exist use /balancesheetavailability.

`GET /v1/balancesheet`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/balancesheet

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., ADBE). Either ticker or cik must be provided. |
| `cik` | string | No | Company Central Index Key (e.g., 796343). Either ticker or cik must be provided. |
| `period` | string | No | Fiscal period. Must be one of: q1, q2, q3, q4, or fy (full year). If set, year must also be set. (Allowed: q1, q2, q3, q4, fy) |
| `year` | number | No | Fiscal year (e.g., 2025). Must be a valid year after 2000. If set, period must also be set. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/balancesheet","method":"GET","query":{"ticker":"<string>","cik":"<string>","period":"<string>","year":"<number>"}}'
```

### Get airport information

Returns airports matching filters such as IATA/ICAO code, name, city, country, region, elevation, size, or runway length. For typeahead suggestions use /airportsuggest.

`GET /v1/airports`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/airports

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `iata` | string | No | International Air Transport Association (IATA) airport code (typically 3 characters). Supports partial, case-insensitive matching (substring search). |
| `icao` | string | No | International Civil Aviation Organization (ICAO) airport code (typically 4 characters). Supports partial, case-insensitive matching (substring search). |
| `name` | string | No | Airport name. Supports partial matching (substring search). |
| `country` | string | No | Airport country. Must be 2-character ISO-2 country code. |
| `region` | string | No | Administrative region such as state or province within a country. Supports partial, case-insensitive matching (substring search). |
| `city` | string | No | Airport city. Supports partial, case-insensitive matching (substring search). |
| `timezone` | string | No | Airport timezone. |
| `min_elevation` | number | No | Minimum airport elevation in feet. |
| `max_elevation` | number | No | Maximum airport elevation in feet. |
| `size` | string | No | Airport size. (Allowed: large, medium, small) |
| `has_iata` | string | No | Filter by whether the airport has an IATA code. (Allowed: true, false) |
| `min_runway_length` | number | No | Minimum length (in feet) of at least one runway at the airport. |
| `limit` | number | No | Maximum number of results to return. Must be between 1 and 100. Default is 10. (Default: 10) |
| `sort` | string | No | Sort order for results. Default is passengers. (Allowed: passengers, name, elevation, runway_length) (Default: passengers) |
| `order` | string | No | Sort direction. Default is desc. (Allowed: asc, desc) (Default: desc) |
| `offset` | number | No | Number of results to offset for pagination. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/airports","method":"GET","query":{"iata":"<string>","icao":"<string>","name":"<string>","country":"<string>","region":"<string>","city":"<string>","timezone":"<string>","min_elevation":"<number>","max_elevation":"<number>","size":"<string>","has_iata":"<string>","min_runway_length":"<number>","limit":"<number>","sort":"<string>","order":"<string>","offset":"<number>"}}'
```

### Find the airports nearest to a given latitude/longitude. Results are sorted by airport size (largest first), then by dis

Returns the airports nearest a coordinate, sorted by airport size then by distance. Requires `lat` and `lon`.

`GET /v1/closestairport`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/airports

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `lat` | number | Yes | Latitude of the search center, in decimal degrees. |
| `lon` | number | Yes | Longitude of the search center, in decimal degrees. |
| `radius` | number | No | Search radius in kilometres. Default is 50, maximum is 500. (Default: 50) |
| `size` | string | No | Restrict to airport size. (Allowed: large, medium, small) |
| `has_iata` | string | No | Filter by whether the airport has an IATA code. (Allowed: true, false) |
| `min_runway_length` | number | No | Minimum runway length in feet. |
| `limit` | number | No | Maximum number of results to return. Must be between 1 and 50. Default is 10. (Default: 10) |
| `units` | string | No | Distance units. Default is km. (Allowed: km, mi) (Default: km) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/closestairport","method":"GET","query":{"lat":"<number>","lon":"<number>","radius":"<number>","size":"<string>","has_iata":"<string>","min_runway_length":"<number>","limit":"<number>","units":"<string>"}}'
```

### Get SEC-reported bitcoin holdings of companies and ETFs

Bitcoin positions reported to the SEC in quarterly XBRL filings, covering operating companies and spot bitcoin exchange-traded products. Coverage is limited to SEC filers (holders listed only outside the US are not included), and each position is as of the filer's reported period end. For holdings in other crypto assets use /v1/cryptotreasury.

`GET /v1/bitcointreasury`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/bitcoin

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Stock ticker of the filer, e.g. MSTR. Private filers have no ticker; use cik. |
| `cik` | string | No | SEC Central Index Key of the filer, with or without leading zeros. |
| `entity_type` | string | No | OPERATING is a company holding crypto on its balance sheet. ETP is an exchange-traded product whose holdings are the fund itself. PRIVATE is a filer with no listed ticker. (Allowed: OPERATING, ETP, PRIVATE) |
| `period` | string | No | Reporting period end as YYYY-MM-DD, or 'latest'. Defaults to the most recent period. |
| `include_unverified` | boolean | No | Include positions whose unit count does not reconcile with the filer's own reported fair value. Excluded by default; when included they are reproduced exactly as filed and carry a warning. (Default: False) |
| `limit` | number | No | Maximum results to return, up to 50. |
| `offset` | number | No | Number of results to skip, for pagination. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/bitcointreasury","method":"GET","query":{"ticker":"<string>","cik":"<string>","entity_type":"<string>","period":"<string>","include_unverified":"<boolean>","limit":"<number>","offset":"<number>"}}'
```

### Get the current spot price of a commodity (single or batch)

Returns the spot price (the price for immediate delivery) for one commodity that has a spot market: gold, silver, platinum, and palladium (composite: blended live market quotes with bid/ask, refreshed about once a minute on this listing) and WTI, Brent, natural gas, gasoline, and heating oil (assessed: the U.S. EIA official daily spot price). Other commodities have no public spot market and return an error pointing to /commodityprice.

`GET /v1/commodityspot`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/commodityprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | The commodity. crude_oil, brent_crude_oil, gasoline_rbob, and heating_oil also accept wti, brent, gasoline, and diesel. (Allowed: gold, silver, platinum, palladium, crude_oil, brent_crude_oil, natural_gas, gasoline_rbob, heating_oil) |
| `currency` | string | No | ISO 4217 currency code to convert prices into (e.g., EUR, GBP). Defaults to USD. |
| `unit` | string | No | Target unit, in the same dimension as the commodity's native unit (mass for metals, volume for oil, gasoline and heating oil, energy for natural gas). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/commodityspot","method":"GET","query":{"name":"<string>","currency":"<string>","unit":"<string>"}}'
```

### Latest realized volatility, volatility cone, and percentile context for a currency pair.

Returns the latest realised volatility for a currency `pair`, with optional `window`, `method` and annualisation. For a time series use /currencyvolatilityhistorical.

`GET /v1/currencyvolatility`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/exchangerate

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `pair` | string | Yes | Currency pair in ABC_DEF form (e.g. EUR_USD). Both must be supported fiat currency codes; ZWG, BTC, and XAG are not supported. |
| `window` | number | No | Lookback window for realized volatility, in trading days. Defaults to 30. Must be between 2 and 1000. (Default: 30) |
| `method` | string | No | Volatility method: close_to_close (default) or ewma. (Allowed: close_to_close, ewma) (Default: close_to_close) |
| `day_count` | number | No | Annualization factor: 252 trading days (default) or 365 calendar days. (Allowed: 252, 365) (Default: 252) |
| `annualized` | boolean | No | Whether to treat the annualized figure as the headline value. Defaults to true. (Default: True) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/currencyvolatility","method":"GET","query":{"pair":"<string>","window":"<number>","method":"<string>","day_count":"<number>","annualized":"<boolean>"}}'
```

### Retrieve cryptocurrency symbols

Returns the list of cryptocurrency ticker symbols available. Use it to find valid symbols before requesting quotes from the Crypto Price API.

`GET /v1/cryptosymbols`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cryptosymbols

_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":"api-ninjas","path":"/v1/cryptosymbols","method":"GET"}'
```

### Get historical OHLCV data for a cryptocurrency

Returns historical OHLCV candles for a cryptocurrency at a chosen interval and time range. Requires a `symbol` such as ETHUSDT. For the live price use /cryptoprice.

`GET /v1/cryptopricehistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cryptoprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `symbol` | string | Yes | Cryptocurrency symbol (e.g. ETHUSDT). |
| `interval` | string | No | Time interval between data points. Default is 1h. (Allowed: 1m, 5m, 15m, 30m, 1h, 4h, 1d) (Default: 1h) |
| `start` | number | No | Start timestamp in Unix seconds. If omitted, the most recent `limit` data points are returned. |
| `end` | number | No | End timestamp in Unix seconds. Defaults to now. |
| `limit` | number | No | Maximum number of data points to return. Default 100, maximum 1000. (Default: 100) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/cryptopricehistorical","method":"GET","query":{"symbol":"<string>","interval":"<string>","start":"<number>","end":"<number>","limit":"<number>"}}'
```

### Get Covid-19 case count or death data.

Returns Covid-19 case counts or deaths by country, administrative region, or US county, as a series or a single-day snapshot. Either `date` or `country` must be set.

`GET /v1/covid19`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/covid19

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `date` | string | No | Date to retrieve single-day snapshot. Must be in the form of YYYY-MM-DD (e.g. 2022-01-01). Either date or country must be set. |
| `country` | string | No | Country name (case insensitive). Either date or country must be set. |
| `region` | string | No | Administrative region (also known as state or province in many countries) name (case insensitive). Must be used in conjunction with country. If not set, countries with data broken down by administrative regions will return separate data for each region. |
| `county` | string | No | County name for US states (case insensitive). For United States data only. Must be used in conjunction with country (United States) and region (e.g. California). |
| `type` | string | No | Type of data to retrieve. Must be either cases or deaths. If not set, cases will be used by default. (Allowed: cases, deaths) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/covid19","method":"GET","query":{"date":"<string>","country":"<string>","region":"<string>","county":"<string>","type":"<string>"}}'
```

### Get County Information

Returns details for one or more counties matching the input parameters.

`GET /v1/county`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/county

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `county` | string | No | Full name of the county to search. |
| `zipcode` | string | No | 5-digit ZIP code to search. |
| `state` | string | No | 2-letter state code (case-insensitive). |
| `limit` | number | No | Number of results to return. Must be between 1 and 30. Default is 1. (Default: 1) |
| `offset` | number | No | Number of results to offset for pagination. Default is 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/county","method":"GET","query":{"county":"<string>","zipcode":"<string>","state":"<string>","limit":"<number>","offset":"<number>"}}'
```

### Get cash flow statement data for a specific company, period, and year

Returns cash flow statement data from SEC 10-Q and 10-K filings for one company, fiscal period and year. Requires `ticker` or `cik`. For available periods use /cashflowavailability.

`GET /v1/cashflow`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cashflow

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., ADBE). Either ticker or cik must be provided. |
| `cik` | string | No | Company Central Index Key (e.g., 796343). Either ticker or cik must be provided. |
| `period` | string | No | Fiscal period. Must be one of: q1, q2, q3, q4, or fy (full year). If set, year must also be set. (Allowed: q1, q2, q3, q4, fy) |
| `year` | number | No | Fiscal year (e.g., 2025). Must be a valid year after 2000. If set, period must also be set. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/cashflow","method":"GET","query":{"ticker":"<string>","cik":"<string>","period":"<string>","year":"<number>"}}'
```

### Get current price of a cryptocurrency

Returns the current market price of a cryptocurrency. Requires a `symbol` such as ETHUSDT. For past prices and OHLCV candles use /cryptopricehistorical.

`GET /v1/cryptoprice`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cryptoprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `symbol` | string | Yes | Cryptocurrency symbol (e.g. ETHUSDT). To get the full list of available symbols, use the Crypto Symbols API. |

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

### Get celebrity information

Returns celebrity records with net worth, profession, and birthday, filtered by name, net worth range, nationality, or height in meters.

`GET /v1/celebrity`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/celebrity

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Name of the celebrity you wish to search. This field is case-insensitive. |
| `min_net_worth` | number | No | Minimum net worth of celebrities. |
| `max_net_worth` | number | No | Maximum net worth of celebrities. |
| `nationality` | string | No | Nationality of celebrities. Must be an ISO 3166 Alpha-2 country code (e.g. US). |
| `min_height` | number | No | Minimum height of celebrities in meters (e.g. 1.65). |
| `max_height` | number | No | Maximum height of celebrities in meters (e.g. 1.80). |
| `offset` | number | No | Number of results to offset for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/celebrity","method":"GET","query":{"name":"<string>","min_net_worth":"<number>","max_net_worth":"<number>","nationality":"<string>","min_height":"<number>","max_height":"<number>","offset":"<number>"}}'
```

### List flag URLs for all supported countries (premium only).

Returns flag image URLs for every supported country, territory and area. For one country's flag as a base64 SVG use /countryflag.

`GET /v1/allcountryflags`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/countryflag

_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":"api-ninjas","path":"/v1/allcountryflags","method":"GET"}'
```

### Get a random piece of advice

Returns one random piece of life advice, drawn from a set of over 5000 entries. Takes no parameters and returns a different result each call.

`GET /v1/advice`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/advice

_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":"api-ninjas","path":"/v1/advice","method":"GET"}'
```

### Get aircraft details

Returns airplane specs matching the given filters, or decodes an ICAO (icao=A20N) or IATA (iata=32N) aircraft type code. At least one parameter other than limit is required. Helicopter specs: /v1/helicopter.

`GET /v1/aircraft`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/aircraft

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `manufacturer` | string | No | Company that designed and built the aircraft. |
| `model` | string | No | Aircraft model name. |
| `icao` | string | No | ICAO aircraft type designator, e.g. A320, B738, A20N. Exact match, case-insensitive. Also decodes types we have no specs for (e.g. helicopters). |
| `iata` | string | No | IATA aircraft type code, e.g. 320, 32N, 73H. Family codes such as 32S, 737 or ATR return every type in the family. |
| `engine_type` | string | No | Type of engine. Must be one of: piston, propjet, jet. (Allowed: piston, propjet, jet) |
| `min_speed` | number | No | Minimum max. air speed in knots (inclusive). |
| `max_speed` | number | No | Maximum max. air speed in knots (inclusive). |
| `min_range` | number | No | Minimum range of the aircraft in nautical miles (inclusive). |
| `max_range` | number | No | Maximum range of the aircraft in nautical miles (inclusive). |
| `min_length` | number | No | Minimum length of the aircraft in feet (inclusive). |
| `max_length` | number | No | Maximum length of the aircraft in feet (inclusive). |
| `min_height` | number | No | Minimum height of the aircraft in feet (inclusive). |
| `max_height` | number | No | Maximum height of the aircraft in feet (inclusive). |
| `min_wingspan` | number | No | Minimum wingspan of the aircraft in feet (inclusive). |
| `max_wingspan` | number | No | Maximum wingspan of the aircraft in feet (inclusive). |
| `limit` | number | No | How many results to return. Must be between 1 and 30. Default is 1. (Default: 1) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/aircraft","method":"GET","query":{"manufacturer":"<string>","model":"<string>","icao":"<string>","iata":"<string>","engine_type":"<string>","min_speed":"<number>","max_speed":"<number>","min_range":"<number>","max_range":"<number>","min_length":"<number>","max_length":"<number>","min_height":"<number>","max_height":"<number>","min_wingspan":"<number>","max_wingspan":"<number>","limit":"<number>"}}'
```

### Get general and detailed fleet information for airlines.

Returns general and fleet information for airlines matching an ICAO code, IATA code, or name. At least one of `icao`, `iata`, or `name` must be set.

`GET /v1/airlines`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/aircraft

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `icao` | string | No | International Civil Aviation Organization (ICAO) 3-character airline code. At least one of icao, iata, or name must be set. |
| `iata` | string | No | International Air Transport Association (IATA) 2-character airline code. At least one of icao, iata, or name must be set. |
| `name` | string | No | Airline name. This parameter supports partial matching (e.g. United will match United Airlines). At least one of icao, iata, or name must be set. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/airlines","method":"GET","query":{"icao":"<string>","iata":"<string>","name":"<string>"}}'
```

### List which fiscal periods have balance sheet data for a company (premium)

Returns the fiscal years and quarters for which balance sheet data is available for a company.

`GET /v1/balancesheetavailability`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/balancesheet

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., ADBE). Either ticker or cik must be provided. |
| `cik` | string | No | Company Central Index Key (e.g., 796343). Either ticker or cik must be provided. |

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

### Get bank holidays for a given country and year.

Returns bank holidays for a country and calendar year, covering banking closures only. Requires a `country`. To test a single date use /isbankholiday.

`GET /v1/bankholidays`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/bankholidays

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | Yes | Country name or ISO 3166-2 country code (preferred). |
| `year` | number | No | Calendar year between 1980 and 2050 (inclusive). Defaults to the current year. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/bankholidays","method":"GET","query":{"country":"<string>","year":"<number>"}}'
```

### Check if a specific date is a bank holiday for a given country.

Checks whether a given date is a bank holiday in a country. Requires `date` and `country`. For a whole year's calendar use /bankholidays.

`GET /v1/isbankholiday`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/bankholidays

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `date` | string | Yes | Date in YYYY-MM-DD format (e.g. 2025-12-25). |
| `country` | string | Yes | Country name or ISO 3166-2 country code (preferred). |

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

### Retrieve baby names

Returns baby names, optionally filtered by `gender` (boy, girl or neutral). By default only popular names, the top 10%, are returned; set popular_only to false for the full pool.

`GET /v1/babynames`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/babynames

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `gender` | string | No | Baby name gender. Must be one of the following: boy, girl, neutral (Allowed: boy, girl, neutral) |
| `popular_only` | boolean | No | Whether to only return popular (top 10%) of names. Must be either true or false. If unset, default is true. (Default: True) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/babynames","method":"GET","query":{"gender":"<string>","popular_only":"<boolean>"}}'
```

### Lookup bank information by BIN

Returns bank and issuer information for a Bank Identification Number. Requires a `bin`, typically the first 6-8 digits of a credit card number.

`GET /v2/bin`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/bin

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `bin` | string | Yes | The Bank Identification Number (BIN) to look up. This is typically the first 6-8 digits of a credit card number. |

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

### Get the latest Bitcoin price and market data

Returns the latest Bitcoin price and market data. Takes no parameters. For a price series over a past time range use /bitcoinhistorical.

`GET /v1/bitcoin`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/bitcoin

_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":"api-ninjas","path":"/v1/bitcoin","method":"GET"}'
```

### Convert between IATA and ICAO airport codes. Premium only.

Converts an airport code between IATA and ICAO. Pass exactly one of `iata`, `icao`, or `code` (auto-detected).

`GET /v1/airportconvert`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/airports

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `iata` | string | No | 3-character IATA airport code. Exactly one of iata, icao, or code must be provided. |
| `icao` | string | No | 4-character ICAO airport code. Exactly one of iata, icao, or code must be provided. |
| `code` | string | No | Auto-detected IATA (3 chars) or ICAO (4 chars) code. Exactly one of iata, icao, or code must be provided. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/airportconvert","method":"GET","query":{"iata":"<string>","icao":"<string>","code":"<string>"}}'
```

### Calculate the great-circle distance, initial bearing, and estimated flight time between two airports. Premium only.

Calculates great-circle distance, initial bearing, and estimated flight time between two airports. Requires `from` and `to`.

`GET /v1/airportdistance`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/airports

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `from` | string | Yes | Origin airport - IATA (3 chars) or ICAO (4 chars) code. |
| `to` | string | Yes | Destination airport - IATA (3 chars) or ICAO (4 chars) code. |
| `units` | string | No | Distance units. Default is km. (Allowed: km, mi, nm) (Default: km) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/airportdistance","method":"GET","query":{"from":"<string>","to":"<string>","units":"<string>"}}'
```

### Autocomplete / typeahead suggestions for airport search. Matches against IATA, ICAO, name, and city. Premium only.

Returns autocomplete suggestions for airport search, matching IATA, ICAO, name, and city. Requires a `q` of at least 2 characters.

`GET /v1/airportsuggest`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/airports

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `q` | string | Yes | Query string. Must be at least 2 characters. |
| `country` | string | No | Restrict results to a country. Must be a 2-character ISO country code. |
| `size` | string | No | Restrict results to a size. (Allowed: large, medium, small) |
| `limit` | number | No | Maximum number of results to return. Must be between 1 and 3. Default is 3. (Default: 3) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/airportsuggest","method":"GET","query":{"q":"<string>","country":"<string>","size":"<string>","limit":"<number>"}}'
```

### Retrieve information about animals

Returns scientific facts about animal species whose common name matches the search term, including partial matches. Requires `name`.

`GET /v1/animals`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/animals

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Common name of animal to search. This parameter supports partial matches. |

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

### Search cocktail recipes

Searches cocktail recipes by name, with partial matches, or by a comma-separated ingredient list that returns only drinks containing every listed ingredient.

`GET /v1/cocktail`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cocktail

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Name of cocktail. Supports partial matches. |
| `ingredients` | string | No | Comma-separated string of ingredients to search. Only cocktails containing all listed ingredients will be returned. |

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

### Get historical Bitcoin price data

Returns historical Bitcoin price data over a chosen interval and Unix timestamp range. For the latest price instead use /bitcoin.

`GET /v1/bitcoinhistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/bitcoin

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `interval` | string | No | Time interval between data points. (Allowed: 1m, 5m, 15m, 30m, 1h, 4h, 1d) (Default: 5m) |
| `start` | number | No | Start timestamp in Unix format (in seconds). |
| `end` | number | No | End timestamp in Unix format (in seconds). |
| `limit` | number | No | Maximum number of data points to return. (Default: 100) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/bitcoinhistorical","method":"GET","query":{"interval":"<string>","start":"<number>","end":"<number>","limit":"<number>"}}'
```

### Get Australian Bank Branch Information by BSB Number

Looks up the bank, branch, address and supported payment systems for a 6-digit Australian BSB number. Requires `bsb`. To find a BSB by bank or location use /bsbsearch.

`GET /v1/bsblookup`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/bsb

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `bsb` | string | Yes | The 6-digit Australian BSB number, with or without a hyphen (e.g. 062-000 or 062000). |

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

### Get a random bucket list idea

Returns one randomly chosen bucket list idea. Takes no parameters, so call it again for a different suggestion.

`GET /v1/bucketlist`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/bucketlist

_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":"api-ninjas","path":"/v1/bucketlist","method":"GET"}'
```

### Calculate calories burned

Calculates calories burned from an activity, weight in pounds, and duration in minutes. Requires an `activity`. For valid names use /caloriesburnedactivities. Each result includes a photorealistic image_url and a transparent icon_url for the activity.

`GET /v1/caloriesburned`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/caloriesburned

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `activity` | string | Yes | Name of the given activity. This value can be partial. |
| `weight` | number | No | Weight of the user performing the activity in pounds. Must be between 50 and 500. Default value is 160. (Default: 160) |
| `duration` | number | No | How long the activity was performed in minutes. Must be 1 or greater. Default value is 60 (1 hour). (Default: 60) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/caloriesburned","method":"GET","query":{"activity":"<string>","weight":"<number>","duration":"<number>"}}'
```

### List all supported activities

Returns the names of all activities supported by the calories-burned calculation. To compute calories for one of them use /caloriesburned.

`GET /v1/caloriesburnedactivities`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/caloriesburned

_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":"api-ninjas","path":"/v1/caloriesburnedactivities","method":"GET"}'
```

### Get Canadian Bank Branch Information by Routing Number

Returns the Canadian bank branch for a 9-digit EFT `routing_number`, or for a `transit_number` plus `institution_number`. To search by name or location use /canadaroutingnumbersearch.

`GET /v1/canadaroutingnumber`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/canadaroutingnumber

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `routing_number` | string | No | The 9-digit Canadian routing number in EFT format (0AAATTTTT). At least one of routing_number, or both transit_number and institution_number together, must be set. |
| `transit_number` | string | No | The 5-digit branch transit number. Must be used together with institution_number. |
| `institution_number` | string | No | The 3-digit financial institution number. Must be used together with transit_number. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/canadaroutingnumber","method":"GET","query":{"routing_number":"<string>","transit_number":"<string>","institution_number":"<string>"}}'
```

### Search for Australian Bank Branches and BSB Numbers

Finds Australian bank branches and their BSB numbers by bank name, suburb, state or postcode. To look up a single BSB number already known use /bsblookup.

`GET /v1/bsbsearch`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/bsb

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `bank_name` | string | No | Bank name to search for. At least one of bank_name, suburb, state, or postcode is required. |
| `suburb` | string | No | Suburb to search for branches. |
| `state` | string | No | Australian state or territory code (e.g. NSW, VIC, QLD). |
| `postcode` | string | No | 4-digit Australian postcode to search for branches. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/bsbsearch","method":"GET","query":{"bank_name":"<string>","suburb":"<string>","state":"<string>","postcode":"<string>"}}'
```

### Find cars, or fetch known cars by id. Always returns full specifications. Premium only.

The main endpoint. Search the whole catalogue by any combination of filters, or fetch cars you already know with id/ids. Every car is returned with its complete specification sheet attached, so no second call is needed. Each row also carries its own make, model, generation, body and engine context. At least one filter, or an id, is required. The total number of matches is returned in the X-Total-Count response header.

`GET /v2/cars`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cars

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `id` | string | No | A car handle from a previous search, e.g. car_e71ff3416a. Safe to store: it is derived from the car's identity and survives data refreshes. |
| `ids` | string | No | Comma-separated car handles, at most 50. Request order is preserved and a handle matching nothing is returned as null. |
| `make` | string | No | Manufacturer, as a word. Case and punctuation are ignored, so bmw, BMW and Bmw all resolve. |
| `model` | string | No | Model, as a word. '3 Series', '3-series' and '3series' all resolve. |
| `generation` | string | No | Generation, as a word, e.g. e90 or 'E90/E91/E92/E93'. Optional -- nothing requires going through a generation. |
| `chassis_code` | string | No | Filter to one chassis code, e.g. E91. Matches anything whose chassis_codes contains it. |
| `body` | string | No | Body style. One of Sedan, Coupe, Convertible, Wagon, Hatchback, Liftback, SUV, MPV, Van, Pickup. (Allowed: Sedan, Coupe, Convertible, Wagon, Hatchback, Liftback, SUV, MPV, Van, Pickup) |
| `doors` | number | No | Number of doors. |
| `badge` | string | No | Model designation, e.g. 320d. Spacing and case are ignored. |
| `fuel` | string | No | Fuel type. (Allowed: gasoline, diesel, electric, hybrid, plugin_hybrid, lpg, cng, hydrogen, ethanol) |
| `transmission` | string | No | Transmission type. (Allowed: manual, automatic, cvt, dual_clutch, automated_manual, single_speed) |
| `drive` | string | No | Driven wheels. (Allowed: fwd, rwd, awd, 4wd) |
| `cylinders` | number | No | Number of cylinders. |
| `engine_code` | string | No | Manufacturer engine code. |
| `min_power_hp` | number | No | Minimum engine power in horsepower. |
| `max_power_hp` | number | No | Maximum engine power in horsepower. |
| `min_year` | number | No | Cars still in production in or after this year. |
| `max_year` | number | No | Cars in production in or before this year. |
| `year` | number | No | Cars in production in this year. A filter, not a starting point. |
| `sort` | string | No | Sort order. (Allowed: power_hp, -power_hp, year, -year, name, make) |
| `limit` | number | No | How many results to return, between 1 and 100. Default 10 -- each car carries a full specification sheet of roughly 2 KB. A value outside the range is rejected rather than silently clamped. (Default: 10) |
| `offset` | number | No | Number of results to skip, for pagination. Default 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/cars","method":"GET","query":{"id":"<string>","ids":"<string>","make":"<string>","model":"<string>","generation":"<string>","chassis_code":"<string>","body":"<string>","doors":"<number>","badge":"<string>","fuel":"<string>","transmission":"<string>","drive":"<string>","cylinders":"<number>","engine_code":"<string>","min_power_hp":"<number>","max_power_hp":"<number>","min_year":"<number>","max_year":"<number>","year":"<number>","sort":"<string>","limit":"<number>","offset":"<number>"}}'
```

### Available values and counts for each dimension, given a selection.

Builds every dependent dropdown in one request instead of one request per level. Facets narrow with whatever is already selected.

`GET /v2/carfacets`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cars

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `facets` | string | No | Comma-separated dimensions to count, at most 6. One of: make, model, generation, chassis_code, body, doors, fuel, transmission, drive, cylinders, year, badge. |
| `make` | string | No | Manufacturer, as a word. Case and punctuation are ignored, so bmw, BMW and Bmw all resolve. |
| `model` | string | No | Model, as a word. '3 Series', '3-series' and '3series' all resolve. |
| `generation` | string | No | Generation, as a word. |
| `body` | string | No | Body style. (Allowed: Sedan, Coupe, Convertible, Wagon, Hatchback, Liftback, SUV, MPV, Van, Pickup) |
| `doors` | number | No | Number of doors. |
| `fuel` | string | No | Fuel type. (Allowed: gasoline, diesel, electric, hybrid, plugin_hybrid, lpg, cng, hydrogen, ethanol) |
| `transmission` | string | No | Transmission type. (Allowed: manual, automatic, cvt, dual_clutch, automated_manual, single_speed) |
| `drive` | string | No | Driven wheels. (Allowed: fwd, rwd, awd, 4wd) |
| `cylinders` | number | No | Number of cylinders. |
| `year` | number | No | Cars in production in this year. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/carfacets","method":"GET","query":{"facets":"<string>","make":"<string>","model":"<string>","generation":"<string>","body":"<string>","doors":"<number>","fuel":"<string>","transmission":"<string>","drive":"<string>","cylinders":"<number>","year":"<number>"}}'
```

### List manufacturers. Premium only.

Lists car manufacturers available in the catalogue. Use it to populate a make selector before calling /carmodels.

`GET /v2/carmakes`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cars

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `search` | string | No | Case-insensitive substring match on the manufacturer name. |
| `year` | number | No | Only manufacturers with a car in production in this year. |
| `limit` | number | No | How many results to return, between 1 and 100. Default 30. A value outside that range is rejected rather than silently clamped. (Default: 30) |
| `offset` | number | No | Number of results to skip, for pagination. Default 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/carmakes","method":"GET","query":{"search":"<string>","year":"<number>","limit":"<number>","offset":"<number>"}}'
```

### List models for a manufacturer. Premium only.

Lists the models belonging to a given manufacturer. Pair with /carmakes upstream and /cars downstream.

`GET /v2/carmodels`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cars

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `make` | string | No | Manufacturer, as a word. Case and punctuation are ignored, so bmw, BMW and Bmw all resolve. |
| `search` | string | No | Case-insensitive substring match on the model name. |
| `year` | number | No | Only models with a car in production in this year. |
| `limit` | number | No | How many results to return, between 1 and 100. Default 30. A value outside that range is rejected rather than silently clamped. (Default: 30) |
| `offset` | number | No | Number of results to skip, for pagination. Default 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/carmodels","method":"GET","query":{"make":"<string>","search":"<string>","year":"<number>","limit":"<number>","offset":"<number>"}}'
```

### Search for Canadian Banks and Routing Numbers

Finds Canadian bank branches and their routing numbers by bank name, city, province or postal code. To decode a known routing number use /canadaroutingnumber.

`GET /v1/canadaroutingnumbersearch`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/canadaroutingnumber

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `bank_name` | string | No | Bank name to search for. At least one of bank_name, city, province, or postal_code is required. |
| `city` | string | No | City name to search for branches. |
| `province` | string | No | Two-letter province or territory code (e.g. ON, QC, BC). |
| `postal_code` | string | No | Postal code to search for branches. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/canadaroutingnumbersearch","method":"GET","query":{"bank_name":"<string>","city":"<string>","province":"<string>","postal_code":"<string>"}}'
```

### List which fiscal periods have cash flow data for a company (premium)

Returns the fiscal years and quarters for which cash flow data is available for a company.

`GET /v1/cashflowavailability`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cashflow

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., ADBE). Either ticker or cik must be provided. |
| `cik` | string | No | Company Central Index Key (e.g., 796343). Either ticker or cik must be provided. |

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

### Get a list of cat breeds matching specified parameters.

Returns cat breeds matching the given parameters, including weight, life expectancy, shedding, grooming and friendliness traits. For breed names only use /allcats.

`GET /v1/cats`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cats

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | The name of cat breed. |
| `min_weight` | number | No | Minimum weight in pounds. |
| `max_weight` | number | No | Maximum weight in pounds. |
| `min_life_expectancy` | number | No | Minimum life expectancy in years. |
| `max_life_expectancy` | number | No | Maximum life expectancy in years. |
| `shedding` | number | No | How much hair the cat sheds. (Allowed: 1, 2, 3, 4, 5) |
| `family_friendly` | number | No | How affectionate the cat is to family. (Allowed: 1, 2, 3, 4, 5) |
| `playfulness` | number | No | How playful the cat is. (Allowed: 1, 2, 3, 4, 5) |
| `grooming` | number | No | How much work is required to properly groom the cat. (Allowed: 1, 2, 3, 4, 5) |
| `other_pets_friendly` | number | No | How well the cat gets along with other pets in the household. (Allowed: 1, 2, 3, 4, 5) |
| `children_friendly` | number | No | How well the cat gets along with children. (Allowed: 1, 2, 3, 4, 5) |
| `offset` | number | No | Number of results to offset for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/cats","method":"GET","query":{"name":"<string>","min_weight":"<number>","max_weight":"<number>","min_life_expectancy":"<number>","max_life_expectancy":"<number>","shedding":"<number>","family_friendly":"<number>","playfulness":"<number>","grooming":"<number>","other_pets_friendly":"<number>","children_friendly":"<number>","offset":"<number>"}}'
```

### Get a Chuck Norris joke

Returns one random Chuck Norris joke. Takes no parameters. For jokes on other topics such as pop culture, science or history use /jokes.

`GET /v1/chucknorris`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/chucknorris

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `safe` | boolean | No | Set safe=true to exclude jokes flagged as sexually explicit, crude, or containing profanity, slurs, or offensive content. Defaults to false, so results are unfiltered unless you opt in. Filtering is best-effort and not a guarantee. Any value other than true/false returns an error. (Default: False) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/chucknorris","method":"GET","query":{"safe":"<boolean>"}}'
```

### Returns a list of all cat breed names.

Returns the names of every cat breed in the database and nothing else. Takes no parameters. For full breed detail and filtering use /cats.

`GET /v1/allcats`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/cats

_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":"api-ninjas","path":"/v1/allcats","method":"GET"}'
```

### Get upcoming earnings dates with filtering

Returns a list of upcoming earnings dates with filtering capabilities. You can filter by date range, single date, exchange, or ticker symbol. Results are limited to dates from today onwards.

`GET /v1/upcomingearnings`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/earningscalendar

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `start_date` | string | No | Start date in YYYY-MM-DD format. Must be today or later. Defaults to today if not provided. |
| `end_date` | string | No | End date in YYYY-MM-DD format. Must be after start_date. Defaults to 10 years from today if not provided. |
| `date` | string | No | Single date in YYYY-MM-DD format. If provided, overrides start_date and end_date to filter by this exact date. |
| `exchange` | string | No | Exchange code to filter by (e.g., NASDAQ, NYSE, HKSE, LSE, TSX). Returns only earnings from companies listed on the specified exchange. |
| `ticker` | string | No | Ticker symbol to filter by (e.g., AAPL, 0700.HK). Returns only earnings for that specific company. |
| `limit` | number | No | Maximum number of results to return. Must be between 1 and 100 (inclusive). Default is 100. (Default: 100) |
| `offset` | number | No | Number of results to skip for pagination. Must be a non-negative integer. Use in combination with limit to paginate through results. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/upcomingearnings","method":"GET","query":{"start_date":"<string>","end_date":"<string>","date":"<string>","exchange":"<string>","ticker":"<string>","limit":"<number>","offset":"<number>"}}'
```

### Get historical events for a specific date

Returns historical events that happened on a given `month` and `day` (today's date if omitted), with `limit` and `offset` paging.

`GET /v1/dayinhistory`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/dayinhistory

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `month` | number | No | The month of the historical events to retrieve. Must be between 1 and 12. If specified, day must also be provided. If both are omitted, today's date is used. |
| `day` | number | No | The day of the month for the historical events to retrieve. Must be between 1 and 31. If specified, month must also be provided. If both are omitted, today's date is used. |
| `offset` | number | No | The number of results to skip. Must be zero or a positive integer. Default is 0. (Default: 0) |
| `limit` | number | No | The maximum number of results to return. Must be between 1 and 30. Default is 1. (Default: 1) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/dayinhistory","method":"GET","query":{"month":"<number>","day":"<number>","offset":"<number>","limit":"<number>"}}'
```

### Get historical inflation rates

Returns historical inflation rates for a given country and (optionally) time range. The maximum number of data points returned per API call is 100.

`GET /v1/inflationhistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/inflation

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | Yes | Either the 2-letter country code (ISO-3166-1 alpha-2) or the country name (case-insensitive). |
| `start_time` | number | No | Start time for the data range, specified as a UNIX timestamp in seconds. |
| `end_time` | number | No | End time for the data range, specified as a UNIX timestamp in seconds. |
| `type` | string | No | Inflation indicator type. Can be either CPI (Consumer Price Index) or HICP (Harmonized Index of Consumer Prices). If not provided, the CPI will be used by default. (Allowed: CPI, HICP) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/inflationhistorical","method":"GET","query":{"country":"<string>","start_time":"<number>","end_time":"<number>","type":"<string>"}}'
```

### Search for historical events

Searches famous events in history by keyword `text` and/or `year`, `month` and `day`; negative years mean BC. Supports `offset` paging.

`GET /v1/historicalevents`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/historicalevents

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `text` | string | No | Query text to search events by. Use keywords or short phrases for best match results. |
| `year` | number | No | 4-digit year (e.g. 1776). For BC/BCE years, use a negative integer (e.g. -351 for 351 BC). |
| `month` | number | No | Integer month (e.g. 3 for March). |
| `day` | number | No | Calendar day of the month. |
| `offset` | number | No | Number of results to offset pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/historicalevents","method":"GET","query":{"text":"<string>","year":"<number>","month":"<number>","day":"<number>","offset":"<number>"}}'
```

### Get insider trading transactions

Returns a list of insider trading transactions that match the specified filters. Returns at most 100 results per request. For more results, use the offset parameter.

`GET /v1/insidertransactions`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/insidertrading

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., AAPL, MSFT). |
| `cik` | string | No | Central Index Key (CIK) of the company. |
| `name` | string | No | Name of the insider (exact match). Use /v1/insiderslist to look up insider names. |
| `form_type` | string | No | SEC form type (3, 4, or 5). (Allowed: 3, 4, 5) |
| `transaction_type` | string | No | Type of transaction (e.g., Purchase, Sale, Award, etc.). |
| `transaction_code` | string | No | Transaction code (e.g., P, S, A, D, F, etc.). |
| `transaction_date` | string | No | Transaction date in YYYY-MM-DD format. |
| `min_transaction_date` | string | No | Minimum transaction date in YYYY-MM-DD format. |
| `max_transaction_date` | string | No | Maximum transaction date in YYYY-MM-DD format. |
| `insider_type` | string | No | Type of insider: 'director' (matches director or chairman), '10_percent_owner' (matches 10% Owner), or 'officer' (excludes director, 10% owner, and chairman). (Allowed: director, 10_percent_owner, officer) |
| `min_transaction_value` | number | No | Minimum transaction value in USD. |
| `max_transaction_value` | number | No | Maximum transaction value in USD. |
| `limit` | number | No | Maximum number of results to return (1-100, default: 25). (Default: 10) |
| `offset` | number | No | Number of results to skip for pagination (default: 0). (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/insidertransactions","method":"GET","query":{"ticker":"<string>","cik":"<string>","name":"<string>","form_type":"<string>","transaction_type":"<string>","transaction_code":"<string>","transaction_date":"<string>","min_transaction_date":"<string>","max_transaction_date":"<string>","insider_type":"<string>","min_transaction_value":"<number>","max_transaction_value":"<number>","limit":"<number>","offset":"<number>"}}'
```

### Get the full 13F portfolio of an institutional manager for a quarter

Returns an institutional manager's full 13F portfolio for a quarter. Requires `cik` or `manager_name`. For every holder of a single stock use /institutionalownership.

`GET /v1/institutionalholdings`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/institutionalholdings

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `cik` | string | No | Manager SEC Central Index Key (e.g. 1067983). Either cik or manager_name is required. |
| `manager_name` | string | No | Exact manager name (alternative to cik). |
| `period` | string | No | Quarter-end date (YYYY-MM-DD). Defaults to the latest quarter. |
| `ticker` | string | No | Filter the portfolio to a single holding by ticker. |
| `cusip` | string | No | Filter the portfolio to a single holding by CUSIP. |
| `put_call` | string | No | put or call to filter option positions. (Allowed: put, call) |
| `min_value` | number | No | Minimum reported market value (USD). |
| `max_value` | number | No | Maximum reported market value (USD). |
| `sort` | string | No | Sort order: value (default), shares, percent_of_portfolio, or issuer_name. (Allowed: value, shares, percent_of_portfolio, issuer_name) |
| `limit` | number | No | Maximum results to return. Default 50, max 1000. |
| `offset` | number | No | Number of results to skip for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/institutionalholdings","method":"GET","query":{"cik":"<string>","manager_name":"<string>","period":"<string>","ticker":"<string>","cusip":"<string>","put_call":"<string>","min_value":"<number>","max_value":"<number>","sort":"<string>","limit":"<number>","offset":"<number>"}}'
```

### Get ETF Information

Returns holdings, expense ratio, assets under management and listing details for one ETF. Look it up by `ticker` (including any exchange suffix, e.g. EUNL.DE) or by `isin` to get the fund's most-traded listing; supply exactly one of the two. The `listings` field lists every exchange the same fund trades on. The trailing total-return `performance` block is returned as an upgrade-notice string on this listing.

`GET /v1/etf`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/etf

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | ETF ticker symbol (e.g., QQQ, SPY, VTI), including any exchange suffix (e.g. EUNL.DE). Provide either ticker or isin, not both. |
| `isin` | string | No | International Securities Identification Number of the ETF (e.g., IE00B5BMR087). The most-traded listing fills the response and every listing is returned in `listings`. Provide either ticker or isin, not both. |

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

### Get a list of all available companies in the earnings calendar

Returns the list of companies covered by the earnings calendar. For a specific company's earnings results and reporting dates use /earningscalendar.

`GET /v1/earningscalendarlist`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/earningscalendar

_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":"api-ninjas","path":"/v1/earningscalendarlist","method":"GET"}'
```

### Get current inflation data

Returns current monthly and annual inflation percentages.

`GET /v1/inflation`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/inflation

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | No | 2-letter country code (ISO-3166-1 alpha-2) or name of country (case-insensitive). |
| `type` | string | No | Inflation indicator type. Can be either CPI (Consumer Price Index) or HICP (Harmonized Index of Consumer Prices). If not provided, the CPI will be used by default. (Allowed: CPI, HICP) |

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

### Historical time series of rolling volatility for a currency pair.

Returns a realised volatility time series for a currency `pair` across a date range or `days` lookback. For the latest single value use /currencyvolatility.

`GET /v1/currencyvolatilityhistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/exchangerate

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `pair` | string | Yes | Currency pair in ABC_DEF form (e.g. EUR_USD). Both must be supported fiat currency codes; ZWG, BTC, and XAG are not supported. |
| `window` | number | No | Lookback window for realized volatility, in trading days. Defaults to 30. Must be between 2 and 1000. (Default: 30) |
| `method` | string | No | Volatility method: close_to_close (default) or ewma. (Allowed: close_to_close, ewma) (Default: close_to_close) |
| `days` | number | No | Length of the trailing date range in calendar days, ending today. Defaults to 90. Maximum 1825. Mutually exclusive with start_date/end_date. (Default: 90) |
| `start_date` | string | No | Start date (YYYY-MM-DD) for a range query. Use with end_date instead of days. |
| `end_date` | string | No | End date (YYYY-MM-DD) for a range query. Use with start_date instead of days. |
| `day_count` | number | No | Annualization factor: 252 trading days (default) or 365 calendar days. (Allowed: 252, 365) (Default: 252) |
| `annualized` | boolean | No | Whether to treat the annualized figure as the headline value. Defaults to true. (Default: True) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/currencyvolatilityhistorical","method":"GET","query":{"pair":"<string>","window":"<number>","method":"<string>","days":"<number>","start_date":"<string>","end_date":"<string>","day_count":"<number>","annualized":"<boolean>"}}'
```

### EWMA and GARCH(1,1) volatility forecasts for a currency pair.

Projects forward volatility for a currency `pair` over a `horizon`, using EWMA or a comparable `method`. For realised values instead use /currencyvolatility.

`GET /v1/currencyvolatilityforecast`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/exchangerate

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `pair` | string | Yes | Currency pair in ABC_DEF form (e.g. EUR_USD). Both must be supported fiat currency codes; ZWG, BTC, and XAG are not supported. |
| `method` | string | No | Forecast method: garch_11 (default) or ewma. If a GARCH fit does not converge the response falls back to EWMA. (Allowed: garch_11, ewma) (Default: garch_11) |
| `lambda` | number | No | EWMA decay factor (only used when method=ewma). Defaults to 0.94. Must be between 0.80 and 0.99. (Default: 0.94) |
| `horizon` | string | No | Comma-separated forecast horizons in trading days (e.g. 1,5,21,63). Defaults to 1,5,21,63. (Default: 1,5,21,63) |
| `day_count` | number | No | Annualization factor: 252 trading days (default) or 365 calendar days. (Allowed: 252, 365) (Default: 252) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/currencyvolatilityforecast","method":"GET","query":{"pair":"<string>","method":"<string>","lambda":"<number>","horizon":"<string>","day_count":"<number>"}}'
```

### Get a random dad joke

Returns one or more random dad jokes; `limit` returns up to 100 jokes in a call.

`GET /v1/dadjokes`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/dadjokes

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `limit` | number | No | How many jokes to return. Must be between 1 and 100. Default is 1. (Default: 1) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/dadjokes","method":"GET","query":{"limit":"<number>"}}'
```

### Look up word definition

Returns a string containing definitions for a given word.

`GET /v1/dictionary`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/dictionary

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `word` | string | Yes | Word to look up. |

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

### Check if an email is from a disposable email provider

Checks whether an email address comes from a disposable or temporary email provider, for sign-up and fraud screening. Requires `email`.

`GET /v1/disposableemailchecker`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/disposableemailchecker

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | Yes | The email address to check. |

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

### Get a list of dog breeds matching specified parameters.

Returns dog breeds matching filters such as name, height, weight, life expectancy, shedding, barking, energy, or trainability. For breed names only use /alldogs.

`GET /v1/dogs`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/dogs

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | The name of breed. |
| `min_height` | number | No | Minimum height in inches. |
| `max_height` | number | No | Maximum height in inches. |
| `min_weight` | number | No | Minimum weight in pounds. |
| `max_weight` | number | No | Maximum weight in pounds. |
| `min_life_expectancy` | number | No | Minimum life expectancy in years. |
| `max_life_expectancy` | number | No | Maximum life expectancy in years. |
| `shedding` | number | No | How much hair the breed sheds. |
| `barking` | number | No | How vocal the breed is. |
| `energy` | number | No | How much energy the breed has. |
| `protectiveness` | number | No | How likely the breed is to alert strangers. |
| `trainability` | number | No | How easy it is to train the breed. |
| `offset` | number | No | Number of results to offset for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/dogs","method":"GET","query":{"name":"<string>","min_height":"<number>","max_height":"<number>","min_weight":"<number>","max_weight":"<number>","min_life_expectancy":"<number>","max_life_expectancy":"<number>","shedding":"<number>","barking":"<number>","energy":"<number>","protectiveness":"<number>","trainability":"<number>","offset":"<number>"}}'
```

### Returns a list of all dog breed names.

Returns the names of every dog breed in the database and no other fields. For breed traits and measurements such as height, weight, and shedding use /dogs.

`GET /v1/alldogs`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/dogs

_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":"api-ninjas","path":"/v1/alldogs","method":"GET"}'
```

### Retrieve DNS records for a domain

Retrieves DNS records for a domain, covering the A, AAAA, CNAME, MX, NS, PTR, SRV, SOA, TXT and CAA record types. Requires `domain`.

`GET /v1/dnslookup`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/dnslookup

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | Valid domain to check (e.g. example.com). |

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

### Checks domain availability and retrieves basic registration information.

Checks whether a domain is available and returns basic registration information. Requires a `domain`.

`GET /v1/domain`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/domain

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | Valid domain to check (e.g. example.com). |

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

### Get earnings results and upcoming dates

Returns earnings reports for one company (`ticker`), one calendar date (`date`), or a date range (`date_start`/`date_end`). At least one of these is required, and `date` cannot be combined with a range. Covers 50,000+ tickers on US and international exchanges with history back to 2000. Results are sorted by date (newest first) and returned 50 per request; use `offset` to page. Past reports only by default; set `show_upcoming=true` to include scheduled future reports. EPS and revenue are in the company's reporting currency. `actual_eps`/`estimated_eps` are on the adjusted (non-GAAP) basis analysts use; `actual_eps_gaap` is GAAP diluted EPS from the SEC 10-Q/10-K (US SEC filers). For upcoming dates filtered by exchange use /upcomingearnings. On this listing the enrichment fields (date_confirmed, report_date_status, sec_8k_url, eps_beat_miss, revenue_beat_miss, surprise streaks/history, year-ago and growth figures, earnings price moves, price_reaction, next_earnings_date, days_to_next_earnings, has_transcript) are returned as an upgrade-notice string rather than data.

`GET /v1/earningscalendar`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/earningscalendar

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g. MSFT, 7203.T). Returns that company's earnings reports, newest first. |
| `date` | string | No | Single report date in YYYY-MM-DD format (e.g. 2026-07-30). Returns every company reporting on that date. Cannot be combined with date_start or date_end. |
| `date_start` | string | No | Start of a report-date range (YYYY-MM-DD, inclusive). If date_end is omitted, the range ends 7 days after date_start. |
| `date_end` | string | No | End of a report-date range (YYYY-MM-DD, inclusive). Must be on or after date_start. If date_start is omitted, the range starts 7 days before date_end. |
| `show_upcoming` | boolean | No | Include scheduled future reports (dates after today). Without it only past and same-day reports are returned. (Default: False) |
| `offset` | number | No | Number of results to skip, for pagination. Each request returns up to 50 results, so use offset=50, 100, ... to page. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/earningscalendar","method":"GET","query":{"ticker":"<string>","date":"<string>","date_start":"<string>","date_end":"<string>","show_upcoming":"<boolean>","offset":"<number>"}}'
```

### List All Earnings Call Transcripts

Lists all available earnings call transcripts, paged with `limit` and `offset`. To filter by ticker, CIK or date use /earningstranscriptsearch; for the text of one call use /earningstranscript.

`GET /v1/earningstranscriptlist`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/earningscalltranscript

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `limit` | number | No | Number of results to return. Default is unlimited - all results will be returned. |
| `offset` | number | No | Number of results to skip for pagination. Default: 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/earningstranscriptlist","method":"GET","query":{"limit":"<number>","offset":"<number>"}}'
```

### Search for available earnings call transcripts by ticker, CIK, date, or date range, with paginated results

Finds which earnings call transcripts are available by ticker, CIK, date or date range, with paginated results. Returns the matching calls, not their text; read that from /earningstranscript.

`GET /v1/earningstranscriptsearch`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/earningscalltranscript

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., MSFT). At least one of ticker, cik, date, or start_date/end_date must be provided. |
| `cik` | string | No | Company Central Index Key (e.g., 789019). For US companies registered with the SEC only. |
| `date` | string | No | Earnings call date in YYYY-MM-DD format (e.g., 2024-05-02). Mutually exclusive with start_date/end_date. |
| `start_date` | string | No | Start of the earnings call date range (inclusive), YYYY-MM-DD. Must be paired with end_date. When ticker and cik are both omitted, the range cannot exceed 30 days. |
| `end_date` | string | No | End of the earnings call date range (inclusive), YYYY-MM-DD. Must be paired with start_date. |
| `limit` | number | No | Maximum number of results to return. Default 20; values above 200 are clamped to 200. (Default: 20) |
| `offset` | number | No | Number of results to skip for pagination. Default 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/earningstranscriptsearch","method":"GET","query":{"ticker":"<string>","cik":"<string>","date":"<string>","start_date":"<string>","end_date":"<string>","limit":"<number>","offset":"<number>"}}'
```

### Get Earnings Call Transcript

Returns the full text of one company's earnings call. Requires a `ticker` or `cik`; optionally choose a `year` and `quarter`. To find which calls exist first, use /earningstranscriptsearch.

`GET /v1/earningstranscript`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/earningscalltranscript

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., AAPL). Either ticker or cik must be provided. |
| `cik` | string | No | Company Central Index Key (e.g., 320193). Either ticker or cik must be provided. |
| `year` | number | No | Earnings year (e.g., 2025). Must be a valid year between 2000 and the current year. If provided, quarter must also be provided. |
| `quarter` | number | No | Earnings quarter from Q1 to Q4. If provided, year must also be provided. (Allowed: 1, 2, 3, 4) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/earningstranscript","method":"GET","query":{"ticker":"<string>","cik":"<string>","year":"<number>","quarter":"<number>"}}'
```

### Get earnings report data (returns an array; query by company or by filing date)

Returns reported earnings results, filtered by `ticker`, `cik`, `year`, `quarter` or filing `date`. For dates of upcoming reports use /earningscalendar.

`GET /v2/earnings`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/earnings

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., ADBE). Use ticker or cik to query a company, or query by date with no ticker. |
| `cik` | string | No | Company Central Index Key (e.g., 796343). Alternative to ticker for identifying a company. |
| `period` | string | No | Fiscal period (q1, q2, q3, q4, or fy). Requires a ticker/cik and year. (Allowed: q1, q2, q3, q4, fy) |
| `quarter` | number | No | Fiscal quarter 1-4 (alternative to period). Requires ticker/cik and year. |
| `year` | number | No | Fiscal year (e.g. 2024). With a ticker and no period/quarter, returns every period for that year; with period/quarter, one filing. |
| `date` | string | No | Return every filing whose SEC filing date equals this date (YYYY-MM-DD). Works with no ticker. |
| `date_start` | string | No | Start of a filing-date range (YYYY-MM-DD): all companies that filed on/after this date. |
| `date_end` | string | No | End of a filing-date range (YYYY-MM-DD). Combine with date_start to page through a window. |
| `offset` | number | No | Number of results to skip for pagination. Results are returned 50 per page. Default is 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/earnings","method":"GET","query":{"ticker":"<string>","cik":"<string>","period":"<string>","quarter":"<number>","year":"<number>","date":"<string>","date_start":"<string>","date_end":"<string>","offset":"<number>"}}'
```

### Get electric vehicle data by various parameters

Returns electric vehicle records with range, battery, charging, and performance data, filtered by make, model, year, or range.

`GET /v1/electricvehicle`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/electricvehicle

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `make` | string | No | Vehicle manufacturer (e.g., tesla or nissan) |
| `model` | string | No | Vehicle model. Supports partial matching (e.g., 'Model' matches 'Model 3', 'Model Y', etc.). |
| `min_year` | number | No | Minimum vehicle model year (e.g., 2020) |
| `max_year` | number | No | Maximum vehicle model year (e.g., 2023) |
| `min_range` | number | No | Minimum range in kilometers (e.g., 250) |
| `max_range` | number | No | Maximum range in kilometers (e.g., 400) |
| `limit` | number | No | How many results to return. Must be between 1 and 10. Default is 1. (Default: 1) |
| `offset` | number | No | Number of results to skip. Used for pagination. Default is 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/electricvehicle","method":"GET","query":{"make":"<string>","model":"<string>","min_year":"<number>","max_year":"<number>","min_range":"<number>","max_range":"<number>","limit":"<number>","offset":"<number>"}}'
```

### Encode text to vector

Encodes any given text into a 768-dimensional vector using state-of-the-art NLP machine learning models.

`POST /v1/embeddings`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/embeddings

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `text` | string | Yes | Query text to embed. Maximum 5000 characters. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/embeddings","body":{"text":"<string>"}}'
```

### Get Emojis

Returns a list of emojis according to input parameters. Returns at most 30 results. To access more than 30 results, use the offset parameter to offset results in multiple API calls.

`GET /v1/emoji`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/emoji

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Descriptive name of emoji. |
| `code` | string | No | Unicode character code for the emoji. |
| `group` | string | No | Main category the emoji belongs to. (Allowed: smileys_emotion, people_body, component, animals_nature, food_drink, travel_places, activities, objects, symbols, flags) |
| `subgroup` | string | No | Sub-category the emoji belongs to. |
| `offset` | number | No | Number of results to offset for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/emoji","method":"GET","query":{"name":"<string>","code":"<string>","group":"<string>","subgroup":"<string>","offset":"<number>"}}'
```

### Get current Euribor rates for different maturities.

Returns current Euribor interbank lending rates for maturities from 1 week to 12 months. Takes no parameters.

`GET /v1/euribor`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/interestrate

_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":"api-ninjas","path":"/v1/euribor","method":"GET"}'
```

### Find electric vehicle charging stations

Get electric vehicle charging stations near a location specified by latitude and longitude coordinates.

`GET /v1/evcharger`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/evcharger

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `lat` | number | Yes | Latitude coordinate. |
| `lon` | number | Yes | Longitude coordinate. |
| `distance` | number | No | Search distance in kilometers. Default is 3 kilometers. Max value is 50 kilometers. (Default: 3) |
| `level` | number | No | Charging level (1, 2, or 3). By default, all levels are returned. (Allowed: 1, 2, 3) |
| `limit` | number | No | How many results to return. Must be between 1 and 30. Default is 3. (Default: 3) |
| `offset` | number | No | Number of results to skip. Used for pagination. Default is 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/evcharger","method":"GET","query":{"lat":"<number>","lon":"<number>","distance":"<number>","level":"<number>","limit":"<number>","offset":"<number>"}}'
```

### Get exchange rate for a given currency pair

Returns the current exchange rate for a currency `pair` such as USD_EUR. To convert a specific amount instead use /convertcurrency.

`GET /v1/exchangerate`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/exchangerate

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `pair` | string | Yes | Currency pair to query. Must be in the form of currency1_currency2 (e.g. USD_EUR) |

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

### Get daily historical exchange rates for a given currency pair

Returns daily historical exchange rates for a given currency pair. Data is available from 1999-01-01 onward. Provide either a single date or a start_date/end_date range (max 366 days).

`GET /v1/exchangeratehistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/exchangerate

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `pair` | string | Yes | Currency pair to query. Must be in the form of currency1_currency2 (e.g. USD_EUR) |
| `date` | string | No | Single date to query (YYYY-MM-DD). Either date or both start_date and end_date must be provided. |
| `start_date` | string | No | Start date of a range query (YYYY-MM-DD). Must be used with end_date. |
| `end_date` | string | No | End date of a range query (YYYY-MM-DD). Date range cannot exceed 366 days. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/exchangeratehistorical","method":"GET","query":{"pair":"<string>","date":"<string>","start_date":"<string>","end_date":"<string>"}}'
```

### Get exercises

Returns up to 5 exercises that satisfy the given parameters.

`GET /v1/exercises`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/exercises

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Name of exercise. This value can be partial. |
| `type` | string | No | Exercise type. (Allowed: cardio, olympic_weightlifting, plyometrics, powerlifting, strength, stretching, strongman) |
| `muscle` | string | No | Muscle group targeted by the exercise. (Allowed: abdominals, abductors, adductors, biceps, calves, chest, forearms, glutes, hamstrings, lats, lower_back, middle_back, neck, quadriceps, traps, triceps) |
| `difficulty` | string | No | Difficulty level of the exercise. (Allowed: beginner, intermediate, expert) |
| `equipments` | string | No | Equipment required for the exercise. Multiple equipments can be specified using comma separation (e.g. dumbbell,flat bench). This value can be partial. |
| `offset` | number | No | Number of results to offset for pagination. Default is 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/exercises","method":"GET","query":{"name":"<string>","type":"<string>","muscle":"<string>","difficulty":"<string>","equipments":"<string>","offset":"<number>"}}'
```

### Get executive compensation for a US public company

Returns named-executive-officer compensation for a company, sourced from SEC DEF 14A proxy statements: the full breakdown for all named executives, historical years, and the structured Pay Versus Performance disclosure.

`GET /v1/executivecompensation`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/executivecompensation

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | The stock ticker of the company (e.g., AAPL). Either ticker or name is required. |
| `cik` | string | No | The company's SEC Central Index Key (CIK), with or without leading zeros (e.g., 320193 or 0000320193). An alternative to ticker. |
| `name` | string | No | Company name to search for (e.g., apple), used when a ticker or cik is not provided. |
| `year` | number | No | The 4-digit fiscal year to return. Each response covers a single year and defaults to the latest available year; a year the company has no data for returns a no-data message. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/executivecompensation","method":"GET","query":{"ticker":"<string>","cik":"<string>","name":"<string>","year":"<number>"}}'
```

### Get Random Facts

Returns one or more random facts from a library of over 125,000.

`GET /v1/facts`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/facts

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `limit` | number | No | How many results to return. Must be between 1 and 100. Default is 1. (Default: 1) |
| `safe` | boolean | No | Set safe=true to exclude facts flagged as sexually explicit, crude, or containing profanity, slurs, or offensive content. Defaults to false, so results are unfiltered unless you opt in. Filtering is best-effort and not a guarantee. Any value other than true/false returns an error. (Default: False) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/facts","method":"GET","query":{"limit":"<number>","safe":"<boolean>"}}'
```

### Get GDP data

Get GDP data from given parameters. Returns GDP statistics that satisfy the parameters.

`GET /v1/gdp`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/gdp

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | No | Country name (case-insensitive) or 2-letter ISO-3166 alpha-2 code of the country. E.g. Canada or CA. |
| `year` | number | No | Year for which to retrieve GDP data. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/gdp","method":"GET","query":{"country":"<string>","year":"<number>"}}'
```

### Get coordinates for a city, state, or US ZIP code

Converts a place name into latitude and longitude. Requires `city`; narrow with `state`, `country` or `zipcode`. On this listing the enrichment fields (county, zip_code, area_codes, nearest_airport, is_land, climate_zone, urbanisation) are returned as an upgrade-notice string rather than data. For the reverse direction use /reversegeocoding.

`GET /v1/geocoding`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/geocoding

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `city` | string | Yes | City name. |
| `state` | string | No | US state (for United States cities only). |
| `country` | string | No | Country name, 2-letter ISO country code, or 3-letter ISO country code. |
| `zipcode` | string | No | 5-digit zipcode (for United States cities only). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/geocoding","method":"GET","query":{"city":"<string>","state":"<string>","country":"<string>","zipcode":"<string>"}}'
```

### Convert latitude/longitude coordinates to city locations.

Converts a `lat` and `lon` pair into the matching place name and administrative area. For the opposite direction use /geocoding.

`GET /v1/reversegeocoding`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/geocoding

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `lat` | number | Yes | Latitude coordinate. |
| `lon` | number | Yes | Longitude coordinate. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/reversegeocoding","method":"GET","query":{"lat":"<number>","lon":"<number>"}}'
```

### Get current gold futures price

Returns the current live gold futures price in USD.

`GET /v1/goldprice`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/goldprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `currency` | string | No | ISO 4217 currency code to convert the price into (e.g., EUR, GBP, INR). Defaults to USD. |
| `unit` | string | No | Target unit to convert the price into. Defaults to troy_ounce. (Allowed: troy_ounce, g, kg, oz, lb, metric_ton, short_ton, hundredweight) (Default: troy_ounce) |

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

### Get the current gold spot price

Returns the gold spot price (XAU/USD) with bid and ask, blended from multiple live market quotes and refreshed about once a minute on this listing.

`GET /v1/goldspot`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/goldprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `currency` | string | No | ISO 4217 currency code to convert the price into (e.g., EUR, GBP, INR). Defaults to USD. |
| `unit` | string | No | Target unit to convert the price into. Defaults to troy_ounce. (Allowed: troy_ounce, g, kg, oz, lb, metric_ton, short_ton, hundredweight) (Default: troy_ounce) |

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

### Get historical gold futures price data

Returns historical gold futures price data in OHLCV (Open, High, Low, Close, Volume) format. The data is returned in descending order (most recent first), and all prices are in USD.

`GET /v1/goldpricehistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/goldprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `period` | string | No | Time interval between data points. Valid values are: 1m, 5m, 15m, 30m, 1h, 4h, 1d. Default is 1h. (Allowed: 1m, 5m, 15m, 30m, 1h, 4h, 1d) (Default: 1h) |
| `start` | number | No | Start timestamp in Unix format. If not provided, defaults to 24 hours ago. |
| `end` | number | No | End timestamp in Unix format. If not provided, defaults to current time. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/goldpricehistorical","method":"GET","query":{"period":"<string>","start":"<number>","end":"<number>"}}'
```

### Get helicopter data

Returns technical specifications for helicopter models, filtered by manufacturer, model, or ranges of air speed, range, length, and height.

`GET /v1/helicopter`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/helicopter

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `manufacturer` | string | No | Company that designed and built the helicopter. |
| `model` | string | No | Helicopter model name. |
| `min_speed` | number | No | Minimum max. air speed in knots. |
| `max_speed` | number | No | Maximum max. air speed in knots. |
| `min_range` | number | No | Minimum range of the helicopter in nautical miles. |
| `max_range` | number | No | Maximum range of the helicopter in nautical miles. |
| `min_length` | number | No | Minimum length of the helicopter in feet. |
| `max_length` | number | No | Maximum length of the helicopter in feet. |
| `min_height` | number | No | Minimum height of the helicopter in feet. |
| `max_height` | number | No | Maximum height of the helicopter in feet. |
| `limit` | number | No | How many results to return. Must be between 1 and 30. Default is 1. (Default: 1) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/helicopter","method":"GET","query":{"manufacturer":"<string>","model":"<string>","min_speed":"<number>","max_speed":"<number>","min_range":"<number>","max_range":"<number>","min_length":"<number>","max_length":"<number>","min_height":"<number>","max_height":"<number>","limit":"<number>"}}'
```

### Search for historical figures

Searches notable people from history, ancient to modern, by name with partial matches supported, and returns their records. Requires `name`.

`GET /v1/historicalfigures`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/historicalfigures

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Name of the person to search. Includes partial results (e.g. 'julius' will match Julius Caesar). |
| `offset` | number | No | Number of results to offset pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/historicalfigures","method":"GET","query":{"name":"<string>","offset":"<number>"}}'
```

### Get a random hobby

Returns a random hobby suggestion, optionally restricted to a `category` such as general, sports_and_outdoors or education.

`GET /v1/hobbies`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/hobbies

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `category` | string | No | Filter hobbies by category. Possible values are: general, sports_and_outdoors, education, collection, competition, observation. (Allowed: general, sports_and_outdoors, education, collection, competition, observation) |

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

### Get holidays for a given country and year.

Returns holidays for a country and calendar year, optionally filtered by holiday type. Requires a `country`. For holidays falling on one date use /v1/isholiday.

`GET /v2/holidays`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/holidays

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | Yes | Country name or ISO 3166-2 country code (preferred). |
| `year` | number | No | Calendar year between 2005 and 2039 (inclusive). Default is the current year. Note: not all countries are guaranteed to contain data going back to 2005. (Default: 2025) |
| `type` | string | No | Filter results to a single holiday type. Accepts one of the enumerated values, e.g. `public_holiday` for nationally mandated days off. Omit to return every type. (Allowed: public_holiday, state_holiday, local_holiday, province_territory_holiday, de_facto_holiday, substitute_holiday, bank_holiday, government_holiday, private_sector_holiday, optional_holiday, restricted_trading_day, christian_holiday, orthodox_holiday, muslim_holiday, jewish_holiday, hindu_holiday, observance, united_nations_observance, flag_day, silent_day, half_day, working_day, season, clock_change, sporting_event) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/holidays","method":"GET","query":{"country":"<string>","year":"<number>","type":"<string>"}}'
```

### Get all holidays that fall on a given date.

Returns all holidays that fall on a given date, optionally restricted to one country. Requires a `date`. For a full year's calendar use /v2/holidays.

`GET /v1/isholiday`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/holidays

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `date` | string | Yes | Date in YYYY-MM-DD format (e.g. 2025-12-25). |
| `country` | string | No | Country name or ISO 3166-2 country code (preferred). If not specified, holidays from all countries are returned. |

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

### Get daily horoscope for a specific zodiac sign

Returns the daily horoscope for one zodiac sign. An optional `date` in YYYY-MM-DD format gives a past day's horoscope; future dates are not accepted.

`GET /v1/horoscope`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/horoscope

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `zodiac` | string | Yes | The zodiac sign to get a horoscope for. Valid values are: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces. (Allowed: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces) |
| `date` | string | No | The date for the horoscope in YYYY-MM-DD format. The date must be either current or in the past. It cannot be in the future. If not provided, returns the horoscope for today's date. |

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

### Get hospital data based on given parameters

Returns US hospitals matching a name, city, state, ZIP code, county or latitude/longitude bounding box, with location, contact information and bed count.

`GET /v1/hospitals`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/hospitals

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Name of the hospital to search for. Supports partial matching. |
| `city` | string | No | City where the hospital is located. |
| `state` | string | No | State where the hospital is located. |
| `zipcode` | string | No | ZIP code of the hospital location. |
| `county` | string | No | County where the hospital is located. |
| `min_latitude` | number | No | Minimum latitude coordinate. |
| `max_latitude` | number | No | Maximum latitude coordinate. |
| `min_longitude` | number | No | Minimum longitude coordinate. |
| `max_longitude` | number | No | Maximum longitude coordinate. |
| `limit` | number | No | Number of results to return. Default is 5. Maximum is 100. (Default: 5) |
| `offset` | number | No | Number of results to skip. Default is 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/hospitals","method":"GET","query":{"name":"<string>","city":"<string>","state":"<string>","zipcode":"<string>","county":"<string>","min_latitude":"<number>","max_latitude":"<number>","min_longitude":"<number>","max_longitude":"<number>","limit":"<number>","offset":"<number>"}}'
```

### Look up and validate an IBAN

Validates an International Bank Account Number and returns the bank and account details encoded in it. Requires an `iban`.

`GET /v1/iban`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/iban

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `iban` | string | Yes | The IBAN to look up. |

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

### List which fiscal periods have income statement data for a company (premium)

Returns the fiscal years and quarters for which income statement data is available for a company.

`GET /v1/incomestatementavailability`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/incomestatement

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., ADBE). Either ticker or cik must be provided. |
| `cik` | string | No | Company Central Index Key (e.g., 796343). Either ticker or cik must be provided. |

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

### Get income statement data for a specific company, period, and year

Returns income statement data from SEC 10-Q and 10-K filings for one company, fiscal period and year. Requires `ticker` or `cik`. For available periods use /incomestatementavailability.

`GET /v1/incomestatement`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/incomestatement

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., ADBE). Either ticker or cik must be provided. |
| `cik` | string | No | Company Central Index Key (e.g., 796343). Either ticker or cik must be provided. |
| `period` | string | No | Fiscal period. Must be one of: q1, q2, q3, q4, or fy (full year). If set, year must also be set. (Allowed: q1, q2, q3, q4, fy) |
| `year` | number | No | Fiscal year (e.g., 2025). Must be a valid year after 2000. If set, period must also be set. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/incomestatement","method":"GET","query":{"ticker":"<string>","cik":"<string>","period":"<string>","year":"<number>"}}'
```

### Retrieve income tax information

Returns comprehensive income tax information including tax brackets and rates at both federal and state/provincial levels (where applicable).

`GET /v2/incometax`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/incometax

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | Yes | 2-letter country code (e.g., US, CA) |
| `year` | number | Yes | The tax year for which to retrieve data |
| `regions` | string | No | Comma-separated list of regions to filter the response. For United States, specify 2-letter state codes (e.g., AL, CA, NY) or federal for federal tax information only. For Canada, specify 2-letter provincial codes (e.g., ON, BC, QC) or federal for federal tax information only. Multiple regions can be specified (e.g., federal,AL,CA,NY). When specified, filters the response to only include tax information for those regions. If unset, the response will include all regions (federal and all states/provinces). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/incometax","method":"GET","query":{"country":"<string>","year":"<number>","regions":"<string>"}}'
```

### Get detailed transaction information for a given insider

Returns detailed transaction information for a given insider with optional filtering by company. Returns a maximum of 10 transactions, ordered by filing date (most recent first).

`GET /v1/insiderdetails`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/insidertrading

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Name of the insider (exact match). Use /v1/insiderslist to look up insider names. |
| `company_ticker` | string | No | Company ticker symbol to filter transactions (e.g., AAPL, MSFT). |
| `company_cik` | string | No | Central Index Key (CIK) of the company to filter transactions (e.g., 789019). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/insiderdetails","method":"GET","query":{"name":"<string>","company_ticker":"<string>","company_cik":"<string>"}}'
```

### Get list of insiders for a company

Returns a list of all insiders for a given company (via ticker or CIK). For each insider, returns their name, position, and current share holdings based on their most recent filing. Either ticker or CIK is required.

`GET /v1/insiderslist`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/insidertrading

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., AAPL, MSFT). |
| `cik` | string | No | Central Index Key (CIK) of the company. |

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

### Calculates detailed tax information based on income, location, and filing status.

Calculates income tax for the United States or Canada from income, location, and filing status, including state or provincial tax. Requires `country`, `region`, `income`.

`GET /v1/incometaxcalculator`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/incometaxcalculator

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | Yes | 2-letter country code (e.g., US, CA) |
| `region` | string | Yes | State/province code (e.g., CA, NY, ON) |
| `income` | number | Yes | Annual income amount |
| `filing_status` | string | No | Required when country is US. Tax filing status. Possible values: single, married (married filing jointly), married_separate (married filing separately), or head_of_household (Allowed: single, married, married_separate, head_of_household) |
| `deductions` | number | No | Total tax deductions amount (Default: 0) |
| `credits` | number | No | Total tax credits amount (Default: 0) |
| `self_employed` | boolean | No | Set to true for self-employed tax calculations (US only) (Default: False) |
| `tax_year` | string | No | Tax year in YYYY format (e.g., 2024). If not specified, the latest year will be used. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/incometaxcalculator","method":"GET","query":{"country":"<string>","region":"<string>","income":"<number>","filing_status":"<string>","deductions":"<number>","credits":"<number>","self_employed":"<boolean>","tax_year":"<string>"}}'
```

### Get the current spot and futures price of a metal

Returns the current spot price of a metal with its futures price and contract. Spot prices on this listing refresh about once a minute. One metal per request via `metal`.

`GET /v1/metalsprice`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/metalsprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `metal` | string | No | The metal to return. Defaults to gold. xau, xag, xpt, xpd, and aluminium are also accepted as aliases. (Allowed: gold, silver, platinum, palladium, copper, aluminum) (Default: gold) |
| `currency` | string | No | ISO 4217 currency code to convert prices into (e.g., EUR, GBP, INR). Defaults to USD. |
| `unit` | string | No | Target weight unit. Defaults to the metal's native unit (troy_ounce for precious metals, lb for copper, metric_ton for aluminum). (Allowed: troy_ounce, g, kg, oz, lb, metric_ton, short_ton, hundredweight) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/metalsprice","method":"GET","query":{"metal":"<string>","currency":"<string>","unit":"<string>"}}'
```

### Search for Banks and Routing Numbers

Finds US banks and their routing numbers by bank name, city, state or ZIP code, with `offset` paging. To decode a known routing number use /routingnumber.

`GET /v1/routingnumbersearch`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/routingnumber

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `bank_name` | string | No | Bank name to search for. |
| `city` | string | No | City name to search for banks. |
| `state` | string | No | Two-letter state code (e.g. CA, NY). |
| `zip_code` | string | No | 5-digit ZIP code to search for banks. |
| `offset` | number | No | Number of results to offset for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/routingnumbersearch","method":"GET","query":{"bank_name":"<string>","city":"<string>","state":"<string>","zip_code":"<string>","offset":"<number>"}}'
```

### Get a random image

Returns a random royalty-free image, optionally constrained by `category`, `width` and `height`. Useful for placeholder or sample imagery.

`GET /v1/randomimage`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/randomimage

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `category` | string | No | Image category. If set, must be one of the following: nature, city, technology, food, still_life, abstract, wildlife. (Allowed: nature, city, technology, food, still_life, abstract, wildlife) |
| `width` | number | No | Width of the image to generate. Must be between 1 and 5000. Default value is 640. (Default: 640) |
| `height` | number | No | Height of the image to generate. Must be between 1 and 5000. Default value is 480. (Default: 480) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/randomimage","method":"GET","query":{"category":"<string>","width":"<number>","height":"<number>"}}'
```

### Search 13F institutions and their filing history (Premium only)

Searches the directory of 13F-filing institutions by name, CIK or quarter and returns their filing history rather than positions.

`GET /v1/institutionalinvestors`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/institutionalholdings

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Substring search of institution names; returns directory records. |
| `cik` | string | No | Returns that institution's filing history - one record per quarter. |
| `period` | string | No | Quarter-end date (YYYY-MM-DD); returns every institution that filed for that quarter. |
| `period_list` | boolean | No | true enumerates the available quarters with filing counts. |
| `limit` | number | No | Maximum results to return. Default 50, max 1000. |
| `offset` | number | No | Number of results to skip for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/institutionalinvestors","method":"GET","query":{"name":"<string>","cik":"<string>","period":"<string>","period_list":"<boolean>","limit":"<number>","offset":"<number>"}}'
```

### Get every institution holding a given stock for a quarter

Lists every institution holding a given stock in a quarter. Requires `ticker` or `cusip`. For one manager's entire portfolio use /institutionalholdings.

`GET /v1/institutionalownership`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/institutionalholdings

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Ticker symbol (e.g. AAPL). Either ticker or cusip is required. |
| `cusip` | string | No | 9-character CUSIP (alternative to ticker). |
| `period` | string | No | Quarter-end date (YYYY-MM-DD). Defaults to the latest. |
| `put_call` | string | No | put or call; long positions are returned by default. (Allowed: put, call) |
| `min_value` | number | No | Minimum market value (USD). |
| `min_shares` | number | No | Minimum shares held. |
| `sort` | string | No | Sort order: value (default), shares, or manager_name. (Allowed: value, shares, manager_name) |
| `limit` | number | No | Maximum results to return. Default 50, max 1000. |
| `offset` | number | No | Number of results to skip for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/institutionalownership","method":"GET","query":{"ticker":"<string>","cusip":"<string>","period":"<string>","put_call":"<string>","min_value":"<number>","min_shares":"<number>","sort":"<string>","limit":"<number>","offset":"<number>"}}'
```

### Get past, current, and upcoming IPO records

Returns a list of IPO records matching the supplied filters. With no parameters, returns IPOs with listing dates between today and 30 days from now. All parameters are optional; combine them to narrow results by ticker, CIK, date range, status, deal type, exchange, or industry.

`GET /v1/ipocalendar`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/ipo

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol (e.g., RDDT). Returns IPO records for that specific company. |
| `cik` | string | No | SEC Central Index Key, numeric only (padded or unpadded; e.g., 0001713445 or 1713445). |
| `date` | string | No | Single date in YYYY-MM-DD format. Cannot be combined with date_start or date_end. |
| `date_start` | string | No | Range start in YYYY-MM-DD format. Defaults to today. |
| `date_end` | string | No | Range end in YYYY-MM-DD format. Defaults to today + 30 days. |
| `date_field` | string | No | Which date the range filter applies to. (Allowed: listing_date, filing_date) (Default: listing_date) |
| `status` | string | No | Comma-separated list of statuses to filter by. Values: filed, amended, priced, listed, withdrawn. |
| `deal_type` | string | No | Comma-separated list of deal types to filter by. Values: ipo, spac_ipo, direct_listing. |
| `exchange` | string | No | U.S. exchange code. (Allowed: NASDAQ, NYSE, AMEX) |
| `sic_code` | string | No | SEC Standard Industrial Classification code (up to 4 digits). |
| `limit` | number | No | Maximum number of results to return. Must be between 1 and 1000 (inclusive). Default is 50. (Default: 50) |
| `offset` | number | No | Number of results to skip for pagination. Must be a non-negative integer. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/ipocalendar","method":"GET","query":{"ticker":"<string>","cik":"<string>","date":"<string>","date_start":"<string>","date_end":"<string>","date_field":"<string>","status":"<string>","deal_type":"<string>","exchange":"<string>","sic_code":"<string>","limit":"<number>","offset":"<number>"}}'
```

### Get current interest rates

Returns the latest published value of a central bank or benchmark `rate`. For the full history of that rate use /historicalinterestrates.

`GET /v2/interestrate`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/interestrate

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `rate` | string | Yes | The specific interest rate identifier. Supports central bank rates (e.g. central_bank_us, central_bank_eu), benchmark rates (e.g. sofr, effr, euribor_3_months, sonia), and bank prime / base lending rates (prime_us, prime_ca, prime_jp, prime_za, lpr_cn_1y, lpr_cn_5y, br_my, blr_my, tpb_br). |

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

### Get historical interest rates

Returns the published history of a benchmark `rate` over an optional date range, given as `start_date`/`end_date` (YYYY-MM-DD) or `start_time`/`end_time` (UNIX seconds). For the latest value only use /interestrate.

`GET /v2/interestratehistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/interestrate

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `rate` | string | Yes | The specific interest rate identifier. Supports central bank rates (e.g. central_bank_us, central_bank_eu), benchmark rates (e.g. sofr, effr, euribor_3_months, sonia), and bank prime / base lending rates (prime_us, prime_ca, prime_jp, prime_za, lpr_cn_1y, lpr_cn_5y, br_my, blr_my, tpb_br). |
| `start_date` | string | No | Start date for the data range (inclusive) in YYYY-MM-DD format, UTC. Cannot be combined with start_time. |
| `end_date` | string | No | End date for the data range (inclusive) in YYYY-MM-DD format, UTC. Cannot be combined with end_time. |
| `start_time` | number | No | Start time for the data range, specified as a UNIX timestamp in seconds. Alternative to start_date. |
| `end_time` | number | No | End time for the data range, specified as a UNIX timestamp in seconds. Alternative to end_date. |
| `page` | string | No | Pagination cursor. Pass the `next` value from a previous response to retrieve the following page of data points. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/interestratehistorical","method":"GET","query":{"rate":"<string>","start_date":"<string>","end_date":"<string>","start_time":"<number>","end_time":"<number>","page":"<string>"}}'
```

### Get location information for an IP address

Returns location information for an IP address. Requires an `address` in IPv4 form such as 73.9.149.180 or in IPv6 form.

`GET /v1/iplookup`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/iplookup

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `address` | string | Yes | IP Address to query. Must be in IPv4 format A.B.C.D (e.g., 73.9.149.180) or IPv6 format X:X:X:X:X:X:X:X (e.g., 2001:0db8:85a3:0000:0000:8a2e:0370:7334). |

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

### Get a random joke

Returns random jokes about pop culture, science, history and other topics. Set `limit` to return between 1 and 100 jokes; the default is 1.

`GET /v1/jokes`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/jokes

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `limit` | number | No | How many jokes to return. Must be between 1 and 100. Default is 1. (Default: 1) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/jokes","method":"GET","query":{"limit":"<number>"}}'
```

### Returns historical LIBOR rates for a specified tenor

Returns historical LIBOR rates for one tenor over an optional Unix timestamp range. Requires `type`: overnight, 1_month, 3_months, 6_months or 12_months.

`GET /v1/liborhistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/libor

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `type` | string | Yes | Tenor of the LIBOR rate. Must be one of: overnight, 1_month, 3_months, 6_months, 12_months (Allowed: overnight, 1_month, 3_months, 6_months, 12_months) |
| `start_time` | number | No | Start time for the data range, specified as a UNIX timestamp in seconds. |
| `end_time` | number | No | End time for the data range, specified as a UNIX timestamp in seconds. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/liborhistorical","method":"GET","query":{"type":"<string>","start_time":"<number>","end_time":"<number>"}}'
```

### Generate Lorem Ipsum Text

Returns one or more paragraphs of lorem ipsum placeholder text.

`GET /v1/loremipsum`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/loremipsum

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `max_length` | number | No | Maximum character length. (Default: 1000) |
| `paragraphs` | number | No | Number of paragraphs to generate. If unset, a default value of 1 will be used. (Default: 1) |
| `start_with_lorem_ipsum` | boolean | No | Whether to begin the text with the words 'Lorem ipsum'. Must be either true or false. If unset, a default value of true will be used. (Default: True) |
| `random` | boolean | No | Whether to randomly generate paragraphs. Must be either true or false. If unset, a default value of true will be used. (Default: True) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/loremipsum","method":"GET","query":{"max_length":"<number>","paragraphs":"<number>","start_with_lorem_ipsum":"<boolean>","random":"<boolean>"}}'
```

### Get market cap data for a given company ticker.

Returns real-time market capitalization data for a company listed on a major exchange. Requires a `ticker` such as NVDA.

`GET /v1/marketcap`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/marketcap

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | Stock ticker symbol (e.g., NVDA). |

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

### Calculate mortgage payments

Calculates monthly and annual mortgage payments and interest from a loan amount or home value and downpayment, plus optional HOA, tax and insurance. Requires `interest_rate`.

`GET /v1/mortgagecalculator`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/mortgagecalculator

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `loan_amount` | number | No | Principal loan amount. |
| `home_value` | number | No | Total value of the home or asset. Must be greater than downpayment. |
| `downpayment` | number | No | Downpayment on the home or asset. Cannot exceed home_value. |
| `interest_rate` | number | Yes | Annual interest rate (in %). For example, a 3.5% interest rate would be 3.5. Cannot exceed 10000. |
| `duration_years` | number | No | Duration of the loan in years. Must be between 1 and 10000. If not set, the default value is 30 years. (Default: 30) |
| `monthly_hoa` | number | No | Monthly homeowner association fees. |
| `annual_property_tax` | number | No | Annual property tax owed. |
| `annual_home_insurance` | number | No | Annual homeowner's insurance bill. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/mortgagecalculator","method":"GET","query":{"loan_amount":"<number>","home_value":"<number>","downpayment":"<number>","interest_rate":"<number>","duration_years":"<number>","monthly_hoa":"<number>","annual_property_tax":"<number>","annual_home_insurance":"<number>"}}'
```

### Get Mortgage Rate Data

Returns 30-year and 15-year fixed-rate mortgage (FRM) data. If no parameters are set, the mortgage rate data for the most recent day is returned.

`GET /v2/mortgagerate`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/mortgagerate

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `date` | string | No | Individual date to query in YYYY-MM-DD format. |
| `min_date` | string | No | Minimum date range to query in YYYY-MM-DD format. Must be used with max_date. |
| `max_date` | string | No | Maximum date range to query in YYYY-MM-DD format. Must be used with min_date. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/mortgagerate","method":"GET","query":{"date":"<string>","min_date":"<string>","max_date":"<string>"}}'
```

### Get a list of planets

Get a list of planets matching specified parameters. Returns at most 30 results. To access more than 30 results, use the offset parameter to offset results in multiple API calls.

`GET /v1/planets`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/planets

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | The name of the planet. |
| `min_mass` | number | No | Minimum mass of the planet in Jupiters. |
| `max_mass` | number | No | Maximum mass of the planet in Jupiters. |
| `min_radius` | number | No | Minimum average radius of the planet in Jupiters. |
| `max_radius` | number | No | Maximum average radius of the planet in Jupiters. |
| `min_period` | number | No | Minimum orbital period of the planet in Earth days. |
| `max_period` | number | No | Maximum orbital period of the planet in Earth days. |
| `min_temperature` | number | No | Minimum average surface temperature of the planet in Kelvin. |
| `max_temperature` | number | No | Maximum average surface temperature of the planet in Kelvin. |
| `min_distance_light_year` | number | No | Minimum distance the planet is from Earth in light years. |
| `max_distance_light_year` | number | No | Maximum distance the planet is from Earth in light years. |
| `min_semi_major_axis` | number | No | Minimum semi major axis of planet in astronomical units (AU). |
| `max_semi_major_axis` | number | No | Maximum semi major axis of planet in astronomical units (AU). |
| `offset` | number | No | Number of results to offset for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/planets","method":"GET","query":{"name":"<string>","min_mass":"<number>","max_mass":"<number>","min_radius":"<number>","max_radius":"<number>","min_period":"<number>","max_period":"<number>","min_temperature":"<number>","max_temperature":"<number>","min_distance_light_year":"<number>","max_distance_light_year":"<number>","min_semi_major_axis":"<number>","max_semi_major_axis":"<number>","offset":"<number>"}}'
```

### Look up a motor carrier by USDOT or MC number

Canonical FMCSA carrier profile. Provide exactly one of `dot` or `mc`. On this listing contact details (phone, fax, email), company officers, MCS-150 details, crash rate, cargo/operation classifications, equipment and hazmat fields are returned as an upgrade-notice string rather than data. Not a consumer report; may not be used for employment, credit, tenant screening or individual insurance underwriting.

`GET /v1/motorcarrier`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/motorcarrier

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `dot` | number | No | USDOT number. Provide either dot or mc. |
| `mc` | string | No | Docket number, with or without the MC/MX/FF prefix. Provide either dot or mc. |
| `min_bipd` | number | No | BI&PD threshold in dollars used by the criteria checks. (Default: 1000000) |
| `min_cargo` | number | No | Cargo coverage threshold in dollars used by the criteria checks. (Default: 100000) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/motorcarrier","method":"GET","query":{"dot":"<number>","mc":"<string>","min_bipd":"<number>","min_cargo":"<number>"}}'
```

### Search carriers by name or attributes

Find FMCSA motor carriers by name, location (state, city, zip) or status, with limit/offset paging.

`GET /v1/motorcarriersearch`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/motorcarrier

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Company name. Matching is prefix-based against a normalised form of the legal and DBA name. |
| `state` | string | No |  |
| `city` | string | No |  |
| `zip` | string | No |  |
| `status` | string | No | (Allowed: active, inactive, pending) |
| `limit` | number | No | (Default: 20) |
| `offset` | number | No | (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/motorcarriersearch","method":"GET","query":{"name":"<string>","state":"<string>","city":"<string>","zip":"<string>","status":"<string>","limit":"<number>","offset":"<number>"}}'
```

### Crash, inspection and BASIC results

Crash counts, out-of-service rates and public BASIC measures for a carrier. The BASIC trend (basics[].trend) and national-average comparison (inspections.*.national_average_pct) fields are not available on this listing.

`GET /v1/motorcarriersafety`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/motorcarrier

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `dot` | number | No | USDOT number. Provide either dot or mc. |
| `mc` | string | No | Docket number, with or without the MC/MX/FF prefix. Provide either dot or mc. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/motorcarriersafety","method":"GET","query":{"dot":"<number>","mc":"<string>"}}'
```

### Search motorcycles by make, model, and year

Returns technical specifications for motorcycle models matching a make, model and/or year, with partial matching on make and model and `offset` paging.

`GET /v1/motorcycles`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/motorcycles

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `make` | string | No | Name of manufacturer/brand. Supports partial matching. |
| `model` | string | No | Name of motorcycle model. Supports partial matching. |
| `year` | string | No | Release year of motorcycle model. Must be in the form of YYYY. |
| `offset` | number | No | Number of results to offset for pagination. Default is 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/motorcycles","method":"GET","query":{"make":"<string>","model":"<string>","year":"<string>","offset":"<number>"}}'
```

### Retrieve MX records for a domain

Returns the mail-exchange (MX) records for a `domain`, showing which servers accept its email. For other record types use /dnslookup.

`GET /v1/mxlookup`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/mxlookup

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | Valid domain to check (e.g. x.com). All top-level domains are supported. |

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

### Get population data

Get population data from given parameters. Returns a list of up to 5 country population statistics that satisfy the parameters. For more results use the offset parameter.

`GET /v1/population`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/population

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | No | Country name (case-insensitive) or 2-letter ISO-3166 alpha-2 code of the country. E.g. Japan or JP. |
| `min_population` | number | No | Minimum population of country. |
| `max_population` | number | No | Maximum population of country. |
| `offset` | number | No | Offset results for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/population","method":"GET","query":{"country":"<string>","min_population":"<number>","max_population":"<number>","offset":"<number>"}}'
```

### Get random quotes

Returns randomly chosen quotes, optionally filtered by category, author or work title. For stable paginated results use /quotes; for one fixed daily quote use /quoteoftheday.

`GET /v2/randomquotes`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/quotes

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `categories` | string | No | Comma-separated list of categories to include in results (results will match all of the categories). Example: categories=wisdom,success |
| `exclude_categories` | string | No | Comma-separated list of categories to exclude from results (results will not match any of the categories). Example: exclude_categories=love,philosophy |
| `author` | string | No | Filter quotes by author name (partial match supported). Example: author=Einstein |
| `work` | string | No | Filter quotes by work title (partial match supported). Example: work=War |
| `limit` | number | No | Number of random results to return. Must be between 1 and 100. Default is 1. (Default: 1) |
| `safe` | boolean | No | Set safe=true to exclude quotes flagged as sexually explicit, crude, or containing profanity, slurs, or offensive content. Defaults to false, so results are unfiltered unless you opt in. Filtering is best-effort and not a guarantee. Any value other than true/false returns an error. (Default: False) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/randomquotes","method":"GET","query":{"categories":"<string>","exclude_categories":"<string>","author":"<string>","work":"<string>","limit":"<number>","safe":"<boolean>"}}'
```

### Get Mutual Fund Information

Returns details for a mutual fund including holdings, expense ratio and assets under management. Look it up by `ticker` (e.g. VFIAX) or by `isin` (e.g. US9229087104); supply exactly one of the two. The trailing total-return `performance` block is returned as an upgrade-notice string on this listing.

`GET /v1/mutualfund`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/mutualfund

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Mutual fund ticker symbol (e.g., VFIAX, FXAIX, FZROX). Provide either ticker or isin, not both. |
| `isin` | string | No | International Securities Identification Number of the mutual fund share class (e.g., US9229087104). Provide either ticker or isin, not both. |

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

### Look up a NAICS code

Returns the official title, description, full hierarchy, index terms and cross-references for a NAICS code, or up to 50 codes in one request via `codes`. Pass crosswalk_to to also map the code to another NAICS revision or to SIC.

`GET /v1/naics`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/naicscode

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `code` | string | No | NAICS code, 2 to 6 digits. Required unless title is provided. |
| `codes` | string | No | Comma-separated NAICS codes for batch lookup (maximum 50). |
| `title` | string | No | Look up by official title. Supports partial matching. |
| `year` | string | No | NAICS revision. Currently 2022 only; NAICS 2027 is not published by the Census Bureau until January 2027. (Allowed: 2022) (Default: 2022) |
| `country` | string | No | Currently US only. NAICS Canada and SCIAN Mexico are not yet available. (Allowed: US) (Default: US) |
| `crosswalk_to` | string | No | Also map the code to an earlier NAICS revision. Currently 2017 only. The Census concordance covers 6-digit national industries. (Allowed: 2017) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/naics","method":"GET","query":{"code":"<string>","codes":"<string>","title":"<string>","year":"<string>","country":"<string>","crosswalk_to":"<string>"}}'
```

### Search NAICS codes by keyword

Ranked candidate codes for a keyword or phrase, matched against the 20,398-entry official Census index plus titles and descriptions. Returns every plausible code (up to 25) without applying classification rules.

`GET /v1/naicssearch`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/naicscode

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | Keyword or phrase describing an industry or activity. Limited to 300 characters. |
| `year` | string | No | NAICS revision. Currently 2022 only; NAICS 2027 is not published by the Census Bureau until January 2027. (Allowed: 2022) (Default: 2022) |
| `level` | number | No | Restrict results to codes of this digit length. |
| `limit` | number | No | Maximum results, up to 25. (Default: 5) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/naicssearch","method":"GET","query":{"query":"<string>","year":"<string>","level":"<number>","limit":"<number>"}}'
```

### Get nutrition information from text

Extracts nutrition data from free-form text, scaling values to any quantities mentioned. Requires `query`. For one food item with an explicit amount use /nutritionitem.

`GET /v1/nutrition`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/nutrition

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | Query text to extract nutrition information. |

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

### Get nutrition information for a single food item with a specific quantity

Returns nutrition data for a single food item at a stated amount. Requires `query` and `quantity` such as "1 cup". For free-form text with several foods use /nutrition.

`GET /v1/nutritionitem`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/nutrition

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `query` | string | Yes | A single string containing the food item to be queried. |
| `quantity` | string | Yes | A string indicating the quantity of the item in question. Supports various units of measurements (e.g., "1 cup", "2 lbs", "100g", "2 tbsp"). |

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

### SBA small-business size standard for a NAICS code

Returns the SBA size standard from 13 CFR 121.201 for a code (or up to 50 codes), and a small-business eligibility verdict when revenue or employees is supplied. The calculation basis, affiliation notes and exceptions fields are not available on this listing. Informational only; not an SBA size determination.

`GET /v1/naicssizestandard`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/naicscode

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `code` | string | No | NAICS code, 2 to 6 digits. Required unless title is provided. |
| `codes` | string | No | Comma-separated NAICS codes for batch lookup (maximum 50). |
| `revenue` | number | No | Annual receipts in USD. When supplied, the response includes a small-business eligibility verdict. |
| `employees` | number | No | Employee count. Used when the size standard for the code is employee-based. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/naicssizestandard","method":"GET","query":{"code":"<string>","codes":"<string>","revenue":"<number>","employees":"<number>"}}'
```

### Get historical oil / energy benchmark prices

Returns historical OHLCV (Open, High, Low, Close, Volume) data for an oil/energy benchmark, most recent first.

`GET /v1/oilpricehistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/oilprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `type` | string | No | The oil/energy benchmark. Defaults to wti. crude_oil, brent_crude_oil, gasoline_rbob, and heating_oil are also accepted as aliases. (Allowed: wti, brent, natural_gas, gasoline, diesel) (Default: wti) |
| `period` | string | No | Time interval between data points. (Allowed: 1m, 5m, 15m, 30m, 1h, 4h, 1d) (Default: 1h) |
| `start` | number | No | Start timestamp in Unix format. |
| `end` | number | No | End timestamp in Unix format. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/oilpricehistorical","method":"GET","query":{"type":"<string>","period":"<string>","start":"<number>","end":"<number>"}}'
```

### Generate a random password

Generates one random password of the requested length, optionally excluding numbers or special characters. Defaults to 16 characters when no length is given.

`GET /v1/passwordgenerator`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/passwordgenerator

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `length` | number | No | Length of password in characters. If not set, a default value of 16 is used. (Default: 16) |
| `exclude_numbers` | boolean | No | Whether to exclude numbers from the password. Must be either true or false. If not set, a default value of false will be used. (Default: False) |
| `exclude_special_chars` | boolean | No | Whether to exclude special characters(!@#$%^&*()) from the password. Must be either true or false. If not set, a default value of false will be used. (Default: False) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/passwordgenerator","method":"GET","query":{"length":"<number>","exclude_numbers":"<boolean>","exclude_special_chars":"<boolean>"}}'
```

### Look up carrier, line type, and network metadata for a phone number

Returns validity, country, region/location and formatting details for a phone `number`, with optional `country`. On this listing the carrier, line type, VoIP, disposable-number and MCC/MNC fields are returned as an upgrade-notice string rather than data. For format and validity checks only use /validatephone.

`GET /v1/phonelookup`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/phonelookup

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `number` | string | Yes | Phone number to look up. The leading '+' is optional. If country is not set, include the country code (e.g. 12065550100 or +12065550100). |
| `country` | string | No | 2-letter ISO-3166 country code the phone number belongs to. |

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

### Get the current oil / energy benchmark price

Returns the current real-time price for a crude oil or energy benchmark (one `type` per request), with optional currency and unit conversion and 52-week high/low.

`GET /v1/oilprice`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/oilprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `type` | string | No | The oil/energy benchmark to return. Defaults to wti. crude_oil, brent_crude_oil, gasoline_rbob, and heating_oil are also accepted as aliases. (Allowed: wti, brent, natural_gas, gasoline, diesel) (Default: wti) |
| `currency` | string | No | ISO 4217 currency code to convert the price into (e.g., EUR, GBP, INR). |
| `unit` | string | No | Target unit to convert the price into. Must match the benchmark's dimension: crude oil, gasoline, and diesel (volume) accept barrel, gallon, liter, or cubic_meter; natural_gas (energy) accepts MMBtu, MWh, GJ, or therm. (Allowed: barrel, gallon, liter, cubic_meter, MMBtu, MWh, GJ, therm) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/oilprice","method":"GET","query":{"type":"<string>","currency":"<string>","unit":"<string>"}}'
```

### Get rhyming words

Returns a list of rhyming words for any given word.

`GET /v1/rhyme`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/rhyme

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `word` | string | Yes | Word to look up. |

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

### Get the official daily spot price for an oil / energy benchmark

Returns the U.S. EIA's official daily spot price for the benchmark's physical hub, one `type` per request. The EIA publishes weekly, so the date field says which trading day the price is for.

`GET /v1/oilspot`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/oilprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `type` | string | No | The benchmark to return. Defaults to wti. crude_oil, brent_crude_oil, gasoline_rbob, and heating_oil are also accepted as aliases. (Allowed: wti, brent, natural_gas, gasoline, diesel) (Default: wti) |
| `currency` | string | No | ISO 4217 currency code to convert the price into (e.g., EUR, GBP, INR). |
| `unit` | string | No | Target unit to convert the price into. Must match the benchmark's dimension: crude oil, gasoline, and diesel (volume) accept barrel, gallon, liter, or cubic_meter; natural_gas (energy) accepts MMBtu, MWh, GJ, or therm. (Allowed: barrel, gallon, liter, cubic_meter, MMBtu, MWh, GJ, therm) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/oilspot","method":"GET","query":{"type":"<string>","currency":"<string>","unit":"<string>"}}'
```

### Detects and censors profanity in text.

Screens `text` for profanity and returns a censored version plus a flag indicating whether anything was found. Requires `text`.

`GET /v1/profanityfilter`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/profanityfilter

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `text` | string | Yes | Input text. Maximum 1000 characters. |

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

### Retrieve property tax rates

Returns effective property tax rates for locations in the United States, filtered by state, county, city, or ZIP code.

`GET /v1/propertytax`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/propertytax

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `state` | string | No | 2-letter abbreviation of the state (case-insensitive). |
| `county` | string | No | The name of the county for which property tax data is being requested. |
| `city` | string | No | Full name of the city to search (case-sensitive). |
| `zip` | string | No | The ZIP Code to look up property tax rates. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/propertytax","method":"GET","query":{"state":"<string>","county":"<string>","city":"<string>","zip":"<string>"}}'
```

### Check if a given date is a public holiday for a given country

Checks whether a given date is a public holiday in a country. Requires `country` and `date`. For a whole year of public holidays use /publicholidays.

`GET /v1/ispublicholiday`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/publicholidays

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | Yes | 2-letter ISO country code. |
| `date` | string | Yes | Date in YYYY-MM-DD format. Must be between 1980-01-01 and 2050-12-31 (inclusive). |

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

### Get postal code information

Returns details for a Canadian postal code, given as A1A1A1 or A1A 1A1, or searches by `city` and `province`.

`GET /v1/postalcode`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/postalcode

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `postal_code` | string | No | The postal code to look up. Accepts Canadian postal codes in 6 characters (A1A1A1) or 7 characters with a space (A1A 1A1). The space will be automatically normalized if not provided. |
| `city` | string | No | Full name of the city to search (case-sensitive). |
| `province` | string | No | 2-letter abbreviation of the province (e.g., ON, BC, QC). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/postalcode","method":"GET","query":{"postal_code":"<string>","city":"<string>","province":"<string>"}}'
```

### Get public holidays for a given country and year

Returns public holidays for a country and calendar year. Requires a `country`. To test whether one date is a public holiday use /ispublicholiday.

`GET /v1/publicholidays`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/publicholidays

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | Yes | 2-letter ISO country code or full country name. |
| `year` | number | No | Calendar year between 1980 and 2050 (inclusive). Defaults to current year. (Default: 2023) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/publicholidays","method":"GET","query":{"country":"<string>","year":"<number>"}}'
```

### Get quotes with pagination support (deterministic order)

Returns quotes in a deterministic, paginated order, filterable by category, author or work title. For a random selection instead use /randomquotes.

`GET /v2/quotes`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/quotes

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `categories` | string | No | Comma-separated list of categories to include in results (results will match all of the categories). Example: categories=wisdom,success |
| `exclude_categories` | string | No | Comma-separated list of categories to exclude from results (results will not match any of the categories). Example: exclude_categories=love,philosophy |
| `author` | string | No | Filter quotes by author name (partial match supported). Example: author=Einstein |
| `work` | string | No | Filter quotes by work title (partial match supported). Example: work=War |
| `limit` | number | No | Number of results to return. Must be between 1 and 100. Default is 1. (Default: 1) |
| `offset` | number | No | Number of results to skip for pagination. Default is 0. (Default: 0) |
| `safe` | boolean | No | Set safe=true to exclude quotes flagged as sexually explicit, crude, or containing profanity, slurs, or offensive content. Defaults to false, so results are unfiltered unless you opt in. Filtering is best-effort and not a guarantee. Any value other than true/false returns an error. (Default: False) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/quotes","method":"GET","query":{"categories":"<string>","exclude_categories":"<string>","author":"<string>","work":"<string>","limit":"<number>","offset":"<number>","safe":"<boolean>"}}'
```

### Get today's quote (same quote all day)

Returns a single quote of the day that stays the same for the whole day. Takes no parameters. For varying quotes use /randomquotes or /quotes.

`GET /v2/quoteoftheday`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/quotes

_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":"api-ninjas","path":"/v2/quoteoftheday","method":"GET"}'
```

### Get list of authors with multiple aphoristic quotes (premium only)

Lists authors who have multiple aphoristic quotes in the database, with limit and offset paging.

`GET /v2/quoteauthors`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/quotes

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `limit` | number | No | Maximum number of authors to return. Must be between 1 and 500. Default is 100. (Default: 100) |
| `offset` | number | No | Number of authors to skip. Used for pagination. Default is 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/quoteauthors","method":"GET","query":{"limit":"<number>","offset":"<number>"}}'
```

### Get fake random user profiles

Generates fake user profiles such as name, email, address and username for testing or placeholders, with count, gender, age, locale, field selection and seed options.

`GET /v2/randomuser`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/randomuser

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `count` | number | No | Number of users to generate (1-10000) (Default: 10) |
| `gender` | string | No | Filter by gender (Allowed: male, female, nonbinary, any) (Default: any) |
| `min_age` | number | No | Minimum age (0-115) (Default: 0) |
| `max_age` | number | No | Maximum age (0-115) (Default: 100) |
| `locale` | string | No | Locale for generating localized data (e.g., en_US, de_DE, fr_FR) (Default: en_US) |
| `fields` | string | No | Comma-separated list of fields to include. If not specified, all available fields are returned. |
| `exclude` | string | No | Comma-separated list of fields to exclude from the response |
| `seed` | string | No | Seed value for reproducible random data generation |
| `blank_percentage` | number | No | Percentage of fields to leave blank (0-100) (Default: 0) |
| `password_length` | number | No | Length of generated passwords (6-128) (Default: 12) |
| `nationality` | string | No | Nationality filter (Default: any) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/randomuser","method":"GET","query":{"count":"<number>","gender":"<string>","min_age":"<number>","max_age":"<number>","locale":"<string>","fields":"<string>","exclude":"<string>","seed":"<string>","blank_percentage":"<number>","password_length":"<number>","nationality":"<string>"}}'
```

### Returns a random word.

Returns one or more random words, optionally restricted to a part of speech: noun, verb, adjective, or adverb.

`GET /v2/randomword`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/randomword

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `type` | string | No | Type of word. Possible values are: noun, verb, adjective, adverb. (Allowed: noun, verb, adjective, adverb) |
| `limit` | number | No | How many results to return. Must be between 1 and 30. Default is 1. (Default: 1) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v2/randomword","method":"GET","query":{"type":"<string>","limit":"<number>"}}'
```

### Get a list of recipes

Get a list of recipes for a given recipe name or ingredient(s). Returns a list of recipes with nutrition information when available. To access more results, use the limit parameter to limit the number of results and the offset parameter to offset results for pagination in multiple API calls.

`GET /v3/recipe`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/recipe

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `title` | string | No | Recipe title to search for. |
| `ingredients` | string | No | Comma-separated list of ingredients to search for. |
| `limit` | number | No | Number of results to return. Must be between 1 and 10. If not set, a default value of 1 will be used. (Default: 1) |
| `offset` | number | No | Number of results to offset for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v3/recipe","method":"GET","query":{"title":"<string>","ingredients":"<string>","limit":"<number>","offset":"<number>"}}'
```

### Get Bank Information by Routing Number

Returns the US bank identified by a routing number. Requires a 9-digit `routing_number`. To find routing numbers by bank name or location instead use /routingnumbersearch.

`GET /v1/routingnumber`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/routingnumber

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `routing_number` | string | Yes | The 9-digit routing number of the bank to look up. |

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

### Calculates sales tax for a given amount and location.

Calculates US sales tax on a purchase amount for a location given by ZIP code or by city and state, returning the tax breakdown and total. Requires `amount`.

`GET /v1/salestaxcalculator`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/salestaxcalculator

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `amount` | number | Yes | Purchase amount to calculate tax on. |
| `zip_code` | string | No | Valid US ZIP code. |
| `city` | string | No | City name. |
| `state` | string | No | State name. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/salestaxcalculator","method":"GET","query":{"amount":"<number>","zip_code":"<string>","city":"<string>","state":"<string>"}}'
```

### Get company logos

Get a list of company names, ticker symbols, and logo image URLs matching the input parameters. Returns at most 10 results.

`GET /v1/logo`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/logo

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | Company name. Supports partial matching (e.g. 'Micro' will match 'Microsoft'). Case-insensitive. |
| `ticker` | string | No | Company ticker symbol (for publicly traded companies only). |

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

### Get Riddles

Returns one or more random riddles.

`GET /v1/riddles`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/riddles

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `limit` | number | No | Number of results to return. Must be between 1 and 20. Default is 1. (Default: 1) |
| `safe` | boolean | No | Set safe=true to exclude riddles flagged as sexually explicit, crude, or containing profanity, slurs, or offensive content. Defaults to false, so results are unfiltered unless you opt in. Filtering is best-effort and not a guarantee. Any value other than true/false returns an error. (Default: False) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/riddles","method":"GET","query":{"limit":"<number>","safe":"<boolean>"}}'
```

### Generate QR Code

Generates a QR Code image for the specified data.

`GET /v1/qrcode`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/qrcode

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `data` | string | Yes | Data to encode in the QR code. |
| `format` | string | Yes | Image format to return. Must be one of the following: png, jpg, jpeg, eps, svg. (Allowed: png, jpg, jpeg, eps, svg) |
| `size` | number | No | Size of the QR code image to generate. The output will be a square image with (size x size) dimensions. The default size is 250. (Default: 250) |
| `fg_color` | string | No | Foreground color of the QR code. Must be a 6-digit hex color (e.g. 00ff00 for green). Default is 000000 (black). (Default: 000000) |
| `bg_color` | string | No | Background color of the QR code. Must be a 6-digit hex color (e.g. 00ff00 for green). Default is ffffff (white). (Default: ffffff) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/qrcode","method":"GET","query":{"data":"<string>","format":"<string>","size":"<number>","fg_color":"<string>","bg_color":"<string>"}}'
```

### Get ZIP Code details

Returns a list of ZIP Code details matching the input parameters.

`GET /v1/zipcode`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/zipcode

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `zip` | string | No | The ZIP Code to look up. |
| `city` | string | No | Full name of the city to search (case-sensitive). |
| `state` | string | No | 2-letter abbreviation of the state (case-insensitive). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/zipcode","method":"GET","query":{"zip":"<string>","city":"<string>","state":"<string>"}}'
```

### Solve an existing Sudoku puzzle

Solves an existing Sudoku puzzle. Requires `puzzle` (a 2D JSON array as a string, 0 for empty cells) and the box `width` and `height`. To create a new puzzle use /sudokugenerate.

`GET /v1/sudokusolve`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/sudoku

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `puzzle` | string | Yes | 2D JSON array representing the puzzle, passed as a string, e.g. [[5,3,0,0,7,0,0,0,0],...]. Use 0 for empty cells. |
| `width` | number | Yes | Width of each box in the Sudoku grid. Must be between 2 and 4. |
| `height` | number | Yes | Height of each box in the Sudoku grid. Must be between 2 and 4. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/sudokusolve","method":"GET","query":{"puzzle":"<string>","width":"<number>","height":"<number>"}}'
```

### Validate an email address

Checks whether an `email` address is syntactically valid and has a deliverable mail domain. For disposable-address detection use /disposableemail.

`GET /v1/validateemail`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/validateemail

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `email` | string | Yes | Email address to validate. |

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

### Converts between different units of measurement.

Converts a numeric value from one unit of measurement to another. Requires `amount` and the source `unit`, with spaces written as underscores.

`GET /v1/unitconversion`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/unitconversion

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `amount` | number | Yes | The numerical value to convert. |
| `unit` | string | Yes | Full source unit name with spaces replaced by underscores, e.g. kilometer, mile, nautical_mile, liter, fluid_ounce, celsius, kilogram. Abbreviations like km are not accepted. See https://api-ninjas.com/api/unitconversion for the full list. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/unitconversion","method":"GET","query":{"amount":"<number>","unit":"<string>"}}'
```

### Get domain registration details

Returns WHOIS registration details for a `domain`, including registrar, creation and expiry dates. For risk and email-provider signals use /domain.

`GET /v1/whois`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/whois

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `domain` | string | Yes | Valid domain to check (e.g. example.com). |

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

### Get sales tax information by ZIP code, city, or state

Returns the sales tax rate and its breakdown for a US `zip_code`, or for a `street_address` with city and state for the most accurate result. For thresholds use /salestaxnexus.

`GET /v1/salestax`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/salestax

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `zip_code` | string | No | Valid US ZIP code. |
| `street_address` | string | No | Street address (e.g. 9641 Sunset Blvd). Used together with city and state for the most accurate lookup. |
| `city` | string | No | City name. |
| `state` | string | No | State name. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/salestax","method":"GET","query":{"zip_code":"<string>","street_address":"<string>","city":"<string>","state":"<string>"}}'
```

### US sales tax holidays: dates, eligible categories and price caps

Sales tax holidays for US states, with timezone-aware start and end timestamps, eligible item categories and per-item price caps.

Supply a date, category and amount to get an exemption determination for a single purchase. Where a state lets each locality opt in or out, the endpoint returns exempt: null with determination: 'indeterminate' and a required_input array rather than a flat true, because participation is not decidable from the state alone.

Price caps are per item in most states, not per transaction; cap_basis says which. Asking for a year the state has not yet published returns an empty result set with a coverage note, not an error and not last year's dates.

This is reference data, not tax advice.

`GET /v1/salestaxholidays`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/salestax

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `state` | string | No | Two-letter US state code or full state name (e.g. TX or Texas). Omit for a nationwide list. |
| `year` | number | No | Four-digit calendar year. Defaults to the current year. |
| `date` | string | No | ISO date (YYYY-MM-DD). Returns only holidays in effect on that date and adds an exemption determination. |
| `category` | string | No | Item category to test, e.g. clothing, school_supplies, computers, energy_star. An unknown category returns not_addressed rather than a guess. |
| `amount` | number | No | Item price to test against the holiday's price cap. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/salestaxholidays","method":"GET","query":{"state":"<string>","year":"<number>","date":"<string>","category":"<string>","amount":"<number>"}}'
```

### Search SEC Filings

Returns a list of SEC filing information (including the submission URL) corresponding to the given search parameters.

`GET /v1/sec`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/sec

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | Ticker symbol of the company to search (e.g. AAPL for Apple). |
| `filing` | string | Yes | SEC filing form type. (Allowed: 10-K, 10-Q, S-1, S-2, S-3, 8-K, DEF14A, 13D) |
| `start` | string | No | Start date to search. Must be in YYYY-MM-DD format (e.g. 2023-04-01). |
| `end` | string | No | End date to search. Must be in YYYY-MM-DD format (e.g. 2023-04-01). |
| `limit` | number | No | Number of results to return from 1 to 100. By default, up to 2 results are returned. (Default: 2) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/sec","method":"GET","query":{"ticker":"<string>","filing":"<string>","start":"<string>","end":"<string>","limit":"<number>"}}'
```

### Analyzes the sentiment of the provided text

Analyzes the sentiment of a piece of text and returns a sentiment result for it. Requires `text` of at most 2000 characters.

`GET /v1/sentiment`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/sentiment

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `text` | string | Yes | Query text for sentiment analysis. Maximum 2000 characters. |

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

### Screen a name against major government sanctions lists

Returns ranked matches for a `name` against government sanctions lists. On this listing screening covers the OFAC SDN and EU lists only, for individuals and entities; UK, UN and Australian lists and vessel/aircraft screening are not available, and `sources` values other than OFAC or EU are ignored rather than rejected. The list_versions and stale_data_warning fields are not available on this listing.

`GET /v1/sanctionsscreening`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/sanctionsscreening

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Name to screen. Full name, ordering doesn't matter. |
| `entity_type` | string | No | Restrict the screen to a specific entity type: individual or entity. (vessel and aircraft are not available on this listing.) |
| `country` | string | No | ISO 3166-1 alpha-2 country code to filter results by nationality/jurisdiction. |
| `dob` | string | No | Date of birth (YYYY-MM-DD) to filter individual matches. Loose match: ±1 year. |
| `nationality` | string | No | ISO 3166-1 alpha-2 nationality filter. |
| `sources` | string | No | Comma-separated subset of OFAC,EU to scope the screen to specific lists. Other list codes (UK, UN, AU) are not available on this listing and are ignored. |
| `min_score` | number | No | Minimum confidence score (0-100) to return. Default 70. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/sanctionsscreening","method":"GET","query":{"name":"<string>","entity_type":"<string>","country":"<string>","dob":"<string>","nationality":"<string>","sources":"<string>","min_score":"<number>"}}'
```

### Get short interest for a stock or ETF

Returns the latest bi-weekly short interest for a security plus history, enriched with short percent of outstanding and float, dollar notional short, a two-year percentile, and split-adjusted history back to 2017.

`GET /v1/shortinterest`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/shortinterest

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The stock or ETF ticker symbol (e.g., GME). |
| `settlement_date` | string | No | Return a specific settlement date in YYYY-MM-DD format. Short interest settles on the 15th and the last business day of each month. |
| `limit` | number | No | Number of historical settlement dates to return, 1 to 200. Defaults to 12. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/shortinterest","method":"GET","query":{"ticker":"<string>","settlement_date":"<string>","limit":"<number>"}}'
```

### Get the short interest settlement and publication calendar

Settlement dates, member reporting deadlines and FINRA publication dates. Short interest changes only 24 times a year, so this lets you schedule refreshes instead of polling.

`GET /v1/shortinterestcalendar`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/shortinterest

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `year` | number | No | Restrict to one calendar year (2018 onward). |
| `upcoming` | string | No | Set true to return only future, not-yet-published settlement dates in ascending order. (Allowed: true, false) |
| `limit` | number | No | Number of dates to return, 1 to 120. Defaults to 24 (one year). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/shortinterestcalendar","method":"GET","query":{"year":"<number>","upcoming":"<string>","limit":"<number>"}}'
```

### Get Trivia Questions

Returns a random trivia question and answer.

`GET /v1/trivia`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/trivia

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `category` | string | No | Category of trivia. The possible values are: artliterature, language, sciencenature, general, fooddrink, peopleplaces, geography, historyholidays, entertainment, toysgames, music, mathematics, religionmythology, sportsleisure. (Allowed: artliterature, language, sciencenature, general, fooddrink, peopleplaces, geography, historyholidays, entertainment, toysgames, music, mathematics, religionmythology, sportsleisure) |
| `limit` | number | No | How many results to return. Must be between 1 and 30. Default is 1. (Default: 1) |
| `safe` | boolean | No | Set safe=true to exclude questions flagged as sexually explicit, crude, or containing profanity or slurs. Defaults to false, so results are unfiltered unless you opt in. Filtering is best-effort and not a guarantee. Any value other than true/false returns an error. (Default: False) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/trivia","method":"GET","query":{"category":"<string>","limit":"<number>","safe":"<boolean>"}}'
```

### Get stock split records matching your filters

Returns historical and upcoming stock split records filtered by ticker, exchange, forward or reverse split type, and a single date or date range.

`GET /v1/stocksplit`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/stocksplit

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Company ticker symbol. For U.S.-listed stocks use the bare symbol (e.g. GOOG); for international listings include the exchange suffix as the symbol trades (e.g. 7203.T for Toyota on Tokyo, RELIANCE.NS for Reliance on NSE India). Returns that company's full split history. |
| `exchange` | string | No | Filter results to a single exchange by its code - for example US, JPX (Tokyo), LSE (London), HKSE (Hong Kong), or NSE (India). |
| `split_type` | string | No | Filter by split direction: forward (e.g. 4-for-1) or reverse (a consolidation, e.g. 1-for-10). (Allowed: forward, reverse) |
| `date` | string | No | Single date in YYYY-MM-DD format. Cannot be combined with date_start or date_end. |
| `date_start` | string | No | Range start in YYYY-MM-DD format. |
| `date_end` | string | No | Range end in YYYY-MM-DD format. |
| `limit` | number | No | Maximum results to return. Default 50, max 1000. |
| `offset` | number | No | Number of results to skip for pagination. Default 0. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/stocksplit","method":"GET","query":{"ticker":"<string>","exchange":"<string>","split_type":"<string>","date":"<string>","date_start":"<string>","date_end":"<string>","limit":"<number>","offset":"<number>"}}'
```

### Validate an EU VAT number.

Validates an EU VAT number by format, checksum, and live EU registry status, returning the registered company name and address. Requires a `vat` with country prefix.

`GET /v1/vatvalidation`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/vatvalidation

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `vat` | string | Yes | The VAT number to validate, with 2-letter country prefix (e.g. FR40303265045). Spaces, dots, and hyphens are tolerated. May omit the prefix when the country parameter is set. |
| `country` | string | No | Two-letter country code (e.g. DE). Optional when the vat parameter includes a country prefix. GR is accepted and canonicalized to EL. |
| `requester_vat` | string | No | Your own company's EU VAT number (with country prefix). Forces a live registry check and returns an official consultation_number as audit evidence. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/vatvalidation","method":"GET","query":{"vat":"<string>","country":"<string>","requester_vat":"<string>"}}'
```

### Get daily short sale volume

Reg SHO daily short sale volume — the portion of a day's OFF-EXCHANGE volume flagged as short sales. This is not short interest and not a percent of total market volume: FINRA covers only trades reported to its Trade Reporting Facilities, roughly 35-52% of consolidated volume. A ratio near 50% is normal and mostly reflects wholesalers filling retail buy orders from inventory. Updated every trading day, so it moves between bi-weekly short interest readings.

`GET /v1/shortvolume`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/shortinterest

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The stock or ETF ticker symbol (e.g., GME). |
| `limit` | number | No | Number of trading days to return, 1 to 250. Defaults to 30. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/shortvolume","method":"GET","query":{"ticker":"<string>","limit":"<number>"}}'
```

### Check US sales tax economic nexus thresholds and whether a seller has crossed them (premium only)

Returns economic nexus thresholds for US states. Call it with no sales figures as a reference lookup, or supply sales figures to get a determination. Omit the state parameter to evaluate all 50 states and DC in one call.

Any 'nexus' or 'no_nexus' determination is provable from the figures supplied. Where the inputs cannot settle the question, the endpoint returns 'indeterminate' with a required_input array rather than guessing, because states measure different quantities: taxable sales are a subset of retail sales, which are a subset of gross sales.

Economic nexus only. Physical presence is not evaluated. This is reference data, not tax advice.

`GET /v1/salestaxnexus`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/salestax

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `state` | string | No | Two-letter US state code or full state name (e.g. CA or California). Omit to evaluate all 50 states and DC. |
| `gross_sales` | number | No | All sales delivered into the state, including taxable, exempt and resale sales. |
| `retail_sales` | number | No | Sales delivered into the state excluding sales for resale. |
| `taxable_sales` | number | No | Sales delivered into the state excluding both resale and exempt sales. |
| `revenue` | number | No | Generic revenue figure. Use only when your figure is already stated on that state's own measure; otherwise prefer the specific parameters above. |
| `transactions` | number | No | Number of separate sales transactions delivered into the state. |
| `marketplace_sales` | number | No | The portion of the above sales that was facilitated by a marketplace. Required to get a definitive answer in states that exclude marketplace sales from the seller's own threshold. |
| `marketplace_transactions` | number | No | The portion of transactions facilitated by a marketplace. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/salestaxnexus","method":"GET","query":{"state":"<string>","gross_sales":"<number>","retail_sales":"<number>","taxable_sales":"<number>","revenue":"<number>","transactions":"<number>","marketplace_sales":"<number>","marketplace_transactions":"<number>"}}'
```

### Get UK Bank Branch Information by Sort Code

Looks up and validates a 6-digit UK sort code, returning its bank and branch details. Requires `sort_code`. To search by bank, city or postcode use /sortcodesearch.

`GET /v1/sortcode`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/sortcode

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `sort_code` | string | Yes | The 6-digit UK sort code, with or without hyphens (e.g. 20-00-00 or 200000). |

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

### Get a list of stars

Get a list of stars matching specified parameters. Returns at most 30 results. To access more than 30 results, use the offset parameter to offset results in multiple API calls.

`GET /v1/stars`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/stars

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | The name of the star. |
| `constellation` | string | No | The constellation that the star belongs to. |
| `min_apparent_magnitude` | number | No | Minimum apparent magnitude brightness of the star. |
| `max_apparent_magnitude` | number | No | Maximum apparent magnitude brightness of the star. |
| `min_absolute_magnitude` | number | No | Minimum absolute magnitude brightness of the star. |
| `max_absolute_magnitude` | number | No | Maximum absolute magnitude brightness of the star. |
| `min_distance_light_year` | number | No | Minimum distance the star is from Earth in light years. |
| `max_distance_light_year` | number | No | Maximum distance the star is from Earth in light years. |
| `offset` | number | No | Number of results to offset for pagination. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/stars","method":"GET","query":{"name":"<string>","constellation":"<string>","min_apparent_magnitude":"<number>","max_apparent_magnitude":"<number>","min_absolute_magnitude":"<number>","max_absolute_magnitude":"<number>","min_distance_light_year":"<number>","max_distance_light_year":"<number>","offset":"<number>"}}'
```

### Get stock exchange information

Returns stock exchange details matching a MIC, name, city, or country, including location, currency and number of listings. On this listing the trading-hours and open/closed status fields (market_open, market_close, is_market_open, closed_reason) are returned as null.

`GET /v1/stockexchange`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/stockexchange

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `mic` | string | No | Market Identifier Code (e.g., XNYS). |
| `name` | string | No | Stock exchange name (supports partial matching). |
| `city` | string | No | City where the exchange is located. |
| `country` | string | No | Country code in ISO2 format (e.g., US). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/stockexchange","method":"GET","query":{"mic":"<string>","name":"<string>","city":"<string>","country":"<string>"}}'
```

### Get SEC fails-to-deliver

Shares that did not settle on the contractual settlement date, published semi-monthly by the SEC. Persistent, large fails are the closest public signal to naked shorting. A security is listed only on dates it had a settlement failure, so an absent date means no material fails rather than no data.

`GET /v1/failstodeliver`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/shortinterest

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | The stock or ETF ticker symbol (e.g., GME). |
| `limit` | number | No | Number of records to return, 1 to 250. Defaults to 30. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/failstodeliver","method":"GET","query":{"ticker":"<string>","limit":"<number>"}}'
```

### Search for UK Bank Branches and Sort Codes

Finds UK bank branches and their sort codes by bank name, city or postcode. To look up a single sort code that is already known use /sortcode.

`GET /v1/sortcodesearch`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/sortcode

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `bank_name` | string | No | Bank name to search for. At least one of bank_name, city, or postcode is required. |
| `city` | string | No | City name to search for branches. |
| `postcode` | string | No | UK postcode (full or outward only, e.g. E14) to search for branches. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/sortcodesearch","method":"GET","query":{"bank_name":"<string>","city":"<string>","postcode":"<string>"}}'
```

### Checks spelling and provides corrections for any text.

Checks the spelling of `text` (up to 500 characters) and returns corrections.

`GET /v1/spellcheck`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/spellcheck

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `text` | string | Yes | Input text. Maximum 500 characters. |

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

### Get historical stock prices

Returns historical price bars for a stock at intervals from 1 minute to 1 day over an optional Unix `start`/`end` range. Requires a `ticker`. For the latest price use /stockprice.

`GET /v1/stockpricehistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/stockprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | Stock ticker symbol (e.g., AAPL). |
| `period` | string | No | Time interval between data points from 1 minute to 1 day. Valid values are: 1m, 5m, 15m, 30m, 1h, 4h, 1d. Default is 1h. (Allowed: 1m, 5m, 15m, 30m, 1h, 4h, 1d) (Default: 1h) |
| `start` | number | No | Start timestamp in Unix format. If not provided, defaults to approximately the most recent 900 data points for the chosen period. Data older than 5 years is not available on this listing. |
| `end` | number | No | End timestamp in Unix format. If not provided, defaults to current time. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/stockpricehistorical","method":"GET","query":{"ticker":"<string>","period":"<string>","start":"<number>","end":"<number>"}}'
```

### Get latest stock news headlines

Returns up to 50 of the latest stock-market news headlines, sorted most recent first. Optionally filter by one or more ticker symbols.

`GET /v1/stocknews`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/stocknews

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | No | Single ticker (e.g., AAPL) or comma-separated tickers (e.g., AAPL,MSFT). If omitted, the most recent news across all publishers is returned. |
| `offset` | number | No | Pagination offset. Each page has 50 results. Maximum 10000. (Default: 0) |
| `date` | string | No | Filter to a single calendar day (UTC). Format YYYY-MM-DD. Mutually exclusive with start_date/end_date. |
| `start_date` | string | No | Inclusive lower bound on published date (UTC). Format YYYY-MM-DD. |
| `end_date` | string | No | Inclusive upper bound on published date (UTC). Format YYYY-MM-DD. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/stocknews","method":"GET","query":{"ticker":"<string>","offset":"<number>","date":"<string>","start_date":"<string>","end_date":"<string>"}}'
```

### Get list of all available companies

Returns a list of all available companies and their ticker symbols. Supports pagination to retrieve results in batches.

`GET /v1/stockpricelist`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/stockprice

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `offset` | number | No | Number of results to offset for pagination. Default is 0. (Default: 0) |
| `limit` | number | No | Number of results to return. Must be between 1 and 1000. Default is 100. (Default: 100) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/stockpricelist","method":"GET","query":{"offset":"<number>","limit":"<number>"}}'
```

### Generate User Agent String

Generates a user agent string, optionally matching a device `brand`, `model`, `os` and `browser`. To parse an existing user agent string instead use /v2/useragentparse.

`GET /v1/useragentgenerate`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/useragent

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `brand` | string | No | Device brand (e.g. Apple, Samsung) |
| `model` | string | No | Device model (e.g. iPhone, Galaxy) |
| `os` | string | No | Operating system (e.g. Windows, iOS, Android) |
| `browser` | string | No | Browser name (e.g. Chrome, Firefox, Safari) |

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

### Generate a new Sudoku puzzle

Generates a new Sudoku puzzle at a chosen box width, height, difficulty and optional seed for reproducible output. To solve an existing puzzle use /sudokusolve.

`GET /v1/sudokugenerate`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/sudoku

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `width` | number | No | Width of each box in the Sudoku grid. Default is 3. Must be between 2 and 4. (Default: 3) |
| `height` | number | No | Height of each box in the Sudoku grid. Default is 3. Must be between 2 and 4. (Default: 3) |
| `difficulty` | string | No | Difficulty level of the puzzle. Possible values: easy, medium, hard. Default is medium. (Allowed: easy, medium, hard) (Default: medium) |
| `seed` | string | No | Seed value for reproducible puzzle generation. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/sudokugenerate","method":"GET","query":{"width":"<number>","height":"<number>","difficulty":"<string>","seed":"<string>"}}'
```

### Find SWIFT Codes

Returns bank information (including SWIFT/BIC code) matching a SWIFT code, bank name, city or country. Returns at most 100 results; pagination beyond the first page is not available on this listing.

`GET /v1/swiftcode`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/swiftcode

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `swift` | string | No | The SWIFT Code of the bank to look up. |
| `bank` | string | No | The name of the bank to look up. This parameter supports partial matching (e.g., Silicon Valley will match Silicon Valley Bank). |
| `city` | string | No | Name of the city in which the bank is located. |
| `country` | string | No | ISO 3166 2-letter country code of the bank's country. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/swiftcode","method":"GET","query":{"swift":"<string>","bank":"<string>","city":"<string>","country":"<string>"}}'
```

### Detects the language of the given text.

Detects which language a text is written in, across over 50 supported languages. Requires `text` of at most 1000 characters.

`GET /v1/textlanguage`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/textlanguage

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `text` | string | Yes | Input text (10 words or more recommended). Maximum 1000 characters. |

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

### Compute text similarity score

Returns a similarity score between 0 and 1 (1 is similar and 0 is dissimilar) of two given texts.

`POST /v1/textsimilarity`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/textsimilarity

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `text_1` | string | Yes | First input text. Maximum 5000 characters. |
| `text_2` | string | Yes | Second input text. Maximum 5000 characters. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/textsimilarity","body":{"text_1":"<string>","text_2":"<string>"}}'
```

### Get synonyms and antonyms for a word

Returns the synonyms (similar words) and antonyms (opposite meanings) of a single English word. Requires a `word` to look up.

`GET /v1/thesaurus`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/thesaurus

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `word` | string | Yes | Word to look up. |

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

### Get detailed company profile information for any given ticker symbol

Returns the company profile for a ticker symbol, including executive details, financial metrics, identifiers, and contact information. Requires a `ticker`.

`GET /v1/ticker`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/ticker

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `ticker` | string | Yes | Stock ticker symbol (e.g., AAPL). |

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

### Search for ticker symbols by company name

Searches ticker symbols by company name, with optional negative keywords to exclude matches. Requires a `name`. For the full profile of a symbol use /ticker.

`GET /v1/tickersearch`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/ticker

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Company name to search for (e.g., Apple). |
| `negative_keywords` | string | No | Comma-separated list of keywords to filter out from results. If any negative keyword appears in a company name (case-insensitive), that result will be excluded (e.g., pineapple,appleseed). |

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

### Get timezone info by city/state/country or location coordinates.

Returns the IANA timezone and current local time for a location given as `lat`/`lon`, `city`, or an explicit `timezone` name.

`GET /v1/timezone`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/timezone

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `timezone` | string | No | Timezone name. |
| `lat` | string | No | Latitude of desired location. |
| `lon` | string | No | Longitude of desired location. |
| `city` | string | No | City name. |
| `state` | string | No | US state (for United States cities only). |
| `country` | string | No | Country name. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/timezone","method":"GET","query":{"timezone":"<string>","lat":"<string>","lon":"<string>","city":"<string>","state":"<string>","country":"<string>"}}'
```

### Get Trivia of the Day

Returns a single trivia question and answer for the current day. The same question is returned for all requests on the same day, and changes each day. No filtering parameters are available for this endpoint to ensure everyone sees the same trivia of the day. Questions flagged as explicit are always excluded here.

`GET /v1/triviaoftheday`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/trivia

_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":"api-ninjas","path":"/v1/triviaoftheday","method":"GET"}'
```

### Get unemployment data for a given country.

Returns national unemployment rates, optionally filtered by `country` and `year`. Omit both to retrieve the latest figures across countries.

`GET /v1/unemployment`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/unemployment

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | No | Country name (case-insensitive) or 2-letter ISO-3166 alpha-2 code of the country. E.g. 'Canada' or 'CA'. |
| `year` | number | No | Year for which to retrieve unemployment data. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/unemployment","method":"GET","query":{"country":"<string>","year":"<number>"}}'
```

### Get the current (or a specific day's) Treasury yield curve.

Returns the US Treasury yield curve for one day, latest by default: par, real (TIPS) or bill rates with spreads, or all curves combined. For a date range use /treasuryyieldhistorical.

`GET /v1/treasuryyield`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/treasuryyield

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `type` | string | No | Curve type: par (default), real, bill, or all (combined). (Allowed: par, real, bill, all) (Default: par) |
| `date` | string | No | Business day (YYYY-MM-DD). Defaults to latest. |
| `format` | string | No | json (default) or csv. (Allowed: json, csv) (Default: json) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/treasuryyield","method":"GET","query":{"type":"<string>","date":"<string>","format":"<string>"}}'
```

### Lookup location information for a URL

Returns location information for a URL or domain name, including coordinates, city, country, and ISP details. Requires a `url`, with or without a scheme.

`GET /v1/urllookup`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/urllookup

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | Valid URL to check. It supports schemes (e.g. http://example.com) as well as schemeless (e.g. example.com) formats. |

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

### Parse User Agent String

Parses a user agent string to extract device, OS, and browser information. All response fields are top-level. Invalid or unrecognized user agents return HTTP 200 with is_valid false and invalid_reason set, and still return whatever browser, OS and device information could be parsed. A version newer than the latest known release is reported in warnings rather than treated as invalid.

`GET /v2/useragentparse`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/useragent

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `useragent` | string | Yes | User agent string to parse. |

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

### Get a historical Treasury yield time series.

Returns a Treasury yield time series over a date range for the par, real or bill curve, for one `maturity` or the whole curve. For a single day use /treasuryyield.

`GET /v1/treasuryyieldhistorical`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/treasuryyield

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `type` | string | No | Curve type: par (default), real, or bill. (Allowed: par, real, bill) (Default: par) |
| `maturity` | string | No | Single maturity code (e.g. year_10, week_13). Omit for full-curve history. |
| `start_date` | string | No | Start of range (YYYY-MM-DD). |
| `end_date` | string | No | End of range (YYYY-MM-DD). |
| `format` | string | No | json (default) or csv. (Allowed: json, csv) (Default: json) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/treasuryyieldhistorical","method":"GET","query":{"type":"<string>","maturity":"<string>","start_date":"<string>","end_date":"<string>","format":"<string>"}}'
```

### Get information about universities and colleges worldwide

Returns institutions matching the provided filters, closest name matches first, then by enrollment (largest first). At least one filter parameter (excluding offset/limit) is required. Closed institutions are excluded unless status is set.

`GET /v1/university`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/university

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | No | The name of the institution to search for. Partial match, case- and accent-insensitive (e.g., "Harvard" matches "Harvard University"). Also matches native-language names (e.g., 東京大学), acronyms (e.g., UNAM), former names, and the names of schools within a university (e.g., "Harvard Law School" returns Harvard University). At least one filter parameter (excluding offset/limit) must be provided. |
| `country` | string | No | The country to filter by: an English country name or an ISO 3166 two- or three-letter code (e.g., Germany, DE or DEU). Case-insensitive. USA also returns US territories such as Puerto Rico and Guam. At least one filter parameter (excluding offset/limit) must be provided. |
| `city` | string | No | The city where the institution is located. |
| `state` | string | No | The state, province or region where the institution is located, as a code (e.g., MA, ON) or a name (e.g., Bavaria). |
| `region` | string | No | Same as state. |
| `domain` | string | No | An email domain or email address (e.g., student.mit.edu or jane@ox.ac.uk). Returns the institutions that use the domain; subdomains are matched to their parent domain. Main institutions are listed before their campuses and affiliated units. |
| `level` | string | No | The type of institution. (Allowed: university, college, polytechnic, community_college, vocational, specialized) |
| `control` | string | No | Ownership. private means private with unknown profit status. (Allowed: public, private_nonprofit, private_forprofit, private) |
| `recognition` | string | No | Set to recognized to return only institutions listed by a national education registry (e.g., IPEDS in the US, AISHE in India). (Allowed: recognized) |
| `status` | string | No | active (default), closed, or all. Closed institutions have stopped operating or merged into another institution. (Allowed: active, closed, all) (Default: active) |
| `id` | number | No | Return a single institution by its id (from a previous response). Closed institutions are included. |
| `min_faculty_ratio` | number | No | Minimum student-to-faculty ratio as a number (e.g., 15 for 15:1 ratio). US institutions only. |
| `max_faculty_ratio` | number | No | Maximum student-to-faculty ratio as a number (e.g., 20 for 20:1 ratio). US institutions only. |
| `min_enrolled` | number | No | Minimum number of enrolled students. |
| `max_enrolled` | number | No | Maximum number of enrolled students. |
| `min_tuition` | number | No | Minimum published annual tuition and fees (in USD). US institutions only. |
| `max_tuition` | number | No | Maximum published annual tuition and fees (in USD). US institutions only. |
| `offset` | number | No | The number of results to skip. Must be zero or a positive integer. Default is 0. (Default: 0) |
| `limit` | number | No | The maximum number of results to return. Must be between 1 and 30. (Default: 10) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/university","method":"GET","query":{"name":"<string>","country":"<string>","city":"<string>","state":"<string>","region":"<string>","domain":"<string>","level":"<string>","control":"<string>","recognition":"<string>","status":"<string>","id":"<number>","min_faculty_ratio":"<number>","max_faculty_ratio":"<number>","min_enrolled":"<number>","max_enrolled":"<number>","min_tuition":"<number>","max_tuition":"<number>","offset":"<number>","limit":"<number>"}}'
```

### Validate a phone number and get its metadata

Validates a phone `number` and returns its normalised format, country and location. For carrier and line type use /phonelookup.

`GET /v1/validatephone`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/validatephone

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `number` | string | Yes | Phone number to check. The leading '+' is optional. If country is not set, include the country code (e.g. 12065550100 or +12065550100). |
| `country` | string | No | 2-letter ISO-3166 country code the phone number belongs to. |

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

### Get VAT rates for a specified EU country.

Returns current and historical VAT rates for a European Union country, filterable by rate type and date range. Requires a two-letter ISO `country` code.

`GET /v1/vat`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/vat

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | Yes | Two-letter country code (ISO 3166-1 alpha-2). |
| `type` | string | No | VAT rate type. (Allowed: standard, reduced, super_reduced, exempted, parking) |
| `min_date` | string | No | Filter results after this date (YYYY-MM-DD format). |
| `max_date` | string | No | Filter results before this date (YYYY-MM-DD format). |
| `limit` | number | No | Number of results to return (1-30). Default is 5. (Default: 5) |
| `offset` | number | No | Number of results to offset for pagination. Default is 0. (Default: 0) |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/vat","method":"GET","query":{"country":"<string>","type":"<string>","min_date":"<string>","max_date":"<string>","limit":"<number>","offset":"<number>"}}'
```

### Lookup vehicle information by VIN

Decodes a Vehicle Identification Number and returns the vehicle's details. Requires a `vin` that is exactly 17 characters long.

`GET /v1/vinlookup`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/vinlookup

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `vin` | string | Yes | Valid VIN to check. Must be a 17-character string. |

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

### Get the complete weather icon catalog (Premium only)

Returns every light/dark SVG and 64/128/256-pixel PNG URL for the 74 weather icons, plus all 55 condition-code mappings. No parameters required.

`GET /v1/weathericons`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/weather

_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":"api-ninjas","path":"/v1/weathericons","method":"GET"}'
```

### Scrape data from a specified URL

Fetches a `url` and returns its contents, with `text_only` to strip markup. For the page title and metadata alone use /webpage.

`GET /v1/webscraper`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/webscraper

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | URL to scrape. |
| `text_only` | boolean | No | Whether to only extract visible text (ignores HTML tags and metadata). (Default: False) |
| `user_agent` | string | No | User-Agent string to use in the request header. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/webscraper","method":"GET","query":{"url":"<string>","text_only":"<boolean>","user_agent":"<string>"}}'
```

### Retrieve web page metadata

Returns the URL information and web page metadata from a given URL.

`GET /v1/webpage`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/webpage

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `url` | string | Yes | URL to retrieve information from. |

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

### Get current weather data

Get current weather, wind speed and direction, humidity, and temperature data by city, ZIP code, or geolocation coordinates (latitude/longitude). One of the following parameter combinations must be provided: lat and lon; or city, state (optional), and country (optional).

`GET /v1/weather`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/weather

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `lat` | string | No | Latitude of desired location. |
| `lon` | string | No | Longitude of desired location. |
| `zip` | string | No | 5 digit Zip code (United States only). |
| `city` | string | No | City name. |
| `state` | string | No | US state (for United States cities only). |
| `country` | string | No | Country name. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/weather","method":"GET","query":{"lat":"<string>","lon":"<string>","zip":"<string>","city":"<string>","state":"<string>","country":"<string>"}}'
```

### Get a 5-day weather forecast in 3-hour intervals

Returns a 5-day weather forecast in 3-hour intervals for a given city. One of the following parameter combinations must be provided: lat and lon; zip; or city, state (optional), and country (optional).

`GET /v1/weatherforecast`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/weather

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `lat` | string | No | Latitude of desired location. |
| `lon` | string | No | Longitude of desired location. |
| `zip` | string | No | 5 digit Zip code (United States only). |
| `city` | string | No | City name. |
| `state` | string | No | US state (for United States cities only). |
| `country` | string | No | Country name. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/weatherforecast","method":"GET","query":{"lat":"<string>","lon":"<string>","zip":"<string>","city":"<string>","state":"<string>","country":"<string>"}}'
```

### Get working and non-working days

Returns the working and non-working days for a country across a year or a single month, with configurable weekends. Requires `country`. For one date use /isworkingday.

`GET /v1/workingdays`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/workingdays

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | Yes | 2-letter ISO country code. |
| `year` | number | No | Calendar year between 1980 and 2050 (inclusive). By default, the current year is used. |
| `month` | number | No | Month number (1-12). If provided, returns data for just that month. |
| `weekend` | string | No | Comma-separated list of weekend days (mon, tue, wed, thu, fri, sat, sun). |
| `public_holidays` | boolean | No | Whether to include public holidays as non-working days (true/false). Defaults to true. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/workingdays","method":"GET","query":{"country":"<string>","year":"<number>","month":"<number>","weekend":"<string>","public_holidays":"<boolean>"}}'
```

### Check if a specific date is a working day

Reports whether one specific date is a working day in a given country. Requires `country` and `date`. For a whole month or year use /workingdays.

`GET /v1/isworkingday`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/workingdays

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `country` | string | Yes | 2-letter ISO country code. |
| `date` | string | Yes | Date in YYYY-MM-DD format. Must be between 1980-01-01 and 2050-12-31 (inclusive). |
| `weekend` | string | No | Comma-separated list of weekend days (mon,tue,wed,thu,fri,sat,sun). |
| `public_holidays` | boolean | No | Whether to include public holidays as non-working days (true/false). Defaults to true. |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/isworkingday","method":"GET","query":{"country":"<string>","date":"<string>","weekend":"<string>","public_holidays":"<boolean>"}}'
```

### Get the current date and time

Get the current date and time by city/state/country, location coordinates (latitude/longitude), or timezone.

`GET /v1/worldtime`

**Estimated cost:** $0.001

**Docs:** https://api-ninjas.com/api/worldtime

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `lat` | string | No | Latitude of desired location. |
| `lon` | string | No | Longitude of desired location. |
| `city` | string | No | City name. |
| `state` | string | No | US state (for United States cities only). |
| `country` | string | No | Country name. |
| `timezone` | string | No | Timezone name (e.g. Europe/London). |

```bash
curl -X POST 'https://api.orthogonal.com/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"api-ninjas","path":"/v1/worldtime","method":"GET","query":{"lat":"<string>","lon":"<string>","city":"<string>","state":"<string>","country":"<string>","timezone":"<string>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/api-ninjas
