Felo APIs
Chat API
क्वेरी विश्लेषण, वेब संसाधनों और citations के साथ AI बातचीत खोज जोड़ें।
/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 निम्न क्रियाएं करती है:
- आपकी क्वेरी का विश्लेषण और अनुकूलन करती है
- प्रासंगिक जानकारी के लिए वेब खोजती है
- सर्च परिणामों को रैंक और फ़िल्टर करती है
- स्रोतों के आधार पर विस्तृत AI उत्तर तैयार करती है
- स्रोत उद्धरणों के साथ उत्तर लौटाती है
उपयोग के मामले:
- संवादात्मक 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 पैरामीटर
| पैरामीटर | प्रकार | आवश्यक | विवरण | सीमाएं |
|---|---|---|---|---|
query | string | हां | उपयोगकर्ता का प्रश्न या खोज क्वेरी | 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..."
}
]
}
}प्रतिक्रिया फ़ील्ड
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
status | string | number | प्रतिक्रिया स्थिति: सफल होने पर "ok"; त्रुटि प्रतिक्रियाएं HTTP स्टेटस कोड को संख्या के रूप में उपयोग करती हैं |
message | string | null | अतिरिक्त संदेश (सफल अनुरोध के लिए null) |
data | object | प्रतिक्रिया डेटा (केवल तब मौजूद जब status "ok" हो) |
data.id | string | इस चैट सेशन का विशिष्ट पहचानकर्ता |
data.message_id | string | इस विशिष्ट संदेश का विशिष्ट पहचानकर्ता |
data.answer | string | क्वेरी के लिए AI-जनित उत्तर |
data.query_analysis | object | उपयोगकर्ता की क्वेरी का विश्लेषण |
data.query_analysis.queries | string[] | उपयोगकर्ता इनपुट से व्युत्पन्न अनुकूलित खोज क्वेरी |
data.resources | array | उत्तर तैयार करने में उपयोग किए गए वेब स्रोतों की सूची |
data.resources[].link | string | स्रोत का URL |
data.resources[].title | string | स्रोत पेज का शीर्षक |
data.resources[].snippet | string | स्रोत से प्रासंगिक अंश |
त्रुटि प्रतिक्रिया
जब त्रुटि होती है, API साझा error envelope लौटाती है:
{
"status": 401,
"code": "UNAUTHORIZED",
"message": "API Key is required",
"request_id": "..."
}त्रुटि प्रतिक्रिया फ़ील्ड
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
status | number | HTTP स्टेटस कोड; सफल प्रतिक्रियाएं "ok" उपयोग करती हैं |
code | string | त्रुटि प्रकार की पहचान करने वाला error code |
message | string | मानव-पठनीय त्रुटि विवरण |
request_id | string | इस अनुरोध का विशिष्ट पहचानकर्ता (सहायता के लिए उपयोगी) |
Error Codes (त्रुटि कोड)
| HTTP | कोड | अर्थ |
|---|---|---|
| 400 | Endpoint validation code | query फ़ील्ड गुम, खाली या बहुत लंबा है; विशिष्ट समस्या के लिए message पढ़ें |
| 401 | UNAUTHORIZED | API key गुम, अमान्य या रद्द है |
| 429 | RATE_LIMITED | दर सीमा पार हो गई |
| 502 | CHAT_FAILED | आंतरिक सेवा त्रुटि |
| 503 | SERVICE_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 backoff3. प्रतिक्रियाएं cache करें
API कॉल कम करने और प्रतिक्रिया समय सुधारने के लिए समान क्वेरी की प्रतिक्रियाएं cache करने पर विचार करें।
4. इनपुट validate करें
API को भेजने से पहले उपयोगकर्ता इनपुट validate करें:
- सुनिश्चित करें कि क्वेरी खाली नहीं है
- क्वेरी लंबाई जांचें (1-2000 अक्षर)
- injection हमलों से बचने के लिए इनपुट sanitize करें
5. उपयोग की निगरानी करें
दर सीमा के भीतर रहने और लागत अनुकूलित करने के लिए अपने API उपयोग पर नज़र रखें:
- अनुरोध संख्या और प्रतिक्रिया समय लॉग करें
- त्रुटि दर की निगरानी करें
- असामान्य पैटर्न के लिए अलर्ट सेट करें
सहायता
Chat API में मदद चाहिए?
- Getting Started गाइड देखें
- Authentication दस्तावेज़ देखें
- अपने request ID के साथ [email protected] पर सहायता से संपर्क करें
चेंजलॉग
v2.0.0 (वर्तमान)
- Chat API की प्रारंभिक रिलीज़
- स्वाभाविक भाषा क्वेरी का समर्थन
- रीयल-टाइम वेब सर्च एकीकरण
- स्रोत उद्धरणों के साथ AI-जनित उत्तर