Lingara Lingara Dokumentasyon Mga gabay API Mga library Mga app Gumawa Web app
Wika: Filipino

Gumawa ng lesson plan

Bersyon ng API 2026-10-affable-towhee

post https://api.getlingara.com/v1/lesson-plans

Sinisimulang gawin ang isang lesson plan at ini-stream ang progreso nito. Pinangangalanan ng started ang plan sa sandaling umiral ito, kaya ang naputol na koneksyon ay maaaring muling kumonekta gamit ang GET /v1/lesson-plans/{id}/stream. Nagtatapos ang stream sa result o error. Ang plan na mula sa library ay dumarating bilang iisang result.

Mga scope lesson_plans:write

Mga parameter

Lingara-Versionheaderstringopsyonal
Ang bersyon ng API na gagamitin sa pagsagot sa kahilingang ito. Kung wala ito, makukuha ng access token ang bersyong naka-pin sa client nito, at makukuha ng kahilingang walang token ang kasalukuyang bersyon. Maaabot lang ang bersyong dine-develop pa sa pamamagitan ng pagpangalan dito. Ang hindi kilalang bersyon ay sinasagot ng 400 na may code na api_version_unknown. Inililista ng GET /v1/versions ang mga bersyon.

Katawan ng kahilingan application/json

contextstringkailangan
source_langstringkailangan
target_langstringkailangan
levelintegerkailangan

Mga tugon

200 Ang progreso ng plan, pagkatapos ay ang plan

Mga event ng stream text/event-stream

Nagpapadala ng keepalive na komento bawat 15 segundo.

started PlanStarted
plan_idstringkailangan
phase PlanPhase
phasestringkailangan
attemptintegerkailangan
result PlanResult Tinatapos ang stream
planLessonPlankailangan
idstringkailangan
statusPlanStatuskailangan
titlestring | nullopsyonal
source_langstringkailangan
target_langstringkailangan
levelintegerkailangan
created_atstringkailangan
completed_atstring | nullopsyonal
ai_generatedbooleankailangan
contentLessonPlanContent | nullopsyonal
introductionstring | nullopsyonal
learning_objectivesarray of stringkailangan
vocabularyarray of PlanWordkailangan
wordstringkailangan
pronunciationstring | nullopsyonal
translationstringkailangan
setsarray of PlanSetkailangan
numberintegerkailangan
contextstring | nullopsyonal
questionsarray of PlanQuestionkailangan
typestringkailangan
promptstringkailangan
optionsarray of string | nullopsyonal
answerstringkailangan
explanationstringkailangan
hintstring | nullopsyonal
error StreamError Tinatapos ang stream

Dumarating sa loob ng 200 na tugon. Naipadala na ang status line, kaya ang pagkabigo matapos mabuksan ang stream ay iniuulat bilang event na ito.

codestringkailangan
messagestringkailangan
plan_idstring | nullopsyonal

Mga error

402application/json
Tinanggihan ang tawag ng isang metered client bago ito nakagastos ng anuman. spend_cap_reached: naabot na ng client o ng account nito ang buwanang limitasyon sa paggastos; itaas ang limitasyon sa pahinang Mga integration. metered_billing_inactive: hindi aktibo ang usage billing para sa account na ito; i-set up ito, o i-update ang paraan ng pagbabayad, sa pahinang Mga integration.
410application/json
Itinigil na ang bersyon ng API na ginagamit sa pagsagot sa kahilingang ito. Magpadala ng suportadong bersyon sa Lingara-Version, o i-pin ang client sa ibang bersyon.
4XXapplication/json
Tinanggihan ang kahilingan. Sinasabi ng code kung bakit, at ipinapaliwanag ito ng error sa mga salita.
503application/json · text/plain
Pansamantalang hindi available ang serbisyo; subukang muli pagkatapos ng bilang ng segundong nasa Retry-After. Habang may maintenance, plain text ang body sa halip na ang error envelope.
5XXapplication/json
Tinanggihan ang kahilingan. Sinasabi ng code kung bakit, at ipinapaliwanag ito ng error sa mga salita.
codestringkailangan

Kung bakit tinanggihan ang request, bilang isang matatag na code na mapagbabatayan ng iyong programa: halimbawa insufficient_scope (403), rate_limited (429) at, para sa isang metered client, spend_cap_reached (402) at metered_billing_inactive (402).

errorstringkailangan

Halimbawa

Wika ng halimbawang code

curl

curl -N -X POST "https://api.getlingara.com/v1/lesson-plans" \
  -H "Authorization: Bearer $LINGARA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"context":"Ordering food at a night market","source_lang":"en","target_lang":"zh","level":2}'

TypeScript

const stream = client.createLessonPlan({
  context: "ordering at a night market",
  source_lang: "en",
  target_lang: "zh",
  level: 2,
});
for await (const ev of stream) {
  if (ev.event === "started") console.log("plan", ev.data.plan_id);
  if (ev.event === "phase") console.log("working:", ev.data.phase);
  if (ev.event === "result") console.log(ev.data.plan.title);
}

Rust

use lingara::models::{CreateLessonPlanEvent, LessonPlanCreateRequest};

