Lingara Lingara Docs Guides API Libraries Apps Build Web app
Language: English

Get a lesson plan

API version 2026-10-affable-towhee

get https://api.getlingara.com/v1/lesson-plans/{id}

Returns a lesson plan you own. A plan that is still generating has no content yet.

Scopes lesson_plans:read

Parameters

Lingara-Versionheaderstringoptional
The API version to answer this request under. Without it, an access token gets the version its client is pinned to, and a request with no token gets the current version. The version still in development is reached only by naming it here. An unknown version answers 400 with code api_version_unknown. GET /v1/versions lists the versions.
idpathstringrequired

Responses

200 The lesson plan

idstringrequired
statusPlanStatusrequired
titlestring | nulloptional
source_langstringrequired
target_langstringrequired
levelintegerrequired
created_atstringrequired
completed_atstring | nulloptional
ai_generatedbooleanrequired
contentLessonPlanContent | nulloptional
introductionstring | nulloptional
learning_objectivesarray of stringrequired
vocabularyarray of PlanWordrequired
wordstringrequired
pronunciationstring | nulloptional
translationstringrequired
setsarray of PlanSetrequired
numberintegerrequired
contextstring | nulloptional
questionsarray of PlanQuestionrequired
typestringrequired
promptstringrequired
optionsarray of string | nulloptional
answerstringrequired
explanationstringrequired
hintstring | nulloptional

Errors

410application/json
The API version this request is answered under has been discontinued. Send a supported version in Lingara-Version, or re-pin the client.
4XXapplication/json
The request was refused. code says why, and error says it in words.
503application/json · text/plain
The service is temporarily unavailable; retry after the number of seconds in Retry-After. During maintenance the body is plain text rather than the error envelope.
5XXapplication/json
The request was refused. code says why, and error says it in words.
codestringrequired

Why the request was refused, as a stable code to branch on: for example insufficient_scope (403), rate_limited (429) and, for a metered client, spend_cap_reached (402) and metered_billing_inactive (402).

errorstringrequired

Example

Code sample language

curl

curl "https://api.getlingara.com/v1/lesson-plans/$ID" \
  -H "Authorization: Bearer $LINGARA_TOKEN"

TypeScript

const plan = await client.getLessonPlan({ id: planId });
console.log(plan.status, plan.title);

Rust

let plan = client.get_lesson_plan(&plan_id).await?;
println!("{:?} {}", plan.status, plan.title.as_deref().unwrap_or("(untitled)"));

Go

plan, err := client.GetLessonPlan(ctx, "3f1c2a9e-5b7d-4e21-9a0c-6d8e4f2b1a37")
if err != nil {
	return err
}
fmt.Println(plan.Value.Status, plan.Value.CreatedAt)

Java

import com.getlingara.client.model.LessonPlan;

LessonPlan plan = client.getLessonPlan(planId).body();
System.out.println(plan.getTitle() + " (" + plan.getStatus() + ")");

Kotlin

val plan = client.getLessonPlan(planId).body
println("${plan.title} (${plan.status})")

Ruby

plan = client.get_lesson_plan(plan_id).value
puts "#{plan.title} (#{plan.status})"
plan.content&.vocabulary&.each { |word| puts "#{word.word}: #{word.translation}" }

PHP

$plan = $client->getLessonPlan($planId)->value;
echo $plan->getTitle(), ' (', $plan->getStatus()->value, ")\n";

Prefer a library? See the Libraries section.