> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to API Ninjas

The API Ninjas connector lets your AI agent act in each user's API Ninjas account. Each user connects their own API Ninjas API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 38 tools.

**Authentication:** API Key
**Categories:** Developer Tools, Productivity
**Tools:** 38: 37 read, 1 write, 0 destructive
**Users sign in with:** API key
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=APININJAS)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the API Ninjas connection

   In **AgentKit > Connections**, create an API Ninjas connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'apininjas'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize API Ninjas:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'apininjas_get_inflation',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "apininjas"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize API Ninjas:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="apininjas_get_inflation",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their API Ninjas credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'apininjas_analyze_sentiment',
  toolInput: {
    text: '<text>',
  },
  connector: 'apininjas',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="apininjas_analyze_sentiment",
    tool_input={
        "text": "<text>",
    },
    connection_name="apininjas",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `apininjas_analyze_sentiment`

Analyze Sentiment · Read-only

Score the sentiment of a piece of text.
Returns text, score from -1 (most negative) to 1 (most positive) and sentiment: POSITIVE, WEAK_POSITIVE, NEUTRAL, WEAK_NEGATIVE or NEGATIVE.
Use apininjas_analyze_sentiment for tone. Use apininjas_filter_profanity to find offensive words.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `text` (`string`, required): Text to analyse, up to 2000 characters. Example: The delivery was late but the support team was fantastic.

Example input: `{"text":"<text>"}`

### `apininjas_check_domain`

Check Domain Availability · Read-only

Check whether a domain is available to register, with basic registration and risk details.
Returns domain, available, creation and expiration dates (Unix time), age in days and registrar. Update date, EPP status, MX presence, free-email, disposable and risky-TLD flags are Premium; IP, hosting provider and country need the Business tier. Domains outside .com need a paid (Premium) plan.
Use apininjas_check_domain to test availability. Use apininjas_lookup_whois for the full registration record.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `domain` (`string`, required): Domain name to check, without a scheme. Example: github.com. Domains outside .com need a paid (Premium) plan.

Example input: `{"domain":"<domain>"}`

### `apininjas_check_holiday`

Check Holiday On Date · Read-only

List the holidays that fall on one date, in one country or worldwide.
Returns an array of holidays with country, ISO code, year, date, day of week, name and type; an empty array means no holiday. Dates in future calendar years are Premium only.
Use apininjas_check_holiday to test a single date. Use apininjas_list_holidays for a full year.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `date` (`string`, required): Date in YYYY-MM-DD format. Future calendar years are Premium only. Example: 2026-12-25.
- `country` (`string`, optional): Country as a 2-letter ISO 3166 code (preferred), a 3-letter code or an English name. Omit for holidays in every country. Example: GB.

Example input: `{"date":"<date>"}`

### `apininjas_convert_currency`

Convert Currency · Read-only

Convert an amount of money from one currency to another at the current rate.
Returns old_amount, old_currency, new_amount, new_currency and a Unix timestamp. Free keys use once-daily rates; paid plans use real-time rates.
Use apininjas_convert_currency to convert an amount. Use apininjas_get_exchange_rate for the rate alone.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `amount` (`number`, required): Amount of the from-currency to convert. Example: 250.
- `have` (`string`, required): 3-letter ISO 4217 code of the currency you are converting from. Example: USD.
- `want` (`string`, required): 3-letter ISO 4217 code of the currency you are converting to. Example: EUR.

Example input: `{"amount":250,"have":"<have>","want":"<want>"}`

### `apininjas_convert_units`

Convert Units · Read-only

Convert an amount from one unit into every other unit of the same measurement type.
Returns type (for example length or temperature), the source unit and amount, and conversions, an object mapping each unit of that type to the converted value.
Use apininjas_convert_units for physical units. Use apininjas_convert_currency for money.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `amount` (`number`, required): Value to convert. Example: 5.
- `unit` (`string`, required): Source unit, lower case with spaces written as underscores. Examples: meter, kilometer, mile, foot, inch, liter, gallon, square_meter, acre, celsius, fahrenheit, kelvin, kilogram, pound, ounce.

Example input: `{"amount":5,"unit":"<unit>"}`

### `apininjas_decode_vin`

Decode VIN · Read-only

Decode a 17-character Vehicle Identification Number, or a Japanese chassis number, into the vehicle's origin and model year.
Returns vin, country and region of manufacture, model year and the WMI, VDS and VIS sections. Manufacturer, model and body class are Premium fields.
Use apininjas_decode_vin for one specific vehicle. Use apininjas_search_cars to browse model specifications.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `vin` (`string`, required): 17-character VIN, or a Japanese chassis (frame) number such as ZVW30-1234567. Example: JHMCM56557C404453.

Example input: `{"vin":"<vin>"}`

### `apininjas_define_word`

Define Word · Read-only

Look up the dictionary definition of an English word.
Returns word, definition (one text block that can hold several numbered senses) and valid, which is false when the word is not in the dictionary.
Use apininjas_define_word for meanings. Use apininjas_get_synonyms for similar and opposite words.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `word` (`string`, required): English word to define. Example: serendipity.

Example input: `{"word":"<word>"}`

### `apininjas_detect_language`

Detect Language · Read-only

Detect which language a piece of text is written in, across more than 50 languages.
Returns iso (2-letter ISO 639-1 code) and language (the language's full name).
Use apininjas_detect_language to identify a language.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `text` (`string`, required): Text to analyse, up to 1000 characters. Ten words or more gives the best results. Example: Bonjour, comment allez-vous aujourd'hui ?

Example input: `{"text":"<text>"}`

### `apininjas_filter_profanity`

Filter Profanity · Read-only

Check text for profanity and get a censored copy.
Returns original, censored (profane words replaced with asterisks) and has_profanity.
Use apininjas_filter_profanity to screen or clean text. Use apininjas_analyze_sentiment to score tone.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `text` (`string`, required): Text to check, up to 1000 characters. Example: That was a damn good game.

Example input: `{"text":"<text>"}`

### `apininjas_geocode`

Geocode Place · Read-only

Convert a city name, optionally narrowed by state, country or US ZIP code, into latitude and longitude.
Returns an array of matching places with name, latitude, longitude, country, state, IANA timezone, population and country details (currency, calling code, languages). Climate zone, urbanisation, nearest airport, county and area codes are Premium fields.
Use apininjas_geocode to turn a place name into coordinates, for example before apininjas_get_weather on a free key. Use apininjas_reverse_geocode for the opposite direction.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `city` (`string`, required): Name of the city or place to look up. Example: London.
- `country` (`string`, optional): Country to narrow the match, as a name, 2-letter ISO code or 3-letter ISO code. Example: GB.
- `state` (`string`, optional): US state, for United States cities only. Example: Texas.
- `zipcode` (`string`, optional): 5-digit US ZIP code, for United States cities only. Example: 73301.

Example input: `{"city":"<city>"}`

### `apininjas_get_crypto_price`

Get Crypto Price · Read-only

Get the current price of a cryptocurrency trading pair.
Returns symbol, price and a Unix timestamp. Quoting a coin in a fiat currency (for example BTCEUR) is Premium only.
Use apininjas_get_crypto_price for cryptocurrencies. Use apininjas_get_stock_price for stocks and indices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `symbol` (`string`, required): Trading pair symbol, the coin followed by the quote asset with no separator. Example: BTCUSDT or ETHUSDT. Fiat quotes such as BTCEUR are Premium only.

Example input: `{"symbol":"<symbol>"}`

### `apininjas_get_exchange_rate`

Get Exchange Rate · Read-only

Get the current exchange rate between two currencies.
Returns currency_pair, exchange_rate and a Unix timestamp. Free keys get once-daily rates; paid plans get real-time rates.
Use apininjas_get_exchange_rate for the rate itself. Use apininjas_convert_currency to convert a specific amount.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `pair` (`string`, required): Currency pair as two 3-letter ISO 4217 codes joined by an underscore, base first. Example: USD_EUR.

Example input: `{"pair":"<pair>"}`

### `apininjas_get_inflation`

Get Inflation · Read-only

Get the latest monthly and annual inflation rates for one country or all covered countries. Premium only: needs a paid API Ninjas plan.
Returns an array with country, country code, indicator type (CPI or HICP), period, monthly rate and yearly rate in percent.
Use apininjas_get_inflation for price inflation. Use apininjas_get_interest_rate for central bank and benchmark rates.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, optional): Country as a 2-letter ISO 3166 code or an English name, case-insensitive. Omit to return every covered country. Example: US.
- `type` (`string`, optional): Inflation indicator: CPI (Consumer Price Index) or HICP (Harmonised Index of Consumer Prices). Defaults to CPI. One of: `CPI`, `HICP`.

Example input: `{}`

### `apininjas_get_interest_rate`

Get Interest Rate · Read-only

Get the latest value of a central bank, benchmark or prime lending rate.
Returns rate_name, rate_pct, last_updated, rate_type and, for prime and averaged rates, the source and bank count.
Use apininjas_get_interest_rate for policy and benchmark rates. Use apininjas_get_inflation for inflation.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `rate` (`string`, required): Identifier of the rate. Central banks use central_bank_<country>, for example central_bank_us, central_bank_eu, central_bank_gb or central_bank_in. Benchmarks include sofr, effr, sonia, ester and euribor_3_months. Prime rates include prime_us and prime_ca.

Example input: `{"rate":"<rate>"}`

### `apininjas_get_nutrition`

Get Nutrition Facts · Read-only

Get nutrition facts for foods described in plain text, scaled to any amounts mentioned.
Returns an array with one entry per food: name, serving size in grams, total and saturated fat, sodium, potassium, cholesterol, carbohydrates, fiber and sugar. Calories, protein, added sugars, net carbs, minerals, vitamins and an image URL are Premium fields.
Use apininjas_get_nutrition for foods and meals. Use apininjas_search_recipes to find recipes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): Foods to analyse, separated by commas, new lines, semicolons or 'and', each with an optional amount. Example: 1lb brisket and fries.

Example input: `{"query":"<query>"}`

### `apininjas_get_stock_price`

Get Stock Price · Read-only

Get the latest price of a stock or market index by ticker symbol.
Returns ticker, name, price, currency, exchange, volume, previous close, change and the Unix time the price was struck. Free keys get the last session's closing price; paid plans get live prices during market hours.
Use apininjas_get_stock_price for equities and indices. Use apininjas_get_crypto_price for cryptocurrencies.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `ticker` (`string`, required): Stock or index ticker symbol. Example: AAPL, or ^DJI for the Dow Jones index.

Example input: `{"ticker":"<ticker>"}`

### `apininjas_get_synonyms`

Get Synonyms And Antonyms · Read-only

Get synonyms and antonyms of an English word.
Returns word, synonyms (an array of similar words) and antonyms (an array of opposite words).
Use apininjas_get_synonyms for alternative words. Use apininjas_define_word for a definition.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `word` (`string`, required): English word to look up. Example: happy.

Example input: `{"word":"<word>"}`

### `apininjas_get_timezone`

Get Timezone · Read-only

Get the IANA timezone, UTC offset and current local time for a timezone name or, on a paid plan, a coordinate or city.
Returns timezone, utc_offset (seconds from UTC), local_time and city. Lookups by timezone name work on every plan; lat, lon, city, state and country are Premium only.
Use apininjas_get_timezone to find which timezone a place is in. Use apininjas_get_world_time for a full breakdown of the current local date and time.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `city` (`string`, optional): Premium only (paid plan). City name. Example: Tokyo.
- `country` (`string`, optional): Premium only (paid plan). Country name, used with city. Example: Japan.
- `lat` (`number`, optional): Premium only (paid plan). Latitude in decimal degrees. Use with lon. Example: 40.7128.
- `lon` (`number`, optional): Premium only (paid plan). Longitude in decimal degrees. Use with lat. Example: -74.0060.
- `state` (`string`, optional): Premium only (paid plan). US state, for United States cities only. Example: New York.
- `timezone` (`string`, optional): IANA timezone name. Example: Europe/London. Provide timezone, lat and lon, or city.

Example input: `{}`

### `apininjas_get_weather`

Get Current Weather · Read-only

Get the current weather for a location given as latitude/longitude or, on a paid plan, a city or US ZIP code.
Returns temperature, feels-like, min and max temperature (Celsius), humidity, cloud cover, wind speed (m/s) and direction, sunrise and sunset (Unix time), the weather category and description, and icon URLs. Free keys must use lat and lon; city, state, country and zip are Premium only.
Use apininjas_get_weather for conditions right now. Use apininjas_get_weather_forecast for the next 5 days. Use apininjas_geocode first if you only have a place name on a free key.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `city` (`string`, optional): Premium only (paid plan). City name to use as the location instead of lat/lon. Narrow it with state and country. Example: London.
- `country` (`string`, optional): Premium only (paid plan). Country name, used with city to pick the right place. Example: United Kingdom.
- `lat` (`number`, optional): Latitude of the location in decimal degrees, from -90 to 90. Use with lon; this is the location input that works on every plan. Example: 51.5074.
- `lon` (`number`, optional): Longitude of the location in decimal degrees, from -180 to 180. Use with lat. Example: -0.1278.
- `state` (`string`, optional): Premium only (paid plan). US state, for United States cities only. Use with city. Example: California.
- `zip` (`string`, optional): Premium only (paid plan). 5-digit US ZIP code to use as the location instead of lat/lon. Example: 10001.