let request = LessonPlanCreateRequest {
    context: "ordering at a night market".into(),
    source_lang: "en".into(),
    target_lang: "zh".into(),
    level: 2,
};
let mut stream = client.create_lesson_plan(&request).await?;
while let Some(event) = stream.next().await {
    match event? {
        CreateLessonPlanEvent::Started(started) => println!("plan {}", started.plan_id),
        CreateLessonPlanEvent::Phase(phase) => println!("working: {}", phase.phase),
        CreateLessonPlanEvent::Result(result) => println!("{}", result.plan.title.unwrap_or_default()),
        _ => {}
    }
}

Go

s, err := client.CreateLessonPlan(ctx, lingara.LessonPlanCreateRequest{
	Context:    "ordering at a night market",
	SourceLang: "en",
	TargetLang: "zh",
	Level:      2,
})
if err != nil {
	return err
}
defer s.Close()
for ev, err := range s.Events() {
	if err != nil {
		return err
	}
	switch e := ev.(type) {
	case lingara.CreateLessonPlanEventStarted:
		fmt.Println("plan", e.Data.PlanID)
	case lingara.CreateLessonPlanEventPhase:
		fmt.Println("working:", e.Data.Phase)
	case lingara.CreateLessonPlanEventResult:
		if e.Data.Plan.Title != nil {
			fmt.Println(*e.Data.Plan.Title)
		}
	}
}

Java

import com.getlingara.client.model.CreateLessonPlanEvent;
import com.getlingara.client.model.LessonPlanCreateRequest;

LessonPlanCreateRequest request =
    new LessonPlanCreateRequest()
        .context("Ordering at a night market")
        .level(2)
        .sourceLang("en")
        .targetLang("zh");
try (EventStream<CreateLessonPlanEvent> stream = client.createLessonPlan(request)) {
  for (CreateLessonPlanEvent event : stream) {
    if (event instanceof CreateLessonPlanEvent.Started started) {
      // Keep the id: streamLessonPlan rejoins a generation that was cut off.
      System.out.println("plan " + started.data().getPlanId());
    } else if (event instanceof CreateLessonPlanEvent.Phase phase) {
      System.out.println("phase " + phase.data().getPhase());
    } else if (event instanceof CreateLessonPlanEvent.Result result) {
      System.out.println(result.data().getPlan().getTitle());
    }
  }
}

Kotlin

import com.getlingara.kotlin.LingaraClient
import com.getlingara.kotlin.model.CreateLessonPlanEvent
import com.getlingara.kotlin.model.LessonPlanCreateRequest

val request =
    LessonPlanCreateRequest(context = "Ordering at a night market", sourceLang = "en", targetLang = "zh", level = 2)
client.createLessonPlan(request).use { stream ->
    stream.collect { event ->
        when (event) {
            // Keep the id: streamLessonPlan rejoins a generation that was cut off.
            is CreateLessonPlanEvent.Started -> println("plan ${event.data.planId}")
            is CreateLessonPlanEvent.Phase -> println("phase ${event.data.phase}")
            is CreateLessonPlanEvent.Result -> println(event.data.plan.title)
        }
    }
}

Ruby

client.create_lesson_plan(context: "ordering at a night market", source_lang: "en", target_lang: "zh", level: 2) do |event|
  case event
  in Lingara::CreateLessonPlanEventStarted => started then puts "plan #{started.data.plan_id}"
  in Lingara::CreateLessonPlanEventPhase => phase then puts "working: #{phase.data.phase}"
  in Lingara::CreateLessonPlanEventResult => result then puts "ready: #{result.data.plan.title}"
  else nil
  end
end

PHP

use Lingara\Model\LessonPlanCreateRequest;
use Lingara\Stream\CreateLessonPlanEvent;

$request = new LessonPlanCreateRequest([
    'context' => 'ordering at a night market',
    'source_lang' => 'en',
    'target_lang' => 'zh',
    'level' => 2,
]);
foreach ($client->createLessonPlan($request) as $event) {
    if ($event instanceof CreateLessonPlanEvent\Started) {
        echo 'plan ', $event->data->getPlanId(), "\n";
    } elseif ($event instanceof CreateLessonPlanEvent\Phase) {
        echo 'phase: ', $event->data->getPhase(), "\n";
    } elseif ($event instanceof CreateLessonPlanEvent\Result) {
        echo 'ready: ', $event->data->getPlan()->getTitle(), "\n";
    }
}

Mas gusto ang library? Tingnan ang seksyong Mga library.

Halimbawang stream

event: started
data: {"plan_id":"3f1c2a9e-5b7d-4e21-9a0c-6d8e4f2b1a37"}

event: phase
data: {"phase":"selecting_vocabulary","attempt":1}

event: result
data: {"plan":{"id":"3f1c2a9e-5b7d-4e21-9a0c-6d8e4f2b1a37","status":"complete","title":"At the night market","source_lang":"en","target_lang":"zh","level":2,"created_at":"2026-09-23T10:00:00Z","completed_at":"2026-09-23T10:00:41Z","ai_generated":true,"content":{"introduction":"Order food and ask prices at a night market.","learning_objectives":["Ask how much something costs"],"vocabulary":[{"word":"多少钱","pronunciation":"duōshao qián","translation":"how much"}],"sets":[{"number":1,"questions":[{"type":"multiple_choice_word","prompt":"Which word asks for a price?","options":["多少钱","谢谢"],"answer":"多少钱","explanation":"多少钱 means how much money."}]}]}}}

Kung magkaiba ang isang salin at ang sangguniang Ingles, ang sangguniang Ingles ang tama.