For developers and agents
Generate reasoning items, from a seed, over HTTP
A free JSON API that generates matrix, sequence and syllogism items with the rule that makes each one correct. No key, no sign-up, reproducible from a seed.
The generator behind the practice page is available over HTTP. It builds matrix, sequence and syllogism items from a seed, proves each one has exactly one correct answer, and returns the rule that makes it correct. There is no key and no sign-up.
Why it exists
A published item bank is a memorised item bank. Any set of reasoning questions on the open web is in a training corpus within a year of being posted, which makes it useless for measuring a model and steadily less useful for practising against one. These items are built when you ask for them, so a set nobody has seen is one request away.
That is the whole pitch. If you are evaluating a model, you can generate a fresh paper per run and still reproduce any run exactly from its seed.
Ask for items
# five syllogisms, a seed chosen for you and returned
curl -s https://mytestatlas.com/api/items \
-H 'content-type: application/json' \
-d '{"kind":"logic","count":5}'# the same five, forever
curl -s 'https://mytestatlas.com/api/items?kind=logic&count=5&seed=2026'Fields: kind is logic, matrix or series; count is 1 to 50; seed is any integer, and is returned whether you sent one or not; family narrows the item types, comma-separated. GET with a query string and POST with a JSON body are the same request.
What comes back
Every item carries its id, family, question, lettered options, the answer letter, and why — the rule, in words. Logic items add prompt, which is the item already formatted as the text you would send a model. Figure items carry stem and per-option figure as inline SVG.
checkedAgainst is how many candidate answers were enumerated to prove this one is the only one that fits: 256 for a syllogism, 120 for an ordering puzzle, every visually distinct figure the rule could produce for a grid.
Mark the answers
# send the letters back with the seed they came from
curl -s https://mytestatlas.com/api/score \
-H 'content-type: application/json' \
-d '{"kind":"logic","seed":2026,"answers":["C","A","B"]}'The paper is rebuilt from the seed rather than stored, so nothing about you is kept between the two requests and there is no session to expire. You get each item marked with the rule, and correctOfSet — right answers out of this set, which is not a percentile, not an IQ, and not comparable between seeds.
What families exist
# the list this build actually serves
curl -s https://mytestatlas.com/api/items/familiesThat endpoint is the reference rather than this page: it is generated from the same constants the generator uses, so it cannot drift from what the API will accept.
Limits, and what to expect when something is wrong
A bad request is answered with a JSON code and enough detail to fix it — unknown_kind, bad_count, bad_seed, unknown_family, cannot_generate. One thing to know: an unrecognised path returns this site’s HTML error page, not JSON, because the CDN in front of the API rewrites 404s. Check the path before you parse the body.
There is no rate limit today and no key. If that changes it will be announced here first, and the response shapes above will not change.
Running an evaluation without spoiling it
The reason to generate rather than download is contamination: a published item set stops measuring reasoning the moment it is scraped into training data, and every fixed benchmark is on that clock. A generator escapes that only if two rules are followed, and they are worth stating because breaking either one quietly turns a measurement back into a memory test.
- Publish the seeds after the run, never before. Report the seed range with your results so anyone can rebuild every item you used and check your marking. Announcing it beforehand lets a model be prepared for exactly those items.
- Use a seed range once. A range you have already published may be in a training set by the time you run again. Take a fresh range for each run; there is no shortage.
Use the logic kind for this. It is text, so a model is not being asked to parse an SVG before it can reason, and its families do not saturate — 20 000 seeds produced 20 000 distinct syllogisms and 19 707 distinct ordering puzzles. The drawn families are deliberately not recommended here: measured at saturation, all thirteen together hold 13 257 questions, which is minutes of enumeration for anyone who wants to enumerate them.
Report results as right answers out of the set, with the seed range and the item count beside them. There is no leaderboard here and no published high score, because a number without its seed range cannot be checked by anybody.
Terms, plainly
The generated items are released under CC0: use them commercially, publish them, train on them, no attribution required. What we ask in return is honesty about what they are — these are original items with published rules, not a normed intelligence test. Do not present a score from this API to anyone as an IQ.
The API is free and offered as-is. Nothing about a request is stored: no key, no address, no log of what you generated.
From an agent
The same endpoints are wrapped as an MCP server, so an assistant can generate and mark items without anybody writing HTTP by hand. Add npx -y mytestatlas-mcp as an MCP command in your client; it needs no key and takes no configuration. It is a single file with no dependencies, which on a package an agent runs on your machine is the property that matters most.
Something wrong here, or a kind of item you want and cannot get? support@mytestatlas.com.