رفتن به محتوا

جلسه‌ها

همهٔ مسیرها نسبت به https://app.lobbe.ai/api/v1 هستند و هر درخواست Authorization: Bearer $LOBBE_TOKEN را می‌فرستد. مرجع API همهٔ مسیرها را فهرست می‌کند و فیلدهای x-lobbe-* را توضیح می‌دهد.

فهرست جلسه‌های آماده، از تازه‌ترین.

ویژگی مقدار
دسترسی‌ها recordings:read
دقیقه مصرف می‌کند خیر
سقف درخواست‌ها read: ۶۰۰ درخواست در هر ۱۰ دقیقه برای هر توکن
پاسخ موفق 200
نام محل نوع الزامی توضیح
limit query integer خیر تعداد جلسه‌هایی که برمی‌گردد، از ۱ تا ۱۰۰ (پیش‌فرض ۲۰)
cursor query string خیر مقدار nextCursor صفحهٔ قبل، بی‌تغییر؛ اگر نباشد تازه‌ترین صفحه برمی‌گردد، و هر مقدار دیگری پاسخ 400 می‌گیرد
seriesId query string خیر فقط جلسه‌های این سری، سری خودتان یا سری‌ای که عضوش هستید (سری‌ای که به آن دسترسی ندارید پاسخ 404 می‌گیرد)؛ اگر نباشد، جلسه‌های خودتان

یک صفحه از جلسه‌های آماده، از تازه‌ترین.

فیلد نوع همیشه می‌آید توضیح
schemaVersion 1 بله در نسخهٔ ۱ API همیشه 1
items[] object[] بله جلسه‌های این صفحه: فقط جلسه‌های READY، همان‌هایی که جلسهٔ کاملشان را می‌توان خواند
items[].id string بله شناسهٔ جلسه
items[].title string | null بله عنوان جلسه: همان‌که صاحب جلسه یا توکنِ فرستنده داده است، وگرنه عنوان لُب آن؛ اگر عنوانی نداشته باشد null است
items[].kind "MEETING" | "LECTURE" | "INTERVIEW" | "VOICE_MEMO" | "CALL" بله نوع ضبط، که قالب لُب را تعیین می‌کند: MEETING، LECTURE، INTERVIEW، VOICE_MEMO یا CALL
items[].createdAt string بله زمانی که لُب جلسه را دریافت کرد (ISO 8601، به وقت UTC)؛ ترتیب listReadyRecordings بر اساس آن است
items[].recordedAt string بله زمان برگزاری جلسه (ISO 8601، به وقت UTC): همان recordedAt که با جلسه فرستاده شد، وگرنه زمانی که لُب آن را دریافت کرد
items[].durationSeconds integer | null بله طول صدا به ثانیه، همان‌طور که لُب اندازه گرفت؛ اگر معلوم نباشد null است
items[].url string (uri) بله صفحهٔ جلسه در برنامهٔ وب
items[].bundleUrl string (uri) بله با درخواست GET و توکنی که دسترسی recordings:read دارد، جلسهٔ کامل را بگیرید (getRecordingBundle)
items[].series object | null بله سری‌ای که جلسه در آن است؛ اگر در هیچ سری‌ای نباشد یا سری‌ها خاموش باشند null است
items[].series.id string بله شناسهٔ سری، همان‌که seriesId می‌گیرد
items[].series.name string بله نام سری
items[].displayTitle string | null بله عنوان همان‌طور که برنامه نشان می‌دهد: در سری‌ای که عنوان جلسه‌هایش «نام سری + تاریخ» است، نام سری و تاریخ جلسه به زبان لُب؛ وگرنه عنوان جلسه و اگر نباشد عنوان لُب آن؛ اگر هیچ‌کدام نباشد null است
nextCursor string | null بله برای صفحهٔ بعد (قدیمی‌تر) آن را به‌عنوان cursor بفرستید؛ در صفحهٔ آخر null است

خطاها با { error: { code, message, details? } } پاسخ داده می‌شوند و code قرارداد است: خطاها را ببینید.

جست‌وجو در جلسه‌های آمادهٔ صاحب حساب با واژه‌هایشان، از تازه‌ترین جلسه.

ویژگی مقدار
دسترسی‌ها recordings:query
دقیقه مصرف می‌کند خیر
سقف درخواست‌ها search: ۱۲۰ درخواست در هر ۱۰ دقیقه برای هر توکن
پاسخ موفق 200
نام محل نوع الزامی توضیح
q query string بله واژه‌هایی که جست‌وجو می‌شوند، ۱ تا ۲۰۰ نویسه. جلسه‌ای پیدا می‌شود که همهٔ واژه‌ها در عنوان، رونوشت یا لُب آن آمده باشند، حتی درون واژه‌ای بلندتر؛ بزرگی و کوچکی حروف، اعراب، نیم‌فاصله و شکل عربی حروف نادیده گرفته می‌شوند و رقم‌های فارسی با رقم‌های لاتین یکی حساب می‌شوند. qی که هیچ واژه‌ای نداشته باشد پاسخ 400 می‌گیرد
seriesId query string خیر فقط جلسه‌های این سری، سری خودتان یا سری‌ای که عضوش هستید (سری‌ای که به آن دسترسی ندارید پاسخ 404 می‌گیرد)؛ اگر نباشد، جلسه‌های خودتان
kind query "MEETING" | "LECTURE" | "INTERVIEW" | "VOICE_MEMO" | "CALL" خیر فقط جلسه‌هایی از این نوع: MEETING، LECTURE، INTERVIEW، VOICE_MEMO یا CALL
from query string (date-time) خیر فقط جلسه‌هایی که در این زمان یا پس از آن برگزار شده‌اند (recordedAt)، به ISO 8601 با اختلاف ساعت
to query string (date-time) خیر فقط جلسه‌هایی که در این زمان یا پیش از آن برگزار شده‌اند (recordedAt)، به ISO 8601 با اختلاف ساعت
limit query integer خیر تعداد جلسه‌هایی که برمی‌گردد، از ۱ تا ۵۰ (پیش‌فرض ۲۰)
cursor query string خیر مقدار nextCursor صفحهٔ قبل، بی‌تغییر؛ اگر نباشد صفحهٔ نخست برمی‌گردد، و مقدار نادرست پاسخ 400 می‌گیرد

