Token导航 LogoToken导航

Agent Skill · 研究检索

booksearch-api(booksearch API 搜索)

用于辅助 API 设计、接口文档、请求响应结构和服务集成说明。它适合让 Agent 梳理 endpoint、生成 OpenAPI 草稿、检查字段命名、整理错误码或辅助前后端联调。使用时需要确认真实业务语义、鉴权方式、分页和错误处理规则;涉及生成接口文档时,应避免凭空补字段,最好从现有代码、schema 或接口样例中提取事实。

booksearch-api 是研究检索类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为接触敏感数据;许可证为 MIT-0,第三方扫描已通过,按安装量在研究检索类的 73,675 个 Skill 里排第 17,636。

总安装 6,492周安装 276GitHub Stars 2下载 2,274核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.3

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:booksearch-api(booksearch API 搜索)
来源仓库:https://github.com/ramius88/booksearch-api
安装命令:
openclaw skills install booksearch-api
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install booksearch-api

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

搜索 Amazon KDP 图书并获取其畅销书排名历史记录。适用于出版策划、市场分析或竞品调研等研究场景。返回结构化数据,便于后续统计分析与可视化展示。需遵守 BeyondBSR API 调用频率与内容使用规范。建议核对字段含义以确保符合实际业务语义需求。

booksearch-api 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install booksearch-api;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

booksearch-api 怎么安装?

在终端执行 openclaw skills install booksearch-api。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

booksearch-api 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

booksearch-api 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

booksearch-api 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

booksearch-api 用的人多吗?

公开数据是累计安装 6,492 次,近一周安装 276 次,下载 2,274 次,GitHub 2 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

booksearch-api 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
booksearch-api

booksearch API 搜索 · 本页

6,4922接触敏感数据MIT-0通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

name
booksearch-api
description
Search Amazon KDP books on the BeyondBSR public API and retrieve BSR (Best Sellers Rank) history for a single book. Use this skill whenever the user wants to discover, filter, or research self-published or traditionally published books on Amazon by BSR, category, keyword, royalty range, rating, reviews, publication date, binding type, or marketplace (US, UK, DE, FR, IT, ES, CA), or when the user wants the BSR timeline of a specific ASIN over the last N days. Typical intents include KDP niche research, low-competition book discovery, sales estimation, royalty/revenue projection, competitor analysis, paperback/hardcover filtering, bulk listing of books matching numeric/textual criteria, and single-ASIN BSR history charts. Do not use for price-history timelines, review/rating timelines, or account/user data — only book search and BSR history are exposed.
metadata
clawdbot
requires
env

BookSearch API

Programmatic search over the BeyondBSR book catalogue plus BSR history retrieval for a single book. Two endpoints, JSON in / JSON out, API-key auth.

When to use this skill

Use it when the user asks to:

  • Find books matching numeric filters: BSR range, rating, reviews count, royalty, page count age, publication recency.
  • Discover niches by keyword inclusion/exclusion or Amazon category IDs.
  • Filter by marketplace (Amazon.com, .co.uk, .de, .fr, .it, .es, .ca).
  • Distinguish self-publishers from traditional publishers.
  • Estimate sales (daily / weekly / monthly / quarterly) and revenue per copy.
  • Compare BSR averages across multiple time windows (7d / 30d / 90d / 180d / 365d).
  • Retrieve the BSR timeline of a single book (by domainId + asin) over the last N days, e.g. for charting rank evolution.

Do NOT use for: price-history charts, review/rating timelines, account/user data, or anything not in the response schemas below. Those are out of scope.

Endpoints

POST https://beyondbsr.com/api/v1/books/search
GET  https://beyondbsr.com/api/v1/books/{domainId}/{asin}/bsr-history?days={1..365}
Content-Type: application/json   (search only)
X-API-Key: $BOOKSEARCH_API_KEY

Authentication

  • Read the key from the BOOKSEARCH_API_KEY env var. Format: bbsr_live_<43-char-base64url>.
  • Never print, echo, log, or include the key in any user-facing output. Never paste it into another tool's input.
  • On 401 Unauthorized: do not retry. Report "API key missing or invalid — check BOOKSEARCH_API_KEY env var" and stop.
  • Send X-API-Key exactly once. Multi-valued headers are rejected.

Marketplace domains

Map natural-language marketplace references (e.g. "Amazon.de", "the UK store", "amazon italia") to domainId using this table:

domainIdlocalecountryname
1comUSUnited States
2co.ukGBUnited Kingdom
3deDEGermany
4frFRFrance
6caCACanada
8itITItaly
9esESSpain

IDs 5 and 7 are intentional gaps in the dataset — do not invent them. The validator technically accepts 1–12, but only the seven IDs above are guaranteed to return data. If the user asks for a marketplace not listed (e.g. Japan, Australia), tell them it is not currently supported.

Request schema

All fields are optional except domainId. Enums accept either the string name (e.g. "Weekly") or the integer value.

Required

FieldTypeConstraint
domainIdintOne of the 7 IDs in the marketplace table above (validator allows 1–12).

BSR filters

FieldTypeDefaultNotes
bsrTypeenumWeeklyHistorical(-1), Current(0), Weekly(7), Days30(8), Days90(9), Days180(10), Days365(11)
bsrMinint?1≥ 1
bsrMaxint?100000≥ 1, bsrMin ≤ bsrMax
bsrYearshort?null2000–(current year + 1). Required together with bsrMonth. Use only with bsrType=Historical.
bsrMonthshort?null1–12. Required together with bsrYear.

Product filters

FieldTypeDefaultNotes
bindingTypeenum?null (all)All, Paperback, Hardcover
publisherTypeenum?AllAll, SelfPublishersOnly, PublishersOnly
interiorTypeenum?BlackWhiteBlackWhite, FullColor
vatTypeenum?ReducedReduced, Standard
includePreOrdersbool?false—

Quality filters

FieldTypeConstraint
ratingMindouble?0.0–5.0, ratingMin ≤ ratingMax
ratingMaxdouble?0.0–5.0
reviewsMinint?≥ 0, reviewsMin ≤ reviewsMax
reviewsMaxint?≥ 0

Economic filters

FieldTypeNotes
royaltyMindecimal?In currency units, not cents. min ≤ max.
royaltyMaxdecimal?—
monthsSincePublicationMinint?min ≤ max
monthsSincePublicationMaxint?—

Discovery

FieldTypeDefaultConstraint
includeKeywordsstring[]null≤ 25 items, each ≤ 100 chars, non-empty
excludeKeywordsstring[]null≤ 25 items, each ≤ 100 chars, non-empty
categoryIdslong[]null≤ 100 items, each > 0 (Amazon BrowseNode IDs)
excludeFictionbool?trueWhen true (default), filters out fiction books — i.e. books whose categories all roll up to depth-2 ancestors flagged as fiction (Literature & Fiction, Romance, Mystery, Sci-Fi, Children's Books, Teen/YA, etc.) under the local Books root for the requested marketplace. A book is kept if at least one of its categories has a depth-2 ancestor flagged as non-fiction. Set false to include fiction. Auto-disabled when categoryIds is non-empty: explicit category intent overrides the fiction filter, otherwise passing a fiction category with the default would silently return zero results. Currently unsupported on Amazon.ca (domainId=6): with excludeFiction=true no books are returned for CA — pass false for that marketplace.

Pagination

FieldTypeDefaultRange
limitint?1001–300
offsetint?00–100000

Workflow

  1. Marketplace — Identify domainId from intent using the marketplace table. If ambiguous (e.g. "Amazon"), ask which country.
  2. Translate — Map every natural-language filter to its schema field. Don't guess enum values; use the table. Note: by default fiction is excluded (excludeFiction=true). If the user asks for fiction (e.g. "romance", "mystery novels", "show me fiction too") or a mixed catalog, set excludeFiction: false explicitly. Most KDP/low-content niche queries are non-fiction so the default is usually correct.
  3. Pagination — Default to limit: 50. Raise to 100–300 only if the user explicitly wants many results. Start with offset: 0.
  4. Send — POST the JSON body. Inspect the status code first.
  5. Paginate if needed — If returnedCount == limit, more results likely exist. Offer to fetch the next page with offset += limit.
  6. Present — Surface title, asin, bsr, sales/revenue estimates, and a clickable cover URL (see response notes).

Example request

{
  "domainId": 3,
  "bsrType": "Days90",
  "bsrMin": 1,
  "bsrMax": 50000,
  "bindingType": "Paperback",
  "publisherType": "SelfPublishersOnly",
  "ratingMin": 4.0,
  "reviewsMin": 10,
  "interiorType": "BlackWhite",
  "vatType": "Reduced",
  "royaltyMin": 2.50,
  "royaltyMax": 15.00,
  "monthsSincePublicationMax": 24,
  "includePreOrders": false,
  "includeKeywords": ["journal", "notebook"],
  "excludeKeywords": ["coloring"],
  "categoryIds": [266162, 3248921],
  "excludeFiction": false,
  "limit": 50,
  "offset": 0
}

Example cURL

curl -X POST "https://beyondbsr.com/api/v1/books/search" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $BOOKSEARCH_API_KEY" \
  -d '{
    "domainId": 3,
    "bsrType": "Days90",
    "bsrMax": 50000,
    "bindingType": "Paperback",
    "publisherType": "SelfPublishersOnly",
    "ratingMin": 4.0,
    "limit": 50
  }'

Response schema

Envelope — BookSearchApiResponse

FieldTypeNotes
returnedCountintItems in this page. NOT a total-match count (no total exposed).
limitintEffective limit applied (capped at 300).
offsetintEffective offset applied.
resultsarrayBookSearchResultDto[]. Empty if no match.

Result item — BookSearchResultDto (most relevant fields)

FieldTypeNotes
idlongInternal book ID.
asinstring10-char Amazon ASIN.
titlestringFull title.
authorsstring?Comma-separated, ordered by display_order.
publicationDatedatetime?Nullable.
publisherstring?Manufacturer/publisher name.
coverImageFilenamestring?Build URL: https://m.media-amazon.com/images/I/{filename}.
imageFilenamesstring[]All carousel images (same URL pattern).
ratingdouble0.0–5.0.
reviewsintTotal reviews.
bsrintThe column matching the requested bsrType — i.e. the value filtered/sorted on.
bsrCurrentint?Latest snapshot BSR, regardless of bsrType.
avgBsr7dint?Always populated.
avgBsr30dint?Always populated.
avgBsr90dint?Always populated.
avgBsr180dint?Always populated.
avgBsr365dint?Always populated.
pageCountint?—
priceCentsint?List price (MSRP) in cents.
dailyEstimatedecimalEstimated copies/day from BSR model.
weeklyEstimatedecimalEstimated copies/week.
monthlyEstimatedecimalEstimated copies/month.
quarterlyEstimatedecimalCopies/quarter (needs ≥ 13 weeks of data).
royalty*Centsint?Per-copy royalty in cents. 4 combinations: B/W or Color × Reduced or Standard VAT.
*Revenue*Centslong?Derived = estimate × royalty. 16 fields total: {daily,weekly,monthly,quarterly} × {Black,Color} × {Reduced,Standard}.
bindingstring?Localised label (e.g. "Paperback", "Hardcover", "Non-standard").
dimensionsstring?Formatted, prefixed by binding. Example: "Paperback: 152 x 8 x 229 mm".
trim/spineWidthMmint?Trim/spine measurements.

Important caveats

  • All royalty and revenue fields are in cents — divide by 100 before showing currency.
  • bsr ≠ bsrCurrent. bsr is whatever column was chosen by bsrType; bsrCurrent is always the latest snapshot.
  • In bsrType=Historical mode, the avgBsrXd averages come from the current snapshot table while bsr itself is the historical month value — there is a documented temporal asymmetry inside the same response. Mention this if the user is doing a strict historical analysis.

BSR History endpoint

Single-ASIN BSR timeline. Returns raw snapshots from the time-series store, ordered ascending by recordedAt.

GET https://beyondbsr.com/api/v1/books/{domainId}/{asin}/bsr-history?days={1..365}
X-API-Key: $BOOKSEARCH_API_KEY
Accept: application/json

When to use

  • The user has a specific ASIN and wants its BSR over time (chart, drill-down, sanity-check the search-time avgBsrXd averages).
  • The user wants to verify a book's recent rank trajectory (e.g. "is it gaining or losing visibility?").

If the user has filter criteria but no specific ASIN, use POST /search first, then call this endpoint per ASIN of interest.

Path & query parameters

ParamInTypeRequiredConstraint
domainIdpathintyesOne of the 7 marketplace IDs (see Marketplace domains table; validator allows 1–12).
asinpathstringyesExactly 10 chars, regex ^[A-Z0-9]{10}$ (uppercase letters / digits only).
daysqueryint?no1–365. Default 365. Window is [now - days, now] UTC.

Example request

GET /api/v1/books/1/1635864348/bsr-history?days=90
X-API-Key: $BOOKSEARCH_API_KEY
Accept: application/json

Example cURL

curl -X GET "https://beyondbsr.com/api/v1/books/1/1635864348/bsr-history?days=90" \
  -H "X-API-Key: $BOOKSEARCH_API_KEY" \
  -H "Accept: application/json"

Response schema — BookBsrHistoryApiResponse

FieldTypeNotes
asinstringEchoed from request.
domainIdintEchoed from request.
fromUtcdatetimeWindow start (now - days), UTC.
toUtcdatetimeWindow end (now), UTC.
pointCountintNumber of BSR snapshots in points.
pointsarrayBsrPointDto[] ordered ascending by recordedAt.

BsrPointDto:

FieldTypeNotes
recordedAtdatetimeUTC timestamp of the snapshot.
bestSellersRankint?BSR at that timestamp. May be null if Keepa returned no rank.

Example body:

{
  "asin": "1635864348",
  "domainId": 1,
  "fromUtc": "2026-01-27T00:00:00Z",
  "toUtc": "2026-04-27T00:00:00Z",
  "pointCount": 412,
  "points": [
    { "recordedAt": "2026-01-27T03:14:00Z", "bestSellersRank": 1234 },
    { "recordedAt": "2026-01-27T15:02:00Z", "bestSellersRank": 1218 }
  ]
}

Status codes (BSR history specific)

CodeMeaningNotes
200OKpointCount may be 0 if no snapshots exist in the window.
400Validation failedValidationProblemDetails. Common causes: days out of range, asin wrong format, domainId out of [1,12].
404ASIN not found for that domainEmpty body. The book is not tracked in BeyondBSR for this marketplace. Tell the user — do not retry with the same pair.
401 / 429 / 500See generic table below.

Caveats

  • Granularity is raw: Keepa snapshots arrive 1–4× per day on actively-tracked books. A 365-day window typically yields 365–1460 points. No daily aggregation is applied.
  • The endpoint returns only (recordedAt, bestSellersRank). Use POST /search if you also need rating/review/price data.
  • ASIN is case-sensitive — must be uppercase. 1635864348 (all digits) is valid.
  • Default 365 days is the cap. Longer histories are not exposed; do not retry with days > 365.

Status codes & error handling

CodeMeaningBodyAgent action
200OK (may be empty list)BookSearchApiResponseParse results. Empty array = no matches, not an error.
400Validation failedValidationProblemDetails (RFC 7807)Read the errors map, fix the body, do not retry blindly. Surface the issue.
401Auth failedempty + WWW-Authenticate: ApiKey realm="BeyondBSR"Stop. Report misconfigured BOOKSEARCH_API_KEY. Do not retry.
429Rate limit exceeded"Rate limit exceeded. Please try again later." + Retry-After headerHonour Retry-After. Back off. Do not hammer the endpoint.
500Unhandled server errorProblemDetails JSONRetry once after a few seconds. If it persists, escalate to the user.

Example 400 body

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "DomainId": ["DomainId must be between 1 and 12."],
    "Limit": ["Limit must be between 1 and 300."]
  }
}

Sorting & pagination notes

  • Default sort: ORDER BY <chosen BSR column> ASC (lower BSR = better seller appears first).
  • Historical mode (bsrType=Historical + bsrYear/bsrMonth): sorted by the historical monthly BSR rank ASC.
  • Tie-breaker is non-deterministic — books with identical BSR may appear in different orders across page fetches. Warn the user if they need a perfectly stable ordering.
  • No orderBy parameter is exposed.

Limits

  • Rate limit: 120 requests/minute per API key. Shared across all callers using the same key.
  • Body size: 128 KB max.
  • Page size: 300 results max per request (limit ≤ 300).
  • Offset cap: 100,000 (deep pagination beyond this is not supported — refine filters instead).

平台分布

OpenClaw

79.5%
按下载量换算1,808

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills