Developers
The Professor Otter catalog API is read-only and free. It lists every free activity and every shop product as JSON or Markdown, for apps, scripts and AI agents.
- Base URL: https://professorotter.com/api/v1/catalog
- Version: 1.0.0
- OpenAPI: https://professorotter.com/openapi.json
- Auth: None. Every endpoint is a public, read-only GET. There is no API key and no sign-up.
Endpoints
| Method | Path | Returns |
|---|---|---|
| GET | /api/v1/catalog | Site overview: activity counts, shop products and discovery URLs |
| GET | /api/v1/catalog/products | Shop products with USD prices and availability |
| GET | /api/v1/catalog/products/{id} | One shop product |
| GET | /api/v1/catalog/word-searches | Word searches |
| GET | /api/v1/catalog/word-searches/{slug} | One word search and its word list |
| GET | /api/v1/catalog/color-by-number | Color-by-number pictures |
| GET | /api/v1/catalog/color-by-number/{slug} | One color-by-number picture and its color key |
| GET | /api/v1/catalog/coloring-pages | Coloring pages |
| GET | /api/v1/catalog/coloring-pages/{slug} | One coloring page and its color by number twins |
| GET | /api/v1/catalog/mazes | Mazes |
| GET | /api/v1/catalog/mazes/{slug} | One maze |
| GET | /api/v1/catalog/dot-to-dot | Dot-to-dot pictures |
| GET | /api/v1/catalog/dot-to-dot/{slug} | One dot-to-dot picture |
| GET | /api/v1/catalog/drawing-practice | Copy-the-picture drawing sheets |
| GET | /api/v1/catalog/drawing-practice/{slug} | One drawing practice sheet |
| GET | /api/v1/catalog/criss-cross | Criss-cross puzzles and their word banks |
| GET | /api/v1/catalog/criss-cross/{slug} | One criss-cross puzzle and its word bank |
| GET | /api/v1/catalog/word-scrambles | Word scramble pages |
| GET | /api/v1/catalog/word-scrambles/{slug} | One word scramble page |
| GET | /api/v1/catalog/spot-the-difference | Spot the difference puzzles |
| GET | /api/v1/catalog/spot-the-difference/{slug} | One spot the difference puzzle |
| GET | /api/v1/catalog/sudoku | Sudoku puzzles in 4x4, 6x6 and 9x9 |
| GET | /api/v1/catalog/sudoku/{slug} | One sudoku |
| GET | /api/v1/catalog/games | Scavenger hunts, would you rather cards and fill-in stories |
| GET | /api/v1/catalog/games/{slug} | One game sheet |
| GET | /api/v1/catalog/seek-and-count | Seek and count scenes |
| GET | /api/v1/catalog/seek-and-count/{slug} | One seek and count scene and what it asks a child to count |
| GET | /api/v1/catalog/color-by-math | Color by math worksheets |
| GET | /api/v1/catalog/color-by-math/{slug} | One color by math worksheet |
| GET | /api/v1/catalog/secret-codes | Secret codes: picture codes, letter codes and cryptograms |
| GET | /api/v1/catalog/secret-codes/{slug} | One secret code and its question |
| GET | /api/v1/catalog/crosswords | Crosswords with kid-friendly clues |
| GET | /api/v1/catalog/crosswords/{slug} | One crossword |
| GET | /api/v1/catalog/nonograms | Nonograms (picture logic puzzles) |
| GET | /api/v1/catalog/nonograms/{slug} | One nonogram |
| GET | /api/v1/catalog/bingo | Bingo card sets with their calling words |
| GET | /api/v1/catalog/bingo/{slug} | One bingo set and its calling words |
| GET | /api/v1/catalog/logic-puzzles | Logic grid puzzles with a story and clues |
| GET | /api/v1/catalog/logic-puzzles/{slug} | One logic puzzle |
Lists return every match in one JSON array. There is no pagination.
Filters
q: Words to match in the title, description, topic or word list (also `query` or `search`).level: easy, challenge or expert. Each list's OpenAPI entry names the levels it has.category: A topic slug such as animals. Word searches, criss-cross, word scrambles, spot the difference, crosswords, nonograms, and bingo only.
Examples
curl https://professorotter.com/api/v1/catalog curl "https://professorotter.com/api/v1/catalog/word-searches?q=farm&level=easy" curl https://professorotter.com/api/v1/catalog/products curl -H "Accept: text/markdown" https://professorotter.com/api/v1/catalog/mazes curl https://professorotter.com/api/v1/catalog/products.md curl -i https://professorotter.com/api/v1/catalog/mazes/not-a-maze
JSON and Markdown
Responses are JSON unless you ask for Markdown with Accept: text/markdown or by adding .md to the path. Every public page on the site works the same way: /shop.md is the shop as Markdown.
Errors
Errors are RFC 9457 problem details with application/problem+json. code is stable, and resolution says what to do next.
{
"type": "about:blank",
"title": "Not Found",
"status": 404,
"detail": "No catalog collection matches /api/v1/catalog/mazes/not-a-maze.",
"code": "not_found",
"resolution": "Check the path against /llms.txt or GET /api/v1/catalog."
}Versioning and deprecation
Canonical paths start with /api/v1/catalog. The unversioned /api/catalog paths are aliases of v1 and return the same responses.
Breaking changes ship as a new version path (/api/v2/catalog); adding fields or collections is not breaking and ships in v1. Nothing is deprecated today. When a version or the unversioned /api/catalog alias is deprecated, its responses carry a Deprecation header (RFC 9745), a Sunset header (RFC 8594) with the removal date, and a Link header with rel="deprecation" pointing at /developers, at least 90 days before it stops answering. The notice is also posted on /developers and in this document.
Discovery files
MCP server
- URL: https://professorotter.com/mcp
- Server card: https://professorotter.com/.well-known/mcp/server-card.json
Read-only Streamable HTTP tools, no sign-in: find activities, get one with its PDF link, list the shop, and play a word search right in the chat. make_word_search turns a child's spelling list into a word search to play and print. Hosts that support MCP Apps show the grid as a game. In Claude: Settings > Connectors > Add custom connector, then paste https://professorotter.com/mcp.
WebMCP
In a browser with WebMCP (`document.modelContext`, a W3C Community Group draft), these pages offer tools to the browser's agent. Other browsers load nothing extra and see no change.
make_word_searchon https://professorotter.com/word-search-maker: Make a word search on this page from a list of 4 to 20 words, like a child's spelling list. It fills in the maker form, shows the puzzle on the page, and returns the grid, the words, a link to share the puzzle (playUrl) and a link to print it as a PDF with an answer key (pdfUrl). If the list breaks a rule, the result's error says what to fix.print_this_puzzleon https://professorotter.com/word-searches/{slug}: Get the printable PDF of the word search on this page, in the layout shown now, with an answer key on the second page. Returns pdfUrl for the person to open and print; it doesn't open anything itself.
Buying
Checkout is not an API. A person buys in the shop through Stripe Checkout. Agents must never invent Stripe keys or charge a card. Prices are on the pricing page.
Contact
Questions about the API go to hello@professorotter.com.