Learning game

A short, polished learning game designed around your material, as a self-contained, sandboxed web page.

  • Price4 credits (40p) per app
  • Typical time2 min to 7 min
  • Scopemedia:write
  • Runs asA background job
Try it

Run learning game in the sandbox

No key and nothing to pay. The sandbox returns a realistic example in a couple of seconds; no AI runs and no data is kept.

A topic to build the game about, when you send no material.
More about the topic: level, what to practise.
The material's title.
The concepts the game should practise.
The material the game teaches (up to 10,000 words).
  1. Queued202 and a job id, straight away
  2. ProcessingPoll, stream or wait for a webhook
  3. SucceededResult and files on the job
Every AI request runs as a background job, so nothing times out.

Aurora designs the game from what the material asks a learner to be able to do (sorting, building, predicting, deciding), then builds it as plain HTML, CSS and JavaScript that passed EduMark's sandbox checks. A round takes three to six minutes, works with keyboard and touch, and respects reduced motion. game.zip holds index.html and manifest.json; serve it in <iframe sandbox="allow-scripts">. At the end of each round the game posts {type: 'edumark-app', event: 'score', data: {score, total}} to the parent page. Send material, or a topic on its own (checked before anything is built).

Requires media:write. Costs 4 credits per app. Send a unique Idempotency-Key; reuse it with the identical body when retrying. Returns 202 with a job: poll GET /jobs/{job_id}, stream GET /jobs/{job_id}/events, or use a signed webhook.

Learning game

POST/v1/games

Scope media:write

Headers

Learning game: headers
FieldDetails
Idempotency-KeystringRequiredA unique key per new operation; reuse it with the identical body when retrying.
EduMark-VersionenumAPI version. Defaults to the latest.One of 2026-10-21

Request body

Learning game: request body
FieldDetails
topicstring, optionalA topic to build the game about, when you send no material.Up to 160 characters
topic_detailsstring, optionalMore about the topic: level, what to practise.Up to 600 characters
course_titlestring, optionalUp to 160 characters
titlestring, optionalThe material's title.Up to 160 characters
focusstring, optionalThe concepts the game should practise.Up to 200 characters
learning_outcomesarray of stringUp to 12 items
source_textstring, optionalThe material the game teaches (up to 10,000 words).Up to 60,000 characters
documentFileReference or DocumentInput, optionalThe material as a PDF, DOCX or TXT.
file_iddocument.file_idstringRequiredThe id returned by POST /v1/files, after POST /v1/files/{id}/complete reported ready.When sending FileReferencePattern ^file_[a-f0-9]{32}$
filenamedocument.filenamestringRequiredWhen sending DocumentInputUp to 200 characters
base64document.base64stringRequiredWhen sending DocumentInputUp to 27,962,028 characters
mime_typedocument.mime_typestring, optionalWhen sending DocumentInputUp to 150 characters

Responses

StatusMeaning
202Successful Response
400Request rejected. Inspect error.code and request_id; failed work is not billed.
401Request rejected. Inspect error.code and request_id; failed work is not billed.
402Request rejected. Inspect error.code and request_id; failed work is not billed.
403Request rejected. Inspect error.code and request_id; failed work is not billed.
404Request rejected. Inspect error.code and request_id; failed work is not billed.
409Request rejected. Inspect error.code and request_id; failed work is not billed.
410Request rejected. Inspect error.code and request_id; failed work is not billed.
413Request rejected. Inspect error.code and request_id; failed work is not billed.
415Request rejected. Inspect error.code and request_id; failed work is not billed.
422Validation Error
429Request rejected. Inspect error.code and request_id; failed work is not billed.
503Request rejected. Inspect error.code and request_id; failed work is not billed.