Example input: `{}`

### `apininjas_get_weather_forecast`

Get Weather Forecast · Read-only

Get a 5-day weather forecast in 3-hour steps for a location given as latitude/longitude or, on a paid plan, a city or US ZIP code.
Returns an array of forecast entries, each with a Unix timestamp and the same fields as the current weather: temperature, feels-like, humidity, cloud cover, wind, and the weather category and description. Free keys must use lat and lon; city, state, country and zip are Premium only.
Use apininjas_get_weather_forecast for upcoming conditions. Use apininjas_get_weather for conditions right now.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `city` (`string`, optional): Premium only (paid plan). City name to use as the location instead of lat/lon. Narrow it with state and country. Example: London.
- `country` (`string`, optional): Premium only (paid plan). Country name, used with city to pick the right place. Example: United Kingdom.
- `lat` (`number`, optional): Latitude of the location in decimal degrees, from -90 to 90. Use with lon; this is the location input that works on every plan. Example: 51.5074.
- `lon` (`number`, optional): Longitude of the location in decimal degrees, from -180 to 180. Use with lat. Example: -0.1278.
- `state` (`string`, optional): Premium only (paid plan). US state, for United States cities only. Use with city. Example: California.
- `zip` (`string`, optional): Premium only (paid plan). 5-digit US ZIP code to use as the location instead of lat/lon. Example: 10001.

Example input: `{}`

### `apininjas_get_world_time`

Get World Time · Read-only

Get the current local date and time for a timezone name, a coordinate or a city.
Returns timezone, datetime, date, year, month, day, hour, minute, second, day of week, day of year, ISO week number, UTC offset and datetime, Unix time, timezone abbreviation and whether daylight saving time is in effect.
Use apininjas_get_world_time for the current local time somewhere. Use apininjas_get_timezone when you only need the timezone name and offset.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `city` (`string`, optional): City name, optionally narrowed by state and country. Example: Tokyo.
- `country` (`string`, optional): Country name, used with city. Example: Japan.
- `lat` (`number`, optional): Latitude in decimal degrees. Use with lon. Example: 35.6762.
- `lon` (`number`, optional): Longitude in decimal degrees. Use with lat. Example: 139.6503.
- `state` (`string`, optional): US state, for United States cities only. Example: Illinois.
- `timezone` (`string`, optional): IANA timezone name. Example: Europe/London. Provide timezone, lat and lon, or city.

Example input: `{}`

### `apininjas_list_holidays`

List Holidays · Read-only

List a country's holidays for a calendar year, optionally only one type such as public holidays.
Returns an array of holidays with country, ISO code, year, date (YYYY-MM-DD), day of week, name and type. Free keys get the current year only; other years (2005 to 2039) are Premium.
Use apininjas_list_holidays for a year's calendar. Use apininjas_check_holiday to test one date.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, required): Country as a 2-letter ISO 3166 code (preferred), a 3-letter code or an English name, case-insensitive. Example: US.
- `type` (`string`, optional): Return only one holiday type, for example PUBLIC_HOLIDAY or BANK_HOLIDAY. Omit for every type. One of: `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`, `COVID_19_MEASURE`, `SPORTING_EVENT`.
- `year` (`integer`, optional): Calendar year, 2005 to 2039. Defaults to the current year. Years other than the current one are Premium only. Example: 2026.

Example input: `{"country":"<country>"}`

### `apininjas_lookup_dns`

Look Up DNS Records · Read-only

Get the DNS records of a domain.
Returns an array of records, each with record_type and value, plus priority for MX and the SOA timers for SOA. On a free key only NS, PTR, SRV, SOA and CAA records are returned; A, AAAA, CNAME, MX and TXT are Premium. Domains outside .com need a paid (Premium) plan.
Use apininjas_lookup_dns for DNS records. Use apininjas_lookup_whois for registration details and apininjas_check_domain for availability.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `domain` (`string`, required): Domain name to look up, without a scheme. Example: example.com. Domains outside .com need a paid (Premium) plan.

Example input: `{"domain":"<domain>"}`

### `apininjas_lookup_ip`

Look Up IP Address · Read-only

