Token导航 LogoToken导航TokenDH.com
研究检索敏感数据clawhub未标认证来源可访问clear审计通过

booksearch-apibooksearch API 搜索

Agent Skill

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

总安装

6,492

周安装

276

GitHub Stars

2

下载量

2,274
OpenClaw

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT-0

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 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

简介

搜索 Amazon KDP 图书并获取其畅销书排名历史记录。

  • 适用于出版策划、市场分析或竞品调研等研究场景。
  • 返回结构化数据,便于后续统计分析与可视化展示。
  • 需遵守 BeyondBSR API 调用频率与内容使用规范。
  • 建议核对字段含义以确保符合实际业务语义需求。booksearch-api 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

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.
  • bsrbsrCurrent. 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).

适合场景

01

OpenClaw 用户查找和安装 Skill 时

02

用户想查找某类 Agent Skill 时

03

需要根据任务场景推荐可安装能力包时

04

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

OpenClaw

79.5%
按下载量换算1,808

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

敏感数据

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

安装前确认

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

来源信息

继续浏览同类 Skills