Skip to main content

Overview

The Hub API lets you manage consumer-facing Hub API keys and query per-listing analytics. Management and analytics 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 and outcome-report endpoints) are a separate credential type; see Create API key below. Base URL: https://ezforge.ai Authentication: Management and analytics endpoints require Authorization: Bearer <user-token>; Hub discovery and outcome-report endpoints use a Hub API key (Authorization: Bearer hub_live_…).
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:

Listing tier

Set listing tier

Sets the tier (basic, featured, or premium) of a single listing. Moving to basic is always allowed. Moving to featured or premium requires an active or trialing Hub subscription for that tier on your account. Hub matches the subscription against your account’s shared Stripe customer (see Billing account). Hub identifies the subscription by its catalog price (hub_featured_monthly for Featured, hub_premium_monthly for Premium), not by a fixed Stripe price ID. A subscription on a price that has since been superseded or archived still counts, so a price change on our side doesn’t invalidate existing subscribers. Auth: Session token (listing owner required). Path parameters: Request body: application/json Example request:
Response 200: The updated listing, wrapped in { "data": { … } }. listingTier reflects the new tier. The change applies to this listing only. Subscription changes made through Stripe update all of your active listings. Error responses: For featured and premium, the subscription check runs before the ownership and existence checks. A request without a matching subscription returns 402 even if the listing is missing or isn’t yours.

Outcome reports

Outcome reports let agent developers tell Hub whether an interaction with a listing worked. Reports feed the public Outcome Reports card on the listing detail page once enough reports exist (see Listings).

Submit outcome report

Records a structured outcome for an interaction with an active listing. A report can optionally be tied to a referral from a Hub search; each referral accepts at most one report, so retries are safe. Auth: Hub API key (Authorization: Bearer hub_live_…). All tiers (Explorer and above) can submit reports. Path parameters: Request body: application/json Example request:
Response 201:
Response 200 (duplicate referral_id — a report for this referral already exists, nothing new is stored):
Reports submitted without a referral_id are never deduplicated. 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: