Interactive app

A small hands-on learning app built from your lesson, as a self-contained, sandboxed web page.

  • Price3 credits (30p) per app
  • Typical time60 s to 5 min
  • Scopemedia:write
  • Runs asA background job
Try it

Run interactive app 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.

The lesson's title.
The one idea the app should make hands-on.
The lesson material (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 Interactive designs one living little world for one idea in the lesson and builds it as plain HTML, CSS and JavaScript that passed EduMark's sandbox checks: no network, storage, cookies or access to the page around it. interactive.zip holds index.html (with a Content-Security-Policy that denies all network access) and manifest.json. Serve it in <iframe sandbox="allow-scripts">; theme it by overriding the CSS variables listed in the manifest; it posts {type: 'edumark-app', event, data} messages for size, score and errors.

Requires media:write. Costs 3 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.

Interactive app

POST/v1/interactives

Scope media:write

Headers

Interactive app: 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

Interactive app: request body
FieldDetails
titlestring, optionalThe lesson's title.Up to 160 characters
course_titlestring, optionalUp to 160 characters
focusstring, optionalThe one idea the app should make hands-on.Up to 200 characters
source_textstring, optionalThe lesson material (up to 10,000 words).Up to 60,000 characters
documentFileReference or DocumentInput, optionalThe lesson 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.