Felo API PlatformFelo API Platform

Felo APIs

Chat API

क्वेरी विश्लेषण, वेब संसाधनों और citations के साथ AI बातचीत खोज जोड़ें।

POST/v2/chat

प्रमाणीकरण

Bearer API key

कंटेंट टाइप

application/json

दर संबंधी नोट

Per API key and per user windows. Read X-RateLimit headers.

Chat API आपको अपने एप्लिकेशन में AI-संचालित संवादात्मक खोज जोड़ने देती है। स्वाभाविक भाषा में क्वेरी भेजें और रीयल-टाइम वेब सर्च परिणामों से तैयार बुद्धिमान उत्तर प्राप्त करें।

दर सीमा, त्रुटि प्रतिक्रियाओं और पुनः प्रयास व्यवहार के लिए Errors, Limits, and Retries देखें।

अवलोकन

Chat API निम्न क्रियाएं करती है:

  1. आपकी क्वेरी का विश्लेषण और अनुकूलन करती है
  2. प्रासंगिक जानकारी के लिए वेब खोजती है
  3. सर्च परिणामों को रैंक और फ़िल्टर करती है
  4. स्रोतों के आधार पर विस्तृत AI उत्तर तैयार करती है
  5. स्रोत उद्धरणों के साथ उत्तर लौटाती है

उपयोग के मामले:

  • संवादात्मक AI सहायक
  • शोध और सूचना पुनर्प्राप्ति टूल
  • वेब ज्ञान वाले ग्राहक सहायता चैटबॉट
  • शैक्षिक एप्लिकेशन
  • कंटेंट निर्माण टूल

प्रमाणीकरण

Chat API के सभी अनुरोधों के लिए API Key से प्रमाणीकरण ज़रूरी है। अपनी API Key Authorization हेडर में शामिल करें:

Authorization: Bearer YOUR_API_KEY

अपनी API Key प्राप्त करने और उपयोग करने के विवरण के लिए Authentication गाइड देखें।

AI Agent के साथ उपयोग करें

जब आप चाहते हैं कि Agent Search और हर अन्य उपलब्ध Felo Skill उपयोग करे, तो पूरा felo-ai पैकेज इंस्टॉल करें। इंस्टॉलर SKILL.md वाली हर पैकेज डायरेक्टरी को गतिशील रूप से खोजता है, इसलिए यह स्थिर उपसमुच्चय के बजाय भविष्य की Skills भी शामिल करता है। इन्हें अपने Agent की मूल डायरेक्टरी में इंस्टॉल करें: Codex ~/.codex/skills, Claude Code ~/.claude/skills, OpenClaw ~/.agents/skills और Hermes Agent ~/.hermes/skills उपयोग करते हैं। हर प्लेटफ़ॉर्म के सुरक्षित लिंक, API key और सत्यापन चरणों के लिए मैन्युअल AI Agent सेटअप गाइड देखें।

Endpoint

POST https://openapi.felo.ai/v2/chat

अनुरोध

हेडर

हेडरआवश्यकविवरण
Authorizationहांआपकी API Key इस फ़ॉर्मेट में: Bearer YOUR_API_KEY
Content-Typeहांapplication/json होना चाहिए

Body पैरामीटर

पैरामीटरप्रकारआवश्यकविवरणसीमाएं
querystringहांउपयोगकर्ता का प्रश्न या खोज क्वेरी1-2000 अक्षर

उदाहरण अनुरोध

{
  "query": "What are the latest developments in quantum computing?"
}

प्रतिक्रिया

सफल प्रतिक्रिया (200 OK)

जब अनुरोध सफल होता है, API निम्न संरचना के साथ JSON प्रतिक्रिया लौटाती है:

{
  "status": "ok",
  "message": null,
  "data": {
    "id": "HabCj883yHLSXc8mWqu4Eq",
    "message_id": "18ea8517-5559-4f48-a355-1f8a79e73b71",
    "answer": "Recent developments in quantum computing include...",
    "query_analysis": {
      "queries": [
        "quantum computing latest developments 2025",
        "quantum computing breakthroughs"
      ]
    },
    "resources": [
      {
        "link": "https://example.com/quantum-news",
        "title": "Latest Quantum Computing Breakthroughs",
        "snippet": "Scientists have achieved a major milestone..."
      },
      {
        "link": "https://example.com/quantum-research",
        "title": "Quantum Computing Research 2025",
        "snippet": "New quantum algorithms show promise..."
      }
    ]
  }
}

प्रतिक्रिया फ़ील्ड