جلسه‌های آماده‌ای که واژه‌ها در آن‌ها پیدا شد، از تازه‌ترین جلسه (بر اساس recordedAt)؛ جست‌وجو رایگان است.

فیلد نوع همیشه می‌آید توضیح
schemaVersion 1 بله در نسخهٔ ۱ API همیشه 1
items[] object[] بله جلسه‌های این صفحه: فقط جلسه‌های READY، هر کدام همان ردیف listReadyRecordings به‌اضافهٔ snippet
items[].id string بله شناسهٔ جلسه
items[].title string | null بله عنوان جلسه: همان‌که صاحب جلسه یا توکنِ فرستنده داده است، وگرنه عنوان لُب آن؛ اگر عنوانی نداشته باشد null است
items[].kind "MEETING" | "LECTURE" | "INTERVIEW" | "VOICE_MEMO" | "CALL" بله نوع ضبط، که قالب لُب را تعیین می‌کند: MEETING، LECTURE، INTERVIEW، VOICE_MEMO یا CALL
items[].createdAt string بله زمانی که لُب جلسه را دریافت کرد (ISO 8601، به وقت UTC)؛ ترتیب listReadyRecordings بر اساس آن است
items[].recordedAt string بله زمان برگزاری جلسه (ISO 8601، به وقت UTC): همان recordedAt که با جلسه فرستاده شد، وگرنه زمانی که لُب آن را دریافت کرد
items[].durationSeconds integer | null بله طول صدا به ثانیه، همان‌طور که لُب اندازه گرفت؛ اگر معلوم نباشد null است
items[].url string (uri) بله صفحهٔ جلسه در برنامهٔ وب
items[].bundleUrl string (uri) بله با درخواست GET و توکنی که دسترسی recordings:read دارد، جلسهٔ کامل را بگیرید (getRecordingBundle)
items[].series object | null بله سری‌ای که جلسه در آن است؛ اگر در هیچ سری‌ای نباشد یا سری‌ها خاموش باشند null است
items[].series.id string بله شناسهٔ سری، همان‌که seriesId می‌گیرد
items[].series.name string بله نام سری
items[].displayTitle string | null بله عنوان همان‌طور که برنامه نشان می‌دهد: در سری‌ای که عنوان جلسه‌هایش «نام سری + تاریخ» است، نام سری و تاریخ جلسه به زبان لُب؛ وگرنه عنوان جلسه و اگر نباشد عنوان لُب آن؛ اگر هیچ‌کدام نباشد null است
items[].snippet string | null بله حداکثر ۲۰۰ نویسه پیرامون نخستین جای پیداشده، از رونوشت، و اگر واژه‌ها فقط در لُب پیدا شده باشند از لُب؛ اگر واژه‌ها فقط در عنوان پیدا شده باشند null است
nextCursor string | null بله برای صفحهٔ بعد (قدیمی‌تر) آن را به‌عنوان cursor بفرستید؛ در صفحهٔ آخر null است

خطاها با { error: { code, message, details? } } پاسخ داده می‌شوند و code قرارداد است: خطاها را ببینید.

هزینهٔ پرسیدن یک سؤال از این جلسه، به دقیقه.

ویژگی مقدار
دسترسی‌ها recordings:query
دقیقه مصرف می‌کند خیر
سقف درخواست‌ها search: ۱۲۰ درخواست در هر ۱۰ دقیقه برای هر توکن
پاسخ موفق 200
نام محل نوع الزامی توضیح
id path string بله شناسهٔ جلسه

هزینهٔ یک پرسش از این جلسه؛ خواندن این برآورد رایگان است.

فیلد نوع همیشه می‌آید توضیح
schemaVersion 1 بله در نسخهٔ ۱ API همیشه 1
minutes integer بله قیمت به دقیقه: همان هزینه‌ای که askRecording می‌گیرد و به همان شیوه از رونوشت جلسه حساب می‌شود، پس تا وقتی رونوشت تغییر نکند این دو یکی‌اند

خطاها با { error: { code, message, details? } } پاسخ داده می‌شوند و code قرارداد است: خطاها را ببینید.

پرسیدن یک سؤال از یک جلسه، با پاسخ از رونوشت و لُب آن؛ هر پاسخ هزینه دارد.

ویژگی مقدار
دسترسی‌ها recordings:query
دقیقه مصرف می‌کند بله
سقف درخواست‌ها ask: ۳۰ درخواست در هر ۱۰ دقیقه برای هر توکن
پاسخ موفق 200

این مسیر می‌تواند دقیقه مصرف کند: هدر Idempotency-Key را بفرستید تا تکرار درخواست با همان کلید، به‌جای هزینهٔ دوباره، همان نتیجهٔ اول را برگرداند. تکرارپذیری و تلاش دوباره را ببینید.