Look up the location and network of an IPv4 or IPv6 address.
Returns is_valid, country, country code, region, region code, latitude, longitude, timezone and the address. City, ZIP, ISP, ASN, abuse contact and the datacenter, hosting, VPN, Tor and threat flags are Premium fields.
Use apininjas_lookup_ip for an IP address. Use apininjas_lookup_url to locate the server behind a URL or domain.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `address` (`string`, required): IP address to look up, in IPv4 form such as 73.9.149.180 or IPv6 form such as 2001:0db8:85a3:0000:0000:8a2e:0370:7334.

Example input: `{"address":"<address>"}`

### `apininjas_lookup_url`

Look Up URL Location · Read-only

Find where the server behind a URL or domain is located.
Returns is_valid, country, country code, region, region code, city, ZIP, latitude, longitude, timezone, ISP and the URL. Domains outside .com need a paid (Premium) plan.
Use apininjas_lookup_url when you have a URL or domain. Use apininjas_lookup_ip when you already have the IP address.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `url` (`string`, required): URL or domain to look up, with or without a scheme. Example: https://example.com. Domains outside .com need a paid (Premium) plan.

Example input: `{"url":"<url>"}`

### `apininjas_lookup_whois`

Look Up WHOIS · Read-only

Get the WHOIS registration record of a domain.
Returns domain name, registrar and registrar URL, WHOIS server, creation, update and expiry dates (Unix time), name servers, DNSSEC, contact emails and EU/EEA flags. Registrant name, organisation, country, state and privacy-service fields are Premium. Domains outside .com need a paid (Premium) plan.
Use apininjas_lookup_whois for who registered a domain and when. Use apininjas_check_domain to see if a domain is free to register.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `domain` (`string`, required): Domain name to look up, without a scheme. Example: example.com. Domains outside .com need a paid (Premium) plan.

Example input: `{"domain":"<domain>"}`

### `apininjas_reverse_geocode`

Reverse Geocode Coordinates · Read-only

Convert a latitude/longitude pair into the place it falls in.
Returns an array of matching places with name, ISO country code and state. County, ZIP code, telephone area codes and timezone are Premium fields; free keys get a notice string in their place.
Use apininjas_reverse_geocode to name a coordinate. Use apininjas_geocode to get coordinates from a place name.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `lat` (`number`, required): Latitude in decimal degrees, from -90 to 90. Example: 47.6062.
- `lon` (`number`, required): Longitude in decimal degrees, from -180 to 180. Example: -122.3321.

Example input: `{"lat":47.6062,"lon":-122.3321}`

### `apininjas_scrape_webpage`

Scrape Web Page · Read-only

Fetch a web page and return its contents as HTML or as visible text only.
Returns data, holding the page's HTML, or its visible text when text_only is true.
Use apininjas_scrape_webpage to read a page's content. Use apininjas_lookup_url to locate the server behind it.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `url` (`string`, required): Full URL of the page to fetch. Example: https://example.com.
- `text_only` (`boolean`, optional): Set to true to return only the visible text, without HTML tags and metadata. Default false returns the raw HTML.
- `user_agent` (`string`, optional): User-Agent header to send when fetching the page. Omit to use the default. Example: Mozilla/5.0 (Windows NT 10.0; Win64; x64).

Example input: `{"url":"<url>"}`

### `apininjas_search_aircraft`

Search Aircraft · Read-only

Find aircraft specifications by manufacturer, model or type code, or filter them by engine, speed, range and size.
Returns an array of aircraft with manufacturer, model, ICAO and IATA type codes, engine type and count, speeds, ceiling, range, weights, dimensions and wake categories. Set at least one filter other than limit; the image URL needs the Business tier.
Use apininjas_search_aircraft for aircraft types. Use apininjas_search_airlines for carriers and their fleets.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `engine_type` (`string`, optional): Engine type: piston, propjet or jet. One of: `piston`, `propjet`, `jet`.
- `iata` (`string`, optional): IATA aircraft type code. Family codes such as 32S or 737 return every type in the family. Example: 32N.
- `icao` (`string`, optional): ICAO aircraft type designator, exact match. Example: A20N.
- `limit` (`integer`, optional): Number of aircraft to return, from 1 to 30. Default 1.
- `manufacturer` (`string`, optional): Aircraft manufacturer. Example: Gulfstream.
- `max_height` (`integer`, optional): Maximum height in feet. Example: 60.
- `max_length` (`integer`, optional): Maximum length in feet. Example: 250.
- `max_range` (`integer`, optional): Maximum range in nautical miles. Example: 8000.
- `max_speed` (`integer`, optional): Maximum top air speed in knots. Example: 600.
- `max_wingspan` (`integer`, optional): Maximum wingspan in feet. Example: 200.
- `min_height` (`integer`, optional): Minimum height in feet. Example: 10.
- `min_length` (`integer`, optional): Minimum length in feet. Example: 50.
- `min_range` (`integer`, optional): Minimum range in nautical miles. Example: 3000.
- `min_speed` (`integer`, optional): Minimum top air speed in knots. Example: 400.
- `min_wingspan` (`integer`, optional): Minimum wingspan in feet. Example: 50.
- `model` (`string`, optional): Aircraft model name. Example: G550.