फ़ील्डप्रकारविवरण
statusstring | numberप्रतिक्रिया स्थिति: सफल होने पर "ok"; त्रुटि प्रतिक्रियाएं HTTP स्टेटस कोड को संख्या के रूप में उपयोग करती हैं
messagestring | nullअतिरिक्त संदेश (सफल अनुरोध के लिए null)
dataobjectप्रतिक्रिया डेटा (केवल तब मौजूद जब status "ok" हो)
data.idstringइस चैट सेशन का विशिष्ट पहचानकर्ता
data.message_idstringइस विशिष्ट संदेश का विशिष्ट पहचानकर्ता
data.answerstringक्वेरी के लिए AI-जनित उत्तर
data.query_analysisobjectउपयोगकर्ता की क्वेरी का विश्लेषण
data.query_analysis.queriesstring[]उपयोगकर्ता इनपुट से व्युत्पन्न अनुकूलित खोज क्वेरी
data.resourcesarrayउत्तर तैयार करने में उपयोग किए गए वेब स्रोतों की सूची
data.resources[].linkstringस्रोत का URL
data.resources[].titlestringस्रोत पेज का शीर्षक
data.resources[].snippetstringस्रोत से प्रासंगिक अंश

त्रुटि प्रतिक्रिया

जब त्रुटि होती है, API साझा error envelope लौटाती है:

{
  "status": 401,
  "code": "UNAUTHORIZED",
  "message": "API Key is required",
  "request_id": "..."
}

त्रुटि प्रतिक्रिया फ़ील्ड

फ़ील्डप्रकारविवरण
statusnumberHTTP स्टेटस कोड; सफल प्रतिक्रियाएं "ok" उपयोग करती हैं
codestringत्रुटि प्रकार की पहचान करने वाला error code
messagestringमानव-पठनीय त्रुटि विवरण
request_idstringइस अनुरोध का विशिष्ट पहचानकर्ता (सहायता के लिए उपयोगी)

Error Codes (त्रुटि कोड)

HTTPकोडअर्थ
400Endpoint validation codequery फ़ील्ड गुम, खाली या बहुत लंबा है; विशिष्ट समस्या के लिए message पढ़ें
401UNAUTHORIZEDAPI key गुम, अमान्य या रद्द है
429RATE_LIMITEDदर सीमा पार हो गई
502CHAT_FAILEDआंतरिक सेवा त्रुटि
503SERVICE_UNAVAILABLEसेवा अस्थायी रूप से अनुपलब्ध

साझा envelope, अन्य error code और पुनः प्रयास नियमों के लिए Errors, Limits, and Retries देखें।

उदाहरण

cURL

curl -X POST https://openapi.felo.ai/v2/chat \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "What are the benefits of renewable energy?"
  }'

प्रतिक्रिया:

{
  "status": "ok",
  "message": null,
  "data": {
    "id": "HabCj883yHLSXc8mWqu4Eq",
    "message_id": "18ea8517-5559-4f48-a355-1f8a79e73b71",
    "answer": "Renewable energy offers numerous benefits including reduced greenhouse gas emissions, decreased air pollution, energy independence, job creation, and long-term cost savings. Solar, wind, and hydroelectric power are sustainable alternatives to fossil fuels that help combat climate change while providing reliable electricity.",
    "query_analysis": {
      "queries": [
        "renewable energy benefits",
        "advantages of renewable energy sources"
      ]
    },
    "resources": [
      {
        "link": "https://example.com/renewable-benefits",
        "title": "Top Benefits of Renewable Energy",
        "snippet": "Renewable energy sources provide clean, sustainable power..."
      }
    ]
  }
}

Python

import requests
import os

# Get API key from environment variable
api_key = os.environ.get('FELO_API_KEY')

url = 'https://openapi.felo.ai/v2/chat'
headers = {
    'Authorization': f'Bearer {api_key}',
    'Content-Type': 'application/json'
}
data = {
    'query': 'What are the benefits of renewable energy?'
}

try:
    response = requests.post(url, headers=headers, json=data)
    response.raise_for_status()  # Raise exception for HTTP errors

    result = response.json()

    if result['status'] == 'ok':
        print('Answer:', result['data']['answer'])
        print('\nSources:')
        for resource in result['data']['resources']:
            print(f"- {resource['title']}: {resource['link']}")
    else:
        print(f"Error: {result['code']} - {result['message']}")

except requests.exceptions.RequestException as e:
    print(f'Request failed: {e}')

JavaScript (Node.js)

const fetch = require('node-fetch');

const apiKey = process.env.FELO_API_KEY;
const url = 'https://openapi.felo.ai/v2/chat';

const headers = {
  'Authorization': `Bearer ${apiKey}`,
  'Content-Type': 'application/json'
};

const body = JSON.stringify({
  query: 'What are the benefits of renewable energy?'
});

fetch(url, { method: 'POST', headers, body })
  .then(response => {
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response.json();
  })
  .then(data => {
    if (data.status === 'ok') {
      console.log('Answer:', data.data.answer);
      console.log('\nSources:');
      data.data.resources.forEach(resource => {
        console.log(`- ${resource.title}: ${resource.link}`);
      });
    } else {
      console.error(`Error: ${data.code} - ${data.message}`);
    }
  })
  .catch(error => {
    console.error('Request failed:', error);
  });

JavaScript (Browser/Fetch API)

const apiKey = 'YOUR_API_KEY'; // In production, get this from your backend

fetch('https://openapi.felo.ai/v2/chat', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    query: 'What are the benefits of renewable energy?'
  })
})
  .then(response => {
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response.json();
  })
  .then(data => {
    if (data.status === 'ok') {
      console.log('Answer:', data.data.answer);

      // Display sources
      const sourcesList = data.data.resources.map(resource =>
        `<li><a href="${resource.link}">${resource.title}</a></li>`
      ).join('');

      document.getElementById('answer').innerHTML = data.data.answer;
      document.getElementById('sources').innerHTML = sourcesList;
    } else {
      console.error(`Error: ${data.code} - ${data.message}`);
    }
  })
  .catch(error => {
    console.error('Request failed:', error);
  });

Go

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "os"
)

type ChatRequest struct {
    Query string `json:"query"`
}

type ChatResponse struct {
    Status  string `json:"status"`
    Message string `json:"message,omitempty"`
    Data    struct {
        ID            string `json:"id"`
        MessageID     string `json:"message_id"`
        Answer        string `json:"answer"`
        QueryAnalysis struct {
            Queries []string `json:"queries"`
        } `json:"query_analysis"`
        Resources []struct {
            Link    string `json:"link"`
            Title   string `json:"title"`
            Snippet string `json:"snippet"`
        } `json:"resources"`
    } `json:"data,omitempty"`
    Code      string `json:"code,omitempty"`
    RequestID string `json:"request_id,omitempty"`
}

func main() {
    apiKey := os.Getenv("FELO_API_KEY")
    url := "https://openapi.felo.ai/v2/chat"

    requestBody := ChatRequest{
        Query: "What are the benefits of renewable energy?",
    }

    jsonData, err := json.Marshal(requestBody)
    if err != nil {
        fmt.Printf("Error marshaling request: %v\n", err)
        return
    }

    req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
    if err != nil {
        fmt.Printf("Error creating request: %v\n", err)
        return
    }

    req.Header.Set("Authorization", "Bearer "+apiKey)
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        fmt.Printf("Error making request: %v\n", err)
        return
    }
    defer resp.Body.Close()

    body, err := io.ReadAll(resp.Body)
    if err != nil {
        fmt.Printf("Error reading response: %v\n", err)
        return
    }

    var chatResp ChatResponse
    err = json.Unmarshal(body, &chatResp)
    if err != nil {
        fmt.Printf("Error unmarshaling response: %v\n", err)
        return
    }

    if chatResp.Status == "ok" {
        fmt.Println("Answer:", chatResp.Data.Answer)
        fmt.Println("\nSources:")
        for _, resource := range chatResp.Data.Resources {
            fmt.Printf("- %s: %s\n", resource.Title, resource.Link)
        }
    } else {
        fmt.Printf("Error: %s - %s\n", chatResp.Code, chatResp.Message)
    }
}

Rate Limiting (दर सीमा)

जिन उपयोगकर्ताओं के पास प्रभावी सशुल्क Felo सदस्यता है (जिसमें enterprise सदस्यताएं शामिल हैं) वे API Key और OAuth प्रमाणीकरण दोनों के लिए सभी /v2/chat दर सीमाओं से मुक्त हैं। मुक्त प्रतिक्रियाओं में X-RateLimit-* हेडर शामिल नहीं होते।

जिन उपयोगकर्ताओं के पास सशुल्क सदस्यता नहीं है वे तीन आयामों पर दर सीमाओं के अधीन हैं। अगर सदस्यता स्थिति सत्यापित नहीं हो सकती, तो ये सीमाएं अब भी लागू होती हैं:

  • प्रति API Key - 1 मिनट की विंडो में एक API Key से किए गए अनुरोध सीमित करता है।
  • प्रति उपयोगकर्ता (मिनट) - 1 मिनट की विंडो में उपयोगकर्ता के स्वामित्व वाली सभी API Key के कुल अनुरोध सीमित करता है।
  • प्रति उपयोगकर्ता (घंटा) - 1 घंटे की विंडो में उपयोगकर्ता के स्वामित्व वाली सभी API Key के कुल अनुरोध सीमित करता है।

कोई भी आयाम पार होने पर 429 Too Many Requests प्रतिक्रिया मिलती है।

सटीक संख्यात्मक सीमाएं समय के साथ बदल सकती हैं। इन्हें हमेशा नीचे दिए प्रतिक्रिया हेडर से पढ़ें, दस्तावेज़ स्नैपशॉट से नहीं।

प्रतिक्रिया हेडर (दर सीमा के अधीन प्रतिक्रियाएं, जिनमें 429 शामिल है):

हेडरअर्थ
X-RateLimit-Limitवर्तमान में लागू सबसे सख्त आयाम की सीमा
X-RateLimit-Remainingतीनों आयामों में न्यूनतम शेष कोटा
X-RateLimit-Resetवर्तमान विंडो के रीसेट होने का Unix टाइमस्टैम्प (सेकंड)

429 पर, अतिरिक्त रूप से:

हेडरअर्थ
Retry-Afterअनुशंसित पुनः प्रयास देरी (सेकंड)

उदाहरण 429 body (message अनुरोध के समय की वर्तमान कॉन्फ़िगर सीमाएं दर्शाता है):

{
  "status": 429,
  "code": "RATE_LIMITED",
  "message": "Too many requests. Limit: <N>/min per API key, <M>/min per user, <H>/hour per user.",
  "request_id": "..."
}

क्लाइंट व्यवहार: मौजूद होने पर X-RateLimit-Remaining पढ़ें और सक्रिय रूप से back off करें। 429 पर, दोबारा प्रयास से पहले कम से कम Retry-After सेकंड (या X-RateLimit-Reset तक) प्रतीक्षा करें। सीमा मान हार्डकोड न करें।

पूरी पुनः प्रयास नीति और backoff मार्गदर्शन के लिए Errors, Limits, and Retries देखें। अगर आपको अधिक दर सीमा चाहिए, तो [email protected] पर संपर्क करें।

सर्वोत्तम प्रथाएं

1. त्रुटियों को शालीनता से संभालें

हमेशा प्रतिक्रिया स्थिति जांचें और त्रुटियों को उचित रूप से संभालें:

if result['status'] == 'ok':
    # Process successful response
    answer = result['data']['answer']
else:
    # Handle error
    error_code = result['code']
    error_message = result['message']
    # Log error, show user-friendly message, etc.

2. पुनः प्रयास लॉजिक लागू करें

क्षणिक त्रुटियों (5xx स्टेटस कोड) के लिए exponential backoff लागू करें:

import time

max_retries = 3
retry_delay = 1  # seconds

for attempt in range(max_retries):
    response = requests.post(url, headers=headers, json=data)

    if response.status_code < 500:
        break  # Success or client error, don't retry

    if attempt < max_retries - 1:
        time.sleep(retry_delay * (2 ** attempt))  # Exponential backoff

3. प्रतिक्रियाएं cache करें

API कॉल कम करने और प्रतिक्रिया समय सुधारने के लिए समान क्वेरी की प्रतिक्रियाएं cache करने पर विचार करें।

4. इनपुट validate करें

API को भेजने से पहले उपयोगकर्ता इनपुट validate करें:

  • सुनिश्चित करें कि क्वेरी खाली नहीं है
  • क्वेरी लंबाई जांचें (1-2000 अक्षर)
  • injection हमलों से बचने के लिए इनपुट sanitize करें

5. उपयोग की निगरानी करें

दर सीमा के भीतर रहने और लागत अनुकूलित करने के लिए अपने API उपयोग पर नज़र रखें:

  • अनुरोध संख्या और प्रतिक्रिया समय लॉग करें
  • त्रुटि दर की निगरानी करें
  • असामान्य पैटर्न के लिए अलर्ट सेट करें

सहायता

Chat API में मदद चाहिए?

चेंजलॉग

v2.0.0 (वर्तमान)

  • Chat API की प्रारंभिक रिलीज़
  • स्वाभाविक भाषा क्वेरी का समर्थन
  • रीयल-टाइम वेब सर्च एकीकरण
  • स्रोत उद्धरणों के साथ AI-जनित उत्तर