Felo API PlatformFelo API Platform

Felo APIs

Chat API

استفسار کے تجزیے، ویب ذرائع اور حوالوں کے ساتھ AI سے چلنے والی گفتگوئی تلاش شامل کریں۔

POST/v2/chat

تصدیق

Bearer API key

مواد کی قسم

application/json

ریٹ نوٹس

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

Chat API آپ کو اپنی ایپلیکیشنز میں AI سے چلنے والی مکالماتی تلاش شامل کرنے کی سہولت دیتا ہے۔ قدرتی زبان میں سوال بھیجیں اور حقیقی وقت کے ویب سرچ نتائج سے تیار کردہ ذہین جواب حاصل کریں۔

ریٹ کی حدود، ایرر جوابات اور دوبارہ کوشش کے رویے کے لیے ایررز، حدود اور دوبارہ کوششیں دیکھیں۔

جائزہ

Chat API درج ذیل کام کرتا ہے:

  1. آپ کے استفسار کی تجزیہ اور اصلاح کرتا ہے
  2. متعلقہ معلومات کے لیے ویب تلاش کرتا ہے
  3. تلاش کے نتائج کی درجہ بندی اور فلٹرنگ کرتا ہے
  4. ماخذ کی بنیاد پر جامع AI جواب تیار کرتا ہے
  5. جواب کے ساتھ ماخذ کے حوالہ جات واپس کرتا ہے

استعمال کے مواقع:

  • مکالماتی AI اسسٹنٹس
  • تحقیق اور معلومات کی بازیافت کے ٹولز
  • ویب نالج والے کسٹمر سپورٹ چیٹ بوٹس
  • تعلیمی ایپلیکیشنز
  • مواد کی تخلیق کے ٹولز

تصدیق

Chat API کو بھیجی جانے والی تمام درخواستوں کے لیے API کلید کے ذریعے تصدیق لازمی ہے۔ اپنی API کلید Authorization ہیڈر میں شامل کریں:

Authorization: Bearer YOUR_API_KEY

اپنی API کلید حاصل کرنے اور استعمال کرنے کی تفصیلات کے لیے تصدیق کی گائیڈ دیکھیں۔

AI ایجنٹس کے ساتھ استعمال

جب آپ چاہتے ہیں کہ ایجنٹ Search اور باقی تمام دستیاب Felo Skills استعمال کرے تو مکمل felo-ai پیکج انسٹال کریں۔ انسٹالر SKILL.md رکھنے والی ہر پیکج ڈائریکٹری کو متحرک طور پر دریافت کرتا ہے، لہٰذا یہ مقررہ ذیلی سیٹ کے بجائے مستقبل کے Skills بھی شامل کرتا ہے۔ اِنہیں اپنے ایجنٹ کی مقامی ڈائریکٹری میں انسٹال کریں: Codex ~/.codex/skills استعمال کرتا ہے، Claude Code ~/.claude/skills، OpenClaw ~/.agents/skills اور Hermes Agent ~/.hermes/skills۔ ہر پلیٹ فارم کے محفوظ لنک، API کلید اور تصدیق کے مراحل کے لیے AI ایجنٹ کی دستی سیٹ اپ گائیڈ دیکھیں۔

endpoint

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

درخواست

ہیڈرز

ہیڈرلازمیتفصیل
Authorizationہاںآپ کی API کلید اِس فارمیٹ میں: Bearer YOUR_API_KEY
Content-Typeہاںapplication/json ہونا چاہیے

باڈی پیرامیٹرز

پیرامیٹرقسملازمیتفصیلپابندیاں
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 اسٹیٹس کوڈ کو بطور number استعمال کرتے ہیں
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 مشترکہ ایرر انویلپ واپس کرتا ہے:

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

ایرر جواب کے فیلڈز

فیلڈقسمتفصیل
statusnumberHTTP اسٹیٹس کوڈ؛ کامیاب جوابات "ok" استعمال کرتے ہیں
codestringایرر کی قسم کی نشاندہی کرنے والا ایرر کوڈ
messagestringانسان کے پڑھنے کے قابل ایرر کی وضاحت
request_idstringاِس درخواست کا منفرد شناخت کنندہ (معاونت کے لیے مفید)

Error Codes (ایرر کوڈز)

HTTPکوڈمطلب
400endpoint ویلیڈیشن کوڈquery فیلڈ غائب، خالی یا بہت طویل ہے؛ مخصوص مسئلے کے لیے message پڑھیں
401UNAUTHORIZEDAPI کلید غائب، غلط یا منسوخ ہے
429RATE_LIMITEDریٹ کی حد سے تجاوز ہوا
502CHAT_FAILEDاندرونی سروس کی خرابی
503SERVICE_UNAVAILABLEسروس عارضی طور پر دستیاب نہیں

