Docs

API reference

Resolve a title

POST /v1/match

Ranked candidates for a messy title.

Markdown Full spec OpenAPI

Turn a messy title (and optional author or ISBN) into ranked edition candidates, a food name / GTIN into ranked food candidates, or a film / show title (+ year) into ranked title candidates. Same route for all three datasets.

MCP: resolve_book { "title": "Project Hail Mary", "author": "Andy Weir" } · resolve_food { "name": "Tillamook cheddar", "gtin": "00072830007115" }

When to use

  • The user named a book
  • You have a title string from another system and need a stable fds_ed_…

If you already have an ISBN, call ISBN lookup (or pass isbn here — it short-circuits). Do not use search as the first choice for a single known title.

Request

curl -sS -H "Authorization: Bearer $FDS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Project Hail Mary","author":"Andy Weir","limit":5}' \
  https://api.fulldatasets.com/v1/match
Body Required Notes
dataset no books, food, or movies_tv. Inferred from isbn/title vs gtin/name vs imdb_id/film-TV kind when omitted
isbn books: one of isbn or title If valid and found, returns one exact_isbn candidate (score 1)
title books: one of isbn or title Required when isbn is absent
author no Rank filter only. Not AND’d into title FTS
kind no primary | graphic | any. Default prefers the novel over comics / guides
gtin food: one of gtin or name Short-circuits to exact_gtin
name food: one of gtin or name Required when gtin is absent
brand no Food rank filter
imdb_id movies_tv: one of imdb_id or title Short-circuits to exact_imdb
year no movies_tv: ±1 tolerance, boosts exact year
limit no Default 10, max 25

POST /v1/foods/match is an alias for the food body. POST /v1/titles/match is an alias for the movies_tv body (films and series only). Pass kind: "film" or kind: "series" with dataset: "movies_tv" to narrow.

Response `200`

{
  "candidates": [
    {
      "entity_id": "fds_ed_37306635333664393039",
      "entity_type": "edition",
      "score": 1,
      "match_method": "exact_isbn",
      "book": {
        "id": "fds_ed_37306635333664393039",
        "title": "Project Hail Mary",
        "authors": ["Andy Weir"]
      }
    }
  ]
}

match_method is exact_isbn or fuzzy_title_author. Prefer candidates[0].

Resolve: popular-prefix and folded title_normalized equality first, then title-only websearch_to_tsquery only when two content words remain. Author is a filter, not an FTS AND (so a missing author name cannot empty the result).

Same collapse as search: prefer primary, drop study guides and companions when a real title exists, one canonical edition per work. Pass kind=graphic (or put “graphic novel” in the title) when you want the comic.

Match hits Postgres (not the 24h point-lookup cache).

Errors

Status code When
400 bad_request Invalid JSON, or none of title / isbn / name / gtin

See also