Back to home
Lanson Flow Docs

Authentication

All API requests require an API key. This page explains the key format, usage patterns, and browser-side security model.

API key format

  • Prefix: sk-
  • The plaintext key is returned only once at provisioning. The server stores only a SHA-256 hash.
  • Minimum length: 16 characters (at least 13 characters after sk-)
  • Server-side usage

    All endpoints accept the key via the Authorization: Bearer header:

    curl -H "Authorization: Bearer sk-..." https://audio.lansonai.com/v1/audio/transcriptions
    

    This works for both offline HTTP requests and WebSocket upgrade handshakes.

    Browser-side security

    ::callout{icon="i-lucide-circle-alert" color="red"} Never expose your long-lived API key in frontend code or WebSocket URLs. Use a short-lived session token for browser connections. ::

    Session token flow

    Browsers cannot safely store a long-lived key. LansonAI provides a short-lived token mechanism:

    1. Frontend → your backend: request a session token
    2. Your backend → LansonAI:
       POST /v1/audio/transcriptions/session-token
       Authorization: Bearer sk-...   (your long-lived key, server-side only)
    3. LansonAI → your backend: returns rt_... token (valid 60 seconds)
    4. Your backend → frontend: pass the rt_... token
    5. Frontend → LansonAI: open WebSocket
       ?access_token=rt_...
    

    Session token details

    PropertyValue
    Prefixrt_
    Validity60 seconds
    SignatureHMAC-SHA256
    Signing secretGATEWAY_SESSION_TOKEN_SECRET (server-side config)
    TransportURL query ?access_token=rt_... or ?token=rt_...

    Token response

    {
      "token": "rt_eyJ...",
      "expires_in": 60,
      "endpoint": "/v1/audio/transcriptions/stream"
    }
    

    If GATEWAY_SESSION_TOKEN_SECRET is not configured, the endpoint returns 503 token_issuer_unavailable.

    WebSocket authentication methods

    The realtime WebSocket accepts three authentication methods:

    MethodUse caseUsage
    Authorization: Bearer sk-...Server-side clientsHTTP upgrade header
    ?access_token=rt_...BrowserURL query parameter
    ?token=rt_...BrowserURL query parameter (alias)

    ::callout{icon="i-lucide-triangle-alert" color="amber"} Never put sk-... in a URL. Browser connections must always use rt_... session tokens. ::

    Admin API

    Key provisioning, revocation, and plan-catalog endpoints exist under /v1/external-transcription, but they are for internal operators and dashboards, not regular API consumers. See Admin API for details.

    Error handling

    Error codeHTTPCause
    missing_api_key401No Authorization header or query token
    invalid_api_key401Key format invalid or unknown key
    revoked_api_key401Key has been revoked
    expired_api_key401Key has expired
    auth_unavailable503Key store unavailable
    invalid_session_token401Session token invalid or expired
    token_issuer_unavailable503Token issuer not configured

    See Errors for the full error reference.

    Next steps

  • Quickstart — first request
  • Errors — full error reference
  • Realtime API — WebSocket endpoint details