مشترکہ انویلپ، دیگر ایرر کوڈز اور دوبارہ کوشش کے قواعد کے لیے ایررز، حدود اور دوبارہ کوششیں دیکھیں۔

مثالیں

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 سبسکرپشن ہے (بشمول انٹرپرائز سبسکرپشنز) وہ /v2/chat کی تمام ریٹ کی حدود سے مستثنیٰ ہیں، API کلید اور OAuth دونوں تصدیق کے لیے۔ مستثنیٰ جوابات میں X-RateLimit-* ہیڈرز شامل نہیں ہوتے۔

بامعاوضہ سبسکرپشن کے بغیر صارفین تین جہتوں میں ریٹ کی حدود کے تابع ہیں۔ اگر سبسکرپشن کی حالت کی تصدیق نہ ہو سکے تو یہ حدود پھر بھی لاگو ہوتی ہیں:

  • فی API کلید - ایک API کلید سے 1 منٹ کی ونڈو میں کی گئی درخواستوں کو محدود کرتا ہے۔
  • فی صارف (منٹ) - کسی صارف کی تمام API کلیدیں استعمال کرتے ہوئے 1 منٹ کی ونڈو میں کل درخواستوں کو محدود کرتا ہے۔
  • فی صارف (گھنٹہ) - کسی صارف کی تمام API کلیدیں استعمال کرتے ہوئے 1 گھنٹے کی ونڈو میں کل درخواستوں کو محدود کرتا ہے۔

کسی بھی جہت سے تجاوز 429 Too Many Requests جواب کا سبب بنتا ہے۔

اصل عددی حدود وقت کے ساتھ بدل سکتی ہیں۔ اِنہیں ہمیشہ نیچے دیے گئے جواب کے ہیڈرز سے پڑھیں، دستاویزات کے اسنیپ شاٹس سے نہیں۔

جواب کے ہیڈرز (ریٹ کی حد کے تابع جوابات، بشمول 429):

ہیڈرمطلب
X-RateLimit-Limitفی الحال نافذ سب سے سخت جہت کی حد
X-RateLimit-Remainingتینوں جہتوں میں کم سے کم باقی کوٹہ
X-RateLimit-Resetموجودہ ونڈو کے ری سیٹ ہونے کا Unix ٹائم اسٹیمپ (سیکنڈز)

429 پر، اضافی طور پر:

ہیڈرمطلب
Retry-Afterتجویز کردہ دوبارہ کوشش کی تاخیر (سیکنڈز)

429 باڈی کی مثال (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 پڑھیں اور پیشگی بیک آف کریں۔ 429 پر دوبارہ کوشش سے پہلے کم از کم Retry-After سیکنڈ (یا X-RateLimit-Reset تک) انتظار کریں۔ حد کی ویلیوز ہارڈ کوڈ نہ کریں۔

مکمل دوبارہ کوشش کی پالیسی اور بیک آف رہنمائی کے لیے ایررز، حدود اور دوبارہ کوششیں دیکھیں۔ اگر آپ کو زیادہ ریٹ کی حدود درکار ہوں تو [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. جوابات کیش کریں

API کالز کم کرنے اور جواب کے وقت کو بہتر بنانے کے لیے یکساں استفسارات کے جوابات کیش کرنے پر غور کریں۔

4. اِن پٹ کی تصدیق کریں

API کو بھیجنے سے پہلے صارف کے اِن پٹ کی تصدیق کریں:

  • یقینی بنائیں کہ استفسار خالی نہیں
  • استفسار کی لمبائی چیک کریں (1-2000 حروف)
  • انجیکشن حملوں سے بچنے کے لیے اِن پٹ صاف کریں

5. استعمال کی نگرانی کریں

ریٹ کی حدود میں رہنے اور اخراجات بہتر بنانے کے لیے اپنے API استعمال کو ٹریک کریں:

  • درخواستوں کی تعداد اور جواب کے اوقات لاگ کریں
  • ایرر کی شرح کی نگرانی کریں
  • غیر معمولی طرزوں کے لیے الرٹس مقرر کریں

معاونت

Chat API کے ساتھ مدد چاہیے؟

Changelog (تبدیلیوں کی تاریخ)

v2.0.0 (Current)

  • Chat API کی ابتدائی ریلیز
  • قدرتی زبان کے استفسارات کی معاونت
  • حقیقی وقت کے ویب سرچ کا انضمام
  • ماخذ کے حوالہ جات کے ساتھ AI سے تیار کردہ جوابات