API Documentation

Authentication

Include your API key in the request header:

curl -H "x-api-key: pa_your_key_here" \
  "https://www.productarena.co/api/products"

Base URL

https://www.productarena.co

Endpoints

GET/api/products

Fetch your personal Hits, Misses and TBD lists. Requires authentication.

Response

{
  "hits": [
    { "id": "clx...", "url": "https://...", "title": "...", "domain": "...", "arenaType": "hits", ... }
  ],
  "misses": [
    { "id": "clx...", "url": "https://...", "title": "...", "domain": "...", "arenaType": "misses", ... }
  ],
  "tbd": [
    { "id": "clx...", "url": "https://...", "title": "...", "domain": "...", "arenaType": "tbd", ... }
  ]
}
POST/api/products

Add a product to your personal Hits, Misses or TBD list.

Request Body

{
  "url": "https://example.com",
  "arenaType": "hits"   // "hits", "misses", or "tbd"
}

Response

{
  "id": "clx...",
  "url": "https://example.com",
  "title": "Example",
  "domain": "example.com",
  "arenaType": "hits",
  "existsGlobally": false
}
DELETE/api/products

Remove a product from your list by its URL or domain.

Request Body

{
  "url": "https://example.com"
  // or: "domain": "example.com"
}

Response

{ "success": true }
GET/api/bookmarks

Fetch your bookmarked URLs. Requires authentication.

Response

[
  {
    "id": "clx...",
    "url": "https://...",
    "title": "...",
    "favicon": "...",
    "position": 0
  }
]
POST/api/bookmarks

Bookmark a URL. The title and favicon will be fetched automatically.

Request Body

{
  "url": "https://example.com"
}

Response

{
  "id": "clx...",
  "url": "https://example.com",
  "title": "Example",
  "favicon": "...",
  "position": 0
}
DELETE/api/bookmarks

Remove a bookmark by its ID.

Request Body

{
  "id": "clx..."
}

Response

{ "success": true }
POST/api/comments

Add a comment to a product (identified by domain).

Request Body

{
  "domain": "example.com",
  "content": "Great product!"
}

Response

{
  "id": "clx...",
  "content": "Great product!",
  "createdAt": "2026-02-27T...",
  "user": { "displayName": "...", "username": "..." }
}
GET/api/leaderboard?sort=all&range=all

Fetch the public leaderboard. No authentication required.

Query params: sort (all|hits|misses), range (all|1d|1w|1m)

Response

[
  {
    "domain": "example.com",
    "title": "Example",
    "hits": 12,
    "misses": 3
  }
]
GET/api/comments?domain=example.com&page=0

Fetch comments for a product. No authentication required.

Response

{
  "comments": [...],
  "total": 5,
  "pageSize": 8
}

CLI Tool

A command-line tool for interacting with the Product Arena API โ€” vote on products, manage your Hits & Misses lists, explore leaderboards, and post comments, all from your terminal.

Install globally via npm:

npm install -g productarena-cli

Quick Start

# 1. Set your API key
productarena config set-key pa_your_key_here

# 2. Verify it works
productarena whoami

# 3. Explore the leaderboard
productarena leaderboard

Available Commands

โš™๏ธ
productarena config

Save API key, set custom base URL, or view current config.

๐Ÿ“ฆ
productarena products

List, add, or remove products from your Hits, Misses & TBD lists.

๐Ÿ†
productarena leaderboard

View the product leaderboard with sort, range, and category filters.

๐Ÿ’ฌ
productarena comments

View and post comments on any product.

๐Ÿ“Š
productarena stats

Show platform statistics (total users and products).

๐Ÿ”‘
productarena whoami

Test your API key by fetching your product lists.

View on npmView on GitHub

Agent Skill (SKILL.md)

Product Arena API is available as a pre-built Anthropic Skills-compatible skill. Install it in Claude Code, Cursor, Gemini CLI, VS Code, or any agent that supports the SKILL.md format to let your AI assistant call these APIs on your behalf.

Download SKILL.md

Rate Limits

API requests are limited to 60 requests per minute per API key. Read-only endpoints (GET) do not require authentication.

FAQยทDocsยทTerms of ServiceยทPrivacy PolicyยทAbout Us