Agent Surface Docs API
The Docs API from Agent Surface — 1 operation(s) for docs.
The Docs API from Agent Surface — 1 operation(s) for docs.
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/agentsurface-dev:agentsurface-dev-docs-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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: Agent Surface documentation Docs API
version: 1.0.0
description: 'Public read-only documentation retrieval, without credentials. Search to discover pages, then fetch the canonical Markdown. Compatibility: these unversioned URLs and existing operationIds are stable within API version 1. Additive fields may appear; clients should ignore unknown fields. Breaking changes require a new major version and a documented migration period before retiring an existing route. There is no application quota or rate-limit policy; query and response bounds below apply. Remote MCP uses POST /mcp with protocol 2026-07-28.'
servers:
- url: https://agentsurface.dev
security: []
tags:
- name: Docs
paths:
/api/docs/search:
get:
operationId: searchDocs
summary: Search documentation with bounded page-level results
description: 'Use when you know the topic but not the page URL. Searches titles, descriptions, headings and body. Chunks are deduplicated by canonical page URL, preserving the page-group order returned by Fumadocs full-text search (ZBSearch). rank is a 1-based position, not a probability or confidence score. Snippets are capped at 600 characters. No match (including an unknown section) returns 200 with results: [] and has_more: false. has_more means additional pages exist: narrow the query or section, or increase limit up to 20. Use the docs index for exhaustive browsing. Fetch a selected page with getPage.'
parameters:
- name: query
in: query
required: true
description: Trimmed topic keywords; 2 to 500 characters.
example: content negotiation
schema:
type: string
minLength: 2
maxLength: 500
- name: limit
in: query
description: Maximum number of distinct pages, default 5 and maximum 20.
example: 5
schema:
type: integer
minimum: 1
maximum: 20
default: 5
- name: section
in: query
description: Optional top-level documentation section. Unknown sections return an empty result set.
example: discovery
schema:
type: string
pattern: ^[a-z0-9-]+$
responses:
'200':
description: Bounded relevance-ordered pages with stable IDs, canonical URLs and content dates where available.
content:
application/json:
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: object
properties:
results:
maxItems: 20
type: array
items:
type: object
properties:
id:
type: string
description: Stable documentation path, independent of rank.
title:
type: string
description: Published page title.
description:
type: string
description: Published page summary.
url:
type: string
format: uri
description: Canonical source URL; pass this to get_page.
slug:
type: string
description: Slash-separated docs slug for /api/md; index identifies the docs home.
updated_at:
description: Content revision time, or last verification date where a revision time is unavailable.
type: string
snippet:
type: string
maxLength: 600
description: Matching body or heading excerpt, at most 600 characters.
rank:
type: integer
minimum: 1
maximum: 20
description: 1-based position within this result set, lower is earlier; not confidence and not comparable across queries.
required:
- id
- title
- description
- url
- slug
- snippet
- rank
additionalProperties: false
description: Distinct matching documentation pages, bounded by the caller limit.
has_more:
type: boolean
description: More matching pages exist beyond this limit. Narrow query or section, increase limit up to 20, or browse list_pages.
ranking:
type: string
description: Explanation of the relevance ordering and rank semantics.
required:
- results
- has_more
- ranking
additionalProperties: false
'400':
description: Problem Details with recovery suggestions and a trace_id. is_retriable means safe to retry the unchanged request.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
'500':
description: Problem Details with recovery suggestions and a trace_id. is_retriable means safe to retry the unchanged request.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
tags:
- Docs
components:
schemas:
Problem:
type: object
required:
- type
- title
- status
- detail
- instance
- is_retriable
- suggestions
- trace_id
- code
- message
- hint
properties:
type:
type: string
example: about:blank
title:
type: string
status:
type: integer
detail:
type: string
instance:
type: string
description: Request path and query, identifying the failed request.
example: /api/docs/search?query=x
is_retriable:
type: boolean
description: True only when it is safe to retry the unchanged request. Validation and missing-page errors are false; a temporary read-only search failure is true.
suggestions:
type: array
items:
type: string
trace_id:
type: string
description: Opaque request identifier, also returned in X-Request-Id.
code:
type: string
message:
type: string
hint:
type: string