Lingara Lingara Dokumentasie Gidse API Biblioteke Apps Bou Webtoepassing
Taal: Afrikaans

Skep 'n lesplan

API-weergawe 2026-10-affable-towhee

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

Begin om 'n lesplan te genereer en stroom die vordering daarvan. started noem die plan sodra dit bestaan, sodat 'n verbroke verbinding met GET /v1/lesson-plans/{id}/stream kan herkoppel. Die stroom eindig met result of error. 'n Plan wat uit die biblioteek bedien word, kom as 'n enkele result aan.

Omvange lesson_plans:write

Parameters

Lingara-Versionheaderstringopsioneel
Die API-weergawe waaronder hierdie versoek beantwoord word. Daarsonder kry 'n toegangstoken die weergawe waaraan sy kliënt gekoppel is, en 'n versoek sonder 'n token kry die huidige weergawe. Die weergawe wat nog ontwikkel word, is slegs bereikbaar deur dit hier te noem. 'n Onbekende weergawe gee 400 met kode api_version_unknown. GET /v1/versions lys die weergawes.

Versoekliggaam application/json

contextstringverplig
source_langstringverplig
target_langstringverplig
levelintegerverplig

Antwoorde

200 Die plan se vordering, dan die plan

Stroomgebeurtenisse text/event-stream

Stuur elke 15 sekondes 'n keepalive-opmerking.

started PlanStarted
plan_idstringverplig
phase PlanPhase
phasestringverplig
attemptintegerverplig
result PlanResult Beëindig die stroom
planLessonPlanverplig
idstringverplig
statusPlanStatusverplig
titlestring | nullopsioneel
source_langstringverplig
target_langstringverplig
levelintegerverplig
created_atstringverplig
completed_atstring | nullopsioneel
ai_generatedbooleanverplig
contentLessonPlanContent | nullopsioneel
introductionstring | nullopsioneel
learning_objectivesarray of stringverplig
vocabularyarray of PlanWordverplig
wordstringverplig
pronunciationstring | nullopsioneel
translationstringverplig
setsarray of PlanSetverplig
numberintegerverplig
contextstring | nullopsioneel
questionsarray of PlanQuestionverplig
typestringverplig
promptstringverplig
optionsarray of string | nullopsioneel
answerstringverplig
explanationstringverplig
hintstring | nullopsioneel
error StreamError Beëindig die stroom

Kom binne die 200-antwoord aan. Die statusreël is reeds gestuur, so 'n fout nadat die stroom oopgemaak is, word as hierdie gebeurtenis gerapporteer.

codestringverplig
messagestringverplig
plan_idstring | nullopsioneel

Foute

402application/json
'n Oproep van 'n gemeterde kliënt is geweier voordat dit iets bestee het. spend_cap_reached: die kliënt of sy rekening het sy maandelikse bestedingslimiet bereik; verhoog die limiet op die Integrasies-bladsy. metered_billing_inactive: gebruiksfakturering is nie aktief vir hierdie rekening nie; stel dit op, of werk die betaalmetode by, op die Integrasies-bladsy.
410application/json
Die API-weergawe waaronder hierdie versoek beantwoord word, is gestaak. Stuur 'n ondersteunde weergawe in Lingara-Version, of koppel die kliënt aan 'n ander weergawe.
4XXapplication/json
Die versoek is geweier. code sê hoekom, en error sê dit in woorde.
503application/json · text/plain
Die diens is tydelik onbeskikbaar; probeer weer na die aantal sekondes in Retry-After. Tydens onderhoud is die liggaam gewone teks eerder as die foutomhulsel.
5XXapplication/json
Die versoek is geweier. code sê hoekom, en error sê dit in woorde.
codestringverplig

Waarom die versoek geweier is, as 'n stabiele kode om op te vertak: byvoorbeeld insufficient_scope (403), rate_limited (429) en, vir 'n gemeterde kliënt, spend_cap_reached (402) en metered_billing_inactive (402).

errorstringverplig

Voorbeeld

Taal van die kodevoorbeeld

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

Verkies jy 'n biblioteek? Sien die Biblioteke-afdeling.

Voorbeeldstroom

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

Indien 'n vertaling en die Engelse verwysing verskil, is die Engelse verwysing korrek.