KDPTop API and AI integration
KDPTop exposes the Amazon Books / Kindle eBooks category trees we continuously crawl, Best Sellers / New Releases / Top 100 Free list snapshots, per-book rank history, and category opportunity metrics as REST API and MCP (Model Context Protocol) endpoints. Programs, ChatGPT, Grok, Claude, Cursor, and more can query this data directly.
https://kdptop.com/api/v1OpenAPI 3.1, ideal for scripts and GPT Actionshttps://kdptop.com/api/mcpStreamable HTTP, ideal for AI clientshttps://kdptop.com/api/v1/openapi.jsonImport directly into GPT Actions / PostmanAuthentication
In the Developer Center create an API key (formatted like kdp_xxx, shown only once, so store it safely). When calling, use either method to pass it:
Authorization: Bearer kdp_your_key # recommended X-API-Key: kdp_your_key ?key=kdp_your_key # only for clients that can't set headers
?key= This method is only for clients that can't set custom request headers (such as some MCP connectors). The key appears in the URL, so use it only with trusted clients and revoke it in the Developer Center immediately if leaked.
Quotas and error codes
REST and MCP share the account's daily call quota (each request / each tool call counts as 1), and the history data range depends on your plan.
| Plans | Daily calls | History data |
|---|---|---|
| Free | 100 | 3 days |
| Creator | 1,500 | 90 days |
| Pro | 10,000 | 365 days |
| Team | 50,000 | 730 days |
| HTTP status | Meaning |
|---|---|
| 401 | Missing or invalid API key |
| 403 | Requested history date is outside your plan's range |
| 404 | Category / book / list snapshot not found |
| 429 | Daily call limit for your plan reached (resets at 00:00 UTC) |
REST responses carry X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Reset headers; over MCP, the AI is told in the result when less than 10% is left. Call /usage or get_usage any time to check usage; it doesn't count as a call.
REST endpoints
Base URL:https://kdptop.com/api/v1. Returns JSON; everything is GET unless marked POST. Interactive docs: /api/v1/docs
| Endpoint | operationId | Description |
|---|---|---|
/stats | getStats | Data coverage and last updated |
/categories/search?q= | searchCategories | Fuzzy category search in Chinese and English (tolerates typos, supports Chinese) |
/categories/{node_id} | getCategory | Category details: breadcrumbs, latest metrics for each list, subcategories (sorted by opportunity score) |
/categories/{node_id}/profile | getCategoryProfile | AI category profile: book types, ages, audiences, barrier and opportunity |
/categories/{node_id}/extended | getExtendedRanks | Category ranks 101-10,000 (by Amazon BSR), with est. sales and publication date |
/lists/{node_id}/{list_type} | getList | Top 100 list: rank, previous-day rank, price, reviews, plus est. daily / monthly sales, BSR, publication date and author_key; accepts date |
/decision-card | getDecisionCard | 30-day decision card for a category or writing direction: enter / compete / watch / avoid, with reasons backed by numbers |
/directions | listDirections | Writing directions (cozy mystery, romantasy, kids' coloring books…) and their categories |
/breakouts | getBreakouts | Breakout new books: filter by category subtree, writing direction, book type or indie; each book carries the author's track record (author_track); paginate with offset |
/movers | getMovers | Movers: books that climbed the most on each list since the previous day; same filters |
/authors | findAuthors | Search and rank authors (pen names merged by Amazon Author ID) |
/authors/{key} | getAuthor | Author detail: metrics, main categories, listed books with est. sales, author-store catalog |
/authors/{key}/timeline | getAuthorTimeline | Author timeline: each work (editions merged) with release date, when it reached Best Sellers and best rank; release cadence, speeding up / slowing down, hit rate |
/authors/compare?keys= | compareAuthors | 2-5 authors side by side: works, hit rate, release trend, sales, price band, main book type |
/books/search?q= | searchBooks | Search by ASIN, title, or author |
/books/{asin} | getBook | Single book details and daily rank history across lists |
POST /books/batch | getBooksBatch | Sales estimates and list positions for up to 50 ASINs, counted as one call |
POST /products/{asin}/analysis | analyzeProduct | AI single-book analysis: positioning, why it sells, what to learn, differentiation, risks, verdict (cached per ASIN for 7 days) |
/opportunities | findOpportunities | Subcategories sorted by opportunity score / review threshold / price / turnover rate, filterable by keyword, depth, and leaf category |
/segments | findSegments | Cross-category "book type × age" opportunity ranking |
/keywords | searchKeywords | Keyword library: monthly searches, growth, competing books |
/keywords/{kw} | getKeyword | Keyword detail: trend, related keywords, listed books with the keyword in the title |
/kdp/resolve?q= | resolveKdpCategory | Look up the KDP category path from an Amazon link, ASIN or node ID |
POST /kdp/recommend | recommendKdpCategories | Recommend KDP categories from a book description |
POST /kdp/keywords | suggestKdpKeywords | Suggest 7 backend keywords from a book title |
/feed | getFeed | New events about what you follow: followed authors' new books, first Best Sellers entries and price changes; changes in followed categories and lists |
POST /follows | setFollow | Follow or unfollow an author, book, category, keyword or list |
/usage | getUsage | Today's quota: used, remaining, reset time, calls by channel and endpoint (this endpoint isn't counted) |
/taxonomy | getTaxonomy | Codes for book types, age bands and audiences |
Example
# Search categories in Chinese curl "https://kdptop.com/api/v1/categories/search?q=cozy mystery&store=kindle" \ -H "Authorization: Bearer kdp_your_key" # Top 20 Kindle Best Sellers in a category curl "https://kdptop.com/api/v1/lists/154606011/best?limit=20" \ -H "Authorization: Bearer kdp_your_key" # Kindle leaf category opportunities with median reviews < 200 and price >= $3.99 curl "https://kdptop.com/api/v1/opportunities?store=kindle&leaf_only=true&max_median_reviews=200&min_median_price=3.99" \ -H "Authorization: Bearer kdp_your_key"
Field descriptions
node_id: Amazon category node ID;store:booksPrint /kindleeBooklist_type:bestBest Sellers,newNew Releases,freeTop 100 Free (Kindle only)opportunity_score: 0-100; higher means a lower review barrier, faster turnover, and easier entry for new booksmedian_reviews/median_price: median review count / price (USD) of books on the list;top100_turnover: share of the list that turned over versus the previous daynew_release_ratio: share of new books appearing for the first time within 90 days;prev_rank: rank in the previous day's snapshot
MCP endpoint
at https://kdptop.com/api/mcp, implementing MCP Streamable HTTP (stateless, JSON responses, protocol versions 2025-06-18 / 2025-03-26 / 2024-11-05). initialize and tools/list No authentication required,tools/call requires an API key. All tools are read-only except follow:
| Tool | Purpose |
|---|---|
search / fetch | Generic search and fetch-by-id (required by ChatGPT connectors / deep research) |
search_categories / get_category | Search categories; category detail, metrics and sub-categories |
get_bestseller_list / browse_list | Lists, each book with est. sales, BSR, publication date and author_key |
get_extended_ranks | Category ranks 101-10,000 |
get_decision_card / list_directions | Decision card for a category or writing direction; list of writing directions |
get_breakouts / get_movers | Breakouts and movers with author track records; filter by category, direction or book type, with pagination |
find_authors / get_author | Author search and detail |
get_author_timeline | Author timeline: release cadence, trend, hit rate, book-type shifts |
compare_authors | Compare 2-5 authors side by side |
get_feed / follow | Events about what you follow; follow / unfollow (the only tool that writes) |
search_books / get_book | Search books; book detail and rank history |
find_opportunities / find_segments / get_category_profile | Niche opportunities, book type × age opportunities, AI category profiles |
find_niches / get_niche | Cross-category product niches (book type × occasion × persona × age) |
find_keywords / get_keyword | Keyword library and detail |
resolve_kdp_category / recommend_categories | KDP category lookup and recommendations |
get_usage / get_stats | Today's quota (not counted); data coverage and freshness |
Built-in prompts
Clients that support prompts (Claude, Cursor and others) can pick these workflows directly:
analyze_author | Analyze an author: one-hit wonder or steady producer, and whether to follow their lead |
evaluate_direction | Evaluate a writing direction: verdict, competition, who is breaking out, what to write |
breakout_authors | Find and compare the authors who keep producing breakouts in a direction |
place_book | Pick 3 KDP categories and 7 keywords for a book |
weekly_brief | Weekly brief: changes in what you follow, breakout books, movers |
analyze_book | Break down a book: why it sells and whether it can be repeated |
compare_two_authors | Compare 2-5 authors side by side |
keyword_research | Keyword research for a topic: search volume, growth, title usage |
rising_niches | Find niches with rising demand and beatable competition |
Connect to ChatGPT
Option 1: Custom GPT (GPT Actions)
- ChatGPT → Explore GPTs → Create → Configure → Create new action.
- Choose "Import from URL" and enter
https://kdptop.com/api/v1/openapi.json. - For authentication, select API Key, type Bearer, and paste your
kdp_key. - Set the privacy policy URL to
https://kdptop.com/, and in the instructions write "Call KDPTop when Amazon KDP data is needed."
You are an Amazon KDP research assistant. For questions about topics, categories, competitors, pricing or authors, call KDPTop first: 1. Find the category or writing direction with searchCategories or listDirections, and read the verdict and reasons with getDecisionCard; 2. Read the Top list with getList (it already includes est. sales, BSR, publication date and author_key, so there's no need to look books up one by one); 3. Use getBreakouts to see who just broke in, use author_track to tell one-off hits from authors who keep producing hits, then dig deeper with getAuthorTimeline and compareAuthors; 4. When citing data, give the capture time captured_at and the Amazon link; before many calls, check the remaining quota with getUsage.
Option 2: Connectors / Apps (MCP)
In ChatGPT settings → Apps & Connectors → Advanced settings, enable developer mode → Create connector, and set the MCP server URL to:
https://kdptop.com/api/mcp
Choose OAuth for authentication, save, and click Allow on the KDPTop authorization page; no key to copy (dynamic client registration and PKCE supported). We implement the search / fetch tools required by ChatGPT, usable for deep research.
Option 3: OpenAI Responses API
curl https://api.openai.com/v1/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" \
-d '{
"model": "gpt-5",
"input": "Which mystery subcategories on Kindle have the lowest review barrier?",
"tools": [{
"type": "mcp",
"server_label": "kdpdata",
"server_url": "https://kdptop.com/api/mcp",
"headers": { "Authorization": "Bearer kdp_your_key" },
"require_approval": "never"
}]
}'Connect to Grok (xAI)
xAI Responses API (remote MCP)
curl https://api.x.ai/v1/responses \
-H "Authorization: Bearer $XAI_API_KEY" -H "Content-Type: application/json" \
-d '{
"model": "grok-4.7",
"input": "Use KDPTop to find the 5 subcategories with the highest opportunity score under Kindle romance categories",
"tools": [{
"type": "mcp",
"server_label": "kdpdata",
"server_description": "Amazon KDP bestseller lists, categories and niche metrics",
"server_url": "https://kdptop.com/api/mcp",
"authorization": "Bearer kdp_your_key"
}]
}'authorization value is sent as-is in the Authorization header and must include the Bearer prefix. You can use allowed_tools to limit tools.
xAI Python SDK
from xai_sdk import Client
from xai_sdk.chat import user
from xai_sdk.tools import mcp
client = Client() # reads XAI_API_KEY
chat = client.chat.create(
model="grok-4.7",
tools=[mcp(server_url="https://kdptop.com/api/mcp", server_label="kdpdata",
authorization="Bearer kdp_your_key")],
)
chat.append(user("Which new cozy mystery books broke into Best Sellers in the last 30 days?"))
print(chat.sample().content)Grok CLI
grok mcp add --transport http kdpdata https://kdptop.com/api/mcp --header "Authorization: Bearer kdp_your_key"
Connect to Claude / Cursor / other MCP clients
Clients that support remote MCP can simply add the server. Cursor (~/.cursor/mcp.json) / Claude Code, etc.:
{
"mcpServers": {
"kdptop": {
"url": "https://kdptop.com/api/mcp",
"headers": { "Authorization": "Bearer kdp_your_key" }
}
}
}Claude Code command line:
claude mcp add --transport http kdptop https://kdptop.com/api/mcp --header "Authorization: Bearer kdp_your_key"
Claude Desktop (needs Node.js; add to claude_desktop_config.json):
{
"mcpServers": {
"kdptop": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://kdptop.com/api/mcp", "--header", "Authorization: Bearer kdp_your_key"]
}
}
}Claude.ai / Claude Desktop custom connector: Settings → Connectors → Add custom connector, URL https://kdptop.com/api/mcp, then click Connect and sign in with your KDPTop account (OAuth); no key needed.
Clients that only take a URL and don't support OAuth can use https://kdptop.com/api/mcp?key=kdp_your_key.
llms.txt
We provide https://kdptop.com/llms.txt site documentation for LLMs (data scope, endpoints, authentication), which you can paste directly to an AI as context.