Skip to main content
POST
Generates a full unit of learning: sequenced lessons, curriculum mapping against learning outcomes, Bloom’s taxonomy classification, and assessment milestones.

Request

string
required
Curriculum subject, e.g. "Science".
string
required
The unit topic, e.g. "Photosynthesis".
string[]
required
Specification codes for the outcomes this unit covers, e.g. ["1.1", "1.5"].
string
required
Post-primary year, "1" through "6".
number
required
How many lessons the unit should span.
object
required
number
default:"60"
Lesson length in minutes.
string
Free-text constraints — available equipment, prior knowledge, access needs.
string
default:"fast"
"fast" runs the single-pass flow. "detailed" runs the slower multi-agent flow surfaced in the product as MESO Think.

Response

object[]
One entry per mapped outcome, carrying active_verb, learning_outcome, lesson_implementation, bloom_domain, bloom_taxonomy_level and assessment.
object[]
Sequenced lesson entries, each numbered by lesson_number.
object[]
Milestones with a milestone_number, a description, and the lessons array they span.
The persisted unit plan is stored on the units table in the unit_plan column. Several older integrations assume a differently named column — check against the live schema before writing a reader.

Sessions

Unit planning is the only capability with a session concept. POST /create returns a sessionId, and GET /session reads it back.
Sessions are held in memory, in the serving isolate. They are not persisted to the database and are not shared between isolates. A worker recycle, a cold start, or a request landing on a different isolate loses the session — and Supabase gives no guarantee that two consecutive calls hit the same one.Treat sessionId as a best-effort convenience within a single burst of activity. Anything that must survive belongs in units, written by the client.

Sub-paths

Besides the generation call, the handler answers: The generation call accepts three body shapes: an explicit /create path, a wrapped { "inputs": { ... } }, or a flat body carrying subject. All three are equivalent.
usage.provider reads "vertex-agent". The TypeScript type still declares "bedrock" — the type lags the running code, which moved to the Vertex agents on 2026-08-18. Trust the response, not the type.