Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/hangingcontext-com:hangingcontext-com-ask-api"
All apis
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.
Get an API 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 Specification
openapi: 3.2.0
info:
title: Hanging Context public read Ask API
version: 1.0.0
summary: Free, keyless JSON, Markdown and feeds for Hanging Context stories.
description: 'Hanging Context publishes fresh context for agents. Stories are rebuilt every 12 hours. Each claim cites a Synorb Manifest. Every endpoint here is a read. No key is necessary. The same stories are also available through the MCP server at https://hangingcontext.com/mcp. Version policy: Breaking changes ship as a new version. We announce them at least 90 days ahead with Deprecation and Sunset response headers on the old version, and on the /developers page. Paging uses a cursor. Each REST list holds every story of its window, so the REST files have no cursor. To get only the stories that are new since your last call, call the MCP tool hc_since. It returns next_cursor and has_more, and you send next_cursor in your next call. Rate limit: 60 calls per 60 seconds per IP address for /ask and MCP tool calls.'
termsOfService: https://hangingcontext.com/terms/reuse/
contact:
name: Hanging Context
email: team@synorb.com
url: https://hangingcontext.com/contact/
license:
name: Hanging Context reuse terms
url: https://hangingcontext.com/terms/reuse/
x-api-version: '1'
x-sdks:
- ecosystem: npm
language: JavaScript
package: hanging-context
version: 0.1.0
url: https://www.npmjs.com/package/hanging-context
install: npm install hanging-context
cli: hanging-context
- ecosystem: pypi
language: Python
package: hanging-context
version: 0.1.0
url: https://pypi.org/project/hanging-context/
install: pip install hanging-context
cli: hanging-context
x-pagination:
style: cursor
tool: hc_since
cursor_field: next_cursor
more_field: has_more
note: Paging uses a cursor. Each REST list holds every story of its window, so the REST files have no cursor. To get only the stories that are new since your last call, call the MCP tool hc_since. It returns next_cursor and has_more, and you send next_cursor in your next call.
servers:
- url: https://hangingcontext.com
description: Production
security: []
tags:
- name: ask
description: Ask a question in plain words.
paths:
/ask:
get:
operationId: askQuestionGet
tags:
- ask
summary: Ask a question (GET)
description: 'Answer a question from recent stories. The reply copies facts word for word. It uses no LLM. The protocol is NLWeb. Send Accept: text/event-stream or stream=true to stream.'
parameters:
- $ref: '#/components/parameters/ApiVersion'
- name: query
in: query
required: false
description: The question, in plain words. The name q is also accepted. Leave it out to get the help page.
schema:
type: string
minLength: 1
maxLength: 500
- name: stream
in: query
required: false
description: Set to true to get text/event-stream.
schema:
type: boolean
default: false
responses:
'200':
description: The answer.
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/AskAnswer'
- $ref: '#/components/schemas/AskHelp'
text/event-stream:
schema:
type: string
headers:
HC-API-Version:
$ref: '#/components/headers/HC-API-Version'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
'400':
description: The request is not valid.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
HC-API-Version:
$ref: '#/components/headers/HC-API-Version'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
'429':
description: Too many calls from this address. Wait, then call again.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
HC-API-Version:
$ref: '#/components/headers/HC-API-Version'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
Retry-After:
$ref: '#/components/headers/Retry-After'
'500':
description: The server could not answer. Try again later.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
HC-API-Version:
$ref: '#/components/headers/HC-API-Version'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
post:
operationId: askQuestionPost
tags:
- ask
summary: Ask a question (POST)
description: Answer a question from recent stories. The reply copies facts word for word. It uses no LLM. Set prefer.streaming to true to get text/event-stream.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AskRequest'
responses:
'200':
description: The answer.
content:
application/json:
schema:
$ref: '#/components/schemas/AskAnswer'
text/event-stream:
schema:
type: string
headers:
HC-API-Version:
$ref: '#/components/headers/HC-API-Version'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
'400':
description: The request is not valid.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
HC-API-Version:
$ref: '#/components/headers/HC-API-Version'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
'429':
description: Too many calls from this address. Wait, then call again.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
HC-API-Version:
$ref: '#/components/headers/HC-API-Version'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
Retry-After:
$ref: '#/components/headers/Retry-After'
'500':
description: The server could not answer. Try again later.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
HC-API-Version:
$ref: '#/components/headers/HC-API-Version'
RateLimit-Policy:
$ref: '#/components/headers/RateLimit-Policy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
parameters:
- $ref: '#/components/parameters/ApiVersion'
components:
headers:
RateLimit-Limit:
description: Calls allowed in the window.
schema:
type: integer
Retry-After:
description: Seconds to wait before you call again.
schema:
type: integer
RateLimit-Policy:
description: The limit policy, for example "hc-public";q=60;w=60 (60 calls per 60 seconds).
schema:
type: string
RateLimit:
description: The calls left and the seconds until reset, for example "hc-public";r=59;t=60.
schema:
type: string
RateLimit-Reset:
description: Seconds until the window resets.
schema:
type: integer
HC-API-Version:
description: The API version of this response.
schema:
type: string
example: '1'
RateLimit-Remaining:
description: Calls left in the window.
schema:
type: integer
parameters:
ApiVersion:
name: HC-API-Version
in: header
required: false
description: The API version you expect. Version 1 is the only version today. Every response carries the HC-API-Version header.
schema:
type: string
enum:
- '1'
default: '1'
schemas:
AskHelp:
type: object
description: How to call /ask. A GET with no question returns this.
required:
- name
- methods
- parameters
properties:
name:
type: string
description:
type: string
protocol:
type: string
api_version:
type: string
methods:
type: object
additionalProperties:
type: string
parameters:
type: object
additionalProperties:
type: string
example:
type: object
additionalProperties:
type: string
authentication:
type: object
properties:
required:
type: boolean
rate_limit:
type: object
properties:
limit:
type: integer
window_seconds:
type: integer
scope:
type: string
additionalProperties: true
Error:
type: object
description: The JSON error body.
required:
- error
- message
properties:
error:
type: string
description: A short error code.
example: empty_question
message:
type: string
description: What is wrong.
next_step:
type: string
description: What to do next.
retry_after:
type: integer
description: Seconds to wait. Only for code 429.
AskRequest:
type: object
description: An NLWeb question.
required:
- query
properties:
query:
type: string
minLength: 1
maxLength: 500
description: The question.
prefer:
type: object
properties:
streaming:
type: boolean
description: Set to true for text/event-stream.
topic:
type: string
description: Only search this topic slug.
days:
type: integer
minimum: 1
maximum: 30
default: 7
limit:
type: integer
minimum: 1
maximum: 20
default: 5
AskAnswer:
type: object
description: An NLWeb answer. Each result is a fact copied word for word from a story.
required:
- _meta
- query
- results
properties:
_meta:
type: object
required:
- response_type
- version
properties:
response_type:
type: string
example: answer
version:
type: string
protocol:
type: string
uses_llm:
type: boolean
query:
type: string
no_match:
type: boolean
results:
type: array
items:
type: object
properties:
url:
type: string
format: uri
name:
type: string
description:
type: string
datePublished:
type: string
manifest_ids:
type: array
items:
type: string
additionalProperties: true
next_step:
type: string
additionalProperties: true
externalDocs:
description: 'Hanging Context developers: the MCP server, the SDKs and the CLI, rate limits and errors.'
url: https://hangingcontext.com/developers/