نام محل نوع الزامی توضیح
id path string بله شناسهٔ جلسه
Idempotency-Key header string خیر پیشنهاد می‌شود. برای هر جلسه یا سؤال تازه یک بار کلیدی بسازید (۸ تا ۶۴ نویسه، مثلاً یک UUID تصادفی) و همان کلید را بی‌تغییر در هر تلاش دوبارهٔ همان درخواست بفرستید؛ هرگز آن را برای درخواست دیگری به کار نبرید. تکرار یک درخواست همان نتیجهٔ اول را برمی‌گرداند و هرگز دو بار هزینه نمی‌گیرد. کلید برای همیشه از آنِ صاحب حساب می‌ماند و هرگز منقضی نمی‌شود.

بدنهٔ درخواست (application/json)

Section titled “بدنهٔ درخواست (application/json)”

سؤال، و در صورت نیاز سقفی برای قیمت آن. فیلدی که این‌جا نیامده پاسخ 400 می‌گیرد.

فیلد نوع الزامی توضیح
question string بله سؤال، پس از پیراستن دو سر آن، ۱ تا ۵۰۰ نویسه
maxMinutes integer خیر بیشترین هزینه‌ای که می‌پذیرید، به دقیقه (دست‌کم ۱): اگر قیمت بیشتر باشد، سؤال با 409 PRICE_ABOVE_MAX رد می‌شود (details آن minutes و maxMinutes را دارد) و هزینه‌ای گرفته نمی‌شود؛ اگر نباشد، سقفی در کار نیست
idempotencyKey string خیر کلید تکرار درخواست در بدنه، به‌جای هدر Idempotency-Key (۸ تا ۶۴ نویسه)؛ اگر هر دو فرستاده شوند هدر ملاک است

پاسخ، که هزینه‌اش گرفته شده است؛ تکرار درخواست با همان کلید همین پاسخ را برمی‌گرداند و هرگز دو بار هزینه نمی‌گیرد.

فیلد نوع همیشه می‌آید توضیح
schemaVersion 1 بله در نسخهٔ ۱ API همیشه 1
answer string بله پاسخ. [n] ادعایی را نشان می‌دهد که citations[n - 1] پشتیبان آن است، و این نشانه‌ها به ترتیب خواندن ۱، ۲، … شماره می‌خورند
citations[] object[] بله جایی از جلسه که این را می‌گوید: حداکثر ۳ نوبت، به ترتیبی که پاسخ نخستین بار به آن‌ها ارجاع می‌دهد
citations[].startMs number بله زمان شروع نوبتِ ارجاع‌شده، به میلی‌ثانیه از ابتدای صدای جلسه
citations[].speaker string | null بله گویندهٔ آن: برچسب گویندهٔ نوبت همان‌طور که در رونوشت آمد (مثلاً speaker_0)، هرگز نامی که به صدا داده شده؛ اگر نوبت گوینده‌ای نداشته باشد null است
minutes integer بله هزینه‌ای که این پاسخ گرفت، به دقیقه؛ پاسخ ردشده هم هزینه دارد
refused boolean بله اگر لُب از روی آنچه گفته شده پاسخی ندهد true است: answer دلیلش را می‌گوید و هزینه همچنان گرفته می‌شود

خطاها با { error: { code, message, details? } } پاسخ داده می‌شوند و code قرارداد است: خطاها را ببینید.

یک جلسهٔ آماده: رونوشت، لُب و آمار آن؛ با format=markdown یک سند Markdown برمی‌گرداند.

ویژگی مقدار
دسترسی‌ها recordings:read
دقیقه مصرف می‌کند خیر
سقف درخواست‌ها read: ۶۰۰ درخواست در هر ۱۰ دقیقه برای هر توکن
پاسخ موفق 200

با ?format=markdown پاسخ text/markdown است: همین محتوا در قالب یک سند Markdown.

نام محل نوع الزامی توضیح
id path string بله شناسهٔ جلسه
format query "json" | "markdown" خیر json (پیش‌فرض) یا markdown که کل جلسه را در یک سند text/markdown برمی‌گرداند؛ هر مقدار دیگری پاسخ 400 می‌گیرد

یک جلسهٔ آماده: رونوشت، لُب و آمار آن.

