{"openapi":"3.1.0","info":{"title":"Professor Otter catalog","version":"1.0.0","description":"Read-only catalog of free word searches, color-by-number pictures, coloring pages, mazes, dot-to-dots, drawing practice sheets, criss-cross puzzles, word scrambles, spot the difference puzzles, sudoku, games (scavenger hunts, would you rather cards and fill-in stories), secret codes, nonograms, bingo cards, logic puzzles, and shop products. No API key is needed.\n\nEvery operation answers application/json by default and text/markdown when asked with `Accept: text/markdown` or by appending `.md` to the path. List endpoints return every match in one array; there is no pagination. Errors are RFC 9457 problem details (application/problem+json).\n\nCanonical paths start with /api/v1/catalog. The unversioned /api/catalog paths are aliases of v1 and return the same responses.\n\nBreaking 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.\n\nCheckout is a browser form post to /api/checkout that starts Stripe Checkout. This API never accepts card numbers or Stripe secrets.","contact":{"name":"Professor Otter","email":"hello@professorotter.com","url":"https://professorotter.com/developers"}},"servers":[{"url":"https://professorotter.com"}],"paths":{"/api/v1/catalog":{"description":"Also served at /api/catalog, the unversioned alias of v1.","get":{"summary":"Site overview","operationId":"getCatalog","responses":{"200":{"description":"Brand, activity counts, shop products, and discovery URLs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogOverview"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/products":{"description":"Also served at /api/catalog/products, the unversioned alias of v1.","get":{"summary":"Shop products with USD prices and availability","operationId":"listProducts","parameters":[],"responses":{"200":{"description":"Shop products with USD prices and availability: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Product"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/products/{id}":{"description":"Also served at /api/catalog/products/{id}, the unversioned alias of v1.","get":{"summary":"One shop product","operationId":"getProduct","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One shop product","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No products item has that id","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/word-searches":{"description":"Also served at /api/catalog/word-searches, the unversioned alias of v1.","get":{"summary":"Word searches","operationId":"listWordSearches","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Word searches: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WordSearch"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/word-searches/{slug}":{"description":"Also served at /api/catalog/word-searches/{slug}, the unversioned alias of v1.","get":{"summary":"One word search and its word list","operationId":"getWordSearch","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One word search and its word list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WordSearch"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No word-searches item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/color-by-number":{"description":"Also served at /api/catalog/color-by-number, the unversioned alias of v1.","get":{"summary":"Color-by-number pictures","operationId":"listColorByNumber","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}}],"responses":{"200":{"description":"Color-by-number pictures: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ColorByNumber"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/color-by-number/{slug}":{"description":"Also served at /api/catalog/color-by-number/{slug}, the unversioned alias of v1.","get":{"summary":"One color-by-number picture and its color key","operationId":"getColorByNumber","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One color-by-number picture and its color key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorByNumber"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No color-by-number item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/coloring-pages":{"description":"Also served at /api/catalog/coloring-pages, the unversioned alias of v1.","get":{"summary":"Coloring pages","operationId":"listColoringPages","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Coloring pages: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ColoringPage"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/coloring-pages/{slug}":{"description":"Also served at /api/catalog/coloring-pages/{slug}, the unversioned alias of v1.","get":{"summary":"One coloring page and its color by number twins","operationId":"getColoringPage","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One coloring page and its color by number twins","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColoringPage"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No coloring-pages item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/mazes":{"description":"Also served at /api/catalog/mazes, the unversioned alias of v1.","get":{"summary":"Mazes","operationId":"listMazes","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}}],"responses":{"200":{"description":"Mazes: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Maze"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/mazes/{slug}":{"description":"Also served at /api/catalog/mazes/{slug}, the unversioned alias of v1.","get":{"summary":"One maze","operationId":"getMaze","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One maze","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Maze"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No mazes item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/dot-to-dot":{"description":"Also served at /api/catalog/dot-to-dot, the unversioned alias of v1.","get":{"summary":"Dot-to-dot pictures","operationId":"listDotToDot","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}}],"responses":{"200":{"description":"Dot-to-dot pictures: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DotToDot"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/dot-to-dot/{slug}":{"description":"Also served at /api/catalog/dot-to-dot/{slug}, the unversioned alias of v1.","get":{"summary":"One dot-to-dot picture","operationId":"getDotToDot","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One dot-to-dot picture","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DotToDot"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No dot-to-dot item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/drawing-practice":{"description":"Also served at /api/catalog/drawing-practice, the unversioned alias of v1.","get":{"summary":"Copy-the-picture drawing sheets","operationId":"listDrawingPractice","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Copy-the-picture drawing sheets: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DrawingPractice"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/drawing-practice/{slug}":{"description":"Also served at /api/catalog/drawing-practice/{slug}, the unversioned alias of v1.","get":{"summary":"One drawing practice sheet","operationId":"getDrawingPractice","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One drawing practice sheet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DrawingPractice"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No drawing-practice item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/criss-cross":{"description":"Also served at /api/catalog/criss-cross, the unversioned alias of v1.","get":{"summary":"Criss-cross puzzles and their word banks","operationId":"listCrissCross","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Criss-cross puzzles and their word banks: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CrissCross"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/criss-cross/{slug}":{"description":"Also served at /api/catalog/criss-cross/{slug}, the unversioned alias of v1.","get":{"summary":"One criss-cross puzzle and its word bank","operationId":"getCrissCross","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One criss-cross puzzle and its word bank","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrissCross"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No criss-cross item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/word-scrambles":{"description":"Also served at /api/catalog/word-scrambles, the unversioned alias of v1.","get":{"summary":"Word scramble pages","operationId":"listWordScrambles","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Word scramble pages: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WordScramble"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/word-scrambles/{slug}":{"description":"Also served at /api/catalog/word-scrambles/{slug}, the unversioned alias of v1.","get":{"summary":"One word scramble page","operationId":"getWordScramble","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One word scramble page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WordScramble"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No word-scrambles item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/spot-the-difference":{"description":"Also served at /api/catalog/spot-the-difference, the unversioned alias of v1.","get":{"summary":"Spot the difference puzzles","operationId":"listSpotTheDifference","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Spot the difference puzzles: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SpotTheDifference"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/spot-the-difference/{slug}":{"description":"Also served at /api/catalog/spot-the-difference/{slug}, the unversioned alias of v1.","get":{"summary":"One spot the difference puzzle","operationId":"getSpotTheDifference","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One spot the difference puzzle","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpotTheDifference"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No spot-the-difference item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/sudoku":{"description":"Also served at /api/catalog/sudoku, the unversioned alias of v1.","get":{"summary":"Sudoku puzzles in 4x4, 6x6 and 9x9","operationId":"listSudoku","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}}],"responses":{"200":{"description":"Sudoku puzzles in 4x4, 6x6 and 9x9: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Sudoku"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/sudoku/{slug}":{"description":"Also served at /api/catalog/sudoku/{slug}, the unversioned alias of v1.","get":{"summary":"One sudoku","operationId":"getSudoku","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One sudoku","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sudoku"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No sudoku item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/games":{"description":"Also served at /api/catalog/games, the unversioned alias of v1.","get":{"summary":"Scavenger hunts, would you rather cards and fill-in stories","operationId":"listGames","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}}],"responses":{"200":{"description":"Scavenger hunts, would you rather cards and fill-in stories: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Game"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/games/{slug}":{"description":"Also served at /api/catalog/games/{slug}, the unversioned alias of v1.","get":{"summary":"One game sheet","operationId":"getGame","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One game sheet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Game"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No games item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/seek-and-count":{"description":"Also served at /api/catalog/seek-and-count, the unversioned alias of v1.","get":{"summary":"Seek and count scenes","operationId":"listSeekAndCount","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Seek and count scenes: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SeekAndCount"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/seek-and-count/{slug}":{"description":"Also served at /api/catalog/seek-and-count/{slug}, the unversioned alias of v1.","get":{"summary":"One seek and count scene and what it asks a child to count","operationId":"getSeekAndCount","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One seek and count scene and what it asks a child to count","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeekAndCount"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No seek-and-count item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/color-by-math":{"description":"Also served at /api/catalog/color-by-math, the unversioned alias of v1.","get":{"summary":"Color by math worksheets","operationId":"listColorByMath","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Color by math worksheets: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ColorByMath"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/color-by-math/{slug}":{"description":"Also served at /api/catalog/color-by-math/{slug}, the unversioned alias of v1.","get":{"summary":"One color by math worksheet","operationId":"getColorByMath","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One color by math worksheet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ColorByMath"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No color-by-math item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/secret-codes":{"description":"Also served at /api/catalog/secret-codes, the unversioned alias of v1.","get":{"summary":"Secret codes: picture codes, letter codes and cryptograms","operationId":"listSecretCodes","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Secret codes: picture codes, letter codes and cryptograms: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SecretCode"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/secret-codes/{slug}":{"description":"Also served at /api/catalog/secret-codes/{slug}, the unversioned alias of v1.","get":{"summary":"One secret code and its question","operationId":"getSecretCode","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One secret code and its question","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretCode"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No secret-codes item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/crosswords":{"description":"Also served at /api/catalog/crosswords, the unversioned alias of v1.","get":{"summary":"Crosswords with kid-friendly clues","operationId":"listCrosswords","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Crosswords with kid-friendly clues: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Crossword"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/crosswords/{slug}":{"description":"Also served at /api/catalog/crosswords/{slug}, the unversioned alias of v1.","get":{"summary":"One crossword","operationId":"getCrossword","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One crossword","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Crossword"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No crosswords item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/nonograms":{"description":"Also served at /api/catalog/nonograms, the unversioned alias of v1.","get":{"summary":"Nonograms (picture logic puzzles)","operationId":"listNonograms","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Nonograms (picture logic puzzles): every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Nonogram"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/nonograms/{slug}":{"description":"Also served at /api/catalog/nonograms/{slug}, the unversioned alias of v1.","get":{"summary":"One nonogram","operationId":"getNonogram","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One nonogram","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Nonogram"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No nonograms item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/bingo":{"description":"Also served at /api/catalog/bingo, the unversioned alias of v1.","get":{"summary":"Bingo card sets with their calling words","operationId":"listBingo","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Bingo card sets with their calling words: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Bingo"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/bingo/{slug}":{"description":"Also served at /api/catalog/bingo/{slug}, the unversioned alias of v1.","get":{"summary":"One bingo set and its calling words","operationId":"getBingo","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One bingo set and its calling words","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Bingo"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No bingo item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/catalog/logic-puzzles":{"description":"Also served at /api/catalog/logic-puzzles, the unversioned alias of v1.","get":{"summary":"Logic grid puzzles with a story and clues","operationId":"listLogicPuzzles","parameters":[{"name":"q","in":"query","description":"Words to match in the title, description, topic or word list. `query` and `search` also work.","schema":{"type":"string"}},{"name":"level","in":"query","schema":{"type":"string","enum":["easy","challenge","expert"]}},{"name":"category","in":"query","description":"Topic slug. An unknown topic is ignored.","schema":{"type":"string","enum":["animals","food","nature","places","sports","home","science","holidays","arts","history","fandom"]}}],"responses":{"200":{"description":"Logic grid puzzles with a story and clues: every match, unpaginated","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LogicPuzzle"}}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}}}}},"/api/v1/catalog/logic-puzzles/{slug}":{"description":"Also served at /api/catalog/logic-puzzles/{slug}, the unversioned alias of v1.","get":{"summary":"One logic puzzle","operationId":"getLogicPuzzle","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"One logic puzzle","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogicPuzzle"}},"text/markdown":{"schema":{"type":"string","description":"The same data as Markdown, starting with a # heading"}}}},"404":{"description":"No logic-puzzles item has that slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"CatalogOverview":{"type":"object","required":["name","url","description","brand","activities","counts","levels","shop","endpoints","howToFetchMarkdown"],"properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"},"description":{"type":"string"},"brand":{"type":"string"},"activities":{"type":"array","items":{"type":"object","required":["slug","name","blurb","status","levels","url","markdownUrl"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"blurb":{"type":"string"},"status":{"type":"string","enum":["available","coming_soon"]},"levels":{"type":"array","items":{"type":"string","enum":["easy","challenge","expert"]}},"url":{"type":["string","null"],"format":"uri"},"markdownUrl":{"type":["string","null"],"format":"uri"}}}},"counts":{"type":"object","required":["wordSearches","easyWordSearches","challengeWordSearches","colorByNumber","mazes","dotToDot","drawingPractice","crissCross","wordScrambles","spotTheDifference","sudoku","coloringPages","games","seekAndCount","colorByMath","secretCodes","crosswords","nonograms","bingo","logicPuzzles","shopProducts"],"properties":{"wordSearches":{"type":"integer"},"easyWordSearches":{"type":"integer"},"challengeWordSearches":{"type":"integer"},"colorByNumber":{"type":"integer"},"mazes":{"type":"integer"},"dotToDot":{"type":"integer"},"drawingPractice":{"type":"integer"},"crissCross":{"type":"integer"},"wordScrambles":{"type":"integer"},"spotTheDifference":{"type":"integer"},"sudoku":{"type":"integer"},"coloringPages":{"type":"integer"},"games":{"type":"integer"},"seekAndCount":{"type":"integer"},"colorByMath":{"type":"integer"},"secretCodes":{"type":"integer"},"crosswords":{"type":"integer"},"nonograms":{"type":"integer"},"bingo":{"type":"integer"},"logicPuzzles":{"type":"integer"},"shopProducts":{"type":"integer"}}},"levels":{"type":"array","items":{"type":"object","required":["id","name","shopUrl"],"properties":{"id":{"type":"string","enum":["easy","challenge","expert"]},"name":{"type":"string"},"shopUrl":{"type":"string","format":"uri"}}}},"shop":{"type":"object","required":["url","markdownUrl","products","payment"],"properties":{"url":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"},"products":{"type":"array","items":{"$ref":"#/components/schemas/Product"}},"payment":{"type":"string"}}},"endpoints":{"type":"object","required":["llmsTxt","llmsFullTxt","sitemap","sitemapMarkdown","openapi","apiCatalog","ard","aiCatalog","agentSkills","developers","pricing","catalog","products","wordSearches","colorByNumber","mazes","dotToDot","drawingPractice","crissCross","wordScrambles","spotTheDifference","sudoku","coloringPages","games","seekAndCount","colorByMath","secretCodes","crosswords","nonograms","bingo","logicPuzzles"],"properties":{"llmsTxt":{"type":"string","format":"uri"},"llmsFullTxt":{"type":"string","format":"uri"},"sitemap":{"type":"string","format":"uri"},"sitemapMarkdown":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"apiCatalog":{"type":"string","format":"uri"},"ard":{"type":"string","format":"uri"},"aiCatalog":{"type":"string","format":"uri"},"agentSkills":{"type":"string","format":"uri"},"developers":{"type":"string","format":"uri"},"pricing":{"type":"string","format":"uri"},"catalog":{"type":"string","format":"uri"},"products":{"type":"string","format":"uri"},"wordSearches":{"type":"string","format":"uri"},"colorByNumber":{"type":"string","format":"uri"},"mazes":{"type":"string","format":"uri"},"dotToDot":{"type":"string","format":"uri"},"drawingPractice":{"type":"string","format":"uri"},"crissCross":{"type":"string","format":"uri"},"wordScrambles":{"type":"string","format":"uri"},"spotTheDifference":{"type":"string","format":"uri"},"sudoku":{"type":"string","format":"uri"},"coloringPages":{"type":"string","format":"uri"},"games":{"type":"string","format":"uri"},"seekAndCount":{"type":"string","format":"uri"},"colorByMath":{"type":"string","format":"uri"},"secretCodes":{"type":"string","format":"uri"},"crosswords":{"type":"string","format":"uri"},"nonograms":{"type":"string","format":"uri"},"bingo":{"type":"string","format":"uri"},"logicPuzzles":{"type":"string","format":"uri"}}},"howToFetchMarkdown":{"type":"string"}}},"WordSearch":{"type":"object","required":["type","slug","title","level","description","category","categoryName","size","directions","wordCount","words","inBook","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"word-search"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"size":{"type":"integer"},"directions":{"type":"string"},"wordCount":{"type":"integer"},"words":{"type":"array","items":{"type":"string"}},"inBook":{"type":"boolean"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"ColorByNumber":{"oneOf":[{"type":"object","required":["type","slug","title","level","description","colorCount","colors","kind","spaces","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"color-by-number"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"colorCount":{"type":"integer"},"colors":{"type":"array","items":{"type":"object","required":["number","name","hex"],"properties":{"number":{"type":"integer"},"name":{"type":"string"},"hex":{"type":"string"}}}},"kind":{"type":"string","const":"region"},"spaces":{"type":"integer"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},{"type":"object","required":["type","slug","title","level","description","colorCount","colors","kind","rows","columns","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"color-by-number"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"colorCount":{"type":"integer"},"colors":{"type":"array","items":{"type":"object","required":["number","name","hex"],"properties":{"number":{"type":"integer"},"name":{"type":"string"},"hex":{"type":"string"}}}},"kind":{"type":"string","const":"pixel"},"rows":{"type":"integer"},"columns":{"type":"integer"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}}]},"Maze":{"type":"object","required":["type","slug","title","level","description","category","categoryName","start","finish","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"maze"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"start":{"type":"string"},"finish":{"type":"string"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"DotToDot":{"type":"object","required":["type","slug","title","level","description","category","categoryName","dots","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"dot-to-dot"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"dots":{"type":"integer"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"DrawingPractice":{"type":"object","required":["type","slug","title","level","description","category","categoryName","gridSize","gridPdfUrl","dotToDotUrl","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"drawing-practice"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"gridSize":{"type":"integer"},"gridPdfUrl":{"type":"string","format":"uri"},"dotToDotUrl":{"type":"string","format":"uri"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"CrissCross":{"type":"object","required":["type","slug","title","level","category","categoryName","words","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"criss-cross"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"category":{"type":"string"},"categoryName":{"type":"string"},"words":{"type":"array","items":{"type":"string"}},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"WordScramble":{"type":"object","required":["type","slug","title","level","category","categoryName","wordsPerPage","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"word-scramble"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"category":{"type":"string"},"categoryName":{"type":"string"},"wordsPerPage":{"type":"integer"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"SpotTheDifference":{"type":"object","required":["type","slug","title","level","description","category","categoryName","differences","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"spot-the-difference"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"differences":{"type":"integer"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"Sudoku":{"type":"object","required":["type","slug","title","level","description","size","box","givens","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"sudoku"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"size":{"type":"integer"},"box":{"type":"string"},"givens":{"type":"integer"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"ColoringPage":{"type":"object","required":["type","slug","title","level","description","category","categoryName","group","season","spaces","colorByNumberUrls","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"coloring-page"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"group":{"type":"string","enum":["animals","ocean","space","vehicles","treats","nature","halloween","thanksgiving","christmas"]},"season":{"type":["string","null"],"enum":["halloween","thanksgiving","christmas",null]},"spaces":{"type":"integer"},"colorByNumberUrls":{"type":"array","items":{"type":"string","format":"uri"}},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"Game":{"type":"object","required":["type","slug","title","level","name","description","kind","kindName","count","unit","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"game"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"name":{"type":"string"},"description":{"type":"string"},"kind":{"type":"string","enum":["scavenger-hunt","would-you-rather","fill-in-story"]},"kindName":{"type":"string"},"count":{"type":"integer"},"unit":{"type":"string"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"SeekAndCount":{"type":"object","required":["type","slug","title","level","description","category","categoryName","find","maxCount","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"seek-and-count"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"find":{"type":"array","items":{"type":"string"}},"maxCount":{"type":"integer"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"ColorByMath":{"type":"object","required":["type","slug","title","level","description","category","categoryName","skill","problems","colors","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"color-by-math"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"skill":{"type":"string"},"problems":{"type":"integer"},"colors":{"type":"array","items":{"type":"string"}},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"SecretCode":{"type":"object","required":["type","slug","title","level","description","question","theme","category","categoryName","code","keyGiven","hints","letters","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"secret-code"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"question":{"type":"string"},"theme":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"code":{"type":"string","enum":["pictures","letters"]},"keyGiven":{"type":"boolean"},"hints":{"type":"integer"},"letters":{"type":"integer"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"Crossword":{"type":"object","required":["type","slug","title","level","description","category","categoryName","wordBank","wordCount","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"crossword"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"wordBank":{"type":"boolean"},"wordCount":{"type":"integer"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"Nonogram":{"type":"object","required":["type","slug","title","level","description","category","categoryName","width","height","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"nonogram"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"Bingo":{"type":"object","required":["type","slug","title","level","description","category","categoryName","size","freeCenter","wordsPerCard","words","cardsPerSet","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"bingo"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"size":{"type":"integer"},"freeCenter":{"type":"boolean"},"wordsPerCard":{"type":"integer"},"words":{"type":"array","items":{"type":"string"}},"cardsPerSet":{"type":"integer"},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"LogicPuzzle":{"type":"object","required":["type","slug","title","level","description","category","categoryName","size","traits","url","pdfUrl","markdownUrl"],"properties":{"type":{"type":"string","const":"logic-puzzle"},"slug":{"type":"string"},"title":{"type":"string"},"level":{"type":"string","enum":["easy","challenge","expert"]},"description":{"type":"string"},"category":{"type":"string"},"categoryName":{"type":"string"},"size":{"type":"integer"},"traits":{"type":"array","items":{"type":"string"}},"url":{"type":"string","format":"uri"},"pdfUrl":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"}}},"Product":{"type":"object","required":["id","name","description","kind","level","activity","bookTitle","price","availability","url","markdownUrl","checkout"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"kind":{"type":"string","enum":["digital","print"]},"level":{"type":["string","null"],"enum":["easy","challenge","expert",null]},"activity":{"type":"string","enum":["word-searches","mazes","color-by-number","dot-to-dot","criss-cross","word-scrambles","spot-the-difference","sudoku","topic-packs","bundle"]},"bookTitle":{"type":"string"},"price":{"type":"object","required":["currency","cents","formatted"],"properties":{"currency":{"type":"string","const":"USD"},"cents":{"type":"integer"},"formatted":{"type":"string"}}},"availability":{"type":"string","enum":["in_stock","coming_soon"]},"url":{"type":"string","format":"uri"},"markdownUrl":{"type":"string","format":"uri"},"checkout":{"type":"object","required":["method","url","encoding","fields","note"],"properties":{"method":{"type":"string","const":"POST"},"url":{"type":"string","format":"uri"},"encoding":{"type":"string"},"fields":{"type":"object","required":["product"],"properties":{"product":{"type":"string"}}},"note":{"type":"string"}}}}},"Problem":{"type":"object","required":["type","title","status","detail","code","resolution"],"properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"code":{"type":"string"},"resolution":{"type":"string"}}}}},"externalDocs":{"description":"Developer guide","url":"https://professorotter.com/developers"}}