[{"data":1,"prerenderedAt":758},["ShallowReactive",2],{"navigation":3,"\u002Fstart\u002Fauthentication":224,"\u002Fstart\u002Fauthentication-surround":753},[4,24,60,88,120,152,196],{"title":5,"path":6,"stem":7,"children":8,"icon":23},"Start","\u002Fstart","1.start\u002F1.index",[9,11,15,19],{"title":10,"path":6,"stem":7},"Overview",{"title":12,"path":13,"stem":14},"Quickstart","\u002Fstart\u002Fquickstart","1.start\u002F2.quickstart",{"title":16,"path":17,"stem":18},"Authentication","\u002Fstart\u002Fauthentication","1.start\u002F3.authentication",{"title":20,"path":21,"stem":22},"Choose an API","\u002Fstart\u002Fchoose-an-api","1.start\u002F5.choose-an-api","i-lucide-rocket",{"title":25,"path":26,"stem":27,"children":28,"icon":59},"Realtime","\u002Frealtime","2.realtime\u002F1.index",[29,31,35,39,43,47,51,55],{"title":30,"path":26,"stem":27},"Realtime Overview",{"title":32,"path":33,"stem":34},"Realtime Quickstart","\u002Frealtime\u002Fquickstart","2.realtime\u002F2.quickstart",{"title":36,"path":37,"stem":38},"Connection Lifecycle","\u002Frealtime\u002Fconnection-lifecycle","2.realtime\u002F3.connection-lifecycle",{"title":40,"path":41,"stem":42},"Audio Input","\u002Frealtime\u002Faudio-input","2.realtime\u002F4.audio-input",{"title":44,"path":45,"stem":46},"Transcript Lifecycle","\u002Frealtime\u002Ftranscript-lifecycle","2.realtime\u002F5.transcript-lifecycle",{"title":48,"path":49,"stem":50},"Realtime Translation","\u002Frealtime\u002Frealtime-translation","2.realtime\u002F6.realtime-translation",{"title":52,"path":53,"stem":54},"Session Configuration","\u002Frealtime\u002Fsession-configuration","2.realtime\u002F7.session-configuration",{"title":56,"path":57,"stem":58},"Handling Interruptions & Silence","\u002Frealtime\u002Finterruptions-silence","2.realtime\u002F8.interruptions-silence","i-lucide-radio",{"title":61,"path":62,"stem":63,"children":64,"icon":87},"Recorded","\u002Frecorded","3.recorded\u002F1.index",[65,67,71,75,79,83],{"title":66,"path":62,"stem":63},"Recorded Overview",{"title":68,"path":69,"stem":70},"Transcribe Audio","\u002Frecorded\u002Ftranscribe-audio","3.recorded\u002F2.transcribe-audio",{"title":72,"path":73,"stem":74},"Timestamps & Speakers","\u002Frecorded\u002Ftimestamps-speakers","3.recorded\u002F3.timestamps-speakers",{"title":76,"path":77,"stem":78},"Subtitles","\u002Frecorded\u002Fsubtitles","3.recorded\u002F4.subtitles",{"title":80,"path":81,"stem":82},"Recorded Translation","\u002Frecorded\u002Ftranslation","3.recorded\u002F5.translation",{"title":84,"path":85,"stem":86},"Structured Results","\u002Frecorded\u002Fstructured-results","3.recorded\u002F6.structured-results","i-lucide-file-audio",{"title":89,"path":90,"stem":91,"children":92,"icon":119},"Concepts","\u002Fconcepts","4.concepts\u002F1.index",[93,95,99,103,107,111,115],{"title":94,"path":90,"stem":91},"Voice Context Layer",{"title":96,"path":97,"stem":98},"Stable vs. Partial Text","\u002Fconcepts\u002Fstable-vs-partial-text","4.concepts\u002F2.stable-vs-partial-text",{"title":100,"path":101,"stem":102},"StableStream","\u002Fconcepts\u002Fstablestream","4.concepts\u002F3.stablestream",{"title":104,"path":105,"stem":106},"Context-Aware Processing","\u002Fconcepts\u002Fcontext-aware-processing","4.concepts\u002F4.context-aware-processing",{"title":108,"path":109,"stem":110},"Understanding Latency","\u002Fconcepts\u002Flatency","4.concepts\u002F5.latency",{"title":112,"path":113,"stem":114},"Live Translation","\u002Fconcepts\u002Flive-translation","4.concepts\u002F6.live-translation",{"title":116,"path":117,"stem":118},"Trinity Engine","\u002Fconcepts\u002Ftrinity-engine","4.concepts\u002F7.trinity-engine","i-lucide-brain",{"title":121,"path":122,"stem":123,"children":124,"icon":151},"Guides","\u002Fguides","5.guides\u002F1.index",[125,127,131,135,139,143,147],{"title":126,"path":122,"stem":123},"Browser Live Captions",{"title":128,"path":129,"stem":130},"Server-side Streaming","\u002Fguides\u002Fserver-side-streaming","5.guides\u002F2.server-side-streaming",{"title":132,"path":133,"stem":134},"Build a Stable Caption UI","\u002Fguides\u002Fstable-caption-ui","5.guides\u002F3.stable-caption-ui",{"title":136,"path":137,"stem":138},"Build Live Translation","\u002Fguides\u002Flive-translation","5.guides\u002F4.live-translation",{"title":140,"path":141,"stem":142},"Save a Transcript","\u002Fguides\u002Fsave-transcript","5.guides\u002F5.save-transcript",{"title":144,"path":145,"stem":146},"Reconnect a Live Session","\u002Fguides\u002Freconnection","5.guides\u002F6.reconnection",{"title":148,"path":149,"stem":150},"Client-VAD speech segments","\u002Fguides\u002Fclient-vad-segments","5.guides\u002F7.client-vad-segments","i-lucide-book-open",{"title":153,"path":154,"stem":155,"children":156,"icon":195},"Reference","\u002Fapi-reference","6.api-reference\u002F1.index",[157,159,163,167,171,175,179,183,187,191],{"title":158,"path":154,"stem":155},"API Reference Overview",{"title":160,"path":161,"stem":162},"Admin API","\u002Fapi-reference\u002Fadmin","6.api-reference\u002F10.admin",{"title":164,"path":165,"stem":166},"Realtime API","\u002Fapi-reference\u002Frealtime-api","6.api-reference\u002F2.realtime-api",{"title":168,"path":169,"stem":170},"Client Messages","\u002Fapi-reference\u002Fclient-messages","6.api-reference\u002F3.client-messages",{"title":172,"path":173,"stem":174},"Server Events","\u002Fapi-reference\u002Fserver-events","6.api-reference\u002F4.server-events",{"title":176,"path":177,"stem":178},"Segment Transcription API","\u002Fapi-reference\u002Fsegment-transcription","6.api-reference\u002F5.segment-transcription",{"title":180,"path":181,"stem":182},"Batch Transcription Jobs","\u002Fapi-reference\u002Fbatch-jobs","6.api-reference\u002F6.batch-jobs",{"title":184,"path":185,"stem":186},"Languages & Models","\u002Fapi-reference\u002Flanguages","6.api-reference\u002F7.languages",{"title":188,"path":189,"stem":190},"Errors","\u002Fapi-reference\u002Ferrors","6.api-reference\u002F8.errors",{"title":192,"path":193,"stem":194},"Rate Limits","\u002Fapi-reference\u002Frate-limits","6.api-reference\u002F9.rate-limits","i-lucide-code",{"title":197,"path":198,"stem":199,"children":200,"icon":223},"Production","\u002Fproduction","7.production\u002F1.index",[201,203,207,211,215,219],{"title":202,"path":198,"stem":199},"Production Checklist",{"title":204,"path":205,"stem":206},"Reconnection & Retries","\u002Fproduction\u002Freconnection-retries","7.production\u002F2.reconnection-retries",{"title":208,"path":209,"stem":210},"Latency Best Practices","\u002Fproduction\u002Flatency-best-practices","7.production\u002F3.latency-best-practices",{"title":212,"path":213,"stem":214},"Security & Privacy","\u002Fproduction\u002Fsecurity-privacy","7.production\u002F4.security-privacy",{"title":216,"path":217,"stem":218},"Data Retention","\u002Fproduction\u002Fdata-retention","7.production\u002F5.data-retention",{"title":220,"path":221,"stem":222},"Changelog","\u002Fproduction\u002Fchangelog","7.production\u002F6.changelog","i-lucide-server",{"id":225,"title":16,"body":226,"description":745,"draft":746,"extension":747,"links":748,"meta":749,"navigation":750,"path":17,"seo":751,"status":748,"stem":18,"__hash__":752},"docs\u002F1.start\u002F3.authentication.md",{"type":227,"value":228,"toc":732},"minimark",[229,233,238,258,262,269,304,307,311,319,324,327,335,339,411,415,496,506,510,513,565,580,583,594,598,701,707,711,728],[230,231,232],"p",{},"All API requests require an API key. This page explains the key format, usage patterns, and browser-side security model.",[234,235,237],"h2",{"id":236},"api-key-format","API key format",[239,240,241,249,252],"ul",{},[242,243,244,245],"li",{},"Prefix: ",[246,247,248],"code",{},"sk-",[242,250,251],{},"The plaintext key is returned only once at provisioning. The server stores only a SHA-256 hash.",[242,253,254,255,257],{},"Minimum length: 16 characters (at least 13 characters after ",[246,256,248],{},")",[234,259,261],{"id":260},"server-side-usage","Server-side usage",[230,263,264,265,268],{},"All endpoints accept the key via the ",[246,266,267],{},"Authorization: Bearer"," header:",[270,271,276],"pre",{"className":272,"code":273,"language":274,"meta":275,"style":275},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -H \"Authorization: Bearer sk-...\" https:\u002F\u002Faudio.lansonai.com\u002Fv1\u002Faudio\u002Ftranscriptions\n","bash","",[246,277,278],{"__ignoreMap":275},[279,280,283,287,291,295,298,301],"span",{"class":281,"line":282},"line",1,[279,284,286],{"class":285},"sBMFI","curl",[279,288,290],{"class":289},"sfazB"," -H",[279,292,294],{"class":293},"sMK4o"," \"",[279,296,297],{"class":289},"Authorization: Bearer sk-...",[279,299,300],{"class":293},"\"",[279,302,303],{"class":289}," https:\u002F\u002Faudio.lansonai.com\u002Fv1\u002Faudio\u002Ftranscriptions\n",[230,305,306],{},"This works for both offline HTTP requests and WebSocket upgrade handshakes.",[234,308,310],{"id":309},"browser-side-security","Browser-side security",[312,313,316],"callout",{"color":314,"icon":315},"red","i-lucide-circle-alert",[230,317,318],{},"Never expose your long-lived API key in frontend code or WebSocket URLs. Use a short-lived session token for browser connections.",[320,321,323],"h3",{"id":322},"session-token-flow","Session token flow",[230,325,326],{},"Browsers cannot safely store a long-lived key. LansonAI provides a short-lived token mechanism:",[270,328,333],{"className":329,"code":331,"language":332},[330],"language-text","1. Frontend → your backend: request a session token\n2. Your backend → LansonAI:\n   POST \u002Fv1\u002Faudio\u002Ftranscriptions\u002Fsession-token\n   Authorization: Bearer sk-...   (your long-lived key, server-side only)\n3. LansonAI → your backend: returns rt_... token (valid 60 seconds)\n4. Your backend → frontend: pass the rt_... token\n5. Frontend → LansonAI: open WebSocket\n   ?access_token=rt_...\n","text",[246,334,331],{"__ignoreMap":275},[320,336,338],{"id":337},"session-token-details","Session token details",[340,341,342,355],"table",{},[343,344,345],"thead",{},[346,347,348,352],"tr",{},[349,350,351],"th",{},"Property",[349,353,354],{},"Value",[356,357,358,369,377,385,396],"tbody",{},[346,359,360,364],{},[361,362,363],"td",{},"Prefix",[361,365,366],{},[246,367,368],{},"rt_",[346,370,371,374],{},[361,372,373],{},"Validity",[361,375,376],{},"60 seconds",[346,378,379,382],{},[361,380,381],{},"Signature",[361,383,384],{},"HMAC-SHA256",[346,386,387,390],{},[361,388,389],{},"Signing secret",[361,391,392,395],{},[246,393,394],{},"GATEWAY_SESSION_TOKEN_SECRET"," (server-side config)",[346,397,398,401],{},[361,399,400],{},"Transport",[361,402,403,404,407,408],{},"URL query ",[246,405,406],{},"?access_token=rt_..."," or ",[246,409,410],{},"?token=rt_...",[320,412,414],{"id":413},"token-response","Token response",[270,416,420],{"className":417,"code":418,"language":419,"meta":275,"style":275},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"token\": \"rt_eyJ...\",\n  \"expires_in\": 60,\n  \"endpoint\": \"\u002Fv1\u002Faudio\u002Ftranscriptions\u002Fstream\"\n}\n","json",[246,421,422,427,452,470,490],{"__ignoreMap":275},[279,423,424],{"class":281,"line":282},[279,425,426],{"class":293},"{\n",[279,428,430,433,437,439,442,444,447,449],{"class":281,"line":429},2,[279,431,432],{"class":293},"  \"",[279,434,436],{"class":435},"spNyl","token",[279,438,300],{"class":293},[279,440,441],{"class":293},":",[279,443,294],{"class":293},[279,445,446],{"class":289},"rt_eyJ...",[279,448,300],{"class":293},[279,450,451],{"class":293},",\n",[279,453,455,457,460,462,464,468],{"class":281,"line":454},3,[279,456,432],{"class":293},[279,458,459],{"class":435},"expires_in",[279,461,300],{"class":293},[279,463,441],{"class":293},[279,465,467],{"class":466},"sbssI"," 60",[279,469,451],{"class":293},[279,471,473,475,478,480,482,484,487],{"class":281,"line":472},4,[279,474,432],{"class":293},[279,476,477],{"class":435},"endpoint",[279,479,300],{"class":293},[279,481,441],{"class":293},[279,483,294],{"class":293},[279,485,486],{"class":289},"\u002Fv1\u002Faudio\u002Ftranscriptions\u002Fstream",[279,488,489],{"class":293},"\"\n",[279,491,493],{"class":281,"line":492},5,[279,494,495],{"class":293},"}\n",[230,497,498,499,501,502,505],{},"If ",[246,500,394],{}," is not configured, the endpoint returns ",[246,503,504],{},"503 token_issuer_unavailable",".",[234,507,509],{"id":508},"websocket-authentication-methods","WebSocket authentication methods",[230,511,512],{},"The realtime WebSocket accepts three authentication methods:",[340,514,515,528],{},[343,516,517],{},[346,518,519,522,525],{},[349,520,521],{},"Method",[349,523,524],{},"Use case",[349,526,527],{},"Usage",[356,529,530,542,554],{},[346,531,532,536,539],{},[361,533,534],{},[246,535,297],{},[361,537,538],{},"Server-side clients",[361,540,541],{},"HTTP upgrade header",[346,543,544,548,551],{},[361,545,546],{},[246,547,406],{},[361,549,550],{},"Browser",[361,552,553],{},"URL query parameter",[346,555,556,560,562],{},[361,557,558],{},[246,559,410],{},[361,561,550],{},[361,563,564],{},"URL query parameter (alias)",[312,566,569],{"color":567,"icon":568},"amber","i-lucide-triangle-alert",[230,570,571,572,575,576,579],{},"Never put ",[246,573,574],{},"sk-..."," in a URL. Browser connections must always use ",[246,577,578],{},"rt_..."," session tokens.",[234,581,160],{"id":582},"admin-api",[230,584,585,586,589,590,593],{},"Key provisioning, revocation, and plan-catalog endpoints exist under ",[246,587,588],{},"\u002Fv1\u002Fexternal-transcription",", but they are for internal operators and dashboards, not regular API consumers. See ",[591,592,160],"a",{"href":161}," for details.",[234,595,597],{"id":596},"error-handling","Error handling",[340,599,600,613],{},[343,601,602],{},[346,603,604,607,610],{},[349,605,606],{},"Error code",[349,608,609],{},"HTTP",[349,611,612],{},"Cause",[356,614,615,628,640,652,664,677,689],{},[346,616,617,622,625],{},[361,618,619],{},[246,620,621],{},"missing_api_key",[361,623,624],{},"401",[361,626,627],{},"No Authorization header or query token",[346,629,630,635,637],{},[361,631,632],{},[246,633,634],{},"invalid_api_key",[361,636,624],{},[361,638,639],{},"Key format invalid or unknown key",[346,641,642,647,649],{},[361,643,644],{},[246,645,646],{},"revoked_api_key",[361,648,624],{},[361,650,651],{},"Key has been revoked",[346,653,654,659,661],{},[361,655,656],{},[246,657,658],{},"expired_api_key",[361,660,624],{},[361,662,663],{},"Key has expired",[346,665,666,671,674],{},[361,667,668],{},[246,669,670],{},"auth_unavailable",[361,672,673],{},"503",[361,675,676],{},"Key store unavailable",[346,678,679,684,686],{},[361,680,681],{},[246,682,683],{},"invalid_session_token",[361,685,624],{},[361,687,688],{},"Session token invalid or expired",[346,690,691,696,698],{},[361,692,693],{},[246,694,695],{},"token_issuer_unavailable",[361,697,673],{},[361,699,700],{},"Token issuer not configured",[230,702,703,704,706],{},"See ",[591,705,188],{"href":189}," for the full error reference.",[234,708,710],{"id":709},"next-steps","Next steps",[239,712,713,718,723],{},[242,714,715,717],{},[591,716,12],{"href":13}," — first request",[242,719,720,722],{},[591,721,188],{"href":189}," — full error reference",[242,724,725,727],{},[591,726,164],{"href":165}," — WebSocket endpoint details",[729,730,731],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":275,"searchDepth":282,"depth":429,"links":733},[734,735,736,741,742,743,744],{"id":236,"depth":429,"text":237},{"id":260,"depth":429,"text":261},{"id":309,"depth":429,"text":310,"children":737},[738,739,740],{"id":322,"depth":454,"text":323},{"id":337,"depth":454,"text":338},{"id":413,"depth":454,"text":414},{"id":508,"depth":429,"text":509},{"id":582,"depth":429,"text":160},{"id":596,"depth":429,"text":597},{"id":709,"depth":429,"text":710},"API key, session token, and browser-side security.",false,"md",null,{},true,{"title":16,"description":745},"959sypC4w2TMaeyGnyxvAXzzHK7LiD8UlYJg-rK-C-w",[754,756],{"title":12,"path":13,"stem":14,"description":755,"children":-1},"Get from zero to your first transcription request in five minutes.",{"title":20,"path":21,"stem":22,"description":757,"children":-1},"Realtime, Segment, and Batch — when to use which.",1789433610335]