Lingara Lingara ドキュメント 学習ガイド API ライブラリ アプリ 作成 ウェブ版
言語: 日本語

レッスンプランに再接続

API バージョン 2026-10-affable-towhee

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

生成中のプランの進捗ストリームに再参加します。完成したプランは result を1つ返します。生成中だが参加できるライブストリームがないプランは pending を1つ返します。完了するまで GET /v1/lesson-plans/{id} をポーリングしてください。

スコープ lesson_plans:read

パラメーター

Lingara-Versionheaderstring任意
このリクエストに応答する API バージョン。指定がない場合、アクセストークンはそのクライアントに固定されたバージョンを、トークンのないリクエストは現行バージョンを受け取ります。開発中のバージョンには、ここで指定した場合にのみアクセスできます。不明なバージョンにはコード api_version_unknown とともに 400 を返します。GET /v1/versions でバージョンを一覧できます。
idpathstring必須

レスポンス

200 プランの残りの進捗、続いてプラン

ストリームイベント text/event-stream

15 秒ごとに keepalive コメントを送信します。

started PlanStarted
plan_idstring必須
phase PlanPhase
phasestring必須
attemptinteger必須
result PlanResult ストリームを終了
planLessonPlan必須
idstring必須
statusPlanStatus必須
titlestring | null任意
source_langstring必須
target_langstring必須
levelinteger必須
created_atstring必須
completed_atstring | null任意
ai_generatedboolean必須
contentLessonPlanContent | null任意
introductionstring | null任意
learning_objectivesarray of string必須
vocabularyarray of PlanWord必須
wordstring必須
pronunciationstring | null任意
translationstring必須
setsarray of PlanSet必須
numberinteger必須
contextstring | null任意
questionsarray of PlanQuestion必須
typestring必須
promptstring必須
optionsarray of string | null任意
answerstring必須
explanationstring必須
hintstring | null任意
pending PlanPending ストリームを終了
plan_idstring必須
statusPlanStatus必須
error StreamError ストリームを終了

200 レスポンスの中で届きます。ステータス行はすでに送信済みのため、ストリーム開始後の失敗はこのイベントとして通知されます。

codestring必須
messagestring必須
plan_idstring | null任意

エラー

410application/json
このリクエストに応答する API バージョンは提供を終了しました。Lingara-Version でサポート対象のバージョンを送るか、クライアントを別のバージョンに固定し直してください。
4XXapplication/json
リクエストは拒否されました。code が理由を示し、error がそれを文章で説明します。
503application/json · text/plain
サービスは一時的に利用できません。Retry-After に示された秒数が経過してから再試行してください。メンテナンス中は、本文はエラーエンベロープではなくプレーンテキストになります。
5XXapplication/json
リクエストは拒否されました。code が理由を示し、error がそれを文章で説明します。
codestring必須

リクエストが拒否された理由を、分岐に使える安定したコードで示します。例:insufficient_scope(403)、rate_limited(429)、従量課金クライアントの場合は spend_cap_reached(402)と metered_billing_inactive(402)。

errorstring必須

例

コード例の言語

curl

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

TypeScript

for await (const ev of client.streamLessonPlan({ id: planId })) {
  if (ev.event === "result") console.log("ready:", ev.data.plan.title);
  if (ev.event === "pending") console.log("still", ev.data.status, "- try again later");
}

Rust

use lingara::models::StreamLessonPlanEvent;

let mut stream = client.stream_lesson_plan(&plan_id).await?;
while let Some(event) = stream.next().await {
    match event? {
        StreamLessonPlanEvent::Result(result) => println!("ready: {}", result.plan.title.unwrap_or_default()),
        StreamLessonPlanEvent::Pending(pending) => println!("still {:?} - try again later", pending.status),
        _ => {}
    }
}

Go

// Rejoin a plan still generating, with the plan_id from its started event.
s, err := client.StreamLessonPlan(ctx, "3f1c2a9e-5b7d-4e21-9a0c-6d8e4f2b1a37")
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.StreamLessonPlanEventResult:
		fmt.Println("ready:", e.Data.Plan.ID)
	case lingara.StreamLessonPlanEventPending:
		fmt.Println("still", e.Data.Status, "- rejoin later")
	}
}

Java

import com.getlingara.client.model.StreamLessonPlanEvent;

try (EventStream<StreamLessonPlanEvent> stream = client.streamLessonPlan(planId)) {
  for (StreamLessonPlanEvent event : stream) {
    if (event instanceof StreamLessonPlanEvent.Result result) {
      System.out.println(result.data().getPlan().getTitle());
    } else if (event instanceof StreamLessonPlanEvent.Pending pending) {
      // Still generating elsewhere: ask again later.
      System.out.println("pending: " + pending.data().getStatus());
    }
  }
}

Kotlin

import com.getlingara.kotlin.LingaraClient
import com.getlingara.kotlin.model.StreamLessonPlanEvent

client.streamLessonPlan(planId).use { stream ->
    stream.collect { event ->
        when (event) {
            is StreamLessonPlanEvent.Result -> println(event.data.plan.title)
            // Still generating elsewhere: ask again later.
            is StreamLessonPlanEvent.Pending -> println("pending: ${event.data.status}")
            else -> Unit
        }
    }
}

Ruby

client.stream_lesson_plan(plan_id) do |event|
  case event
  in Lingara::StreamLessonPlanEventResult => result then puts "ready: #{result.data.plan.title}"
  in Lingara::StreamLessonPlanEventPending => pending then puts "still #{pending.data.status}, try again later"
  else nil
  end
end

PHP

use Lingara\Stream\StreamLessonPlanEvent;

foreach ($client->streamLessonPlan($planId) as $event) {
    if ($event instanceof StreamLessonPlanEvent\Result) {
        echo 'ready: ', $event->data->getPlan()->getTitle(), "\n";
    } elseif ($event instanceof StreamLessonPlanEvent\Pending) {
        echo 'still ', $event->data->getStatus()->value, ", try again later\n";
    }
}

ライブラリを使いたい場合は、ライブラリのセクションをご覧ください。

ストリームの例

event: pending
data: {"plan_id":"3f1c2a9e-5b7d-4e21-9a0c-6d8e4f2b1a37","status":"generating"}

翻訳と英語版リファレンスの内容が異なる場合は、英語版リファレンスが正しいものとします。