Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Search1 Search API
description: Web search, news, crawling, screenshot, and content extraction APIs for AI agents. Supports pay-per-request via MPP and x402 protocols.
version: 1.0.0
x-guidance: Search1API provides web search, news aggregation, URL crawling, webpage screenshots, sitemap extraction, trending topics, content extraction, and deep crawling. All paid endpoints accept POST with a JSON body. Use POST /search with a "query" field for web search. Use POST /news with a "query" field for news. Use POST /ask with a natural-language "query" to have Search1API choose the engines and time window and return only relevant results (API key only). Use POST /crawl with a "url" field to crawl a page. Use POST /screenshot with a "url" field to render a PNG, JPEG, or WebP image. Use POST /sitemap with a "url" field to extract sitemap URLs. Use POST /trending with a "search_service" field for trends. Use POST /extract with a "url" field for structured content extraction. Use POST /deepcrawl with a "url" field for deep multi-page crawling.
servers:
- url: https://api.search1api.com
tags:
- name: Search
paths:
/search:
post:
operationId: search
summary: Search the web using multiple search engines
description: Search the live public web when the answer depends on current information, sources, or research a model's training data cannot cover. Returns ranked results with id, title, URL, snippet, and `published_date` (ISO 8601, when the engine exposes one) across 13+ engines, with optional images. Set `crawl_results` to pull the top N result pages in the same call — each crawled page is billed as an additional crawl — or pass a result URL to POST /crawl separately. Costs 1 credit per request.
tags:
- Search
x-codeSamples:
- id: js
lang: ts
label: TypeScript SDK
source: "import { Search1API } from '@search1api/client';\n\nconst client = new Search1API();\nconst response = await client.search('latest AI agent frameworks', {\n maxResults: 10,\n});\n\nconsole.log(response.results);"
- id: python
lang: python
label: Python SDK
source: "from search1api import Search1API\n\nclient = Search1API()\nresponse = client.search(\n \"latest AI agent frameworks\",\n max_results=10,\n)\n\nprint(response[\"results\"])"
responses:
'200':
description: Successful response
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/SearchResponse'
- $ref: '#/components/schemas/SearchBatchResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'402':
description: Payment Required
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ApiError'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
security:
- bearerAuth: []
x-payment-info:
protocols:
- mpp
pricingMode: fixed
price: '0.003'
requestBody:
required: true
content:
application/json:
schema:
anyOf:
- type: object
properties:
query:
type: string
minLength: 1
search_service:
type: string
enum:
- google
- bing
- bingcn
- duckduckgo
- yahoo
- yandex
- youtube
- x
- reddit
- github
- arxiv
- wechat
- bilibili
- imdb
- wikipedia
- ''
- baidu
- '360'
- quark
max_results:
type: integer
minimum: 1
maximum: 50
default: 5
page:
type: integer
minimum: 1
maximum: 100
default: 1
crawl_results:
type: integer
minimum: 0
maximum: 50
default: 0
image:
type: boolean
default: false
include_sites:
type: array
items:
type: string
default: []
exclude_sites:
type: array
items:
type: string
default: []
language:
type: string
time_range:
type: string
enum:
- day
- week
- month
- year
- ''
required:
- query
additionalProperties: false
- type: array
items:
type: object
properties:
query:
type: string
minLength: 1
search_service:
type: string
enum:
- google
- bing
- bingcn
- duckduckgo
- yahoo
- yandex
- youtube
- x
- reddit
- github
- arxiv
- wechat
- bilibili
- imdb
- wikipedia
- ''
- baidu
- '360'
- quark
max_results:
type: integer
minimum: 1
maximum: 50
default: 5
page:
type: integer
minimum: 1
maximum: 100
default: 1
crawl_results:
type: integer
minimum: 0
maximum: 50
default: 0
image:
type: boolean
default: false
include_sites:
type: array
items:
type: string
default: []
exclude_sites:
type: array
items:
type: string
default: []
language:
type: string
time_range:
type: string
enum:
- day
- week
- month
- year
- ''
required:
- query
additionalProperties: false
minItems: 1
/news:
post:
operationId: news
summary: Search news articles across multiple sources
description: Search recent news when the question is about events, announcements, or coverage rather than reference material. Returns articles from verified publishers with title, URL, snippet, `published_date` (ISO 8601, when known), and optional full page content, filterable by site, language, and time range. For questions that are not time-sensitive, prefer POST /search. Costs 1 credit per request.
tags:
- Search
x-codeSamples:
- id: js
lang: ts
label: TypeScript SDK
source: "import { Search1API } from '@search1api/client';\n\nconst client = new Search1API();\nconst response = await client.news('latest AI industry news', {\n maxResults: 10,\n});\n\nconsole.log(response.results);"
- id: python
lang: python
label: Python SDK
source: "from search1api import Search1API\n\nclient = Search1API()\nresponse = client.news(\n \"latest AI industry news\",\n max_results=10,\n)\n\nprint(response[\"results\"])"
responses:
'200':
description: Successful response
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/NewsResponse'
- $ref: '#/components/schemas/NewsBatchResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'402':
description: Payment Required
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ApiError'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
security:
- bearerAuth: []
x-payment-info:
protocols:
- mpp
pricingMode: fixed
price: '0.003'
requestBody:
required: true
content:
application/json:
schema:
anyOf:
- type: object
properties:
query:
type: string
minLength: 1
search_service:
type: string
enum:
- google
- bing
- duckduckgo
- yahoo
- hackernews
- ''
- reuters
max_results:
type: integer
minimum: 1
maximum: 50
default: 5
crawl_results:
type: integer
minimum: 0
maximum: 50
default: 0
image:
type: boolean
default: false
include_sites:
type: array
items:
type: string
default: []
exclude_sites:
type: array
items:
type: string
default: []
language:
type: string
time_range:
type: string
enum:
- day
- week
- month
- year
- ''
required:
- query
additionalProperties: false
- type: array
items:
type: object
properties:
query:
type: string
minLength: 1
search_service:
type: string
enum:
- google
- bing
- duckduckgo
- yahoo
- hackernews
- ''
- reuters
max_results:
type: integer
minimum: 1
maximum: 50
default: 5
crawl_results:
type: integer
minimum: 0
maximum: 50
default: 0
image:
type: boolean
default: false
include_sites:
type: array
items:
type: string
default: []
exclude_sites:
type: array
items:
type: string
default: []
language:
type: string
time_range:
type: string
enum:
- day
- week
- month
- year
- ''
required:
- query
additionalProperties: false
minItems: 1
/ask:
post:
operationId: ask
summary: Search the engines a natural-language request calls for
description: Agentic search. Describe what you are looking for in plain language and let a decision model (currently TypeSafe Jev) decide where to look. It picks up to five engines (web search, Hacker News, Reddit, GitHub, X, arXiv, Wikipedia, IMDb, WeChat, YouTube), rewrites the request into search keywords, infers a publication window from phrases such as "this week", searches the engines in parallel, and returns only the results judged relevant, merged and ranked, so agents read fewer off-topic results. The request takes only `query`; engines, keywords, and the window are always chosen by the model, and the response reports them in `intent`. Use POST /search instead when you already know the engine and keywords and want its raw ranking. Costs 5 credits per request.
tags:
- Search
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/AskResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'402':
description: Payment Required
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ApiError'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
query:
type: string
minLength: 1
maxLength: 500
description: What you are looking for, in natural language. Platform hints ("on Reddit", "papers") and time hints ("this week") steer engine and time-range selection.
required:
- query
additionalProperties: false
examples:
community:
summary: Let Search1API choose
description: 'Engines and the time window are inferred from the wording: community discussion, within the past month.'
value:
query: What are developers saying about Bun 1.3 this month?
/trending:
post:
operationId: trending
summary: Get trending topics from various platforms
description: List what is currently popular on a supported platform, such as GitHub repositories or Hacker News stories, when the user asks what is trending or new right now. This reads a platform's own live ranking rather than performing a query — for topic searches use POST /search. Costs 1 credit per request.
tags:
- Search
x-codeSamples:
- id: js
lang: ts
label: TypeScript SDK
source: "import { Search1API } from '@search1api/client';\n\nconst client = new Search1API();\nconst response = await client.trending('github', {\n maxResults: 10,\n});\n\nconsole.log(response);"
- id: python
lang: python
label: Python SDK
source: 'from search1api import Search1API
client = Search1API()
response = client.trending("github", max_results=10)
print(response)'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/TrendingResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'402':
description: Payment Required
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ApiError'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'429':
description: Too Many Requests
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
security:
- bearerAuth: []
x-payment-info:
protocols:
- mpp
pricingMode: fixed
price: '0.003'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
search_service:
type: string
minLength: 1
max_results:
type: integer
minimum: 1
required:
- search_service
additionalProperties: false
components:
schemas:
SearchParameters:
type: object
properties:
query:
type: string
minLength: 1
search_service:
type: string
enum:
- google
- bing
- bingcn
- duckduckgo
- yahoo
- yandex
- youtube
- x
- reddit
- github
- arxiv
- wechat
- bilibili
- imdb
- wikipedia
- ''
- baidu
- '360'
- quark
max_results:
type: integer
minimum: 1
maximum: 50
default: 5
page:
type: integer
minimum: 1
maximum: 100
default: 1
crawl_results:
type: integer
minimum: 0
maximum: 50
default: 0
image:
type: boolean
default: false
include_sites:
type: array
items:
type: string
default: []
exclude_sites:
type: array
items:
type: string
default: []
language:
type: string
time_range:
type: string
enum:
- day
- week
- month
- year
- ''
required:
- query
additionalProperties: false
SearchResult:
type: object
required:
- title
- link
- snippet
properties:
title:
type: string
link:
type: string
format: uri
snippet:
type: string
content:
type: string
published_date:
type: string
description: 'When the page was published, as ISO 8601: `YYYY-MM-DD` when only the day is known (web search engines), or `YYYY-MM-DDTHH:MM:SSZ` in UTC when the source carries a time (x, reddit, github, arxiv, youtube, bilibili, wechat, news feeds). Omitted when the source exposes no date, so treat it as optional per result.'
example: '2026-09-03'
kind:
type: string
enum:
- repo
- issue
- pr
- discussion
description: 'What a `github` result is: a repository, an issue, a pull request, or a discussion. Only present for `search_service: "github"`.'
stars:
type: integer
description: 'Stargazer count of a `github` repository result (`kind: "repo"`).'
language:
type: string
description: 'Primary language of a `github` repository result (`kind: "repo"`). Omitted when GitHub reports none.'
num_comments:
type: integer
description: Comment count on a `github` issue, pull request or discussion, or on a `hackernews` thread (POST /news).
story_url:
type: string
format: uri
description: 'POST /news with `search_service: "hackernews"` only: the submitted article. `link` is the Hacker News discussion thread; `story_url` is empty for Ask HN / Show HN text posts.'
points:
type: integer
description: 'POST /news with `search_service: "hackernews"` only: upvotes on the thread.'
additionalProperties: true
ApiError:
type: object
description: 'Search1API error. Every JSON error carries `ok: false`, `error` (a short status-derived label) and `message` (human-readable detail); validation failures add `errors`. Payment challenges may use RFC 9457 problem detail fields.'
properties:
ok:
type: boolean
enum:
- false
error:
type: string
message:
type: string
errors:
type: array
items:
type: object
properties:
field:
type: string
message:
type: string
code:
type: string
type:
type: string
format: uri
title:
type: string
status:
type: integer
detail:
type: string
additionalProperties: true
AskResult:
type: object
required:
- title
- link
- snippet
- source
- relevance
properties:
title:
type: string
link:
type: string
format: uri
snippet:
type: string
published_date:
type: string
description: When the page was published, as ISO 8601 (`YYYY-MM-DD` or `YYYY-MM-DDTHH:MM:SSZ`). Omitted when the engine exposes no date.
example: '2026-09-03'
source:
type: string
description: Engine that returned the result.
relevance:
type: number
minimum: 0
maximum: 1
description: How likely the result is to be about the query, two decimals. Only results scoring at least 0.5 are returned.
TrendingResult:
type: object
required:
- title
- url
properties:
title:
type: string
url:
type: string
format: uri
description:
type:
- string
- 'null'
AskResponse:
type: object
required:
- query
- intent
- results
- errors
properties:
query:
type: string
description: The query as sent.
intent:
type: object
required:
- search_query
- sources
- time_range
description: How the request was interpreted and searched.
properties:
search_query:
type: string
description: Keywords sent to the engines, with platform and time phrases removed.
sources:
type: array
items:
type: string
description: Engines searched.
time_range:
type:
- string
- 'null'
enum:
- day
- week
- month
- year
- null
description: Publication window applied, or null for none.
results:
type: array
items:
$ref: '#/components/schemas/AskResult'
description: Relevant results from every engine, best first, with duplicates merged. May be empty.
errors:
type: array
description: Engines that failed while others completed. The request is still charged.
items:
type: object
required:
- source
- message
properties:
source:
type: string
message:
type: string
SearchResponse:
type: object
required:
- searchParameters
- results
properties:
searchParameters:
$ref: '#/components/schemas/SearchParameters'
results:
type: array
items:
$ref: '#/components/schemas/SearchResult'
images:
type: array
items:
type: string
format: uri
SearchBatchResponse:
type: object
required:
- results
- summary
properties:
results:
type: array
items:
type: object
required:
- success
- cost
properties:
success:
type: boolean
data:
$ref: '#/components/schemas/SearchResponse'
error:
type: object
properties:
message:
type: string
statusCode:
type: integer
cost:
type: integer
minimum: 0
summary:
type: object
required:
- total
- successful
- failed
- totalCost
properties:
total:
type: integer
minimum: 0
successful:
type: integer
minimum: 0
failed:
type: integer
minimum: 0
totalCost:
type: integer
minimum: 0
NewsResponse:
type: object
required:
- searchParameters
- results
properties:
searchParameters:
$ref: '#/components/schemas/NewsParameters'
results:
type: array
items:
$ref: '#/components/schemas/SearchResult'
images:
type: array
items:
type: string
format: uri
NewsParameters:
type: object
properties:
query:
type: string
minLength: 1
search_service:
type: string
enum:
- google
- bing
- duckduckgo
- yahoo
- hackernews
- ''
- reuters
max_results:
type: integer
minimum: 1
maximum: 50
default: 5
crawl_results:
type: integer
minimum: 0
maximum: 50
default: 0
image:
type: boolean
default: false
include_sites:
type: array
items:
type: string
default: []
exclude_sites:
type: array
items:
type: string
default: []
language:
type: string
time_range:
type: string
enum:
- day
- week
- month
- year
- ''
required:
- query
additionalProperties: false
NewsBatchResponse:
type: object
required:
- results
- summary
properties:
results:
type: array
items:
type: object
required:
- success
- cost
properties:
success:
type: boolean
data:
$ref: '#/components/schemas/NewsResponse'
error:
type: object
properties:
message:
type: string
statusCode:
type: integer
cost:
type: integer
minimum: 0
summary:
type: object
required:
- total
- successful
- failed
- totalCost
properties:
total:
type: integer
minimum: 0
successful:
type: integer
minimum: 0
failed:
type: integer
minimum: 0
totalCost:
type: integer
minimum: 0
TrendingRequest:
type: object
properties:
search_service:
type: string
minLength: 1
max_results:
type: integer
minimum: 1
required:
- search_service
additionalProperties: false
TrendingResponse:
type: object
required:
- trendingParameters
- results
properties:
trendingParameters:
$ref: '#/components/schemas/TrendingRequest'
results:
type: array
items:
$ref: '#/components/schemas/TrendingResult'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: API Key
x-discovery:
ownershipProofs: []