feat.press

feat.press developer resources

feat.press is the affiliate marketplace for products AI helps you build. This page documents the feat.press HTTP API, OpenAPI specification, authentication, entitlement webhooks, license verification, and the feat.press MCP server so agents and app backends can integrate without scraping the UI.

feat.press OpenAPI specification

The feat.press OpenAPI 3.1 document is published at /openapi.json. It covers public marketplace reads, waitlist intake, license verification, and authenticated app entitlement endpoints. Marketplace, waitlist, and entitlement errors are JSON { "success": false, "error": "..." }. They are not RFC 9457 problem documents.

feat.press authentication

Public marketplace reads and license verification do not require an API key.

Merchant-server calls (entitlement lookup, cancel, resume) use the product-scoped feat.press app API key:

Authorization: Bearer feat_sk_live_<key>

License keys issued to buyers are verified with POST /api/licenses/verify. Send licenseKey (24 to 120 characters). productId is optional. Buyer PII is never returned. Cancel and resume also require an Idempotency-Key header of 8 to 200 characters.

feat.press webhooks

feat.press sends signed JSON to the HTTPS endpoint you configure on an app product when entitlements change.

  • Header feat-signature: t=<unix_seconds>,v1=<hex>
  • Header feat-event-id (same as payload id)
  • Verify HMAC-SHA256 of the unix timestamp, a period, and the raw body (${t}.${rawBody}) with your webhook secret. Reject timestamps older than 300 seconds with HTTP 400. Duplicates must return 200 without side effects. Non-2xx responses are retried up to 3 times. Each attempt times out after 8 seconds.

Event types: webhook.test, entitlement.activated, entitlement.renewed, entitlement.updated, entitlement.cancellation_scheduled, entitlement.past_due, entitlement.expired, entitlement.revoked.

Official SDK: npm i @feat-press/node. Use createWebhookRoute for signed webhooks and npx feat-webhook replay to send a sample event.

feat.press MCP server

Streamable HTTP JSON-RPC lives at /mcp. Discovery: /.well-known/mcp.json. The server advertises resources and one tool, get_feat_docs. resources/list returns at least one feat.press document.

feat.press public HTTP API

  • GET /api/marketplace/listings — browse live listings. Query: q, sort, compensation, category, minCommission (20, 30, or 50), minStorefronts (1, 5, or 10), offset, limit (max 48)
  • GET /api/marketplace/listings/{slug} — listing detail
  • POST /api/waitlist — waitlist intake
  • POST /api/licenses/verify — verify a buyer license key
  • GET /api/app-entitlements/{id} — entitlement snapshot (Bearer app key)
  • POST /api/app-entitlements/{id}/cancel — cancel at period end (Idempotency-Key required)
  • POST /api/app-entitlements/{id}/resume — undo scheduled cancel (Idempotency-Key required)

feat.press agent entry points