# Recommend books

Content-similar works given seed ISBNs, ids, or titles. **Not** “readers also liked.” Neighbor scores are biased by Open Library shelf/rating counts; there is still no social graph.

MCP: `recommend_books` `{ "seeds": [{ "isbn": "9780593135204" }], "limit": 10 }`

## When to use

- The user already likes one or more books and wants **similar** primary works
- You have ISBNs or `fds_ed_…` ids (or titles you already resolved)

Do **not** treat this as collaborative taste. Method is `embedding` (taste card: title + subjects + synopsis). Seeds with no neighbor rows return an empty `results` list — there is no subject-keyword fallback. Popular works in the neighbor set rank higher.

## Request

```bash
curl -sS -H "Authorization: Bearer $FDS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"seeds":[{"isbn":"9780593135204"}],"limit":10}' \
  https://api.fulldatasets.com/v1/recommend
```

| Body | Required | Notes |
|---|---|---|
| `seeds` | yes | 1–10 objects: `{ isbn }`, `{ id }`, or `{ title, author }` |
| `limit` | no | Default `10`, max `25` |
| `kind` | no | `primary` \| `graphic` \| `any`. Omit to follow the seed majority (graphic seeds keep graphic; novels prefer primary) |
| `same_author` | no | `cap` (default, at most two rows per author) or `prefer` |

Unresolved seeds stay in `unresolved[]`. The rest still return.

## Response `200`

```json
{
  "results": [
    {
      "book": { "id": "fds_ed_…", "title": "The Martian", "authors": ["Andy Weir"] },
      "score": 0.82,
      "method": "embedding"
    }
  ],
  "unresolved": []
}
```

`method` is never `collaborative`.

Same-author backlist is capped unless `same_author=prefer`. Graphic / study-guide neighbors are demoted when the seeds are novels.

## See also

- [Match](/docs/match) — resolve a title seed first
- [Search](/docs/search) — browse by `genre=`
