Overview
The Hub API lets you manage consumer-facing Hub API keys and query per-listing analytics. All endpoints require a session token — pass the authenticated user’s Bearer token in theAuthorization header. Hub API keys themselves (for agent-developer access to Hub discovery endpoints) are a separate credential type; see Create API key below.
Base URL: https://ezforge.ai
Authentication: All endpoints require Authorization: Bearer <user-token>.
API keys
Hub API keys allow agent developers to call Hub discovery and data endpoints. Keys are tier-gated with daily request limits:Create API key
Response
201:
meta):
Error responses:
List API keys
200:
Revoke API key
401. Revocation cannot be undone.
Path parameters:
Response
204: No content.
Error responses:
Analytics
Get listing analytics
Query parameters:
Response
200 — Basic tier:
200 — Featured tier:
200 — Premium tier:
Error responses:
Capability documents
Capability documents let listing owners describe their MCP server’s tools and skills in structured form (SKILL.md or JSON). Once uploaded, the document is publicly retrievable and indexed by the Hub-level skills discovery registry atGET /.well-known/mcp-skills.
Upload capability document
Request body:
multipart/form-data
Example request:
201:
Error responses:
Get capability document
Example request:
200:
Cache-Control: public, max-age=120, stale-while-revalidate=600).
Error responses:
Get listing SKILL.md
skill_md_endpoint in the Hub MCP registry document. Public — no authentication required.
Fetching this endpoint records a click analytics event for the listing (fire-and-forget).
Path parameters:
Example request:
200:
Returns the SKILL.md content as text/markdown; charset=utf-8. The body is a Markdown document with YAML frontmatter containing hub:-prefixed flat keys (e.g. hub:listing_id, hub:listing_tier) as defined by the Hub SKILL.md spec.
200):
The
X-Hub-* headers expose the structured listing metadata so callers can access it programmatically without parsing the Markdown body.
Error responses:
Skills discovery registry
Example request:
200:
next_cursor is only present when more results exist. Pass its value as cursor in the next request to retrieve the following page.
Response fields (per listing):
Responses are cached for 60 seconds (
Cache-Control: public, max-age=60, stale-while-revalidate=300).
Error responses: