{"openapi":"3.1.0","info":{"title":"PeerPush API","version":"1.0.0","description":"Free REST API to create and discover software products. Search products, find alternatives, compare tools, and access structured data on pricing, platforms, use cases, and audiences. Requires a free API key, created in one click at /user/api-keys.","contact":{"name":"PeerPush","url":"https://peerpush.com"}},"servers":[{"url":"https://peerpush.com","description":"Server"}],"security":[{"ApiKeyHeader":[]},{"ApiKeyQuery":[]}],"paths":{"/api/v1/products":{"post":{"operationId":"createProduct","summary":"Create a product","tags":["Products"],"security":[{"ApiKeyHeader":[]},{"ApiKeyQuery":[]}],"description":"Create a product using a normal API key. Products start private and unclaimed. Open the returned claim link to sign in and claim the product, then confirm its details in the normal editor and choose a plan. Claiming requires account authentication and does not publish the product or make a purchase. Keep the link private. Returns 201 Created with a Location header pointing to /api/v1/products/{id}/status.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProduct"}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional, scoped to the API key. Supply it on the original request and reuse it with the same payload for safe retries; a different payload conflicts. Without it, each successful request creates a new product.","schema":{"type":"string","minLength":1,"maxLength":200}}],"responses":{"201":{"description":"Create a product","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CreatedProduct"}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API access forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Idempotency conflict or request size error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Idempotency conflict or request size error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"findProducts","summary":"Search and filter products","tags":["Products"],"parameters":[{"name":"query","in":"query","description":"Natural language search query","schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"category","in":"query","description":"Filter by category slug","schema":{"type":"string"}},{"name":"useCase","in":"query","description":"Filter by use case slug","schema":{"type":"string"}},{"name":"audience","in":"query","description":"Filter by target audience slug","schema":{"type":"string"}},{"name":"pricingType","in":"query","description":"Filter by pricing model","schema":{"type":"string","enum":["Free","Freemium","Subscription","OneTime","Paid"]}},{"name":"platforms","in":"query","description":"Comma-separated platform filter","schema":{"type":"string","pattern":"^(Web|Api|Desktop|Mcp|Cli|Mobile|Ios|Android)(,(Web|Api|Desktop|Mcp|Cli|Mobile|Ios|Android))*$"},"example":"Web,Api,Cli"},{"name":"sort","in":"query","description":"Sort order. Defaults to relevance when query is set, otherwise score.","schema":{"type":"string","enum":["relevance","score","newest","trending"]}},{"name":"limit","in":"query","schema":{"type":"integer","default":20,"minimum":1,"maximum":50}},{"name":"offset","in":"query","schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"Search and filter products","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Product"}}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/products/{slug}":{"get":{"operationId":"getProductDetails","summary":"Get full product details","tags":["Products"],"parameters":[{"name":"slug","in":"path","required":true,"description":"Product slug or name. A product ID is also accepted.","schema":{"type":"string"}}],"responses":{"200":{"description":"Get full product details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Product"}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/products/{id}/status":{"get":{"operationId":"getProductStatus","summary":"Get product creation status","tags":["Products"],"description":"Retrieve creation status and the private claim link using the originating active API key. Responses use Cache-Control: no-store. This does not change the public product-details endpoint.","parameters":[{"name":"id","in":"path","required":true,"description":"Product ID returned by creation. Requires the originating API key; unavailable products return 404.","schema":{"type":"string"}}],"responses":{"200":{"description":"Get product creation status","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CreatedProduct"}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"API access forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/products/{slug}/alternatives":{"get":{"operationId":"findAlternatives","summary":"Find alternatives to a product","tags":["Alternatives"],"parameters":[{"name":"slug","in":"path","required":true,"description":"Product slug to find alternatives for","schema":{"type":"string"}},{"name":"pricingType","in":"query","schema":{"type":"string","enum":["Free","Freemium","Subscription","OneTime","Paid"]}},{"name":"platforms","in":"query","description":"Comma-separated platform filter","schema":{"type":"string","pattern":"^(Web|Api|Desktop|Mcp|Cli|Mobile|Ios|Android)(,(Web|Api|Desktop|Mcp|Cli|Mobile|Ios|Android))*$"}},{"name":"audience","in":"query","description":"Filter by target audience slug","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","default":10,"minimum":1,"maximum":50}},{"name":"offset","in":"query","schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"Find alternatives to a product","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/AlternativesResult"}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/compare":{"get":{"operationId":"compareProducts","summary":"Compare products side by side","tags":["Compare"],"parameters":[{"name":"products","in":"query","required":true,"description":"Comma-separated product slugs (2-5)","schema":{"type":"string"},"example":"vercel,netlify,railway"}],"responses":{"200":{"description":"Compare products side by side","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ComparisonResult"}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/trending":{"get":{"operationId":"getTrending","summary":"Get trending products","tags":["Discovery"],"parameters":[{"name":"category","in":"query","description":"Filter by category slug","schema":{"type":"string"}},{"name":"period","in":"query","description":"Trending period","schema":{"type":"string","enum":["day","week","month"],"default":"week"}},{"name":"limit","in":"query","schema":{"type":"integer","default":10,"minimum":1,"maximum":50}},{"name":"offset","in":"query","schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"Get trending products","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Product"}}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/discover":{"get":{"operationId":"discoverProducts","summary":"Discover products by criteria","tags":["Discovery"],"parameters":[{"name":"useCase","in":"query","description":"Use case slug","schema":{"type":"string"}},{"name":"audience","in":"query","description":"Target audience slug","schema":{"type":"string"}},{"name":"pricingType","in":"query","schema":{"type":"string","enum":["Free","Freemium","Subscription","OneTime","Paid"]}},{"name":"platforms","in":"query","description":"Comma-separated platform filter","schema":{"type":"string","pattern":"^(Web|Api|Desktop|Mcp|Cli|Mobile|Ios|Android)(,(Web|Api|Desktop|Mcp|Cli|Mobile|Ios|Android))*$"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["score","newest","trending"],"default":"score"}},{"name":"limit","in":"query","schema":{"type":"integer","default":10,"minimum":1,"maximum":50}},{"name":"offset","in":"query","schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"Discover products by criteria","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Product"}}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/deals":{"get":{"operationId":"getDeals","summary":"Products with active discounts","tags":["Discovery"],"parameters":[{"name":"category","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","default":10,"minimum":1,"maximum":50}},{"name":"offset","in":"query","schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"Products with active discounts","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DealProduct"}}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/launches":{"get":{"operationId":"getNewLaunches","summary":"Recently launched products","tags":["Discovery"],"parameters":[{"name":"days","in":"query","description":"Days to look back (max 30)","schema":{"type":"integer","default":7,"minimum":1,"maximum":30}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","default":10,"minimum":1,"maximum":50}},{"name":"offset","in":"query","schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"Recently launched products","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Product"}}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/awards":{"get":{"operationId":"getAwards","summary":"Award-winning products","tags":["Discovery"],"parameters":[{"name":"type","in":"query","description":"Award type","schema":{"type":"string","enum":["day","week","month"]}},{"name":"limit","in":"query","schema":{"type":"integer","default":10,"minimum":1,"maximum":50}},{"name":"offset","in":"query","schema":{"type":"integer","default":0,"minimum":0}}],"responses":{"200":{"description":"Award-winning products","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AwardProduct"}}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/categories":{"get":{"operationId":"getCategories","summary":"List all categories","tags":["Taxonomy"],"responses":{"200":{"description":"List all categories","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TaxonomyItem"}}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/use-cases":{"get":{"operationId":"getUseCases","summary":"List all use cases","tags":["Taxonomy"],"responses":{"200":{"description":"List all use cases","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TaxonomyItem"}}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/audiences":{"get":{"operationId":"getAudiences","summary":"List all audiences","tags":["Taxonomy"],"responses":{"200":{"description":"List all audiences","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TaxonomyItem"}}},"required":["data"]}}}},"400":{"description":"Invalid query parameters (code: VALIDATION_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, or revoked API key (code: UNAUTHORIZED or INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found (code: NOT_FOUND)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Hourly per-key quota exhausted (code: RATE_LIMITED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error (code: INTERNAL_ERROR)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"ApiKeyHeader":{"type":"apiKey","in":"header","name":"X-PeerPush-Api-Key","description":"Send your PeerPush API key in the X-PeerPush-Api-Key header. Create a free key at /user/api-keys."},"ApiKeyQuery":{"type":"apiKey","in":"query","name":"api_key","description":"Send your PeerPush API key as the api_key query parameter. Responses authenticated this way are returned with Cache-Control: no-store."}},"schemas":{"CreateProduct":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":40},"tagline":{"type":"string","minLength":1,"maxLength":60},"description":{"type":"string","minLength":1,"maxLength":5000},"websiteUrl":{"type":"string","maxLength":2048,"format":"uri"},"appStoreUrl":{"type":["string","null"]},"playStoreUrl":{"type":["string","null"]},"mcpServerUrl":{"type":["string","null"]},"cliInstallCommand":{"type":["string","null"]},"apiDocsUrl":{"type":["string","null"]},"mrr":{"default":null,"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"twitterUsername":{"default":null,"type":["string","null"]},"linkedinUrl":{"default":null,"type":["string","null"]},"categories":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","minLength":1}},"useCases":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","minLength":1}},"audiences":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","minLength":1}},"pricingType":{"anyOf":[{"type":"string","enum":["Free","Freemium","Subscription","OneTime","Paid"]},{"type":"null"}]},"startingPrice":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"platforms":{"default":[],"maxItems":5,"type":"array","items":{"type":"string","enum":["Web","Api","Desktop","Mcp","Cli","Mobile","Ios","Android"]}},"discountCodes":{"maxItems":1,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string","minLength":1,"maxLength":50},"code":{"type":"string","minLength":1,"maxLength":100},"percentOff":{"type":"integer","minimum":10,"maximum":100},"validUntil":{"type":"string","format":"date-time"}},"required":["title","code","percentOff","validUntil"]}},"logoUrl":{"type":"string","maxLength":2048,"format":"uri"},"screenshotUrls":{"default":[],"maxItems":10,"type":"array","items":{"type":"string","maxLength":2048,"format":"uri"}},"alternatives":{"default":[],"maxItems":5,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"internal"},"productId":{"type":"string","minLength":1}},"required":["type","productId"]}},"externalId":{"type":"string","minLength":1,"maxLength":200},"contactEmail":{"type":"string","maxLength":320,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Contact address for the person who should claim this product. Required. Never published or returned by the API, and only PeerPush staff can see it. PeerPush emails it once, to remind the owner to claim the product before the link expires."}},"required":["name","tagline","description","websiteUrl","logoUrl","contactEmail"],"additionalProperties":false},"CreatedProduct":{"type":"object","required":["id","status","claimUrl","expiresAt","claimedAt"],"properties":{"id":{"type":"string","description":"Product ID. Use GET /api/v1/products/{id}/status to retrieve creation status with the originating API key."},"status":{"type":"string","enum":["ready","claimed","expired","revoked"]},"claimUrl":{"type":"string","format":"uri","description":"Private link to review, edit and claim the product. Treat it as a credential."},"expiresAt":{"type":"string","format":"date-time"},"claimedAt":{"type":["string","null"],"format":"date-time"}}},"Product":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"tagline":{"type":"string"},"description":{"type":"string"},"websiteUrl":{"type":"string","format":"uri","description":"PeerPush redirect to the product website, attributed to your API key. Use it for every link you render; it lands on the product site with PeerPush UTM tags."},"domain":{"type":["string","null"],"description":"Bare hostname of the product website (e.g. \"example.com\"), for display and matching"},"appStoreUrl":{"type":["string","null"],"format":"uri","description":"PeerPush redirect to the Apple App Store listing, attributed to your API key, or null"},"playStoreUrl":{"type":["string","null"],"format":"uri","description":"PeerPush redirect to the Google Play Store listing, attributed to your API key, or null"},"mcpServerUrl":{"type":["string","null"],"format":"uri","description":"Remote MCP server endpoint or registry/install page URL (raw, connect or install directly), or null"},"cliInstallCommand":{"type":["string","null"],"maxLength":500,"description":"One-line CLI install command (e.g. \"npm install -g foo\"), or null"},"apiDocsUrl":{"type":["string","null"],"format":"uri","description":"API documentation link (UTM-tagged), or null"},"peerpushUrl":{"type":"string","format":"uri","description":"URL to the product page on PeerPush"},"logoUrl":{"type":"string","format":"uri"},"pricing":{"type":"object","properties":{"type":{"type":["string","null"],"enum":["Free","Freemium","Subscription","OneTime","Paid",null]},"startingPrice":{"type":["number","null"]}}},"platforms":{"type":"array","items":{"type":"string","enum":["Web","Api","Desktop","Mcp","Cli","Mobile"]}},"useCases":{"type":"array","items":{"type":"string"}},"audiences":{"type":"array","items":{"type":"string"}},"categories":{"type":"array","items":{"type":"string"}},"community":{"type":"object","properties":{"upvotes":{"type":"integer"},"followers":{"type":"integer"},"comments":{"type":"integer"},"rating":{"type":["object","null"],"description":"Aggregate rating across public (non-owner) reviews; null when there are no public ratings","properties":{"average":{"type":"number","description":"Raw average star rating (1–5) over public reviews"},"count":{"type":"integer","description":"Number of public (non-owner) ratings"},"weighted":{"type":"number","description":"Confidence-weighted Bayesian rating that pulls low-sample ratings toward a global prior. Use this when ranking or recommending products by rating; it prevents a single 5★ from beating a 50×4.8★ average."}},"required":["average","count","weighted"]},"peerPushScore":{"type":"number"},"totalScore":{"type":"number"}}},"badges":{"type":"object","properties":{"current":{"type":"string","enum":["Live","Trending","ProductOfTheDay","ProductOfTheWeek","ProductOfTheMonth"]},"productOfTheDay":{"type":["string","null"],"format":"date-time"},"productOfTheWeek":{"type":["string","null"],"format":"date-time"},"productOfTheMonth":{"type":["string","null"],"format":"date-time"}}},"social":{"type":"object","properties":{"twitterUsername":{"type":["string","null"]},"linkedinUrl":{"type":["string","null"]}}},"publishedAt":{"type":["string","null"],"format":"date-time"},"lastUpdatedAt":{"type":["string","null"],"format":"date-time"},"uptime":{"type":"object","description":"Result of the most recent uptime probes.","properties":{"status":{"type":"string","enum":["Unknown","Online","Degraded","Offline"],"description":"Online (all recent probes succeeded), Degraded (mixed results), Offline (all recent probes failed), Unknown (no probes recorded yet)."},"checkedAt":{"type":["string","null"],"format":"date-time"}},"required":["status","checkedAt"]},"activeDeals":{"type":"array","maxItems":5,"items":{"type":"object","properties":{"title":{"type":"string"},"percentOff":{"type":"integer"},"validUntil":{"type":"string","format":"date-time"}}}},"recentUpdates":{"type":"array","maxItems":10,"description":"Up to 10 most recent product updates, newest first. Empty when the owner has posted none.","items":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"engagement":{"type":"object","properties":{"upvotes":{"type":"integer"},"comments":{"type":"integer"}},"required":["upvotes","comments"]}},"required":["title","content","createdAt","engagement"]}}}},"ExternalAlternative":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"websiteUrl":{"type":"string","format":"uri","description":"PeerPush redirect to the product website, attributed to your API key"},"domain":{"type":["string","null"],"description":"Bare hostname of the product website"},"iconUrl":{"type":["string","null"],"format":"uri"}},"required":["id","name","websiteUrl","domain","iconUrl"]},"AlternativesResult":{"type":"object","properties":{"product":{"type":"object","description":"The product alternatives were requested for","properties":{"name":{"type":"string"},"slug":{"type":"string"}}},"alternatives":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"externalAlternatives":{"type":"array","items":{"$ref":"#/components/schemas/ExternalAlternative"},"description":"Not paginated; returned on the first page only (empty when offset > 0)"}},"required":["product","alternatives","externalAlternatives"]},"ComparisonResult":{"type":"object","properties":{"products":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"notListedOnPeerPush":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"websiteUrl":{"type":"string","format":"uri","description":"PeerPush redirect to the product website, attributed to your API key"},"domain":{"type":["string","null"]}},"required":["id","name","websiteUrl","domain"]},"description":"Requested products known to PeerPush only as alternatives that listed products replace, without structured data"},"notFound":{"type":"array","items":{"type":"string"},"description":"Requested identifiers that matched no published product"},"comparison":{"type":"object","properties":{"sharedUseCases":{"type":"array","items":{"type":"string"}},"sharedAudiences":{"type":"array","items":{"type":"string"}},"sharedPlatforms":{"type":"array","items":{"type":"string"}},"uniqueFeatures":{"type":"object","description":"Keyed by product slug: what that product has and the others do not","additionalProperties":{"type":"object","properties":{"uniqueUseCases":{"type":"array","items":{"type":"string"}},"uniquePlatforms":{"type":"array","items":{"type":"string"}}}}}}}},"required":["products","notListedOnPeerPush","notFound","comparison"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["VALIDATION_ERROR","NOT_FOUND","UNAUTHORIZED","INVALID_API_KEY","FORBIDDEN","CONFLICT","PAYLOAD_TOO_LARGE","RATE_LIMITED","INTERNAL_ERROR"]},"message":{"type":"string"},"details":{"description":"Present on VALIDATION_ERROR (the failing field issues) and on 401 (reason: missing | unknown | revoked | malformed)"}},"required":["code","message"]}},"required":["error"]},"DealProduct":{"allOf":[{"$ref":"#/components/schemas/Product"},{"type":"object","properties":{"deal":{"type":"object","description":"Highest-percentage currently-valid discount; also present in activeDeals","properties":{"title":{"type":"string"},"percentOff":{"type":"integer"},"validUntil":{"type":"string","format":"date-time"}},"required":["title","percentOff","validUntil"]}},"required":["deal"]}]},"AwardProduct":{"allOf":[{"$ref":"#/components/schemas/Product"},{"type":"object","properties":{"award":{"type":"object","properties":{"type":{"type":"string","enum":["day","week","month"]},"date":{"type":"string","format":"date-time"},"position":{"type":"integer","description":"Placement in that award period (1 = winner)"}},"required":["type","date","position"]}},"required":["award"]}]},"TaxonomyItem":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}}}}}}