Example input: `{}`

### `apininjas_search_airlines`

Search Airlines · Read-only

Find airlines by ICAO code, IATA code or name.
Returns an array of airlines with name, country, year founded, base airport, IATA and ICAO codes, fleet counts by aircraft type, and logo URLs. Set at least one of icao, iata or name.
Use apininjas_search_airlines for carriers. Use apininjas_search_aircraft for aircraft types and specs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `iata` (`string`, optional): 2-character IATA airline code. Example: UA. Set icao, iata or name.
- `icao` (`string`, optional): 3-letter ICAO airline code. Example: UAL. Set icao, iata or name.
- `name` (`string`, optional): Airline name, partial match: United matches United Airlines. Set icao, iata or name.

Example input: `{}`

### `apininjas_search_airports`

Search Airports · Read-only

Find airports by IATA or ICAO code, name, city, region, country or timezone, or filter them by size, elevation and runway length.
Returns up to 10 airports by default, each with ICAO and IATA codes, name, city, region, country, latitude, longitude, elevation, timezone, size and type, scheduled service, runways and estimated annual passengers. Set at least one filter other than offset; name, city and region are Premium only.
Use apininjas_search_airports for airports. Use apininjas_search_airlines for carriers.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `city` (`string`, optional): Premium only (paid plan). Airport city, partial case-insensitive match. Example: London.
- `country` (`string`, optional): 2-letter ISO 3166 country code. Example: GB.
- `has_iata` (`string`, optional): true returns only airports with an IATA code; false returns only those without. One of: `true`, `false`.
- `iata` (`string`, optional): IATA airport code, usually 3 letters. Partial, case-insensitive match. Example: LHR.
- `icao` (`string`, optional): ICAO airport code, 4 characters. Partial, case-insensitive match. Example: EGLL.
- `limit` (`integer`, optional): Maximum number of airports to return, from 1 to 100. Default 10.
- `max_elevation` (`integer`, optional): Maximum elevation in feet. Example: 5000.
- `min_elevation` (`integer`, optional): Minimum elevation in feet. Example: 0.
- `min_runway_length` (`integer`, optional): Minimum length in feet of at least one runway. Example: 10000.
- `name` (`string`, optional): Premium only (paid plan). Airport name, partial match. Example: Heathrow.
- `offset` (`integer`, optional): Number of results to skip, for paging. Example: 10.
- `order` (`string`, optional): Sort direction: desc (default) or asc. One of: `asc`, `desc`.
- `region` (`string`, optional): Premium only (paid plan). State, province or region, partial case-insensitive match. Example: California.
- `size` (`string`, optional): Airport size: large, medium or small. One of: `large`, `medium`, `small`.
- `sort` (`string`, optional): Sort order: passengers (default), name, elevation or runway_length. One of: `passengers`, `name`, `elevation`, `runway_length`.
- `timezone` (`string`, optional): IANA timezone of the airport. Example: Europe/London.

Example input: `{}`

### `apininjas_search_cars`

Search Cars · Read-only