فیلد نوع همیشه می‌آید توضیح
schemaVersion 1 بله در نسخهٔ ۱ API همیشه 1
recording object بله خود جلسه
recording.id string بله شناسهٔ جلسه
recording.title string | null بله عنوان جلسه: همان‌که صاحب جلسه یا توکنِ فرستنده داده است، وگرنه عنوان لُب آن؛ اگر عنوانی نداشته باشد null است
recording.kind "MEETING" | "LECTURE" | "INTERVIEW" | "VOICE_MEMO" | "CALL" بله نوع ضبط، که قالب لُب را تعیین می‌کند: MEETING، LECTURE، INTERVIEW، VOICE_MEMO یا CALL
recording.source "IN_APP" | "UPLOAD" بله از چه راهی به لُب رسید: IN_APP (در برنامه ضبط شد) یا UPLOAD (یک فایل، از جمله ارسال با توکن)
recording.createdAt string بله زمانی که لُب جلسه را دریافت کرد (ISO 8601، به وقت UTC)
recording.recordedAt string بله زمان برگزاری جلسه (ISO 8601، به وقت UTC): همان recordedAt که با جلسه فرستاده شد، وگرنه زمانی که لُب آن را دریافت کرد
recording.durationSeconds integer | null بله طول صدا به ثانیه، همان‌طور که لُب اندازه گرفت؛ اگر معلوم نباشد null است
recording.url string (uri) بله صفحهٔ جلسه در برنامهٔ وب
recording.series object | null بله سری‌ای که جلسه در آن است؛ اگر در هیچ سری‌ای نباشد یا سری‌ها خاموش باشند null است
recording.series.id string بله شناسهٔ سری، همان‌که seriesId می‌گیرد
recording.series.name string بله نام سری
recording.access "owner" | "member" بله اگر جلسه مال خودتان باشد owner؛ اگر از سری‌ای باشد که عضوش هستید member
recording.displayTitle string | null بله عنوان همان‌طور که برنامه نشان می‌دهد: در سری‌ای که عنوان جلسه‌هایش «نام سری + تاریخ» است، نام سری و تاریخ جلسه به زبان لُب؛ وگرنه عنوان جلسه و اگر نباشد عنوان لُب آن؛ اگر هیچ‌کدام نباشد null است
recording.subtitle string | null بله در سری‌ای که عنوان جلسه‌هایش «نام سری + تاریخ» است، عنوان خود جلسه و اگر نباشد عنوان لُب آن؛ در غیر این صورت null است
transcript object بله آنچه گفته شد، نوبت به نوبت
transcript.language string بله زبانی که در صدا تشخیص داده شد، با کد ISO 639-1 (fa، en، …)
transcript.revision integer بله با هر ویرایش صاحب جلسه و هر «بررسی دوبارهٔ جلسه» برای صداهای جاافتاده یکی بالا می‌رود؛ 0 یعنی هیچ‌کدام رخ نداده است
transcript.edited boolean بله این‌که رونوشت از نخستین ساخته‌شدنش تا به حال تغییر کرده است یا نه، با ویرایش صاحب جلسه یا با «بررسی دوبارهٔ جلسه» (revision بیشتر از 0)
transcript.speakers[] object[] بله برای هر کسی که صحبت کرد یک سطر؛ صداهایی که یک نام گرفته‌اند یک نفر حساب می‌شوند
transcript.speakers[].label string بله برچسب این فرد (مثلاً speaker_0)، همان‌که در segments[].speaker و stats می‌آید
transcript.speakers[].name string | null بله نامی که به این صدا داده شد؛ اگر کسی نام‌گذاری‌اش نکرده باشد null است
transcript.segments[] object[] بله نوبت‌ها، به ترتیب
transcript.segments[].speaker string بله چه کسی صحبت کرد: یکی از speakers[].label
transcript.segments[].startMs integer بله زمان شروع نوبت، به میلی‌ثانیه از ابتدای صدا
transcript.segments[].endMs integer بله زمان پایان نوبت، به میلی‌ثانیه از ابتدای صدا
transcript.segments[].text string بله آنچه گفته شد، با اصلاح‌های صاحب جلسه
transcript.segments[].edited boolean بله این‌که صاحب جلسه این نوبت را اصلاح کرده است یا نه
transcript.segments[].lowConfidence boolean بله این‌که شاید این نوبت درست شنیده نشده باشد؛ روی نوبتی که صاحب جلسه اصلاح کرده همیشه false است
transcript.text string بله کل رونوشت به‌صورت متن ساده، بدون گوینده و زمان
transcript.markdown string بله رونوشت به‌صورت Markdown، برای هر نوبت یک خط **name** [mm:ss]: text (از یک ساعت به بعد [h:mm:ss]) و بدون عنوان؛ صدایی که کسی نام‌گذاری‌اش نکرده با برچسبش می‌آید
lobbe object بله لُب جلسه: نوشتهٔ هوش مصنوعی، در تازه‌ترین نسخه‌اش
lobbe.id string بله شناسهٔ لُب
lobbe.type "MEETING_MOM" | "LECTURE_NOTES" | "INTERVIEW_QA" | "VOICE_MEMO" | "CALL_NOTES" بله قالب آن که kind جلسه تعیینش می‌کند: MEETING_MOM، LECTURE_NOTES، INTERVIEW_QA، VOICE_MEMO یا CALL_NOTES
lobbe.language "en" | "fa" بله زبانی که لُب به آن نوشته شده است: fa یا en
lobbe.promptVersion string بله کدام پرامپت آن را ساخت: برچسبی که با نسخهٔ پرامپت شروع می‌شود (مثلاً v8)، برای مقایسهٔ لُب‌ها، نه برای تجزیه
lobbe.transcriptRevision integer | null بله revision رونوشتی که لُب از آن ساخته شد، پس اگر از transcript.revision کمتر باشد رونوشت پس از آن ویرایش شده است؛ در لُب‌های پیش از امکان ویرایش رونوشت null است (آن را 0 بخوانید)
lobbe.content object بله محتوای ساختاریافتهٔ لُب
lobbe.content.version 2 بله نسخهٔ قالب محتوا: همیشه 2
lobbe.content.title string بله عنوان خود لُب، ۱ تا ۲۰۰ نویسه
lobbe.content.sections[] object[] بله بخش‌هایی که لُب از آن‌ها ساخته شده، دست‌کم یکی، به ترتیب خواندن؛ این‌که کدام نوع‌ها بیایند به جلسه بستگی دارد
lobbe.content.sections[] (kind: "summary") object وقتی kind برابر "summary" باشد، فیلدهای زیر
lobbe.content.sections[].kind "summary" بله نوع بخش، که فیلدهای دیگرش را تعیین می‌کند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text
lobbe.content.sections[].text string بله متن بخش (summary و free_text)
lobbe.content.sections[] (kind: "decision_list") object وقتی kind برابر "decision_list" باشد، فیلدهای زیر
lobbe.content.sections[].kind "decision_list" بله نوع بخش، که فیلدهای دیگرش را تعیین می‌کند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text
lobbe.content.sections[].items[] object[] بله مدخل‌های بخش (decision_list، action_item_list، key_point_list، qa_list و follow_up_list)
lobbe.content.sections[].items[].text string بله خود مدخل: یک تصمیم، یک اقدام، یک نکتهٔ کلیدی یا یک پیگیری
lobbe.content.sections[].items[].sourceMs number | null خیر جایی از جلسه که این مدخل را پشتیبانی می‌کند: startMs همان نوبت رونوشت، به میلی‌ثانیه؛ اگر هیچ نوبت واحدی پشتیبانش نباشد null است، در لُب‌های ساخته‌شده پیش از ارجاع‌ها نمی‌آید، و در لُب‌های پیش از ۶ سپتامبر ۲۰۲۶ ممکن است به‌جای شروع دقیق نوبت، ثانیه‌ای باشد که به مدل نشان داده شد
lobbe.content.sections[] (kind: "action_item_list") object وقتی kind برابر "action_item_list" باشد، فیلدهای زیر
lobbe.content.sections[].kind "action_item_list" بله نوع بخش، که فیلدهای دیگرش را تعیین می‌کند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text
lobbe.content.sections[].items[] object[] بله مدخل‌های بخش (decision_list، action_item_list، key_point_list، qa_list و follow_up_list)
lobbe.content.sections[].items[].text string بله خود مدخل: یک تصمیم، یک اقدام، یک نکتهٔ کلیدی یا یک پیگیری
lobbe.content.sections[].items[].owner string | null بله چه کسی اقدام را انجام می‌دهد، با نامی که در جلسه گفته شد یا برچسب گوینده؛ اگر جلسه روشن نکرده باشد null است
lobbe.content.sections[].items[].due string | null بله موعد اقدام، همان‌طور که گفته شد (هرگز تاریخی ساختگی)؛ اگر زمانی گفته نشده باشد null است
lobbe.content.sections[].items[].sourceMs number | null خیر جایی از جلسه که این مدخل را پشتیبانی می‌کند: startMs همان نوبت رونوشت، به میلی‌ثانیه؛ اگر هیچ نوبت واحدی پشتیبانش نباشد null است، در لُب‌های ساخته‌شده پیش از ارجاع‌ها نمی‌آید، و در لُب‌های پیش از ۶ سپتامبر ۲۰۲۶ ممکن است به‌جای شروع دقیق نوبت، ثانیه‌ای باشد که به مدل نشان داده شد
lobbe.content.sections[] (kind: "key_point_list") object وقتی kind برابر "key_point_list" باشد، فیلدهای زیر
lobbe.content.sections[].kind "key_point_list" بله نوع بخش، که فیلدهای دیگرش را تعیین می‌کند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text
lobbe.content.sections[].items[] object[] بله مدخل‌های بخش (decision_list، action_item_list، key_point_list، qa_list و follow_up_list)
lobbe.content.sections[].items[].text string بله خود مدخل: یک تصمیم، یک اقدام، یک نکتهٔ کلیدی یا یک پیگیری
lobbe.content.sections[] (kind: "qa_list") object وقتی kind برابر "qa_list" باشد، فیلدهای زیر
lobbe.content.sections[].kind "qa_list" بله نوع بخش، که فیلدهای دیگرش را تعیین می‌کند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text
lobbe.content.sections[].items[] object[] بله مدخل‌های بخش (decision_list، action_item_list، key_point_list، qa_list و follow_up_list)
lobbe.content.sections[].items[].question string بله پرسشی که در جلسه مطرح شد (qa_list)
lobbe.content.sections[].items[].answer string بله پاسخی که در جلسه به آن داده شد
lobbe.content.sections[] (kind: "topic_notes") object وقتی kind برابر "topic_notes" باشد، فیلدهای زیر
lobbe.content.sections[].kind "topic_notes" بله نوع بخش، که فیلدهای دیگرش را تعیین می‌کند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text
lobbe.content.sections[].topics[] object[] بله موضوع‌های بخش topic_notes
lobbe.content.sections[].topics[].topic string بله موضوع
lobbe.content.sections[].topics[].notes string بله آنچه دربارهٔ آن گفته شد
lobbe.content.sections[] (kind: "follow_up_list") object وقتی kind برابر "follow_up_list" باشد، فیلدهای زیر
lobbe.content.sections[].kind "follow_up_list" بله نوع بخش، که فیلدهای دیگرش را تعیین می‌کند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text
lobbe.content.sections[].items[] object[] بله مدخل‌های بخش (decision_list، action_item_list، key_point_list، qa_list و follow_up_list)
lobbe.content.sections[].items[].text string بله خود مدخل: یک تصمیم، یک اقدام، یک نکتهٔ کلیدی یا یک پیگیری
lobbe.content.sections[].items[].sourceMs number | null خیر جایی از جلسه که این مدخل را پشتیبانی می‌کند: startMs همان نوبت رونوشت، به میلی‌ثانیه؛ اگر هیچ نوبت واحدی پشتیبانش نباشد null است، در لُب‌های ساخته‌شده پیش از ارجاع‌ها نمی‌آید، و در لُب‌های پیش از ۶ سپتامبر ۲۰۲۶ ممکن است به‌جای شروع دقیق نوبت، ثانیه‌ای باشد که به مدل نشان داده شد
lobbe.content.sections[] (kind: "free_text") object وقتی kind برابر "free_text" باشد، فیلدهای زیر
lobbe.content.sections[].kind "free_text" بله نوع بخش، که فیلدهای دیگرش را تعیین می‌کند: summary، decision_list، action_item_list، key_point_list، qa_list، topic_notes، follow_up_list یا free_text
lobbe.content.sections[].title string | null بله عنوان خود بخش free_text؛ null یعنی عنوان پیش‌فرض
lobbe.content.sections[].text string بله متن بخش (summary و free_text)
lobbe.markdown string بله لُب به‌صورت یک سند Markdown مستقل، با عنوان جلسه به‌صورت H1 در بالای آن
stats object | null بله آمار جلسه که از روی رونوشت شمرده می‌شود (بدون هوش مصنوعی)، با همان برچسب‌های transcript.speakers؛ این مسیر همیشه آن را پر می‌کند
stats.version 2 بله نسخهٔ قالب آمار: همیشه 2
stats.meetingDurationSeconds number بله طول جلسه به ثانیه
stats.spokenSeconds number بله جمع زمان صحبت همه، به ثانیه با یک رقم اعشار
stats.speakerCount integer بله شمار کسانی که صحبت کردند
stats.wordCount integer بله شمار کلمه‌های گفته‌شده در جلسه
stats.turnCount integer بله شمار نوبت‌های جلسه: هر بار که یک نفر بی‌آنکه دیگری میانش صحبت کند حرف می‌زند
stats.questionCount integer بله شمار علامت‌های سؤال (؟ یا ?) در همهٔ نوبت‌ها
stats.longestSilence object | null بله طولانی‌ترین فاصلهٔ میان دو نوبت، اگر دست‌کم ۳ ثانیه باشد؛ در غیر این صورت null است
stats.longestSilence.seconds number بله طول فاصله به ثانیه، با یک رقم اعشار
stats.longestSilence.afterSpeaker string بله آخرین کسی که پیش از آن صحبت کرد: یکی از transcript.speakers[].label
stats.longestSilence.afterQuote string بله پایان جملهٔ همان فرد پیش از فاصله، حداکثر ۸۰ نویسه، بریده‌شده در مرز کلمه
stats.speakers[] object[] بله برای هر نفر یک سطر، از بیشترین زمان صحبت
stats.speakers[].speaker string بله این فرد: یکی از transcript.speakers[].label
stats.speakers[].talkSeconds number بله زمان صحبت این فرد به ثانیه، با یک رقم اعشار
stats.speakers[].sharePct number بله سهم این فرد از کل زمان صحبت، از ۰ تا ۱۰۰، با یک رقم اعشار
stats.speakers[].wordCount integer بله شمار کلمه‌هایی که این فرد گفت
stats.speakers[].wordsPerMinute number | null بله سرعت صحبت این فرد به کلمه در دقیقه؛ اگر کمتر از ۵ ثانیه صحبت کرده باشد null است
stats.speakers[].longestMonologueSeconds number بله طولانی‌ترین نوبت این فرد به ثانیه، با یک رقم اعشار
stats.speakers[].turnCount integer بله شمار نوبت‌های این فرد
stats.speakers[].avgTurnSeconds number بله میانگین نوبت این فرد به ثانیه، با یک رقم اعشار؛ اگر نوبتی با زمان مشخص نداشته باشد 0 است
stats.speakers[].questionCount integer بله شمار علامت‌های سؤال (؟ یا ?) در نوبت‌های این فرد

خطاها با { error: { code, message, details? } } پاسخ داده می‌شوند و code قرارداد است: خطاها را ببینید.

پیشرفت یک جلسه؛ در مرحلهٔ نام‌گذاری، لینکی که از صاحب جلسه می‌خواهد گوینده‌ها را نام‌گذاری کند.

ویژگی مقدار
دسترسی‌ها recordings:read یا recordings:write
دقیقه مصرف می‌کند خیر
سقف درخواست‌ها read: ۶۰۰ درخواست در هر ۱۰ دقیقه برای هر توکن
پاسخ موفق 200
نام محل نوع الزامی توضیح
id path string بله شناسهٔ جلسه

پیشرفت یک جلسه.

فیلد نوع همیشه می‌آید توضیح
schemaVersion 1 بله در نسخهٔ ۱ API همیشه 1
id string بله شناسهٔ جلسه
status "QUEUED" | "TRANSCRIBING" | "NAMING" | "GENERATING" | "READY" | "FAILED" بله جلسه کجاست: QUEUED، TRANSCRIBING، NAMING (در انتظار نام گوینده‌ها)، GENERATING (لُب در حال ساخت است)، سپس READY؛ یا FAILED
title string | null بله عنوان جلسه: همان‌که با جلسه فرستاده شد یا صاحب جلسه داد، وگرنه عنوان لُب آن پس از ساخته‌شدن؛ تا آن زمان null است
error object | null بله چرا جلسه ناموفق شد؛ اگر status برابر FAILED نباشد null است
error.code string بله کد شکست، مثلاً NO_SPEECH یا AUDIO_CORRUPT؛ اگر کد دقیق‌تری نباشد FAILED
error.retryable boolean بله این‌که retryRecording کمکی می‌کند یا نه: برای جلسهٔ بدون گفتار یا با صدای آسیب‌دیده false است
naming object | null بله نام‌گذاری گوینده‌ها؛ اگر status برابر NAMING نباشد null است
naming.url string بله آن را برای صاحب جلسه بفرستید: صفحهٔ نام‌گذاری جلسه را باز می‌کند، فقط برای خود او و وقتی وارد حساب شده باشد
naming.deadline string | null بله زودترین زمانی که لُب بدون نام‌ها ادامه می‌دهد (ISO 8601، به وقت UTC)؛ null یعنی تا وقتی صاحب جلسه گوینده‌ها را نام‌گذاری کند یا رد شود منتظر می‌ماند
bundleUrl string | null بله جلسهٔ کامل پس از READY شدن، برای توکنی که دسترسی recordings:read دارد؛ در غیر این صورت null است
url string بله صفحهٔ جلسه در برنامهٔ وب

خطاها با { error: { code, message, details? } } پاسخ داده می‌شوند و code قرارداد است: خطاها را ببینید.

ارسال صدای یک جلسه (multipart)؛ پاسخ ۲۰۲ همراه با لینک وضعیت آن.

ویژگی مقدار
دسترسی‌ها recordings:write
دقیقه مصرف می‌کند بله
سقف درخواست‌ها submit: ۳۰ درخواست در هر ۱۰ دقیقه برای هر توکن
پاسخ موفق 202

این مسیر می‌تواند دقیقه مصرف کند: هدر Idempotency-Key را بفرستید تا تکرار درخواست با همان کلید، به‌جای هزینهٔ دوباره، همان نتیجهٔ اول را برگرداند. تکرارپذیری و تلاش دوباره را ببینید.

نام محل نوع الزامی توضیح
Idempotency-Key header string خیر پیشنهاد می‌شود. برای هر جلسه یا سؤال تازه یک بار کلیدی بسازید (۸ تا ۶۴ نویسه، مثلاً یک UUID تصادفی) و همان کلید را بی‌تغییر در هر تلاش دوبارهٔ همان درخواست بفرستید؛ هرگز آن را برای درخواست دیگری به کار نبرید. تکرار یک درخواست همان نتیجهٔ اول را برمی‌گرداند و هرگز دو بار هزینه نمی‌گیرد. کلید برای همیشه از آنِ صاحب حساب می‌ماند و هرگز منقضی نمی‌شود.

بدنهٔ درخواست (multipart/form-data)

Section titled “بدنهٔ درخواست (multipart/form-data)”

فیلدی که این‌جا نیامده پاسخ 400 می‌گیرد.

فیلد نوع الزامی توضیح
recordedAt string (date-time) خیر زمان برگزاری جلسه، به ISO 8601 با اختلاف ساعت، حداکثر ۵ دقیقه جلوتر از اکنون و نه پیش از سال ۲۰۰۰؛ اگر نباشد، همین حالا
title string خیر یک خط: هر رشته از فاصله‌ها به یک فاصله تبدیل و دو سر آن پیراسته می‌شود، سپس ۱ تا ۱۲۰ نویسه
seriesId string خیر سری‌ای که خودتان ساخته‌اید تا جلسه در آن قرار بگیرد؛ هر شناسهٔ دیگری جلسه را در «آرشیو شخصی» می‌گذارد و هرگز خطا نمی‌دهد
kind "MEETING" | "LECTURE" | "INTERVIEW" | "VOICE_MEMO" | "CALL" خیر چه چیزی ضبط شده است، که قالب لُب را تعیین می‌کند: MEETING، LECTURE، INTERVIEW، VOICE_MEMO یا CALL (پیش‌فرض MEETING)
outputLanguage "MATCH" | "FA" | "EN" خیر زبان لُب: MATCH (مطابق جلسه)، FA یا EN (پیش‌فرض MATCH)
useKeyterms "on" | "off" خیر با on (پیش‌فرض) رونوشت با واژگان شما ساخته می‌شود، و اگر جلسه در سری‌ای باشد با واژگان آن سری هم، و هرگاه واژه‌ای در کار باشد ۲۰٪ به هزینه افزوده می‌شود؛ با off هیچ واژگانی به کار نمی‌رود
naming "default" | "skip" خیر با default (پیش‌فرض) تنظیم نام‌گذاری گوینده‌های شما به کار می‌رود؛ با skip لُب بی‌آنکه منتظر نام‌ها بماند ساخته می‌شود و صداهای بی‌نام پیشنهادهای لُب را می‌گیرند
audio file بله فایل صوتی جلسه
attachment file خیر یک فایل PDF، PPTX یا DOCX که لُب همراه جلسه می‌خواند

جلسهٔ ذخیره‌شده؛ تکرار درخواست با همان Idempotency-Key همین جلسه را برمی‌گرداند.

فیلد نوع همیشه می‌آید توضیح
schemaVersion 1 بله در نسخهٔ ۱ API همیشه 1
recording object بله جلسه‌ای که فرستادید
recording.id string بله شناسهٔ جلسه
recording.status "QUEUED" | "TRANSCRIBING" | "NAMING" | "GENERATING" | "READY" | "FAILED" بله جلسه کجاست: QUEUED، TRANSCRIBING، NAMING (در انتظار نام گوینده‌ها)، GENERATING (لُب در حال ساخت است)، سپس READY؛ یا FAILED
recording.minutes integer بله هزینهٔ جلسه به دقیقه: طول اندازه‌گیری‌شدهٔ آن با هزینهٔ افزودهٔ واژگان، به‌اضافهٔ پیوست
recording.recordedAt string بله زمان برگزاری جلسه (ISO 8601، به وقت UTC): همان recordedAt که با جلسه فرستاده شد، وگرنه زمانی که لُب آن را دریافت کرد
recording.statusUrl string بله با درخواست GET و همین توکن، پیشرفت جلسه را دنبال کنید (getRecordingStatus)
recording.bundleUrl string | null بله جلسهٔ کامل، اگر جلسه از قبل READY باشد (در تکرار درخواست) و توکن دسترسی recordings:read داشته باشد؛ در غیر این صورت null است
recording.url string بله صفحهٔ جلسه در برنامهٔ وب

خطاها با { error: { code, message, details? } } پاسخ داده می‌شوند و code قرارداد است: خطاها را ببینید.

