Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.corti.ai/llms.txt

Use this file to discover all available pages before exploring further.

Use this guide to move an existing Embedded API integration from the legacy configuration structure to the new split between app-level configuration and interaction options.
Due by 2026-11-29. configure() and configureSession() remain supported until then, but new integrations should move to configureApp() and setInteractionOptions() now. See Scheduled Deprecations for rollout timing.

Overview

The new configuration structure separates two responsibilities:
  • configureApp() is for app-level configuration such as UI settings, appearance, locale, and network settings. It is patchable and you may call it multiple times.
  • setInteractionOptions() is for interaction or session-level configuration such as mode, spoken language, template defaults, and document actions. Set it before the user starts or opens an interaction.
configure() and configureSession() keep working during the deprecation period. Use Scheduled Deprecations if you need rollout timing and compatibility details.

Reference

Mapping from configure()

The second column shows the request shape to use in the new method call, not a response path.
Current fieldUse inNotes
features.interactionTitleconfigureApp({ ui: { interactionTitle: ... } })App-level UI setting
features.aiChatconfigureApp({ ui: { aiChat: ... } })App-level UI setting
features.documentFeedbackconfigureApp({ ui: { documentFeedback: ... } })App-level UI setting
features.navigationconfigureApp({ ui: { navigation: ... } })App-level UI setting
features.virtualModesetInteractionOptions({ mode: { options: [...] } })Use options: ["in-person", "virtual"] when virtual mode should be available, or options: ["in-person"] when it should not be available
features.syncDocumentActionsetInteractionOptions({ documents: { actions: { sync: ... } } })Interaction-level document action
features.templateEditorsetInteractionOptions({ templates: { sources: { personal: { enabled: ... } } } })Keeps the existing personal template capability
appearance.primaryColorconfigureApp({ appearance: { primaryColor: ... } })App branding
locale.interfaceLanguageconfigureApp({ locale: { interfaceLanguage: ... } })UI language
locale.dictationLanguageconfigureApp({ locale: { dictationLanguage: ... } })Default dictation language
locale.overridesconfigureApp({ locale: { overrides: ... } })String overrides
network.websocketBaseUrlconfigureApp({ network: { websocketBaseUrl: ... } })Proxy-only WebSocket endpoint override
configureApp({ debug: true }) enables a debug panel for development. There is no legacy configure() equivalent for this setting, and you should not enable it in staging or production.

Mapping from configureSession()

Current fieldUse inNotes
defaultModesetInteractionOptions({ mode: { fallback: ... } })Pair this with mode.options to decide which modes are available
defaultLanguagesetInteractionOptions({ spokenLanguage: { fallback: ... } })Interaction-level spoken language fallback
defaultTemplateKeysetInteractionOptions({ templates: { defaultTemplate: ... } })Use source: "standard", behaviour: "fallback", and the fully resolved template id
defaultOutputLanguagetemplates.defaultTemplate.template.idCompose the new template id from the old key plus language, for example corti-soap + en becomes corti-soap-en

Migration path

1

Move app-level settings to configureApp()

Move UI, appearance, locale, and network settings out of configure() and into configureApp().
2

Move interaction defaults to setInteractionOptions()

Move mode, spoken language, template defaults, document sync, and personal template availability out of configure() or configureSession() and into setInteractionOptions().

Before and after examples

App appearance and UI settings

Before
await api.configure({
  features: {
    interactionTitle: true,
    aiChat: false,
    documentFeedback: false,
    navigation: true,
  },
  appearance: {
    primaryColor: "#0f766e",
  },
});
After
await api.configureApp({
  ui: {
    interactionTitle: true,
    aiChat: false,
    documentFeedback: false,
    navigation: true,
  },
  appearance: {
    primaryColor: "#0f766e",
  },
});

Development-only debug panel

Use debug when you need the embedded Assistant debug panel during local development or troubleshooting.
await api.configureApp({
  debug: true,
});
The debug panel is intended for development only. Keep debug disabled in staging and production.

Interface language, dictation language, and string overrides

Before
await api.configure({
  locale: {
    interfaceLanguage: "da-DK",
    dictationLanguage: "da",
    overrides: {
      "interview.document.syncDocument.label": "Sync Document",
    },
  },
});
After
await api.configureApp({
  locale: {
    interfaceLanguage: "da-DK",
    dictationLanguage: "da",
    overrides: {
      "interview.document.syncDocument.label": "Sync Document",
    },
  },
});

Default mode and virtual mode

Use mode.options to replace features.virtualMode and mode.fallback to replace defaultMode. When virtualMode is false, the key migration step is to remove "virtual" from mode.options.
Before
await api.configure({
  features: {
    virtualMode: true,
  },
});

await api.configureSession({
  defaultMode: "virtual",
});
After
await api.setInteractionOptions({
  mode: {
    fallback: "virtual",
    options: ["in-person", "virtual"],
  },
});
For the more interesting non-default case where virtual mode should not be available:
Before
await api.configure({
  features: {
    virtualMode: false,
  },
});

await api.configureSession({
  defaultMode: "in-person",
});
After
await api.setInteractionOptions({
  mode: {
    fallback: "in-person",
    options: ["in-person"],
  },
});

Default spoken language

Before
await api.configureSession({
  defaultLanguage: "da",
});
After
await api.setInteractionOptions({
  spokenLanguage: {
    fallback: "da",
  },
});

Default template

This remains fallback behavior, just like before. Map defaultTemplateKey to a standard template source and pass the fully resolved template id. In the new API, pass the fully resolved template id. If the old configuration used defaultTemplateKey: "corti-soap" together with defaultOutputLanguage: "en", the new template.id should be "corti-soap-en".
Before
await api.configureSession({
  defaultTemplateKey: "corti-soap",
  defaultOutputLanguage: "en",
});
After
await api.setInteractionOptions({
  templates: {
    defaultTemplate: {
      behaviour: "fallback",
      template: {
        source: "standard",
        id: "corti-soap-en",
      },
    },
  },
});
The old configuration resolved the selected template from the pair defaultTemplateKey plus defaultOutputLanguage. In the new API, you must pass the already resolved template id directly, for example corti-soap-en.

Document sync action

Before
await api.configure({
  features: {
    syncDocumentAction: true,
  },
});
After
await api.setInteractionOptions({
  documents: {
    actions: {
      sync: true,
    },
  },
});

Personal template editor and template management

Before
await api.configure({
  features: {
    templateEditor: true,
  },
});
After
await api.setInteractionOptions({
  templates: {
    sources: {
      personal: {
        enabled: true,
      },
    },
  },
});

Timeline

  • Current: configure() and configureSession() still work during the deprecation period
  • Future: Legacy configuration support ends on 2026-11-29
  • Action required: Move to configureApp() and setInteractionOptions() before the deadline

Configuration Scenarios

See the same settings organized by implementation scenario instead of field mapping.

Scheduled Deprecations

Review timing, compatibility expectations, and rollout guidance.

API Reference

Review configureApp() and setInteractionOptions() alongside the legacy methods.