Find car models and their full specifications by make, model, generation, body, fuel, drivetrain, power or production year, or fetch known cars by id. Premium only: needs a paid API Ninjas plan.
Returns up to 10 cars by default, each with an id, make, model, generation, chassis codes, production years, body and doors, trim, engine summary, power, displacement, cylinders, transmission, gears, drive, fuel and a full specs sheet. Set at least one filter, or id or ids.
Use apininjas_search_cars for model specs. Use apininjas_decode_vin to identify one specific vehicle from its VIN.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `badge` (`string`, optional): Model designation; spacing and case are ignored. Example: 320d.
- `body` (`string`, optional): Body style. One of: `Sedan`, `Coupe`, `Convertible`, `Wagon`, `Hatchback`, `Liftback`, `SUV`, `MPV`, `Van`, `Pickup`.
- `chassis_code` (`string`, optional): Chassis code; matches any generation whose chassis codes include it. Example: E91.
- `cylinders` (`integer`, optional): Number of cylinders. Example: 6.
- `doors` (`integer`, optional): Number of doors. Example: 4.
- `drive` (`string`, optional): Driven wheels: fwd, rwd, awd or 4wd. One of: `fwd`, `rwd`, `awd`, `4wd`.
- `engine_code` (`string`, optional): Manufacturer engine code. Example: N47D20.
- `fuel` (`string`, optional): Fuel type. One of: `gasoline`, `diesel`, `electric`, `hybrid`, `plugin_hybrid`, `lpg`, `cng`, `hydrogen`, `ethanol`.
- `generation` (`string`, optional): Generation name or code. Example: E90.
- `id` (`string`, optional): Car handle from an earlier search, to fetch that car again. Example: car_e71ff3416a.
- `ids` (`string`, optional): Comma-separated car handles, at most 50. Order is kept; an unknown handle comes back as null. Example: car_e71ff3416a,car_0b3c9d1e22.
- `limit` (`integer`, optional): Number of cars to return, from 1 to 100. Default 10. Out-of-range values are rejected.
- `make` (`string`, optional): Manufacturer; case and punctuation are ignored. Example: BMW.
- `max_power_hp` (`integer`, optional): Maximum engine power in horsepower. Example: 300.
- `max_year` (`integer`, optional): Cars in production in or before this year. Example: 2020.
- `min_power_hp` (`integer`, optional): Minimum engine power in horsepower. Example: 150.
- `min_year` (`integer`, optional): Cars still in production in or after this year. Example: 2015.
- `model` (`string`, optional): Model; '3 Series', '3-series' and '3series' all match. Example: 3 Series.
- `offset` (`integer`, optional): Number of results to skip, for paging. Default 0.
- `sort` (`string`, optional): Sort order. A leading minus sorts descending: -power_hp puts the most powerful first. One of: `power_hp`, `-power_hp`, `year`, `-year`, `name`, `make`.
- `transmission` (`string`, optional): Transmission type. One of: `manual`, `automatic`, `cvt`, `dual_clutch`, `automated_manual`, `single_speed`.
- `year` (`integer`, optional): Cars in production in this year. Example: 2018.

Example input: `{}`

### `apininjas_search_cities`

Search Cities · Read-only

Find cities by name, country, coordinate box or population range.
Returns an array of cities with name, latitude, longitude, ISO country code, population and whether it is a capital. Free keys search about 50,000 cities and get one result per call; paid plans search over 5 million places and can set limit and offset.
Use apininjas_search_cities to look up or list cities. Use apininjas_geocode to get coordinates for one place.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `country` (`string`, optional): 2-letter ISO 3166 country code. Example: US.
- `limit` (`integer`, optional): Premium only (paid plan). Number of cities to return, from 1 to 30. Default 1.
- `max_lat` (`number`, optional): Maximum latitude of the search box, in decimal degrees. Example: 45.
- `max_lon` (`number`, optional): Maximum longitude of the search box, in decimal degrees. Example: -70.
- `max_population` (`integer`, optional): Maximum city population. Example: 5000000.
- `min_lat` (`number`, optional): Minimum latitude of the search box, in decimal degrees. Example: 40.
- `min_lon` (`number`, optional): Minimum longitude of the search box, in decimal degrees. Example: -80.
- `min_population` (`integer`, optional): Minimum city population. Example: 1000000.
- `name` (`string`, optional): City name. Example: San Francisco.
- `offset` (`integer`, optional): Premium only (paid plan). Number of results to skip, for paging past the first 30. Example: 30.

Example input: `{}`

### `apininjas_search_countries`

Search Countries · Read-only

