Books API

Tawkee BookMatch API

Semantic book recommendations from raw text.

  • Input: up to 6,000 characters
  • Corpus: ~70,000 books
  • Output includes: title, author, summary (when available), ASIN/ISBN, similarity score, Amazon URL
  • Designed for fast integration: one POST, JSON response

Pro - $19.99/month

Use cases

  • Recommend books from a user's notes or interests
  • Generate reading lists for research topics
  • Enrich content workflows (articles -> relevant books)
  • Build discovery features in learning apps

Endpoint contract

POST https://api.tawkee.com/v1/bookmatch

Headers

  • Authorization: Bearer <API_KEY>
  • Content-Type: application/json

Request JSON

{
  "text": "string (1..6000 chars)"
}

Response JSON

{
  "request_id": "uuid",
  "results": [
    {
      "book_id": "string",
      "title": "string",
      "author": "string",
      "summary": "string|null",
      "asin": "string|null",
      "isbn13": "string|null",
      "member_asins": ["string"],
      "member_isbns": ["string"],
      "amazon_url": "https://www.amazon.com/...",
      "similarity": 0.72
    }
  ]
}

Error codes

  • 400 invalid payload (missing text / >6000 chars)
  • 401 missing/invalid API key
  • 403 no active subscription
  • 429 rate limited
  • 5xx upstream error passthrough

Examples

curl

curl -s https://api.tawkee.com/v1/bookmatch \
  -H "Authorization: Bearer $TAWKEE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"I want books about building high-performance search systems and vector databases..."}'

Node

const res = await fetch("https://api.tawkee.com/v1/bookmatch", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.TAWKEE_API_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({ text })
});
console.log(await res.json());

Rust (reqwest)

let client = reqwest::Client::new();
let resp = client
  .post("https://api.tawkee.com/v1/bookmatch")
  .bearer_auth(std::env::var("TAWKEE_API_KEY")?)
  .json(&serde_json::json!({ "text": text }))
  .send()
  .await?
  .json::<serde_json::Value>()
  .await?;
println!("{}", resp);