Lingara Lingara Mwongozo Miongozo API Maktaba Programu Unda Programu ya wavuti
Lugha: Kiswahili

Unda mpango wa somo

Toleo la API 2026-10-affable-towhee

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

Huanza kutengeneza mpango wa somo na kutiririsha maendeleo yake. started hutaja mpango mara tu unapokuwepo, ili muunganisho uliokatika uweze kuunganishwa tena kwa GET /v1/lesson-plans/{id}/stream. Mtiririko huisha kwa result au error. Mpango unaotolewa kutoka maktaba hufika kama result moja pekee.

Wigo lesson_plans:write

Vigezo

Lingara-Versionheaderstringsi lazima
Toleo la API la kutumia kujibu ombi hili. Bila hilo, tokeni ya ufikiaji hupata toleo ambalo mteja wake ameunganishwa nalo, na ombi lisilo na tokeni hupata toleo la sasa. Toleo ambalo bado linaendelezwa linafikiwa tu kwa kulitaja hapa. Toleo lisilojulikana hujibiwa 400 pamoja na msimbo api_version_unknown. GET /v1/versions huorodhesha matoleo.

Mwili wa ombi application/json

contextstringinahitajika
source_langstringinahitajika
target_langstringinahitajika
levelintegerinahitajika

Majibu

200 Maendeleo ya mpango, kisha mpango wenyewe

Matukio ya mtiririko text/event-stream

Hutuma maoni ya keepalive kila sekunde 15.

started PlanStarted
plan_idstringinahitajika
phase PlanPhase
phasestringinahitajika
attemptintegerinahitajika
result PlanResult Humaliza mtiririko
planLessonPlaninahitajika
idstringinahitajika
statusPlanStatusinahitajika
titlestring | nullsi lazima
source_langstringinahitajika
target_langstringinahitajika
levelintegerinahitajika
created_atstringinahitajika
completed_atstring | nullsi lazima
ai_generatedbooleaninahitajika
contentLessonPlanContent | nullsi lazima
introductionstring | nullsi lazima
learning_objectivesarray of stringinahitajika
vocabularyarray of PlanWordinahitajika
wordstringinahitajika
pronunciationstring | nullsi lazima
translationstringinahitajika
setsarray of PlanSetinahitajika
numberintegerinahitajika
contextstring | nullsi lazima
questionsarray of PlanQuestioninahitajika
typestringinahitajika
promptstringinahitajika
optionsarray of string | nullsi lazima
answerstringinahitajika
explanationstringinahitajika
hintstring | nullsi lazima
error StreamError Humaliza mtiririko

Hufika ndani ya jibu la 200. Mstari wa hali umeshatumwa, kwa hivyo hitilafu baada ya mtiririko kufunguka huripotiwa kama tukio hili.

codestringinahitajika
messagestringinahitajika
plan_idstring | nullsi lazima

Hitilafu

402application/json
Simu ya mteja anayetozwa kwa matumizi imekataliwa kabla haijatumia chochote. spend_cap_reached: mteja au akaunti yake imefikia kikomo chake cha matumizi ya pesa cha kila mwezi; ongeza kikomo kwenye ukurasa wa Miunganisho. metered_billing_inactive: utozaji kwa matumizi haujawashwa kwa akaunti hii; uweke, au usasishe njia ya malipo, kwenye ukurasa wa Miunganisho.
410application/json
Toleo la API linalotumika kujibu ombi hili limesitishwa. Tuma toleo linalotumika katika Lingara-Version, au unganisha mteja na toleo lingine.
4XXapplication/json
Ombi limekataliwa. code inaeleza sababu, na error inaieleza kwa maneno.
503application/json · text/plain
Huduma haipatikani kwa muda; jaribu tena baada ya idadi ya sekunde zilizo katika Retry-After. Wakati wa matengenezo, mwili wa jibu ni maandishi ya kawaida badala ya bahasha ya hitilafu.
5XXapplication/json
Ombi limekataliwa. code inaeleza sababu, na error inaieleza kwa maneno.
codestringinahitajika

Sababu ya ombi kukataliwa, kama msimbo thabiti wa kufanyia maamuzi: kwa mfano insufficient_scope (403), rate_limited (429) na, kwa mteja anayetozwa kwa matumizi, spend_cap_reached (402) na metered_billing_inactive (402).

errorstringinahitajika

Mfano

Lugha ya mfano wa msimbo

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";
    }
}

Unapendelea maktaba? Tazama sehemu ya Maktaba.

Mfano wa mtiririko

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."}]}]}}}

Ikiwa tafsiri na marejeleo ya Kiingereza yanatofautiana, marejeleo ya Kiingereza ndiyo sahihi.