رد شدن از نام‌گذاری گوینده‌ها: صداهای بی‌نام پیشنهادهای لُب را می‌گیرند و لُب ساخته می‌شود.

ویژگی مقدار
دسترسی‌ها recordings:write
دقیقه مصرف می‌کند خیر
سقف درخواست‌ها submit: ۳۰ درخواست در هر ۱۰ دقیقه برای هر توکن
پاسخ موفق 200
نام محل نوع الزامی توضیح
id path string بله شناسهٔ جلسه

بدنهٔ درخواست (application/json)

Section titled “بدنهٔ درخواست (application/json)”

تنها کار نام‌گذاری که توکن می‌تواند بکند. فیلدی که این‌جا نیامده پاسخ 400 می‌گیرد.

فیلد نوع الزامی توضیح
action "skip" بله همیشه skip: لُب همین حالا ساخته شود و صداهای بی‌نام پیشنهادهای لُب را بگیرند

پیشرفت یک جلسه.

فیلد نوع همیشه می‌آید توضیح
schemaVersion 1 بله در نسخهٔ ۱ API همیشه 1
id string بله شناسهٔ جلسه
status "QUEUED" | "TRANSCRIBING" | "NAMING" | "GENERATING" | "READY" | "FAILED" بله جلسه کجاست: QUEUED، TRANSCRIBING، NAMING (در انتظار نام گوینده‌ها)، GENERATING (لُب در حال ساخت است)، سپس READY؛ یا FAILED
title string | null بله عنوان جلسه: همان‌که با جلسه فرستاده شد یا صاحب جلسه داد، وگرنه عنوان لُب آن پس از ساخته‌شدن؛ تا آن زمان null است
error object | null بله چرا جلسه ناموفق شد؛ اگر status برابر FAILED نباشد null است
error.code string بله کد شکست، مثلاً NO_SPEECH یا AUDIO_CORRUPT؛ اگر کد دقیق‌تری نباشد FAILED
error.retryable boolean بله این‌که retryRecording کمکی می‌کند یا نه: برای جلسهٔ بدون گفتار یا با صدای آسیب‌دیده false است
naming object | null بله نام‌گذاری گوینده‌ها؛ اگر status برابر NAMING نباشد null است
naming.url string بله آن را برای صاحب جلسه بفرستید: صفحهٔ نام‌گذاری جلسه را باز می‌کند، فقط برای خود او و وقتی وارد حساب شده باشد
naming.deadline string | null بله زودترین زمانی که لُب بدون نام‌ها ادامه می‌دهد (ISO 8601، به وقت UTC)؛ null یعنی تا وقتی صاحب جلسه گوینده‌ها را نام‌گذاری کند یا رد شود منتظر می‌ماند
bundleUrl string | null بله جلسهٔ کامل پس از READY شدن، برای توکنی که دسترسی recordings:read دارد؛ در غیر این صورت null است
url string بله صفحهٔ جلسه در برنامهٔ وب

خطاها با { error: { code, message, details? } } پاسخ داده می‌شوند و code قرارداد است: خطاها را ببینید.

تلاش دوباره برای جلسهٔ ناموفق: مرحله‌ای که شکست خورد دوباره اجرا می‌شود، بدون هزینهٔ تازه.

ویژگی مقدار
دسترسی‌ها recordings:write
دقیقه مصرف می‌کند خیر
سقف درخواست‌ها submit: ۳۰ درخواست در هر ۱۰ دقیقه برای هر توکن
پاسخ موفق 200
نام محل نوع الزامی توضیح
id path string بله شناسهٔ جلسه

پیشرفت یک جلسه.

فیلد نوع همیشه می‌آید توضیح
schemaVersion 1 بله در نسخهٔ ۱ API همیشه 1
id string بله شناسهٔ جلسه
status "QUEUED" | "TRANSCRIBING" | "NAMING" | "GENERATING" | "READY" | "FAILED" بله جلسه کجاست: QUEUED، TRANSCRIBING، NAMING (در انتظار نام گوینده‌ها)، GENERATING (لُب در حال ساخت است)، سپس READY؛ یا FAILED
title string | null بله عنوان جلسه: همان‌که با جلسه فرستاده شد یا صاحب جلسه داد، وگرنه عنوان لُب آن پس از ساخته‌شدن؛ تا آن زمان null است
error object | null بله چرا جلسه ناموفق شد؛ اگر status برابر FAILED نباشد null است
error.code string بله کد شکست، مثلاً NO_SPEECH یا AUDIO_CORRUPT؛ اگر کد دقیق‌تری نباشد FAILED
error.retryable boolean بله این‌که retryRecording کمکی می‌کند یا نه: برای جلسهٔ بدون گفتار یا با صدای آسیب‌دیده false است
naming object | null بله نام‌گذاری گوینده‌ها؛ اگر status برابر NAMING نباشد null است
naming.url string بله آن را برای صاحب جلسه بفرستید: صفحهٔ نام‌گذاری جلسه را باز می‌کند، فقط برای خود او و وقتی وارد حساب شده باشد
naming.deadline string | null بله زودترین زمانی که لُب بدون نام‌ها ادامه می‌دهد (ISO 8601، به وقت UTC)؛ null یعنی تا وقتی صاحب جلسه گوینده‌ها را نام‌گذاری کند یا رد شود منتظر می‌ماند
bundleUrl string | null بله جلسهٔ کامل پس از READY شدن، برای توکنی که دسترسی recordings:read دارد؛ در غیر این صورت null است
url string بله صفحهٔ جلسه در برنامهٔ وب

خطاها با { error: { code, message, details? } } پاسخ داده می‌شوند و code قرارداد است: خطاها را ببینید.