{"openapi":"3.1.0","info":{"title":"Kids Off iPads catalog","version":"1.0.0","description":"Read-only catalog of free word searches, color-by-number pictures, mazes, dot-to-dots, criss-cross puzzles, word scrambles, spot the difference puzzles, sudoku, 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":"Kids Off iPads","email":"hello@kidsoffipads.com","url":"https://kidsoffipads.com/developers"}},"servers":[{"url":"https://kidsoffipads.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/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/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"}}}}}}}},"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","crissCross","wordScrambles","spotTheDifference","sudoku","shopProducts"],"properties":{"wordSearches":{"type":"integer"},"easyWordSearches":{"type":"integer"},"challengeWordSearches":{"type":"integer"},"colorByNumber":{"type":"integer"},"mazes":{"type":"integer"},"dotToDot":{"type":"integer"},"crissCross":{"type":"integer"},"wordScrambles":{"type":"integer"},"spotTheDifference":{"type":"integer"},"sudoku":{"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","crissCross","wordScrambles","spotTheDifference","sudoku"],"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"},"crissCross":{"type":"string","format":"uri"},"wordScrambles":{"type":"string","format":"uri"},"spotTheDifference":{"type":"string","format":"uri"},"sudoku":{"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"}}},"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"}}},"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://kidsoffipads.com/developers"}}