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

# Custom Observability

> To begin using observability features, you will need a Cekura account. If you do not have access, please contact [support@cekura.ai](mailto:support@cekura.ai).

export const CopyPageButton = () => {
  if (typeof window !== 'undefined') {
    setTimeout(function () {
      if (document.getElementById('ck-tools')) return;
      var anchor = document.getElementById('content-area') || document.querySelector('.mdx-content');
      if (!anchor) return;
      if (!document.getElementById('ck-style')) {
        var s = document.createElement('style');
        s.id = 'ck-style';
        s.textContent = '#ck-tools{position:absolute;top:6px;right:0;z-index:100;font-family:inherit;}' + '.ck-row{display:inline-flex;align-items:stretch;border:1px solid rgba(0,0,0,0.15);border-radius:8px;overflow:hidden;background:#fff;}' + ':root.dark .ck-row{background:rgba(255,255,255,0.06);border-color:rgba(255,255,255,0.12);}' + '.ck-btn{padding:5px 12px;border:none;background:none;cursor:pointer;font-size:13px;font-weight:500;font-family:inherit;color:#374151;}' + ':root.dark .ck-btn{color:#d1d5db;}' + '.ck-btn:hover{background:rgba(0,0,0,0.04);}' + ':root.dark .ck-btn:hover{background:rgba(255,255,255,0.06);}' + '.ck-chevron{padding:5px 8px;border:none;background:none;cursor:pointer;font-size:14px;font-family:inherit;color:#374151;}' + ':root.dark .ck-chevron{color:#d1d5db;}' + '.ck-chevron:hover{background:rgba(0,0,0,0.04);}' + ':root.dark .ck-chevron:hover{background:rgba(255,255,255,0.06);}' + '.ck-divider{width:1px;background:rgba(0,0,0,0.12);flex-shrink:0;}' + ':root.dark .ck-divider{background:rgba(255,255,255,0.12);}' + '.ck-dd{position:absolute;top:calc(100% + 4px);right:0;min-width:180px;background:#fff;border:1px solid rgba(0,0,0,0.12);border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);padding:4px;display:none;z-index:200;}' + ':root.dark .ck-dd{background:#1f2937;border-color:rgba(255,255,255,0.1);box-shadow:0 4px 16px rgba(0,0,0,0.35);}' + '.ck-item{display:block;width:100%;padding:7px 12px;border:none;background:none;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit;text-align:left;color:#374151;}' + ':root.dark .ck-item{color:#d1d5db;}' + '.ck-item:hover{background:rgba(0,0,0,0.05);}' + ':root.dark .ck-item:hover{background:rgba(255,255,255,0.07);}';
        document.head.appendChild(s);
      }
      var wrap = document.createElement('div');
      wrap.id = 'ck-tools';
      var row = document.createElement('div');
      row.className = 'ck-row';
      var mainBtn = document.createElement('button');
      mainBtn.className = 'ck-btn';
      mainBtn.textContent = 'Copy page';
      var divider = document.createElement('span');
      divider.className = 'ck-divider';
      var chevron = document.createElement('button');
      chevron.className = 'ck-chevron';
      chevron.textContent = '▾';
      var dd = document.createElement('div');
      dd.className = 'ck-dd';
      function closeDD() {
        dd.style.display = 'none';
      }
      function openDD() {
        dd.style.display = 'block';
      }
      chevron.onclick = function (e) {
        e.stopPropagation();
        if (dd.style.display === 'block') {
          closeDD();
        } else {
          openDD();
        }
      };
      document.addEventListener('click', function (e) {
        if (!e.target.closest('#ck-tools')) {
          closeDD();
        }
      });
      document.addEventListener('keydown', function (e) {
        if (e.key === 'Escape') {
          closeDD();
        }
      });
      function makeItem(label, fn) {
        var b = document.createElement('button');
        b.className = 'ck-item';
        b.textContent = label;
        b.onclick = function () {
          fn();
          closeDD();
        };
        return b;
      }
      function getMarkdown() {
        var walk = function (node) {
          if (!node) return '';
          if (node.nodeType === 3) return node.textContent || '';
          if (node.nodeType !== 1) return '';
          var tag = node.tagName.toLowerCase();
          var skip = ['script', 'style', 'svg', 'noscript', 'button', 'iframe'];
          if (skip.indexOf(tag) !== -1) return '';
          if (node.id === 'ck-tools') return '';
          var ch = Array.from(node.childNodes).map(walk).join('');
          if (tag === 'h1') return '\n# ' + ch.trim() + '\n\n';
          if (tag === 'h2') return '\n## ' + ch.trim() + '\n\n';
          if (tag === 'h3') return '\n### ' + ch.trim() + '\n\n';
          if (tag === 'p') return '\n' + ch.trim() + '\n\n';
          if (tag === 'pre') return '\n```\n' + node.textContent.trim() + '\n```\n\n';
          if (tag === 'li') return '- ' + ch.trim() + '\n';
          if (tag === 'code') return '`' + ch.trim() + '`';
          return ch;
        };
        var content = document.querySelector('.mdx-content') || document.getElementById('content-area') || document.body;
        return walk(content).replace(/\n\n\n+/g, '\n\n').trim();
      }
      function copyMd() {
        var md = getMarkdown();
        navigator.clipboard.writeText(md).then(function () {
          mainBtn.textContent = 'Copied!';
          setTimeout(function () {
            mainBtn.textContent = 'Copy page';
          }, 2000);
        });
      }
      function viewMd() {
        var md = getMarkdown();
        var safe = md.split('&').join('&amp;').split('<').join('&lt;').split('>').join('&gt;');
        var html = '<!DOCTYPE html><html><head><meta charset="utf-8"><style>body{font-family:monospace;max-width:860px;margin:40px auto;padding:0 24px;line-height:1.7;white-space:pre-wrap;word-wrap:break-word}</style></head><body>' + safe + '</body></html>';
        window.open(URL.createObjectURL(new Blob([html], {
          type: 'text/html'
        })), '_blank');
      }
      function openClaude() {
        var prompt = 'Can you read this Cekura docs page ' + window.location.href + ' so I can ask you questions?';
        window.open('https://claude.ai/new?q=' + encodeURIComponent(prompt), '_blank');
      }
      mainBtn.onclick = copyMd;
      dd.appendChild(makeItem('Copy page', copyMd));
      dd.appendChild(makeItem('View as Markdown', viewMd));
      dd.appendChild(makeItem('Open in Claude', openClaude));
      row.appendChild(mainBtn);
      row.appendChild(divider);
      row.appendChild(chevron);
      wrap.appendChild(row);
      wrap.appendChild(dd);
      anchor.style.position = 'relative';
      anchor.insertBefore(wrap, anchor.firstChild);
    }, 50);
  }
  return null;
};

<CopyPageButton />

<iframe src="https://www.youtube.com/embed/iIZ97jEgREc" title="YouTube video player" frameborder="0" className="w-full aspect-video rounded-xl" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen />

## Configure Custom Observability

Follow these steps to set up custom observability for your voice agents:

<Steps>
  <Step title="Obtain your API key">
    Log in to your [Cekura dashboard](https://dashboard.cekura.ai) to retrieve your API key. You can find it in the Settings tab visible on the top right corner. This key is essential for authenticating your requests and accessing observability features.\
    \
    **Home > Settings > API Key**

    <img src="https://mintcdn.com/vocera/nn_CzH7Z1Q_Fmw-Y/images/settings-api.png?fit=max&auto=format&n=nn_CzH7Z1Q_Fmw-Y&q=85&s=9c3afc2ee87843a10b810afa2d0cd650" alt="Navigate to API Keys" width="400" data-path="images/settings-api.png" />
  </Step>

  <Step title="Create an agent">
    Navigate to the dashboard and create an agent. This agent will be responsible for collecting and sending data to the observability platform.

    Read more on [Creating an Agent](/documentation/key-concepts/agents/Agent_Setup_Guide).

    <img src="https://mintcdn.com/vocera/TwfRd5EQeiW9Y10g/images/create-agent.png?fit=max&auto=format&n=TwfRd5EQeiW9Y10g&q=85&s=483db3b8f42198d7f5f13796fba0d1cd" alt="Create Agent" width="500" data-path="images/create-agent.png" />
  </Step>

  <Step title="Define metrics">
    Go to [dashboard.cekura.ai](https://dashboard.cekura.ai) and select your agent to start creating metrics. These metrics will help you monitor and analyze the performance of your systems.

    <img src="https://mintcdn.com/vocera/TwfRd5EQeiW9Y10g/images/create-metric.png?fit=max&auto=format&n=TwfRd5EQeiW9Y10g&q=85&s=4580334d59aa2bff3b53a188e90b1377" alt="Create Metric" width="500" data-path="images/create-metric.png" />
  </Step>

  <Step title="Start pushing logs">
    Choose your voice provider below to forward call data to Cekura's observability suite.

    ## Connect your Providers

    <Tabs>
      <Tab title="Custom API">
        <CodeGroup>
          ```python Python theme={null}
          import requests

          # Send call data to Cekura observability
          url = 'https://api.cekura.ai/observability/v1/observe/'
          headers = {
              'X-CEKURA-API-KEY': '<your_cekura_api_key>',
              'Content-Type': 'application/json'
          }
          data = {
              'agent': '<agent_id_in_cekura>',
              'voice_recording_url': '<url_to_call_recording>',
              'transcript_type': 'custom',
              'transcript_json': [
                  {
                      'role': 'user',
                      'content': 'Hello, I want to book an appointment.',
                      'start_time': 0.5,
                      'end_time': 2.3
                  },
                  {
                      'role': 'assistant',
                      'content': 'Sure, what time works for you?',
                      'start_time': 2.5,
                      'end_time': 4.1
                  }
              ],
              'call_id': '<unique_call_identifier>',
              'call_ended_reason': '<reason_for_call_end>'
          }

          response = requests.post(url, headers=headers, json=data)
          ```

          ```javascript Node.js theme={null}
          const axios = require('axios');

          // Send call data to Cekura observability
          const url = 'https://api.cekura.ai/observability/v1/observe/';
          const headers = {
            'X-CEKURA-API-KEY': '<your_cekura_api_key>',
            'Content-Type': 'application/json'
          };
          const data = {
            agent: '<agent_id_in_cekura>',
            voice_recording_url: '<url_to_call_recording>',
            transcript_type: 'custom',
            transcript_json: [
              {
                role: 'user',
                content: 'Hello, I want to book an appointment.',
                start_time: 0.5,
                end_time: 2.3
              },
              {
                role: 'assistant',
                content: 'Sure, what time works for you?',
                start_time: 2.5,
                end_time: 4.1
              }
            ],
            call_id: '<unique_call_identifier>',
            call_ended_reason: '<reason_for_call_end>'
          };

          const response = await axios.post(url, data, { headers });
          ```
        </CodeGroup>
      </Tab>

      <Tab title="Vapi">
        <Tabs>
          <Tab title="Code">
            <CodeGroup>
              ```python Python theme={null}
              import requests

              # Forward VAPI webhook response to Cekura
              url = 'https://api.cekura.ai/observability/v1/observe/'
              headers = {
                  'X-CEKURA-API-KEY': '<your_cekura_api_key>',
                  'Content-Type': 'application/json'
              }
              data = {
                  'agent': '<agent_id_in_cekura>',
                  'voice_recording_url': vapi_response["stereoRecordingUrl"],
                  'transcript_type': 'vapi',
                  'transcript_json': vapi_response["messages"],
                  'call_id': vapi_response["id"],
                  'call_ended_reason': vapi_response["endedReason"]
              }

              response = requests.post(url, headers=headers, json=data)
              ```

              ```javascript Node.js theme={null}
              const axios = require('axios');

              // Forward VAPI webhook response to Cekura
              const url = 'https://api.cekura.ai/observability/v1/observe/';
              const headers = {
                'X-CEKURA-API-KEY': '<your_cekura_api_key>',
                'Content-Type': 'application/json'
              };
              const data = {
                agent: '<agent_id_in_cekura>',
                voice_recording_url: vapiResponse.stereoRecordingUrl,
                transcript_type: 'vapi',
                transcript_json: vapiResponse.messages,
                call_id: vapiResponse.id,
                call_ended_reason: vapiResponse.endedReason
              };

              const response = await axios.post(url, data, { headers });
              ```
            </CodeGroup>
          </Tab>

          <Tab title="No Code">
            <Steps>
              <Step title="Get your Cekura API Key">
                Navigate to the [API keys](https://dashboard.cekura.ai/dashboard/settings/org/api-key) section in your Cekura dashboard settings. If you don't have an API key yet, create a new one. Copy the API key value as you'll need it to authenticate your requests to Cekura's observability API.

                <img src="https://mintcdn.com/vocera/dNswc2jz4aJrHV2E/images/Cekura_credentials.png?fit=max&auto=format&n=dNswc2jz4aJrHV2E&q=85&s=e9f5a070ca5fe1265bf6ed2b8305d041" alt="Cekura API Key Configuration" width="1711" height="334" data-path="images/Cekura_credentials.png" />
              </Step>

              <Step title="Add Cekura credentials to VAPI">
                In your VAPI dashboard, navigate to [integrations](https://dashboard.vapi.ai/settings/integrations/custom-credential) in your account settings and add custom integration with the following details:

                * Auth type: Bearer token
                * Credential name: Cekura API key
                * Token: Your Cekura API key
                * Header name: X-CEKURA-API-KEY
                * Include bearer prefix: No

                                  <img src="https://mintcdn.com/vocera/dNswc2jz4aJrHV2E/images/Vapi_custom_credentials.png?fit=max&auto=format&n=dNswc2jz4aJrHV2E&q=85&s=efb74e4e8e93516d2a6d68eb72a152bf" alt="VAPI Cekura Credentials Configuration" width="527" height="649" data-path="images/Vapi_custom_credentials.png" />
              </Step>

              <Step title="Configure Server URL in VAPI">
                In your VAPI dashboard, navigate to your agent settings and configure the Server URL and authorization header you created in the previous step. This URL is used for all communication between your application and VAPI, including context retrieval, function calls, and end-of-call reporting.

                Set the Server URL to:

                ```
                https://api.cekura.ai/observability/v1/vapi/observe/?agent_id=YOUR_AGENT_ID
                ```

                <img src="https://mintcdn.com/vocera/dNswc2jz4aJrHV2E/images/Vapi_observability.png?fit=max&auto=format&n=dNswc2jz4aJrHV2E&q=85&s=8486f7ef0563315ab4ee3cf8e98f9cf6" alt="VAPI Server URL Configuration" width="1239" height="668" data-path="images/Vapi_observability.png" />
              </Step>

              <Step title="Get your Assistant ID">
                Each VAPI agent has a unique Assistant ID that identifies your specific implementation. Copy your Assistant ID from the VAPI dashboard:

                <img src="https://mintcdn.com/vocera/ZbH6QacHNiZbtlBz/images/vapi-assistant-id.png?fit=max&auto=format&n=ZbH6QacHNiZbtlBz&q=85&s=96972b83213891c261720d1281925557" alt="VAPI Assistant ID" width="1846" height="192" data-path="images/vapi-assistant-id.png" />
              </Step>

              <Step title="Add credentials to Cekura">
                In your Cekura Agent Settings page:

                1. Add the API key from VAPI with the tag `webhook`
                2. Copy and add your `agent ID` from VAPI

                                   <img src="https://mintcdn.com/vocera/jgU_15-26qRVL6Rl/images/vapi/agent-settings.png?fit=max&auto=format&n=jgU_15-26qRVL6Rl&q=85&s=4f7d709f640a47f3db13b1da487e16e5" alt="Navigate to API Keys" width="1285" height="861" data-path="images/vapi/agent-settings.png" />
              </Step>

              <Step title="Test your integration">
                Make a test call from VAPI (phone number based or webcall). Your calls should now appear in the Cekura observability `Calls` section.
              </Step>
            </Steps>
          </Tab>
        </Tabs>
      </Tab>

      <Tab title="ElevenLabs">
        <Tabs>
          <Tab title="Code">
            <CodeGroup>
              ```python Python theme={null}
              import requests
              import json

              # Download audio from ElevenLabs
              ELEVENLABS_API_KEY = "your_elevenlabs_api_key"
              ELEVENLABS_API_BASE_URL = "https://api.elevenlabs.io/v1"
              conversation_id = "your_conversation_id"

              url_audio = f"{ELEVENLABS_API_BASE_URL}/convai/conversations/{conversation_id}/audio"
              headers_audio = {"xi-api-key": ELEVENLABS_API_KEY}
              audio_response = requests.get(url_audio, headers=headers_audio)
              audio_content = audio_response.content if audio_response.status_code == 200 else None

              # Send to Cekura
              CEKURA_API_KEY = "your_cekura_api_key"
              CEKURA_AGENT_ID = "your_cekura_agent_id"
              url_cekura = "https://api.cekura.ai/observability/v1/observe/"
              headers_cekura = {"X-CEKURA-API-KEY": CEKURA_API_KEY}
              data = {
                  "agent": CEKURA_AGENT_ID,
                  "call_id": conversation_id,
                  "transcript_type": "elevenlabs",
                  "transcript_json": json.dumps(transcript_data)
              }
              files = {
                  "voice_recording": (f"elevenlabs_recording_{conversation_id}.mp3", audio_content, "audio/mpeg")
              }
              response = requests.post(url_cekura, headers=headers_cekura, data=data, files=files)
              ```

              ```javascript Node.js theme={null}
              const axios = require('axios');
              const FormData = require('form-data');

              // Download audio from ElevenLabs
              const ELEVENLABS_API_KEY = 'your_elevenlabs_api_key';
              const ELEVENLABS_API_BASE_URL = 'https://api.elevenlabs.io/v1';
              const conversationId = 'your_conversation_id';

              const audioResponse = await axios.get(
                `${ELEVENLABS_API_BASE_URL}/convai/conversations/${conversationId}/audio`,
                { headers: { 'xi-api-key': ELEVENLABS_API_KEY }, responseType: 'arraybuffer' }
              );
              const audioContent = audioResponse.status === 200 ? audioResponse.data : null;

              // Send to Cekura
              const CEKURA_API_KEY = 'your_cekura_api_key';
              const CEKURA_AGENT_ID = 'your_cekura_agent_id';
              const form = new FormData();
              form.append('agent', CEKURA_AGENT_ID);
              form.append('call_id', conversationId);
              form.append('transcript_type', 'elevenlabs');
              form.append('transcript_json', JSON.stringify(transcriptData));
              form.append('voice_recording', Buffer.from(audioContent), {
                filename: `elevenlabs_recording_${conversationId}.mp3`,
                contentType: 'audio/mpeg'
              });

              const response = await axios.post(
                'https://api.cekura.ai/observability/v1/observe/',
                form,
                { headers: { 'X-CEKURA-API-KEY': CEKURA_API_KEY, ...form.getHeaders() } }
              );
              ```
            </CodeGroup>
          </Tab>

          <Tab title="No Code">
            <Steps>
              <Step title="Configure webhook URL in ElevenLabs">
                In your ElevenLabs dashboard, navigate to your agent settings and configure the observability webhook URL:

                ```
                https://api.cekura.ai/observability/v1/elevenlabs/observe/
                ```

                <img src="https://mintcdn.com/vocera/-ehbdLduj39oRXOg/images/elevenlabs-observe.png?fit=max&auto=format&n=-ehbdLduj39oRXOg&q=85&s=63e402d5a616bbade8afa73f9656f73c" alt="ElevenLabs Observability Configuration" width="1338" height="868" data-path="images/elevenlabs-observe.png" />
              </Step>

              <Step title="Verify ElevenLabs API key and Agent ID">
                Go to the API keys section in your ElevenLabs dashboard and ensure you have at least one API key configured. Also note your Agent ID from the dashboard:

                <img src="https://mintcdn.com/vocera/-ehbdLduj39oRXOg/images/elevenlabs-api-key.png?fit=max&auto=format&n=-ehbdLduj39oRXOg&q=85&s=0e0c05532b15f5c1a163e7a2b9da7e64" alt="ElevenLabs API Key Configuration" width="1366" height="731" data-path="images/elevenlabs-api-key.png" />

                <img src="https://mintcdn.com/vocera/-ehbdLduj39oRXOg/images/elevenlabs-agent.png?fit=max&auto=format&n=-ehbdLduj39oRXOg&q=85&s=93f223d965a88d9798da44f005cad42b" alt="ElevenLabs Agent ID" width="1431" height="995" data-path="images/elevenlabs-agent.png" />
              </Step>

              <Step title="Add credentials to Cekura">
                In your Cekura Agent Settings page, add the API key from ElevenLabs and ensure you have copied your `agent ID` from ElevenLabs:

                <img src="https://mintcdn.com/vocera/TwfRd5EQeiW9Y10g/images/elevenlabs/agent-settings.png?fit=max&auto=format&n=TwfRd5EQeiW9Y10g&q=85&s=137691791557d09190dd54835cd2f55c" alt="ElevenLabs Agent Settings" width="1371" height="912" data-path="images/elevenlabs/agent-settings.png" />
              </Step>

              <Step title="Test your integration">
                Make a test call from ElevenLabs (phone number based or webcall). Your calls should now appear in the Cekura observability `Calls` section.
              </Step>
            </Steps>
          </Tab>
        </Tabs>
      </Tab>

      <Tab title="Retell">
        <Tabs>
          <Tab title="Code">
            <CodeGroup>
              ```python Python theme={null}
              import requests

              # Forward Retell webhook response to Cekura
              url = 'https://api.cekura.ai/observability/v1/observe/'
              headers = {
                  'X-CEKURA-API-KEY': '<your_cekura_api_key>',
                  'Content-Type': 'application/json'
              }
              data = {
                  'agent': '<agent_id_in_cekura>',
                  'voice_recording_url': retell_response['recording_multi_channel_url'],
                  'transcript_type': 'retell',
                  'transcript_json': retell_response['transcript_with_tool_calls'],
                  'call_id': retell_response['call_id'],
                  'call_ended_reason': retell_response['disconnection_reason']
              }

              response = requests.post(url, headers=headers, json=data)
              ```

              ```javascript Node.js theme={null}
              const axios = require('axios');

              // Forward Retell webhook response to Cekura
              const url = 'https://api.cekura.ai/observability/v1/observe/';
              const headers = {
                'X-CEKURA-API-KEY': '<your_cekura_api_key>',
                'Content-Type': 'application/json'
              };
              const data = {
                agent: '<agent_id_in_cekura>',
                voice_recording_url: retellResponse.recording_multi_channel_url,
                transcript_type: 'retell',
                transcript_json: retellResponse.transcript_with_tool_calls,
                call_id: retellResponse.call_id,
                call_ended_reason: retellResponse.disconnection_reason
              };

              const response = await axios.post(url, data, { headers });
              ```
            </CodeGroup>
          </Tab>

          <Tab title="No Code">
            <Steps>
              <Step title="Configure webhook URL in Retell">
                In your Retell dashboard, add the observability webhook URL:

                ```
                https://api.cekura.ai/observability/v1/retell/observe/
                ```

                You can configure the webhook at either level:

                * **Setting Webhook at Agent level:** Navigate to your agent settings and add the webhook URL for a specific agent.

                                  <img src="https://mintcdn.com/vocera/-ehbdLduj39oRXOg/images/retell-observe.png?fit=max&auto=format&n=-ehbdLduj39oRXOg&q=85&s=dc359146dfbff02671bc3991dbae00a0" alt="Retell Observability Configuration - Agent Level" width="720" height="381" data-path="images/retell-observe.png" />

                * **Setting Webhook at Workspace level:** Navigate to your workspace settings and add the webhook URL for all agents in the workspace.

                                  <img src="https://mintcdn.com/vocera/OmmjYOhhfqBcNur5/images/retell/retell-workspace-webhook-configuration.png?fit=max&auto=format&n=OmmjYOhhfqBcNur5&q=85&s=a2f04a0c326610fa88758c7d56557ed3" alt="Retell Observability Configuration - Workspace Level" width="1155" height="296" data-path="images/retell/retell-workspace-webhook-configuration.png" />
              </Step>

              <Step title="Verify Retell API key">
                Go to the API keys section in your Retell dashboard. Create/ensure you have at least one API key configured with the webhook tag set.

                <img src="https://mintcdn.com/vocera/OmmjYOhhfqBcNur5/images/retell/retell-api-key-with-webhook-tag.png?fit=max&auto=format&n=OmmjYOhhfqBcNur5&q=85&s=6c83545b01d603b0ad45f7368c11b6aa" alt="Retell API Key Configuration" width="1412" height="395" data-path="images/retell/retell-api-key-with-webhook-tag.png" />
              </Step>

              <Step title="Add credentials to Cekura">
                In your Cekura Agent Settings page:

                1. Add the API key from Retell with the tag `webhook` in **Retell API Keys** field.
                2. Copy and add your `agent ID` from Retell in the **External Assistant ID** field.

                                   <img src="https://mintcdn.com/vocera/jgU_15-26qRVL6Rl/images/retell/agent-settings.png?fit=max&auto=format&n=jgU_15-26qRVL6Rl&q=85&s=1de1364c79a7808222f0770f21102eaf" alt="images/Screenshot2025-03-17at11.35.20AM.png" width="1402" height="915" data-path="images/retell/agent-settings.png" />
              </Step>

              <Step title="Test your integration">
                Make a test call from Retell (phone number based or webcall). Your calls should now appear in the Cekura observability `Calls` section.
              </Step>
            </Steps>
          </Tab>
        </Tabs>
      </Tab>
    </Tabs>
  </Step>
</Steps>