Find countries by name or currency, or filter them by GDP, population, area, unemployment or GDP growth.
Returns an array of countries with name, ISO2 code, capital, region, currency, population, GDP and GDP per capita, surface area, unemployment, life expectancy, internet users, telephone codes, flag URLs and many other statistics.
Use apininjas_search_countries for country facts. Use apininjas_search_cities for cities.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `currency` (`string`, optional): 3-letter currency code to find countries using it. Example: EUR.
- `limit` (`integer`, optional): Number of countries to return, from 1 to 30. Default 5.
- `max_area` (`number`, optional): Maximum surface area in square kilometres. Example: 1000000.
- `max_gdp` (`number`, optional): Maximum gross domestic product (GDP). The API documents this filter in US dollars, while the gdp field in results is reported in millions of US dollars, so confirm the scale with a known country first. Example: 5000000.
- `max_gdp_growth` (`number`, optional): Maximum GDP growth rate in percent. Example: 6.
- `max_population` (`number`, optional): Maximum population, in thousands. Example: 200000 for 200 million.
- `max_unemployment` (`number`, optional): Maximum unemployment rate in percent. Example: 10.
- `min_area` (`number`, optional): Minimum surface area in square kilometres. Example: 100000.
- `min_gdp` (`number`, optional): Minimum gross domestic product (GDP). The API documents this filter in US dollars, while the gdp field in results is reported in millions of US dollars, so confirm the scale with a known country first. Example: 1000000.
- `min_gdp_growth` (`number`, optional): Minimum GDP growth rate in percent. Example: 2.
- `min_population` (`number`, optional): Minimum population, in thousands. Example: 50000 for 50 million.
- `min_unemployment` (`number`, optional): Minimum unemployment rate in percent. Example: 5.
- `name` (`string`, optional): Country name, 2-letter ISO 3166 code or 3-letter ISO 3166 code. Example: Japan.

Example input: `{}`

### `apininjas_search_recipes`

Search Recipes · Read-only

Search recipes by title or, on a paid plan, by ingredients.
Returns an array of recipes with title, ingredients (with quantities), servings, step-by-step instructions and nutrition. Returns 1 recipe unless limit is set (up to 5 on free keys, 10 on paid plans); ingredient search and offset are Premium only.
Use apininjas_search_recipes to find recipes. Use apininjas_get_nutrition for the nutrition of foods you already have.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `ingredients` (`string`, optional): Premium only (paid plan). Comma-separated ingredients to search by, up to 5. Results rank by how many of them each recipe uses. Example: chicken,rice,garlic.
- `limit` (`integer`, optional): Number of recipes to return: 1 to 5 on free keys, 1 to 10 on paid plans. Default 1.
- `offset` (`integer`, optional): Premium only (paid plan). Number of results to skip, for paging. Example: 10.
- `title` (`string`, optional): Recipe title or keywords to search for. Example: mushroom risotto.

Example input: `{}`

### `apininjas_validate_email`

Validate Email · Read-only

Check whether an email address is well formed and its domain can receive mail.
Returns is_valid, email, domain, local part, whether the address is disposable or from a public provider such as Gmail, and a role category and sub-category inferred from the local part (for example support or sales).
Use apininjas_validate_email to vet an address. Use apininjas_check_domain for details about the domain itself.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `email` (`string`, required): Email address to validate. Example: jane.doe@example.com.

Example input: `{"email":"<email>"}`

### `apininjas_validate_phone`

Validate Phone Number · Read-only

Check whether a phone number is valid and get its formats and location.
Returns is_valid, is_possible, whether it was already formatted properly, country, location, timezones, national, international, E.164 and RFC 3966 formats, country calling code, line type and whether it is mobile.
Use apininjas_validate_phone to verify or normalise a phone number.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `number` (`string`, required): Phone number to check. Include the country calling code unless country is set; the leading + is optional. Example: +12065550100.
- `country` (`string`, optional): 2-letter ISO 3166 country code the number belongs to, used when the number has no country calling code. Example: US.

Example input: `{"number":"<number>"}`

### `apininjas_compare_text_similarity`

Compare Text Similarity · Write

Score how similar in meaning two pieces of text are.
Returns similarity, a score from 0 (unrelated) to 1 (the same meaning).
Use apininjas_compare_text_similarity to compare two texts, for example to find duplicates. It reads data only; nothing is stored.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `text_1` (`string`, required): First text, up to 5000 characters. Example: This is an example sentence.
- `text_2` (`string`, required): Second text, up to 5000 characters. Example: This is just another example sentence.

Example input: `{"text_1":"<text_1>","text_2":"<text_2>"}`

## Related

Other Developer Tools connectors ([all 123](/agentkit/connectors/?category=developer-tools)):

- [GitHub](/agentkit/connectors/github/): Scalekit connector, OAuth, 217 tools
- [Microsoft Entra ID](/agentkit/connectors/microsoftentraid/): Scalekit connector, OAuth, 82 tools
- [Datadog](/agentkit/connectors/datadog/): Scalekit connector, API key, 105 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
