Skip to main content

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 the Authorization 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>.
Dedicated pages provide deeper coverage of each area: API Keys (security model, header usage, deprecated endpoint migration) and Listing Analytics (tier comparison table, metric definitions).

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

Creates a new Hub API key for the authenticated user. The raw key is returned exactly once — store it immediately; it cannot be retrieved again. Request body:
Response 201:
The key field is returned only once, at creation time. Store it securely — it cannot be retrieved again.
Response fields (meta): Error responses:

List API keys

Returns all active (non-revoked) Hub API keys for the authenticated user, ordered oldest-first. Returns up to 100 keys. Raw key values are never returned. Response 200:
Error responses:

Revoke API key

Immediately revokes a Hub API key. Any subsequent requests using this key will receive a 401. Revocation cannot be undone. Path parameters: Response 204: No content. Error responses:

Analytics

Get listing analytics

Returns analytics for a Hub listing. The response shape is gated by the listing’s tier — callers receive only the fields their tier makes available. Only the listing owner can access this endpoint. Path parameters: Query parameters: Response 200 — Basic tier:
Response 200 — Featured tier:
Response 200 — Premium tier:
Response fields: 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 at GET /.well-known/mcp-skills.

Upload capability document

Uploads a SKILL.md or JSON capability document for the specified listing. The listing must be active and owned by the authenticated user. Only one capability document is stored per listing — uploading replaces any previously stored document. Auth: Session token (listing owner required). Path parameters: Request body: multipart/form-data Example request:
Response 201:
Response fields: Error responses:

Get capability document

Returns the parsed capability document for a listing. Public — no authentication required. Path parameters: Example request:
Response 200:
Responses are cached for 120 seconds (Cache-Control: public, max-age=120, stale-while-revalidate=600). Error responses:

Get listing SKILL.md

Returns the Hub-generated SKILL.md for a listing — the portable capability manifest that describes the MCP server’s tools, authentication, vertical metadata, and trust signals. This is the endpoint referenced as 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:
Response 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.
Response headers (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

Returns all active Hub listings that have a capability document. Agent platforms use this endpoint to enumerate available MCP server skill sets without crawling individual listings. Public — no authentication required. Query parameters: Example request:
Response 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:

Deprecated endpoints

/api/v1/hub/keys is deprecated. Use /api/v1/hub/api-keys for all new integrations. The /api/v1/hub/keys path will be sunset on 2028-01-01 and removed in a future release.
Responses from the deprecated path include the following headers to signal migration: