{"info":{"_postman_id":"3795ffaa-aae8-46f4-9aab-c25ef2dd75a7","name":"Klyvora AI","description":"<html><head></head><body><h1 id=\"klyvora-ai-customer-intelligence-api\">Klyvora AI — Customer Intelligence API</h1>\n<p>Welcome to the official API documentation for <strong>Klyvora AI</strong>, powered by the <strong>EchoSense</strong> engine. This documentation will guide you through integrating Klyvora's customer intelligence capabilities into your applications, dashboards, and data pipelines.</p>\n<hr>\n<h2 id=\"1-overview\">1. Overview</h2>\n<p><strong>Klyvora AI</strong> is an enterprise-grade <strong>Customer Intelligence Platform</strong> designed to help businesses unlock the hidden value inside unstructured customer feedback.</p>\n<p>Our API transforms raw, unstructured feedback — whether submitted as <strong>text</strong> or <strong>voice recordings</strong> — into <strong>actionable, structured insights</strong> that teams can act on immediately. Under the hood, EchoSense orchestrates a multi-model AI pipeline:</p>\n<ul>\n<li><p><strong>Large Language Model</strong>: <code>Llama-3.3-70b-versatile</code> — used for sentiment analysis, intent detection, topic extraction, and summarization.</p>\n</li>\n<li><p><strong>Speech-to-Text Model</strong>: <code>Whisper-large-v3-turbo</code> — used for high-accuracy transcription of audio feedback across multiple languages and accents.</p>\n</li>\n<li><p><strong>Inference Layer</strong>: The <strong>Groq SDK</strong>, chosen for its ultra-low-latency inference, ensuring real-time feedback analysis at scale.</p>\n</li>\n</ul>\n<p>Whether you're building a Voice-of-Customer dashboard, an in-app feedback widget, a call-center analytics tool, or a product research platform, Klyvora AI provides the intelligence layer you need — with a single API call.</p>\n<hr>\n<h2 id=\"2-project-resources\">2. Project Resources</h2>\n<p>Explore the complete Klyvora AI ecosystem:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Resource</th>\n<th>Link</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Figma Design</strong></td>\n<td><a href=\"https://www.figma.com/proto/bKRdU5q74OYXJxaAXLCljD/Work?node-id=502-2&amp;t=zXVrXeegnGTnJAcz-1&amp;scaling=min-zoom&amp;content-scaling=fixed&amp;page-id=32%3A2&amp;starting-point-node-id=503%3A128\">https://www.figma.com/proto/bKRdU5q74OYXJxaAXLCljD/Work?node-id=502-2&amp;t=zXVrXeegnGTnJAcz-1&amp;scaling=min-zoom&amp;content-scaling=fixed&amp;page-id=32:2&amp;starting-point-node-id=503:128</a></td>\n</tr>\n<tr>\n<td><strong>Live Application</strong></td>\n<td><a href=\"https://klyvora-ai.vercel.app\">klyvora-ai.vercel.app</a></td>\n</tr>\n<tr>\n<td><strong>YouTube Demo</strong></td>\n<td><a href=\"https://youtu.be/mvJ5lRVgd9U\">https://youtu.be/mvJ5lRVgd9U</a></td>\n</tr>\n<tr>\n<td><strong>GitHub Repository</strong></td>\n<td><a href=\"https://github.com/paldpathak404/echosenseai\">github.com/paldpathak404/echosenseai</a></td>\n</tr>\n</tbody>\n</table>\n</div><hr>\n<h2 id=\"3-base-url--environments\">3. Base URL &amp; Environments</h2>\n<p>Klyvora AI supports two environments out of the box. You can switch between them using the <code>http://localhost:5000</code> collection variable.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Environment</th>\n<th>Base URL</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Production</strong></td>\n<td><code>https://klyvora-backend.onrender.com</code></td>\n</tr>\n<tr>\n<td><strong>Local Development</strong></td>\n<td><code>http://localhost:5000</code></td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>Tip:</strong> All requests in this collection use the <code>http://localhost:5000</code> collection variable. Switching environments requires only updating that single variable — no individual request edits needed. </p>\n</blockquote>\n<hr>\n<h2 id=\"4-authentication--headers\">4. Authentication &amp; Headers</h2>\n<p>Klyvora AI's public analysis endpoint is designed for easy integration. At a minimum, the following header is <strong>required</strong> for all requests to the <code>/api/analyze</code> endpoint:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-http\">Content-Type: application/json\n\n</code></pre>\n<p>All request bodies must be valid JSON. Authentication tokens, if applicable in your deployment, should be supplied via the <code>Authorization</code> header — refer to your deployment configuration for details.</p>\n<hr>\n<h2 id=\"5-api-endpoints\">5. API Endpoints</h2>\n<p>The two live, executable requests below are the complete surface area of the Klyvora AI API. Click into each request to view its full schema, run it directly, and inspect saved example responses.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Method</th>\n<th>Endpoint</th>\n<th>Purpose</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>POST</code></td>\n<td><code>/api/analyze</code></td>\n<td>Submit text or audio feedback for AI-powered analysis</td>\n</tr>\n<tr>\n<td><code>GET</code></td>\n<td><code>/api/status</code></td>\n<td>Verify that the API server is live and reachable</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>The requests listed in this collection are the canonical, always-up-to-date source of truth for this API. Each request carries its own detailed documentation, request schema, and saved examples — open them directly to explore. </p>\n</blockquote>\n<hr>\n<h2 id=\"6-error-handling\">6. Error Handling</h2>\n<p>Klyvora AI follows standard HTTP semantics. The table below describes the most common status codes you may encounter:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status Code</th>\n<th>Meaning</th>\n<th>Typical Cause</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>200 OK</strong></td>\n<td>Success</td>\n<td>The request was processed and insights were returned.</td>\n</tr>\n<tr>\n<td><strong>400 Bad Request</strong></td>\n<td>Invalid Payload</td>\n<td>The request body is missing, malformed, or neither <code>text</code> nor <code>audioBase64</code> was provided.</td>\n</tr>\n<tr>\n<td><strong>500 Internal Server Error</strong></td>\n<td>Upstream AI Failure</td>\n<td>The underlying AI pipeline (Llama-3.3 or Whisper via Groq) failed to respond or threw an unexpected error. Retry with exponential backoff.</td>\n</tr>\n</tbody>\n</table>\n</div><p>All error responses follow a consistent shape:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"success\": false,\n  \"error\": \"A human-readable description of what went wrong.\"\n}\n\n</code></pre>\n<hr>\n<h2 id=\"7-integration-example\">7. Integration Example</h2>\n<p>Below is a production-ready example of how a frontend developer can invoke the <code>/api/analyze</code> endpoint using the native <code>fetch()</code> API.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">/**\n * Analyze customer feedback using Klyvora AI (EchoSense).\n *\n * @param {string} feedbackText - The raw customer feedback to analyze.\n * @returns {Promise&lt;object&gt;} The structured insights returned by the API.\n */\nasync function analyzeFeedback(feedbackText) {\n  const API_BASE_URL = \"https://klyvora-backend.onrender.com\";\n  try {\n    const response = await fetch(`${API_BASE_URL}/api/analyze`, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify({\n        text: feedbackText,\n        audioBase64: null,\n      }),\n    });\n    if (!response.ok) {\n      throw new Error(`Klyvora AI request failed with status ${response.status}`);\n    }\n    const data = await response.json();\n    console.log(\"[SUCCESS] Insights received:\", data);\n    return data;\n  } catch (error) {\n    console.error(\"[ERROR] Failed to analyze feedback:\", error);\n    throw error;\n  }\n}\n// Example usage\nanalyzeFeedback(\"The service was absolutely amazing today, I am very happy.\");\n\n</code></pre>\n<p>For voice feedback, replace the <code>text</code> field with <code>audioBase64</code> and pass a base64-encoded audio string — Klyvora will automatically route the payload through the Whisper-large-v3-turbo transcription pipeline before analysis.</p>\n<hr>\n<h2 id=\"8-rate-limiting--best-practices\">8. Rate Limiting &amp; Best Practices</h2>\n<ul>\n<li><p><strong>Debounce User Input</strong> — When invoking <code>/api/analyze</code> from a live text field or voice recorder, debounce requests on the frontend (e.g., 400–600ms) to avoid flooding the AI backend and hitting upstream Groq rate limits.</p>\n</li>\n<li><p><strong>Retry with Backoff</strong> — For transient <code>500</code> responses, implement exponential backoff (e.g., 1s → 2s → 4s) rather than retrying immediately.</p>\n</li>\n<li><p><strong>Batch Where Possible</strong> — If you need to analyze many feedback entries, process them sequentially or in small concurrent batches (3–5 at a time) rather than firing all requests in parallel.</p>\n</li>\n<li><p><strong>Keep Secrets Server-Side</strong> — Never expose private API keys or deployment tokens in client-side code. Proxy sensitive requests through your own backend.</p>\n</li>\n<li><p><strong>Cache Results</strong> — Identical feedback strings will produce identical insights; cache them to reduce cost and latency.</p>\n</li>\n</ul>\n<hr>\n<h2 id=\"9-support--feedback\">9. Support &amp; Feedback</h2>\n<p>We're thrilled to have you building with <strong>Klyvora AI</strong>. If you run into issues, have feature requests, or want to share what you're building, please reach out via our GitHub repository linked above.</p>\n<h2 id=\"10-in-detail-api-endpoints\">10. In-Detail API EndPoints</h2>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Klyvora AI — Customer Intelligence API","slug":"klyvora-ai-customer-intelligence-api"}],"owner":"50839228","collectionId":"3795ffaa-aae8-46f4-9aab-c25ef2dd75a7","publishedId":"2sBXqKofJq","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-05-02T15:40:11.000Z"},"item":[{"name":"Analyze Feedback","id":"23b8aaea-9cdd-414e-9d19-60ce864a8ffe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"text\": \"The service was absolutely amazing today, I am very happy.\",\n  \"audioBase64\": null\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:5000/api/analyze","description":"<h2 id=\"analyze-feedback\">Analyze Feedback</h2>\n<p>Submits raw customer feedback — either as plain text or a base64-encoded audio recording — to the EchoSense AI pipeline. The engine transcribes audio (if provided), then runs the content through the <code>Llama-3.3-70b-versatile</code> model to produce structured, actionable intelligence.</p>\n<p>This is the <strong>core endpoint</strong> of the Klyvora AI platform.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>POST http://localhost:5000/api/analyze\n\n</code></pre><blockquote>\n<p><code>http://localhost:5000</code> resolves to <code>https://klyvora-backend.onrender.com</code> in production and <code>http://localhost:5000</code> in local development. </p>\n</blockquote>\n<hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Value</th>\n<th>Required</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td><code>application/json</code></td>\n<td>Yes</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"request-body\">Request Body</h3>\n<p>The request body must be a JSON object. You must provide <strong>at least one</strong> of <code>text</code> or <code>audioBase64</code>.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>text</code></td>\n<td><code>string</code></td>\n<td>Conditional</td>\n<td>The raw text feedback to analyze. Required if <code>audioBase64</code> is not provided.</td>\n</tr>\n<tr>\n<td><code>audioBase64</code></td>\n<td><code>string</code> or <code>null</code></td>\n<td>Conditional</td>\n<td>A base64-encoded audio file (e.g., <code>.mp3</code>, <code>.wav</code>, <code>.webm</code>). When provided, the audio is first transcribed via <code>Whisper-large-v3-turbo</code> before analysis. Pass <code>null</code> when submitting text-only feedback.</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Text feedback example:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"text\": \"The service was absolutely amazing today, I am very happy.\",\n  \"audioBase64\": null\n}\n\n</code></pre>\n<p><strong>Audio feedback example:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"text\": null,\n  \"audioBase64\": \"UklGRiQAAABXQVZFZm10IBAAAA...\"\n}\n\n</code></pre>\n<hr />\n<h3 id=\"ai-processing-pipeline\">AI Processing Pipeline</h3>\n<p>When this endpoint is called, the following pipeline executes internally:</p>\n<ol>\n<li><p><strong>Input Routing</strong> — The server determines whether the payload contains text or audio.</p>\n</li>\n<li><p><strong>Transcription</strong> <em>(audio only)</em> — If <code>audioBase64</code> is provided, the audio is decoded and passed to <code>Whisper-large-v3-turbo</code> via the Groq SDK for transcription.</p>\n</li>\n<li><p><strong>Analysis</strong> — The resulting text (either submitted directly or transcribed) is sent to <code>Llama-3.3-70b-versatile</code> with a structured prompt that extracts:</p>\n<ul>\n<li><p><strong>Sentiment</strong> — Overall emotional tone (positive, neutral, negative).</p>\n</li>\n<li><p><strong>Intent</strong> — What the customer is trying to communicate or request.</p>\n</li>\n<li><p><strong>Topics</strong> — Key subjects or themes mentioned in the feedback.</p>\n</li>\n<li><p><strong>Summary</strong> — A concise, human-readable summary of the feedback.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Response</strong> — The structured insights are returned as a JSON object.</p>\n</li>\n</ol>\n<hr />\n<h3 id=\"success-response--200-ok\">Success Response — <code>200 OK</code></h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"success\": true,\n  \"data\": {\n    \"sentiment\": \"positive\",\n    \"intent\": \"compliment\",\n    \"topics\": [\"service quality\", \"customer experience\"],\n    \"summary\": \"The customer expressed strong satisfaction with the quality of service received.\"\n  }\n}\n\n</code></pre>\n<h3 id=\"error-response--400-bad-request\">Error Response — <code>400 Bad Request</code></h3>\n<p>Returned when the request body is missing or neither <code>text</code> nor <code>audioBase64</code> is provided.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"success\": false,\n  \"error\": \"Request body must include either 'text' or 'audioBase64'.\"\n}\n\n</code></pre>\n<h3 id=\"error-response--500-internal-server-error\">Error Response — <code>500 Internal Server Error</code></h3>\n<p>Returned when the upstream AI pipeline (Groq / Llama-3.3 / Whisper) fails to respond.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"success\": false,\n  \"error\": \"AI pipeline failed to process the request. Please try again.\"\n}\n\n</code></pre>\n<hr />\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li><p>Audio files should be encoded as <strong>base64 strings</strong> before being sent. Most frontend environments support this natively via the <code>FileReader</code> API.</p>\n</li>\n<li><p>The <code>Whisper-large-v3-turbo</code> model supports a wide range of languages and accents — no language pre-selection is required.</p>\n</li>\n<li><p>For best results with text feedback, submit complete sentences rather than single words or fragments.</p>\n</li>\n<li><p>Debounce calls from live input fields to avoid hitting Groq's upstream rate limits.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","analyze"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"23b8aaea-9cdd-414e-9d19-60ce864a8ffe"},{"name":"System Status","id":"25821ff6-a06d-4201-b13b-7d68bc8cc9bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"http://localhost:5000/api/status","description":"<h2 id=\"system-status\">System Status</h2>\n<p>A lightweight health-check endpoint that verifies the Klyvora AI backend server is live, reachable, and ready to accept requests. This endpoint performs no AI processing and returns near-instantly.</p>\n<p>Use this endpoint to:</p>\n<ul>\n<li><p>Confirm the server is up before initiating a batch of feedback analysis requests.</p>\n</li>\n<li><p>Power uptime monitors, status pages, or CI/CD deployment health checks.</p>\n</li>\n<li><p>Diagnose connectivity issues between your client and the Klyvora backend.</p>\n</li>\n</ul>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET http://localhost:5000/api/status\n\n</code></pre><blockquote>\n<p><code>http://localhost:5000</code> resolves to <code>https://klyvora-backend.onrender.com</code> in production and <code>http://localhost:5000</code> in local development. </p>\n</blockquote>\n<hr />\n<h3 id=\"request-headers\">Request Headers</h3>\n<p>No headers are required for this endpoint.</p>\n<hr />\n<h3 id=\"request-body\">Request Body</h3>\n<p>None. This is a <code>GET</code> request and does not accept a body.</p>\n<hr />\n<h3 id=\"success-response--200-ok\">Success Response — <code>200 OK</code></h3>\n<p>Returned when the server is running and healthy.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"success\": true,\n  \"status\": \"ok\",\n  \"message\": \"Klyvora AI server is running.\"\n}\n\n</code></pre>\n<h3 id=\"error-response--503-service-unavailable\">Error Response — <code>503 Service Unavailable</code></h3>\n<p>If the server is unreachable or in a crash loop, the request will either time out or return a <code>503</code>. In this case, check your deployment logs on Render (production) or your local terminal (development).</p>\n<hr />\n<h3 id=\"usage-in-a-health-check-script\">Usage in a Health-Check Script</h3>\n<p>The following snippet shows how to poll this endpoint programmatically before making analysis requests:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">/**\n * Check whether the Klyvora AI server is reachable.\n *\n * @returns {Promise&lt;boolean&gt;} True if the server is healthy, false otherwise.\n */\nasync function isServerHealthy() {\n  const API_BASE_URL = \"https://klyvora-backend.onrender.com\";\n  try {\n    const response = await fetch(`${API_BASE_URL}/api/status`);\n    const data = await response.json();\n    return data.success === true;\n  } catch {\n    return false;\n  }\n}\n// Example usage\nconst healthy = await isServerHealthy();\nif (healthy) {\n  console.log(\"[OK] Server is ready. Proceeding with analysis.\");\n} else {\n  console.warn(\"[WARN] Server is unreachable. Retrying...\");\n}\n\n</code></pre>\n<hr />\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li><p>This endpoint is intentionally unauthenticated and has no rate limit — it is safe to poll frequently.</p>\n</li>\n<li><p>On the free tier of Render, the production server may spin down after periods of inactivity. If <code>/api/status</code> returns a slow first response (10–30 seconds), the server is cold-starting — subsequent requests will be fast.</p>\n</li>\n<li><p>Consider calling this endpoint on application load to provide users with a real-time server availability indicator in your UI.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","status"],"host":["http://localhost:5000"],"query":[],"variable":[]}},"response":[],"_postman_id":"25821ff6-a06d-4201-b13b-7d68bc8cc9bf"}],"event":[{"listen":"prerequest","script":{"id":"5db6e390-6ffa-4b8a-925c-e24429f10d5c","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"dcc25ece-412b-4c3f-85b7-684d5fa87dc6","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}],"variable":[{"key":"base_url","value":"http://localhost:5000"}]}