Skip to content
Livstick Developers

Prerequisites

A public API key and the fullpage page URL, both provided with your Livstick access — see API keys and scopes.

Embed the fullpage page in an iframe

Its public URL is not published here — it is provided with your Livstick access. The allow attribute is mandatory: without allow="camera; microphone", the browser denies the iframe access to the camera and microphone, and the recording flow fails silently — no error surfaces to the host page.

HTML iframe embed
<iframe
  src="{WIDGET_FULLPAGE_URL}"
  allow="camera; microphone"
  style="width: 100%; height: 100%; border: 0;"
></iframe>

Inject the configuration server-side

The fullpage page reads its configuration from a <template id="livstick-widget-v2-config"> element, as a JSON object under a widgetProps key holding the same props the React component and Custom Element accept. When you render that template server-side, encode every opening angle bracket in the JSON as \u003c instead of <. Skip this and a configuration value containing </template> — a message body, a name — closes the template tag early and breaks the page.

HTML livstick-widget-v2-config template
<template id="livstick-widget-v2-config">{"widgetProps":{"uid":"code","domain":"example.com","apiKey":"{PUBLIC_API_KEY}","overrides":{"version":2}}}</template>
<!-- server-rendered: any "<" inside the JSON values above must be written as \u003c -->

Localize through the URL

The fullpage page only reads its lang query parameter from the URL, and only accepts values shaped like a language code — anything else is ignored. No other URL parameter reaches the widget: the API, the domain, the public key, and edit or reply capabilities all come exclusively from the server-injected configuration in the previous step. That is a security guarantee, not a limitation — a host page can freely pass a URL along (a shared link, a redirect target) without it ever being able to redirect the widget to a different API, domain, or key.

HTML language via query string
<iframe
  src="{WIDGET_FULLPAGE_URL}?lang=fr"
  allow="camera; microphone"
></iframe>

Handle the return

The fullpage page does not send its livstick:recorded event, or any other signal, back to the host page across the iframe boundary — it stays internal to the iframe’s own document. To know when a message has been captured, poll the container you created for this recording from your own backend.

GET /containers/{crid}
curl https://client-api.v5.livstick.com/api/v3/containers/{crid} \
  -H "Authorization: Bearer {ACCESS_TOKEN}"

Next steps

The configuration object accepted by widgetProps is the same one documented for the other mounting options — see the full reference of what it can carry.