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. Named scopes are read:listings, write:waitlist, read:licenses, read:entitlements, and write:entitlements. The same list is RFC 9728 scopes_supported. Marketplace, waitlist, and entitlement errors are JSON { "success": false, "error": "..." }. They are not RFC 9457 problem documents.

feat.press API versioning and deprecation

Responses include API-Version: 2026-07-18. Send that header or omit it. A breaking change ships as a new date. The previous date stays available for at least 180 days. During that window the old date sends Deprecation (RFC 9745) and Sunset (RFC 8594). The current version does not send those headers.

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.

feat.press SDK

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