Ferman AI API Dokümantasyonu

REST API — OpenAI istemcileriyle uyumlu format, herhangi bir HTTP istemcisiyle kullanabilirsiniz.

Base URL: https://ferman.net.tr/api/v1

Kimlik Doğrulama

Tüm API isteklerinde Authorization header'ına API anahtarınızı ekleyin:

Authorization: Bearer fai_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

API anahtarı oluşturmak için Dashboard → API sayfasını ziyaret edin.

Rate Limits

Her API isteği aylık API çağrı kotanıza sayılır. Kota aşıldığında 429 Too Many Requests döner.

Her mesajdaki token tüketimi de toplam token kullanımınıza işlenir ve dashboard'da görüntülenebilir.

Plan Limitleri

PlanAylık API ÇağrısıDosya YüklemeMax Dosya
Free500
Basic2.0005 MB
Standard10.0005 MB
Pro50.0005 MB
Premium200.00010 MB
EliteSınırsız10 MB

Endpoint: Modeller

GET /api/v1/models Kullanılabilir modelleri listeler

Yanıt Örneği

{
  "object": "list",
  "data": [
    {
      "id": "ferman3.5",
      "object": "model",
      "owned_by": "ollama"
    }
  ]
}

Endpoint: Chat Completions

POST /api/v1/chat/completions Mesaj gönder ve yanıt al

İstek Parametreleri

ParametreTipAçıklama
modelzorunlustringKullanılacak model ID (örn: ferman3.5)
messageszorunluarraySohbet geçmişi — [{role, content}] formatında
streamisteğe bağlıbooleanSSE stream ile yanıt al (varsayılan: false)
temperatureisteğe bağlınumberYanıt yaratıcılığı 0–2 arası (varsayılan: 0.7)
max_tokensisteğe bağlıintegerMaksimum çıktı token sayısı

İstek Örneği

{
  "model": "ferman3.5",
  "messages": [
    { "role": "system",    "content": "Sen yardımcı bir asistansın." },
    { "role": "user",      "content": "Merhaba, nasıl çalışıyorsun?" }
  ],
  "stream": false
}

Başarılı Yanıt

{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1741000000,
  "model": "ferman3.5",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Merhaba! Ben Ferman AI, size nasıl yardımcı olabilirim?"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 24,
    "completion_tokens": 18,
    "total_tokens": 42
  }
}

Hata Yanıtları

HTTP KoduAçıklama
401Geçersiz veya eksik API anahtarı
403Hesap askıya alınmış
429Aylık API kota aşıldı
500Sunucu / model hatası

Chat API: Sohbet Listesi

Auth: Chat API Authorization: Bearer fai_xxx veya session ile çalışır. Kullanıcılar yalnızca kendi sohbetlerine erişebilir.
GET /api/chat/list Sohbetleri listeler

Query: ?q=arama (isteğe bağlı)

{ "success": true, "chats": [{ "id": 42, "title": "Merhaba", "slug": "merhaba-a1b2", "model": "ferman3.5", "message_count": 5 }] }

Chat API: Sohbet Oluştur

POST /api/chat/create Yeni sohbet oluşturur
ParametreTipAçıklama
titleisteğe bağlıstringBaşlık (varsayılan: "Yeni Sohbet")
modelisteğe bağlıstringModel
{ "success": true, "chat_id": 43, "slug": "python-x9k2", "title": "Python" }

Chat API: Sohbet Geçmişi

GET /api/chat/{id}/history Mesaj geçmişini getirir
{ "success": true, "chat": { "id": 42, "title": "Merhaba" }, "messages": [{ "id": 101, "role": "user", "content": "Merhaba!", "token_count": 12 }, { "id": 102, "role": "assistant", "content": "Yardımcı olabilirim?", "token_count": 18 }] }

Chat API: Mesaj Gönder (SSE)

POST /api/chat/{id}/send Mesaj gönderir — yanıt SSE stream
ParametreTipAçıklama
messagezorunlustringMesaj metni

SSE Yanıt Formatı

data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":"Merhaba"},"finish_reason":null}]}
data: {"choices":[{"delta":{},"finish_reason":"stop"}],"done":true}
data: [DONE]
HTTP KoduAçıklama
401Kimlik doğrulama başarısız
429Günlük limit / rate limit aşıldı

Chat API: Sohbet Güncelle

PUT /api/chat/{id} Başlık veya arşiv durumunu günceller
ParametreTipAçıklama
titleisteğe bağlıstringYeni başlık (max 200)
archivedisteğe bağlıbooleanArşivle/çıkar
{ "success": true, "message": "Güncellendi" }

Chat API: Sohbet Sil

DELETE /api/chat/{id} Sohbeti kalıcı olarak siler

Sohbet ve tüm mesajları kalıcı silinir. Geri alınamaz.

{ "success": true, "message": "Sohbet silindi" }

Chat API: Mesaj Tepkisi

POST /api/chat/{chatId}/message/{msgId}/react Mesaja tepki verir
ParametreTipAçıklama
reactionzorunluinteger1 = beğen, -1 = beğenme, 0 = kaldır
{ "success": true, "message": "Kaydedildi" }

Örnek: cURL

curl -X POST https://ferman.net.tr/api/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer fai_ANAHTARINIZ" \
  -d '{
    "model": "ferman3.5",
    "messages": [
      {"role": "user", "content": "Merhaba!"}
    ]
  }'

Örnek: PHP

<?php
$ch = curl_init('https://ferman.net.tr/api/v1/chat/completions');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json',
        'Authorization: Bearer fai_ANAHTARINIZ',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'model'    => 'ferman3.5',
        'messages' => [
            ['role' => 'user', 'content' => 'Merhaba!'],
        ],
    ]),
]);
$response = json_decode(curl_exec($ch), true);
echo $response['choices'][0]['message']['content'];

Örnek: Python (requests)

import requests

response = requests.post(
    'https://ferman.net.tr/api/v1/chat/completions',
    headers={
        'Content-Type': 'application/json',
        'Authorization': 'Bearer fai_ANAHTARINIZ',
    },
    json={
        'model': 'ferman3.5',
        'messages': [
            {'role': 'user', 'content': 'Merhaba!'}
        ]
    }
)
print(response.json()['choices'][0]['message']['content'])

Örnek: JavaScript (fetch)

const response = await fetch('https://ferman.net.tr/api/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer fai_ANAHTARINIZ',
  },
  body: JSON.stringify({
    model: 'ferman3.5',
    messages: [
      { role: 'user', content: 'Merhaba!' }
    ]
  })
});

const data = await response.json();
// data.choices[0].message.content