> ## Documentation Index
> Fetch the complete documentation index at: https://docs.keldyn.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Otter.ai

> Index Otter meeting transcripts so decisions made on a call are searchable in Knowledgebase.

The Otter.ai integration indexes meeting transcripts from chosen channels into [Knowledgebase](/knowledgebase). Once connected, Keldyn reads those conversations on a schedule and turns summaries, outlines, insights, action items, and the transcript into searchable, cited passages — with a link back to the meeting in Otter.

This is a **knowledge** connector. It does not collect [control evidence](/evidence-and-audits).

<Note>
  Knowledge integrations are managed by **Keldyn admins**. Connecting Otter
  does not appear for other roles.
</Note>

## What it's used for

Keldyn uses Otter so a decision made on a call can be found later, next to the written policy it relates to. After the first sync, meetings appear under **Otter** in the Knowledgebase index browser, filed by channel and month.

Meeting transcripts rank **below** written sources on purpose. A transcript records what someone said, not what the organisation decided. When a policy document and a call both match, Knowledgebase prefers the written source.

## Before you begin

<Steps>
  <Step title="Confirm Otter Enterprise Public API access">
    The Otter Public API is an **Enterprise** entitlement. A valid API key on
    a workspace without it is refused on every request. Issuing a new key will
    not help — your Otter account manager has to enable the Public API for the
    workspace. See [Otter's Public API article](https://help.otter.ai/hc/en-us/articles/36130822688279-Otter-ai-Public-API).
  </Step>

  <Step title="Create an API key">
    In Otter, go to [Integrations → Developer](https://otter.ai/setting/developer)
    and create an API key. Keldyn stores it encrypted and never shows it again.
  </Step>

  <Step title="Pick the channels to include">
    Decide which Otter channels should be searchable. Without channels
    selected — and without an explicit whole-workspace opt-in — Keldyn
    indexes **nothing**. Transcripts can include external participants, so
    scope is opt-in on purpose.
  </Step>

  <Step title="Keldyn only ever reads text">
    Keldyn never fetches or stores audio. It reads conversation text only.
    You remain responsible for your recording-consent posture.
  </Step>
</Steps>

## Set up the integration

<Steps>
  <Step title="Open Integrations">
    In the Keldyn web app, go to **Integrations**, filter to **Knowledge**, and
    select **Otter.ai**.
  </Step>

  <Step title="Paste the API key">
    Paste the key from Otter developer settings. Keldyn checks it against the
    workspace before saving the connection. A bad key is reported as rejected;
    a workspace without the Public API is reported as its own case, naming the
    entitlement.
  </Step>

  <Step title="Choose channels">
    Select the Otter channels to index, or explicitly opt in to the whole
    workspace. Leaving both unset keeps the index empty.
  </Step>

  <Step title="Run the first sync">
    After connect, wait for the first backfill or select **Sync now**. Open
    [Knowledgebase](/knowledgebase) and search for a phrase from a meeting in
    a selected channel to confirm it landed.
  </Step>
</Steps>

<Tip>
  Meetings appear in the index browser under `Otter/{channel}/{YYYY-MM}/`.
  Each meeting is one document. Summary, outline, insights, action items, and
  the transcript are separate sections, so a question about a decision can
  retrieve the summary instead of the whole call.
</Tip>

## What Keldyn indexes

For each conversation in scope, Keldyn indexes the parts Otter already extracted:

| Section             | What it contains                                    |
| ------------------- | --------------------------------------------------- |
| **Meeting details** | Date, participants (from who spoke), and owner      |
| **Summary**         | Otter's abstract summary                            |
| **Outline**         | Topic headings from the meeting outline             |
| **Insights**        | Labelled insight topics                             |
| **Action items**    | Items with assignee and whether they were completed |
| **Notes**           | Custom-prompt output, when present                  |
| **Transcript**      | Speaker turns, after the distilled sections         |

Conversations outside the selected channels are never listed or read. Shared meetings are included only when they belong to a channel you chose (or when you opted into the whole workspace).

## What data Keldyn collects and why

Keldyn authenticates with the API key you paste. It never writes to Otter and never stores audio.

| Data collected            | What it contains                                                | Why Keldyn collects it                                                         | Refresh             |
| ------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------- |
| **Conversation text**     | Summary, outline, insights, action items, notes, and transcript | So Knowledgebase can retrieve and cite what was said                           | About every 3 hours |
| **Conversation metadata** | Title, date, owner, channel, speakers, and the Otter URL        | To browse the index, file meetings by month, and link a citation back to Otter | With each sync      |
| **Workspace identity**    | Workspace name and id                                           | To show which Otter workspace is connected                                     | At connect time     |

Otter does not publish a reliable "last modified" time, so each sync re-reads conversations in scope. Unchanged meetings are not re-indexed. Edits to a transcript or a regenerated summary are picked up on the next pass.

<Info>
  Keldyn polls Otter; it does not accept Otter webhooks. A meeting appears in
  Knowledgebase a little after Otter finishes processing it, not the moment
  the call ends.
</Info>

## Who can read indexed meetings

Anyone on the team who can open Knowledgebase can read every indexed transcript from the selected channels, including meetings that were shared with only a few people in Otter. Channel and share lists do not carry over. See [Knowledgebase privacy](/knowledgebase-privacy).

If a meeting should not be searchable, keep its channel off the allowlist, withdraw every channel (which unpublishes the transcripts), or use **Remove from index** in the Knowledgebase browser. Removing it from the index does not delete it from Otter.

## Keeping the index current

Keldyn refreshes Otter about every **three hours**. That is slower than Drive or Confluence because each pass re-reads the conversations in scope. You can also trigger an immediate pull with **Sync now**.

* A new meeting appears after the next successful sync once Otter has processed it.
* Editing a transcript or regenerating a summary updates the document on the next sync.
* Deleting a conversation in Otter unpublishes it. It stops appearing in search; an existing citation still resolves.
* Clearing every channel (without a whole-workspace opt-in) unpublishes the indexed transcripts.

<Note>
  Disconnecting Otter unpublishes the Otter documents. The API key is removed
  from Keldyn. Nothing is deleted in Otter.
</Note>

## Troubleshooting

A search that should have hit a meeting usually means one of the following:

* **No channels selected** — the key is stored but nothing is indexed until you choose channels or opt into the whole workspace.
* **Public API not enabled** — Otter accepted the key but refused every request. Ask your Otter account manager to enable the Public API. A new key will not fix this.
* **Key rejected** — the key was mistyped or revoked. Create a new key under [Otter developer settings](https://otter.ai/setting/developer) and update it in Keldyn.
* **Meeting still processing in Otter** — wait for Otter to finish, then **Sync now**.
* **Meeting is in another channel** — only allowlisted channels are read.

## Next steps

<CardGroup cols={2}>
  <Card title="Knowledgebase" icon="book-search" href="/knowledgebase" arrow={true}>
    Search cited passages. Written policy outranks a matching transcript.
  </Card>

  <Card title="Google Drive" icon="hard-drive" href="/integrations/google-drive" arrow={true}>
    Index a Drive folder for the written sources that should outrank meetings.
  </Card>
</CardGroup>
