upapi-io Search API
The Search API from upapi-io — 4 operation(s) for search.
The Search API from upapi-io — 4 operation(s) for search.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/upapi-io:upapi-io-search-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: up Search API
description: 'Browser-powered API marketplace. 103 of 103 APIs included (capped at 449 for RapidAPI compatibility).
Billing: a call spends WEIGHTED UNITS against your plan''s monthly quota — not a flat one call = one unit. A light HTTP relay costs 1 unit; heavy work costs more, up to 25 (search-engine result pages 25, headless-browser renders and page scrapes 20, residential-proxy social reads 15, LLM completions 10, datacenter social/media reads 4). Every operation declares its own price as `x-upapi-unit-weight`, so a workload can be costed before it is run. Quota state rides on every response in the `RateLimit` / `RateLimit-Policy` headers.'
version: 1.0.0
servers:
- url: https://api.upapi.io
security:
- ApiKeyAuth: []
tags:
- name: Search
paths:
/google-autocomplete.post:
post:
operationId: google_autocomplete_post
summary: Google Autocomplete
description: Real Google search suggestions (autocomplete/suggest) via pure HTTP — no browser, no CAPTCHA. Set expand=true to mine long-tail keywords.
tags:
- Search
x-upapi-unit-weight: 1
requestBody:
required: true
content:
application/json:
schema:
type: object
title: Input
required:
- query
properties:
query:
type: string
title: Query
minLength: 1
description: Seed query to autocomplete
client:
type: string
title: Client
default: chrome
description: '''chrome'' (rich: relevance+type) or ''firefox'' (simple)'
expand:
type: boolean
title: Expand
default: false
description: Also query '{query} a..z' to mine long-tail suggestions
country:
type: string
title: Country
default: us
description: gl param (e.g. us, ca, gb)
language:
type: string
title: Language
default: en
description: hl param (e.g. en, fr, es)
proxyUrl:
title: Proxyurl
default: null
description: Optional proxy URL
type:
- string
- 'null'
maxSuggestions:
type: integer
title: Maxsuggestions
default: 50
maximum: 200
minimum: 1
description: Max suggestions to return
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
title: Output
required:
- success
- query
- suggestions
- count
- message
- fetchedAt
- elapsedMs
properties:
count:
type: integer
title: Count
query:
type: string
title: Query
message:
type: string
title: Message
success:
type: boolean
title: Success
elapsedMs:
type: integer
title: Elapsedms
fetchedAt:
type: string
title: Fetchedat
suggestions:
type: array
items:
type: object
title: SuggestionItem
required:
- text
properties:
kind:
title: Kind
default: null
type:
- string
- 'null'
text:
type: string
title: Text
relevance:
title: Relevance
default: null
type:
- integer
- 'null'
title: Suggestions
'400':
description: Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unknown marketplace API
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Missing required field(s)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'502':
description: Upstream execution error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Data store temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'504':
description: Request timed out
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/google-search.post:
post:
operationId: google_search_post
summary: Google Search
description: Search Google and get organic results (title, URL, snippet, domain) for any query, with language and country control. For query suggestions use google-autocomplete.post; for a lighter general web search use web-search.post.
tags:
- Search
x-upapi-unit-weight: 6
requestBody:
required: true
content:
application/json:
schema:
type: object
title: Input
required:
- query
properties:
query:
type: string
title: Query
minLength: 1
description: Search query
country:
type: string
title: Country
default: us
description: gl param (e.g. us, ca, gb)
language:
type: string
title: Language
default: en
description: hl param (e.g. en, fr, es)
proxyUrl:
title: Proxyurl
default: null
description: Optional proxy URL (http://user:pass@host:port). If set, uses only this exit IP for the BotGuard mint + scrape.
type:
- string
- 'null'
maxResults:
type: integer
title: Maxresults
default: 10
maximum: 100
minimum: 1
description: Max results to return
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
title: Output
required:
- success
- query
- results
- totalResults
- message
- fetchedAt
- elapsedMs
properties:
query:
type: string
title: Query
source:
type: string
title: Source
default: google
message:
type: string
title: Message
results:
type: array
items:
type: object
title: ResultItem
required:
- position
- title
- url
- snippet
- domain
properties:
url:
type: string
title: Url
title:
type: string
title: Title
domain:
type: string
title: Domain
snippet:
type: string
title: Snippet
position:
type: integer
title: Position
title: Results
success:
type: boolean
title: Success
elapsedMs:
type: integer
title: Elapsedms
fetchedAt:
type: string
title: Fetchedat
totalResults:
type: integer
title: Totalresults
'400':
description: Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unknown marketplace API
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Missing required field(s)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'502':
description: Upstream execution error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Data store temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'504':
description: Request timed out
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/linkedin-profile-search.post:
post:
operationId: linkedin_profile_search_post
summary: LinkedIn Profile Search
description: Find LinkedIn profiles by job title and location. Returns name, headline, and profile URL. Web-search backed — no login required.
tags:
- Search
x-upapi-unit-weight: 15
requestBody:
required: true
content:
application/json:
schema:
type: object
title: Input
required:
- keyword
properties:
keyword:
type: string
title: Keyword
minLength: 1
description: Job title or skill to search (e.g. 'Data Engineer')
location:
title: Location
default: null
description: Location filter (e.g. 'Tunisia', 'New York')
type:
- string
- 'null'
proxyUrl:
title: Proxyurl
default: null
description: Residential exit to route the web search through (DDG blocks datacenter IPs). Falls back to the DDGS_PROXY env var.
type:
- string
- 'null'
maxResults:
type: integer
title: Maxresults
default: 50
maximum: 100
minimum: 1
description: Max profiles to return
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
title: Output
required:
- success
- keyword
- location
- profiles
- totalFound
- query
- message
- fetchedAt
- elapsedMs
properties:
query:
type: string
title: Query
keyword:
type: string
title: Keyword
message:
type: string
title: Message
success:
type: boolean
title: Success
location:
title: Location
type:
- string
- 'null'
profiles:
type: array
items:
type: object
title: LinkedInProfile
required:
- position
- name
- headline
- url
- linkedinPath
properties:
url:
type: string
title: Url
name:
type: string
title: Name
headline:
type: string
title: Headline
position:
type: integer
title: Position
linkedinPath:
type: string
title: Linkedinpath
title: Profiles
elapsedMs:
type: integer
title: Elapsedms
fetchedAt:
type: string
title: Fetchedat
totalFound:
type: integer
title: Totalfound
'400':
description: Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unknown marketplace API
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Missing required field(s)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'502':
description: Upstream execution error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Data store temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'504':
description: Request timed out
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/web-search.post:
post:
operationId: web_search_post
summary: Web Search
description: Search the web and get structured results (titles, URLs, snippets). DuckDuckGo-backed — no browser, no CAPTCHA, fast.
tags:
- Search
x-upapi-unit-weight: 1
requestBody:
required: true
content:
application/json:
schema:
type: object
title: Input
required:
- query
properties:
query:
type: string
title: Query
minLength: 1
description: Search query
region:
type: string
title: Region
default: wt-wt
description: Region code (wt-wt=global, us-en, uk-en, etc)
maxResults:
type: integer
title: Maxresults
default: 20
maximum: 100
minimum: 1
description: Max results to return
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
title: Output
required:
- success
- query
- results
- totalResults
- message
- fetchedAt
- elapsedMs
properties:
query:
type: string
title: Query
message:
type: string
title: Message
results:
type: array
items:
type: object
title: ResultItem
required:
- position
- title
- url
- snippet
- domain
properties:
url:
type: string
title: Url
title:
type: string
title: Title
domain:
type: string
title: Domain
snippet:
type: string
title: Snippet
position:
type: integer
title: Position
title: Results
success:
type: boolean
title: Success
elapsedMs:
type: integer
title: Elapsedms
fetchedAt:
type: string
title: Fetchedat
totalResults:
type: integer
title: Totalresults
'400':
description: Invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing or invalid API key
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: 'FORBIDDEN — the key is valid but not allowed to make this call. Three causes: the key belongs to a different organization than the one in the path; the key was minted without the scope this endpoint requires (the message names the missing scope); or the operation is not included in the organization''s plan — a plan gate, which no retry clears. Upgrade the plan or mint a key with the right scope.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Unknown marketplace API
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Missing required field(s)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: 'Two DIFFERENT conditions share this status, told apart by `error.code`. `RATE_LIMITED` — the per-minute burst window is full; it refills on its own, so back off and retry (`Retry-After` is seconds, typically 60) and nothing was spent. `QUOTA_EXCEEDED` — a BUDGET is gone: the monthly weighted-unit quota, a trial''s unit cap, or the plan''s hosted-function compute seconds. Retrying on a short backoff will never succeed; `Retry-After` points at the real refill (the next UTC month, or the end of the trial), and upgrading the plan is usually the intended fix.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'502':
description: Upstream execution error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Data store temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'504':
description: Request timed out
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
Error:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
message:
type: string
functionId:
type: string
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key