API Token
Token girilmedi

Genel Bakış

Base URL: https://xlyazilim.com/api/v1
Tüm API istekleri bu base URL üzerinden yapılmalıdır.
İpucu: Sol taraftaki / tuşu veya Ctrl+K kısayolu ile endpoint arayabilirsiniz. Esc ile aramayı kapatın.

Hızlı Başlangıç

1. Kayıt Ol

POST /auth/register ile yeni hesap oluşturun.

Detaylı bilgi →

2. Giriş Yap

POST /auth/login ile token alın.

Detaylı bilgi →

3. Token Kullan

Authorization header'a Bearer token ekleyin.

Detaylı bilgi →

Kimlik Doğrulama

API, Laravel Sanctum tabanlı token authentication kullanır. Korumalı endpoint'lere erişmek için her istekte token gönderilmelidir.

HTTP Header
Authorization: Bearer YOUR_TOKEN_HERE
Önemli: Token'ı güvenli bir şekilde saklayın. Her oturum için yeni token alınmalıdır. Çıkış yapıldığında token geçersiz olur.

Hata Kodları

API standart HTTP durum kodlarını kullanır. Hata durumunda detaylı mesaj döner.

Kod Durum Açıklama
200 OK İstek başarılı
201 Created Kaynak başarıyla oluşturuldu
400 Bad Request Geçersiz istek formatı
401 Unauthorized Kimlik doğrulama gerekli veya token geçersiz
403 Forbidden Bu işlem için yetkiniz yok
404 Not Found Kaynak bulunamadı
422 Validation Error Doğrulama hatası (detaylar response'da)
429 Too Many Requests Rate limit aşıldı
500 Server Error Sunucu hatası
Örnek Hata Response
{
  "success": false,
  "message": "Validation failed",
  "errors": {
    "email": ["Email alanı gereklidir."],
    "password": ["Şifre en az 8 karakter olmalıdır."]
  }
}

Kimlik Doğrulama (Auth)

6 Endpoint

Kullanıcı kayıt, giriş, çıkış ve şifre işlemleri için kullanılan endpoint'ler. Token tabanlı kimlik doğrulama (Laravel Sanctum) kullanılmaktadır.

POST /auth/register Public Yeni Kullanıcı Kaydı

Yeni bir kullanıcı hesabı oluşturur. Başarılı kayıt sonrası otomatik olarak token döner.

Request Body

Parametre Tip Açıklama
name Zorunlu string Kullanıcının tam adı (min: 2)
email Zorunlu string Geçerli ve benzersiz email adresi
password Zorunlu string Şifre (min: 8 karakter)
password_confirmation Zorunlu string Şifre tekrarı

Test Et

POST /auth/login Public Kullanıcı Girişi

Email ve şifre ile giriş yapar, başarılı olursa Bearer token döner. Bu token diğer korumalı endpoint'lerde kullanılır.

Request Body

Parametre Tip Açıklama
email Zorunlu string Kayıtlı email adresi
password Zorunlu string Kullanıcı şifresi

Test Et

Örnek Response
{
  "success": true,
  "message": "Giriş başarılı",
  "token": "1|abc123...",
  "user": {
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com"
  }
}
GET /auth/me Auth Mevcut Kullanıcı Bilgisi

Giriş yapmış kullanıcının bilgilerini döner. Token gerektirir.

Test Et

POST /auth/logout Auth Çıkış Yap

Mevcut token'ı iptal eder ve kullanıcıyı çıkış yaptırır.

Test Et

POST /auth/forgot-password Public Şifremi Unuttum

Şifre sıfırlama e-postası gönderir.

Request Body

Parametre Tip Açıklama
email Zorunlu string Kayıtlı email adresi

Test Et

POST /auth/reset-password Public Şifre Sıfırla

Token ile şifre sıfırlama işlemini tamamlar.

Request Body

Parametre Tip Açıklama
token Zorunlu string E-posta ile gelen sıfırlama token'ı
email Zorunlu string Kullanıcı email adresi
password Zorunlu string Yeni şifre (min: 8)
password_confirmation Zorunlu string Yeni şifre tekrarı

Test Et

Onboarding

5 Endpoint

Yeni kullanıcıların ilk giriş akışını yöneten endpoint'ler. Kullanıcı tercihlerini toplar ve profili yapılandırır.

GET /onboarding/flow Auth Onboarding Flow Bilgisi

Aktif onboarding flow'u ve tüm adımlarını döner. Kullanıcının mevcut durumunu ve tamamlanan adımları içerir.

Test Et

GET /onboarding/steps Auth Tüm Adımları Listele

Tüm onboarding adımlarını cevaplanma durumuyla birlikte listeler. Bu endpoint ile tüm step'leri tek seferde alabilir ve next'e gerek kalmadan flow'u gösterebilirsiniz.

Test Et

GET /onboarding/steps/next Auth Sonraki Adım

Kullanıcının tamamlaması gereken bir sonraki onboarding adımını döner. Cevaplanan step'ten sonraki ilk cevaplanmamış step'i döndürür.

Test Et

POST /onboarding/steps/{step_id}/answer Auth Adım Cevabı Gönder

Belirli bir onboarding adımı için kullanıcının cevabını kaydeder.

URL Parametreleri

Parametre Tip Açıklama
step_id Zorunlu integer Onboarding adım ID'si

Request Body

Parametre Tip Açıklama
option_id Opsiyonel integer Seçilen seçenek ID'si (single/multiple choice için)
option_ids Opsiyonel array Seçilen seçenek ID'leri (multiple choice için)
answer Opsiyonel string|number|boolean|array Cevap değeri (soru tipine göre: text, number, date, boolean, single_choice, multi_choice)

Test Et

POST /onboarding/complete Auth Onboarding Tamamla

Onboarding sürecini tamamlar ve kullanıcıyı ana uygulamaya yönlendirir.

Test Et

Engagement & Points

4 Endpoint

Günlük giriş, streak takibi ve puan kazanma sistemi için kullanılan endpoint'ler.

POST /engagement/daily-login Auth Günlük Giriş

Kullanıcının günlük girişini kaydeder. Streak bilgisi ve bonus XP döner.

Test Et

POST /points/earn Auth Puan Kazan

Belirli bir eylem için puan kazandırır. Aksiyon tipine göre puan miktarı değişir.

Request Body

Parametre Tip Açıklama
action Zorunlu string Aksiyon tipi (lesson_complete, quiz_pass, streak_bonus vb.)
reference_type Opsiyonel string Referans model tipi
reference_id Opsiyonel integer Referans model ID'si

Test Et

GET /points/me Auth Puan Bilgisi

Kullanıcının mevcut puan durumunu, seviye bilgisini ve streak verisini döner.

Test Et

GET /points/history Auth Puan Geçmişi

Kullanıcının puan kazanma geçmişini sayfalı olarak döner.

Query Parametreleri

Parametre Tip Açıklama
page Opsiyonel integer Sayfa numarası (varsayılan: 1)
per_page Opsiyonel integer Sayfa başına kayıt (varsayılan: 20)

Test Et

Avatar Sistemi

3 Endpoint

Kullanıcı avatarı özelleştirme ve yönetim endpoint'leri. Kategorilere göre avatar parçaları satın alınabilir ve kombinlenebilir.

GET /avatar/catalog Auth Katalog

Tüm avatar kategorilerini ve içerdikleri parçaları döner. Her parçanın fiyatı, kilit durumu ve kullanıcının sahip olup olmadığı bilgisi içerir.

Test Et

GET /avatar/me Auth Mevcut Avatar

Kullanıcının mevcut avatar konfigürasyonunu döner. Seçili parçalar ve sahip olunan tüm parçalar listelenir.

Test Et

POST /avatar/save Auth Avatar Kaydet

Avatar konfigürasyonunu kaydeder. Yeni parça seçimi veya satın alma işlemi yapar. Kullanıcının sahip olmadığı parça seçilirse otomatik satın alma yapılır.

Request Body

Parametre Tip Açıklama
selections Zorunlu object Kategori bazlı seçimler {"hair": 5, "eyes": 2, ...}

Test Et

Seviye Belirleme (Placement)

5 Endpoint

Kullanıcının İngilizce seviyesini belirlemek için kullanılan test sistemi. Adaptif sorularla kullanıcının gerçek seviyesi tespit edilir.

GET /placement/active Auth Aktif Testler

Kullanıcının alabileceği aktif placement testlerini listeler. Daha önce tamamlanmış ve devam eden testler bilgisi içerir.

Test Et

POST /placement/start Auth Test Başlat

Yeni bir placement test oturumu başlatır veya devam eden oturumu döner. İlk soru ile birlikte oturum bilgisi döner.

Request Body

Parametre Tip Açıklama
test_id Zorunlu integer Test ID'si (aktif testlerden birini seçin)

Test Et

Önce /placement/active endpoint'inden test ID'sini alın
POST /placement/answer Auth Cevap Gönder

Mevcut soruya cevap gönderir. Adaptif sistem sonraki soruyu belirler. Cevap doğruluğuna göre zorluk seviyesi ayarlanır.

Request Body

Parametre Tip Açıklama
attempt_id Zorunlu integer Test attempt ID'si (start endpoint'inden alınır)
question_id Zorunlu integer Soru ID'si
answer Opsiyonel string Seçilen cevap (soru tipine göre değişir)

Test Et

Test başlatıldıktan sonra dönen attempt_id değerini girin
Soru tipine göre değişir (text, option value, vb.)
POST /placement/finish Auth Testi Bitir

Placement testini tamamlar ve sonuçları hesaplar. Belirlenen seviye kullanıcı profiline kaydedilir.

Request Body

Parametre Tip Açıklama
attempt_id Zorunlu integer Test attempt ID'si (start endpoint'inden alınır)

Test Et

Test başlatıldıktan sonra dönen attempt_id değerini girin
GET /placement/level Auth Seviye Getir

Kullanıcının placement test sonucu belirlenen seviyesini döner. Test tamamlanmamışsa null döner.

Test Et

Öğrenci API (Student)

10 Endpoint

Öğrenci paneli için sınıf, ders, aktivite, sınav ve ilerleme bilgilerini yöneten endpoint'ler.

GET /student/classes Auth Sınıflarım

Öğrencinin kayıtlı olduğu sınıfları listeler.

Test Et

GET /student/lessons Auth Derslerim

Öğrencinin erişebileceği dersleri listeler.

Test Et

GET /student/lessons/{lesson} Auth Ders Detayı

Belirli bir dersin detay bilgilerini döner.

Test Et

GET /student/exams Auth Sınavlarım

Öğrencinin atanmış sınavlarını listeler.

Test Et

GET /student/exams/{exam} Auth Sınav Detayı

Sınav detay bilgilerini döner.

Test Et

POST /student/exams/{exam}/submit Auth Sınav Gönder

Sınav cevaplarını gönderir.

Test Et

GET /student/progress Auth İlerlemem

Öğrencinin genel ilerleme bilgilerini döner.

Test Et

GET /student/points Auth Puanlarım

Öğrencinin puan bilgilerini döner.

Test Et

GET /student/badges Auth Rozetlerim

Öğrencinin kazandığı rozetleri listeler.

Test Et

GET /student/leaderboard Auth Liderlik Tablosu

Sınıf veya okul bazlı liderlik tablosunu döner.

Test Et

Pratik - AI Konuşma

14 Endpoint
Pratik Bölümü iki ana modülden oluşur:
1. Senaryo Pratiği: Önceden tanımlanmış konularda AI ile rol yaparak konuşma (POST /practice/start)
2. Serbest Konuşma: Herhangi bir konuda zamanlı serbest konuşma (POST /practice/free/start)
Her iki modül için de Review (geri bildirim) desteği mevcuttur.
CEFR Seviyeleri: Tüm endpoint'lerde zorluk seviyesi için CEFR sistemi kullanılır.
A1 (Başlangıç) • A2 (Temel) • A1-A2 (Geçiş) • B1 (Orta) • B2 (Orta Üstü) • A2-B1B1-B2C1 (İleri) • C2 (Üstün) • B2-C1C1-C2

AI destekli interaktif konuşma pratiği. Tüm konuşmalar TTS (Text-to-Speech) desteğine sahiptir. Piper-TTS motoru kullanılır (en_US-libritts-high ONNX modeli).

Senaryo Tabanlı Konuşma Pratiği

Farkli roller (arkadaş, öğretmen, iş görüşmecisi), konular ve adım sayısı ile senaryo tabanlı konuşmalar. TTS ses desteği dahil.

Panel Senaryo Alanları → API Parametre Eşlemesi

Panelden oluşturulan senaryoda yer alan alanlar, konuşma başlatılırken aşağıdaki API parametrelerine map edilir.

Panel alanıAPI parametresiAçıklama
Konu Başlığı (Topic) topic + llm_role Ana konu başlığı hem topic hem llm_role parametrelerine eklenir
Konu İçerik Detayı details Senaryo veya metin bağlamı
Hedef Kelimeler (Vocabulary) vocabulary Pratik yapılacak kelime listesi (array, max 20)
Hedef Gramer Kuralları target_grammar Hedef gramer kuralları veya tense (max 10)
Zorluk Seviyesi difficulty CEFR seviyesi: A1–C2
GET /practice/voices Public TTS Sesler Listesi

Konuşma pratiğinde kullanılabilir TTS seslerinin listesini döner. Kadın ve erkek ses seçenekleri voice_id, isim, açıklama ve speaker_id ile döner.

Kadın Sesler: female_1 (Emily), female_2 (Sarah), female_3 (Jessica), female_4 (Ashley), female_5 (Amanda), female_6 (Rachel), female_7 (Olivia), female_8 (Emma)
Erkek Sesler: male_1 (David), male_2 (Michael), male_3 (James), male_4 (Robert), male_5 (William), male_6 (Daniel), male_7 (Thomas), male_8 (Christopher)

Test Et

GET /practice/scenarios Auth Senaryo Listesi

Giriş yapan kullanıcının sınıfı ve İngilizce seviyesine göre konuşma senaryolarını döner. Listeden seçilen senaryonun id değeri ile POST /practice/start çağrılarak konuşma başlatılır.

Query Parameters (Opsiyonel)

ParametreTipAçıklama
grade_level_id Opsiyonel integer Sınıf ID. Yoksa kullanıcının kayıtlı olduğu sınıftan alınır.
level_band_id Opsiyonel integer Seviye bandı ID (A1, A2, B1 vb.).
unit_id Opsiyonel integer Ünite ID ile filtre
difficulty Opsiyonel string beginner, intermediate, advanced
category Opsiyonel string travel, business, daily_life, shopping, healthcare vb.

Test Et

POST /practice/start Auth Konuşma Başlat

Senaryo tabanlı konuşma oturumu başlatır. AI'nın rolü, konu, kelime hedefleri ve gramer hedefleri belirlenir. session_id döner, sonraki mesajlar için bu ID kullanılır.

Senaryo ID ile Başlatma (Önerilen)

ParametreTipAçıklama
scenario_id Opsiyonel integer Panelden oluşturulan senaryonun ID'si. Verildiğinde topic, details, vocabulary, target_grammar, difficulty, partner_name, llm_role, total_steps otomatik doldurulur.

Request Body (scenario_id yoksa zorunlu)

ParametreTipZorunluAçıklama
partner_name string Evet* AI partnerin adı (1-50 karakter). Örn: "Sarah"
llm_role string Evet* AI'nın rol açıklaması (5-300 karakter). Örn: "friendly coffee shop barista"
total_steps integer Evet* Konuşma adım sayısı (3-30)
topic string Hayır Konuşma konusu (max 200 karakter)
details string Hayır Ek detaylar/bağlam (max 500 karakter)
vocabulary array Hayır Hedef kelimeler (max 20)
target_grammar array Hayır Hedef gramer yapıları (max 10)
difficulty string Hayır CEFR seviyesi (varsayılan: B1)
voice_gender string Hayır male veya female (varsayılan: female)
voice_id string Hayır Belirli ses ID (örn: female_3, male_1)
speech_rate float Hayır Ses hızı: 0.5-1.5 (varsayılan: 1.0)
enable_tts boolean Hayır TTS aktif/pasif (varsayılan: true)
textbook_grade string Hayır Ders kitabı sınıf seviyesi (2-12)
Örnek İstek
{
  "partner_name": "Sarah",
  "llm_role": "friendly coffee shop barista",
  "total_steps": 8,
  "topic": "ordering coffee",
  "details": "Focus on polite expressions",
  "vocabulary": ["latte", "espresso", "pastry"],
  "target_grammar": ["Would like", "Present Perfect"],
  "difficulty": "B1",
  "voice_gender": "female",
  "speech_rate": 1.0,
  "enable_tts": true
}
Örnek Yanıt
{
  "session_id": "a1b2c3d4e5f6g7h8",
  "opening_message": "Hi there! Welcome to our coffee shop. What can I get for you today?",
  "partner_name": "Sarah",
  "total_steps": 8,
  "audio_base64": "UklGRi4AAAB... (base64 WAV veya null)",
  "voice_id": "female_1"
}

Test Et

Doluysa aşağıdaki alanlar otomatik dolar
0.5=hızlı, 1.0=normal, 1.5=yavaş
JSON array formatında
JSON array formatında
POST /practice/chat Auth Mesaj Gönder (Chat)

Devam eden konuşmada mesaj gönderir ve AI yanıtını alır. Adım sayacı ve bitiş durumu döner. is_done: true olduğunda konuşma tamamlanmıştır.

Request Body

ParametreTipZorunluAçıklama
session_id string Evet /start'tan dönen session_id
user_message string Evet Kullanıcının mesajı (1-2000 karakter)
Örnek İstek
{
  "session_id": "a1b2c3d4e5f6g7h8",
  "user_message": "Hi! I would like a latte please."
}
Örnek Yanıt
{
  "session_id": "a1b2c3d4e5f6g7h8",
  "ai_message": "Sure! Would you like a regular or large latte?",
  "current_step": 2,
  "total_steps": 8,
  "remaining_steps": 6,
  "is_done": false,
  "audio_base64": "UklGRi4AAAB... (base64 WAV veya null)"
}

Test Et

POST /practice/end Auth Konuşmayı Bitir

Konuşma oturumunu sonlandırır ve özet rapor döner.

Request Body

ParametreTipZorunluAçıklama
session_id string Evet Konuşma oturum ID'si

Test Et

GET /practice/conversations Auth Geçmiş Konuşmalar

Kullanıcının geçmiş konuşmalarını listeler. Filtreleme yapılabilir.

Query Parameters (Opsiyonel)

ParametreTipAçıklama
status Opsiyonel string active veya completed
per_page Opsiyonel integer Sayfa başına kayıt (varsayılan: 20, max: 50)

Test Et

GET /practice/conversations/{id} Auth Konuşma Detayı

Belirli bir konuşmanın detaylarını ve tüm mesajlarını getirir.

URL Parameters

ParametreTipAçıklama
id Zorunlu integer Konuşma ID'si

Test Et

Senaryo Pratik Review (Denetleme)

Tamamlanan senaryo tabanlı pratik oturumunun transkripsiyonunu analiz eder. Kullanıcının her mesajı hata tespiti yapılır, [red]...[red] etiketleriyle işaretlenir, düzeltilmiş versiyon ve hata açıklamaları döner. CEFR seviyesine göre kalibre edilir: A1/A2'de toleranslı, C1/C2'de sıkı.

POST /practice/review Auth Senaryo Review

AI ve kullanıcı mesajlarını alır, sadece kullanıcı mesajlarını analiz eder. Tek bir LLM çağrısıyla tüm mesajlar analiz edilir. Senaryo tabanlı pratik için topic ve details alanları mevcuttur.

Request Body

ParametreTipZorunluAçıklama
ai_transcript array<string> Evet AI mesajları (sırasıyla, 1-50 mesaj)
user_transcript array<string> Evet Kullanıcı mesajları (sırasıyla, 1-50 mesaj)
difficulty string Hayır CEFR seviyesi (varsayılan: B1)
topic string Hayır Konuşma konusu - bağlam için (max 200)
details string Hayır Ek detaylar - bağlam için (max 500)
conversation_id integer Hayır Lokal konuşma ID (otomatik konu doldurma)
Örnek İstek
{
  "ai_transcript": [
    "Hi! Welcome to our coffee shop. What can I get for you today?",
    "Sure! Would you like a regular or large latte?",
    "Great choice! That will be $4.50."
  ],
  "user_transcript": [
    "Hi! I would like a latte please.",
    "I want large one.",
    "Here you go. I buyed a cookie too."
  ],
  "difficulty": "B1",
  "topic": "ordering coffee",
  "details": "Focus on polite expressions"
}
Örnek Yanıt
{
  "reviews": [
    {
      "id": 1,
      "original": "Hi! I would like a latte please.",
      "annotated": "Hi! I would like a latte please.",
      "corrected": "Hi! I would like a latte please.",
      "errors": [],
      "has_errors": false
    },
    {
      "id": 2,
      "original": "I want large one.",
      "annotated": "I want [red]large[red] one.",
      "corrected": "I want a large one.",
      "errors": ["Missing article: 'a' before 'large one'"],
      "has_errors": true
    },
    {
      "id": 3,
      "original": "Here you go. I buyed a cookie too.",
      "annotated": "Here you go. I [red]buyed[red] a cookie too.",
      "corrected": "Here you go. I bought a cookie too.",
      "errors": ["Wrong verb form: 'buyed' should be 'bought' (irregular past)"],
      "has_errors": true
    }
  ],
  "overall_feedback": "Good basic communication with minor grammar errors.",
  "total_messages": 3,
  "messages_with_errors": 2
}
Review Yanıt Alanları:
reviews[].annotated — Hatalar [red]....[red] ile işaretli versiyon
reviews[].corrected — Tam düzeltilmiş versiyon
reviews[].errors — Her hata için kısa açıklama (boşsa hata yok)
overall_feedback — Genel performans özeti

Test Et

JSON array formatında
JSON array formatında

Serbest Konuşma (Free Practice)

Zaman tabanlı serbest İngilizce konuşma pratiği. AI doğrudan öğretmen rolünde, rol yapma yok. 10, 15 veya 20 dakikalık oturumlar. Kalan süre her yanıtta döner, süre dolunca AI kapanış mesajı verir.

POST /practice/free/start Auth Serbest Konuşma Başlat

Zaman tabanlı serbest konuşma oturumu başlatır. Konu belirlenmez, AI öğretmen olarak serbest konuşma başlatır.

Request Body

ParametreTipZorunluAçıklama
duration_minutes integer Hayır Süre: 10, 15 veya 20 dakika (varsayılan: 15)
difficulty string Hayır CEFR seviyesi (varsayılan: B1)
voice_gender string Hayır male veya female (varsayılan: female)
voice_id string Hayır Belirli ses ID (örn: female_3)
speech_rate float Hayır Ses hızı: 0.5-1.5 (varsayılan: 1.0)
enable_tts boolean Hayır TTS aktif/pasif (varsayılan: true)
Örnek İstek
{
  "duration_minutes": 15,
  "difficulty": "B1",
  "voice_gender": "female",
  "speech_rate": 1.0,
  "enable_tts": true
}
Örnek Yanıt
{
  "session_id": "f8e7d6c5b4a39281",
  "opening_message": "Hello! Welcome to our practice session. How are you today?",
  "duration_minutes": 15,
  "remaining_seconds": 900,
  "audio_base64": "UklGRi4AAAB... (base64 WAV veya null)",
  "voice_id": "female_1"
}

Test Et

POST /practice/free/chat Auth Serbest Mesaj Gönder

Devam eden serbest konuşmada mesaj gönderir. remaining_seconds ile geri sayım takip edilir. is_done: true olduğunda oturum bitmiştir.

Request Body

ParametreTipZorunluAçıklama
session_id string Evet /start'tan dönen session_id
user_message string Evet Kullanıcının mesajı (1-2000 karakter)
Örnek İstek
{
  "session_id": "f8e7d6c5b4a39281",
  "user_message": "I like traveling. Last summer I go to Italy."
}
Örnek Yanıt
{
  "session_id": "f8e7d6c5b4a39281",
  "ai_message": "How exciting! Just a small note - we say 'I went to Italy'...",
  "remaining_seconds": 840,
  "is_done": false,
  "audio_base64": "UklGRi4AAAB..."
}

Test Et

GET /practice/free/status/{session_id} Auth Oturum Durumu

Mesaj göndermeden oturum zamanlayıcısını kontrol eder. UI geri sayımı için idealdir.

URL Parameters

ParametreTipAçıklama
session_id Zorunlu string Oturum ID'si
Örnek Yanıt
{
  "session_id": "f8e7d6c5b4a39281",
  "duration_minutes": 15,
  "elapsed_seconds": 120,
  "remaining_seconds": 780,
  "is_done": false,
  "message_count": 4
}

Test Et

GET /practice/free/voices Public Serbest Konuşma Sesleri

Serbest konuşma pratiğinde kullanılabilir TTS seslerinin listesini döner.

Test Et

Serbest Konuşma Review (Denetleme)

Tamamlanan serbest konuşma oturumunun transkripsiyonunu analiz eder. Senaryo tabanlı review'dan farkı: topic ve details alanı YOKTUR. Serbest konuşmanın önceden belirlenmiş bir senaryosu olmadığı için bağlam sadece konuşma akışından çıkarılır.

POST /practice/free/review Auth Serbest Review

AI ve kullanıcı mesajlarını alır, sadece kullanıcı mesajlarını analiz eder. topic/details YOKTUR — serbest konuşma olduğu için bağlam sadece konuşma akışından çıkarılır.

Senaryo Review'dan Farkları:
topic alanı YOK
details alanı YOK
• Prompt'ta "Session Type: Free conversation" olarak belirtilir
• Diğer tüm özellikler (hata tespiti, [red] işaretleme, CEFR kalibrasyonu) aynıdır

Request Body

ParametreTipZorunluAçıklama
ai_transcript array<string> Evet AI mesajları (sırasıyla, 1-50 mesaj)
user_transcript array<string> Evet Kullanıcı mesajları (sırasıyla, 1-50 mesaj)
difficulty string Hayır CEFR seviyesi (varsayılan: B1)
Örnek İstek
{
  "ai_transcript": [
    "Hello! Welcome to our practice session. How are you today?",
    "That sounds lovely! What do you enjoy most about traveling?",
    "Italy has amazing food! What was your favorite dish there?"
  ],
  "user_transcript": [
    "I am fine, thank you. I like traveling very much.",
    "I enjoy to visit new places and meet new peoples.",
    "I eated pasta every day! It was very delicious."
  ],
  "difficulty": "B1"
}
Örnek Yanıt
{
  "reviews": [
    {
      "id": 1,
      "original": "I am fine, thank you. I like traveling very much.",
      "annotated": "I am fine, thank you. I like traveling very much.",
      "corrected": "I am fine, thank you. I like traveling very much.",
      "errors": [],
      "has_errors": false
    },
    {
      "id": 2,
      "original": "I enjoy to visit new places and meet new peoples.",
      "annotated": "I enjoy [red]to visit[red] new places and meet new [red]peoples[red].",
      "corrected": "I enjoy visiting new places and meeting new people.",
      "errors": [
        "Wrong verb form: 'enjoy to visit' should be 'enjoy visiting' (gerund)",
        "Wrong plural: 'peoples' should be 'people' (irregular plural)"
      ],
      "has_errors": true
    },
    {
      "id": 3,
      "original": "I eated pasta every day! It was very delicious.",
      "annotated": "I [red]eated[red] pasta every day! It was very delicious.",
      "corrected": "I ate pasta every day! It was very delicious.",
      "errors": [
        "Wrong verb form: 'eated' should be 'ate' (irregular past tense of 'eat')"
      ],
      "has_errors": true
    }
  ],
  "overall_feedback": "Good conversational skills with some verb form errors.",
  "total_messages": 3,
  "messages_with_errors": 2
}

Test Et

JSON array formatında
JSON array formatında

TTS Ses Sistemi Bilgisi

Motor: piper-tts (en_US-libritts-high ONNX)
Çıktı: WAV (base64 encoded)
Ses seçimi: voice_gender ile cinsiyet bazlı veya voice_id ile belirli ses seçilebilir.

Kadın Sesler

Voice IDİsimAçıklama
female_1EmilyWarm, friendly
female_2SarahClear, professional
female_3JessicaSoft, gentle
female_4AshleyEnergetic
female_5AmandaCalm, soothing
female_6RachelBright
female_7OliviaMature
female_8EmmaYoung, clear

Erkek Sesler

Voice IDİsimAçıklama
male_1DavidDeep, calm
male_2MichaelClear, professional
male_3JamesAuthoritative
male_4RobertWarm, mature
male_5WilliamNeutral
male_6DanielEnergetic
male_7ThomasDeep, slow
male_8ChristopherClear, broadcast

Speech Rate / Speed Değerleri

DeğerAçıklama
0.5Çok hızlı
0.75Hızlı (ileri seviye için)
1.0Normal (varsayılan)
1.25Yavaş (orta seviye için)
1.5Çok yavaş (başlangıç için)

Sınıf (Classroom)

4 Endpoint

Öğrencinin sınıf bölümüne ait ana özet + erişebileceği üniteler, dersler ve ders detayı. Hiyerarşi: SchoolClass → Unit → Lesson → (Reading / Listening / Speaking / Writing / PracticeScenario / SkillExam)

Not: Eski /topics/* endpoint'leri kaldırıldı. Artık ünite ve dersler /classroom/overview ve /student/* altında listelenir. Sınav ve eğitim programları /classroom/exams/* ve /classroom/education/* altındadır.
GET /classroom/overview Auth Sınıf Özeti

Öğrencinin sınıflarına atanmış üniteleri, aktif sınavlarını ve eğitim programlarını tek bir yanıtta döner. Sınıf sekmesinin ana ekranı için kullanılır.

Örnek Response
{
  "success": true,
  "data": {
    "units": [
      {
        "id": 1,
        "title": "Ünite 1: Greetings & Introductions",
        "description": "Tanışma ve selamlaşma kalıpları",
        "lessons_count": 5,
        "icon": "ph-handshake"
      }
    ],
    "active_exams": [
      {
        "assignment_id": 12,
        "exam": {
          "id": 4,
          "title": "Unit 1 Reading Quiz",
          "exam_type": "reading",
          "duration_minutes": 20,
          "total_questions": 10
        },
        "due_date": "2026-05-01T23:59:59+03:00"
      }
    ],
    "education": {
      "enrollments": [
        {
          "program_id": 1,
          "title": "Yaz Kampı A1",
          "description": "Başlangıç seviyesi ingilizce",
          "status": "in_progress",
          "completion_percent": 35
        }
      ],
      "available_programs": [
        { "id": 2, "title": "Kış Okulu A2", "description": "A2 seviyesine geçiş" }
      ]
    },
    "progress": {
      "total_sessions": 12,
      "completed_sessions": 7,
      "total_xp": 420,
      "completion_percent": 58
    }
  }
}

Test Et

GET /student/classes Auth Sınıflarım

Öğrencinin kayıtlı olduğu sınıfları, sınıf seviyesi, okul ve dönem bilgileri ile döner.

Örnek Response
{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "5-A Sınıfı",
      "grade_level": "5. Sınıf",
      "school": "Atatürk Ortaokulu",
      "term": "2026 Bahar",
      "enrolled_at": "2026-02-01T00:00:00.000000Z"
    }
  ]
}

Test Et

GET /student/lessons Auth Derslerim

Öğrencinin sınıflarına atanmış ünitelerdeki tüm aktif dersleri döner.

Örnek Response
{
  "success": true,
  "data": [
    {
      "id": 1,
      "title": "Lesson 1: Hello & Nice to Meet You",
      "description": "Temel selamlaşma kalıpları",
      "duration_min": 30,
      "unit": "Ünite 1: Greetings & Introductions",
      "order": 1
    }
  ]
}

Test Et

GET /student/lessons/{lesson} Auth Ders Detayı

Bir dersin içeriklerini (Reading / Listening / Speaking / Writing / Practice / Sınav) birleşik olarak döner. contents altında her içerik tipi ayrı bir dizidir.

Örnek Response
{
  "success": true,
  "data": {
    "id": 1,
    "title": "Lesson 1: Hello & Nice to Meet You",
    "description": "Temel selamlaşma kalıpları",
    "duration_min": 30,
    "unit": { "id": 1, "title": "Ünite 1: Greetings & Introductions" },
    "contents": {
      "reading": [ { "id": 10, "title": "Meeting New Friends", "difficulty": "A1" } ],
      "listening": [ { "id": 4, "title": "A Phone Call", "duration": 45 } ],
      "speaking": [ { "id": 2, "title": "Introduce Yourself" } ],
      "writing": [ { "id": 1, "title": "Write About Your Day" } ],
      "practice": [
        { "id": 3, "topic": "Meeting a Classmate", "cefr_level": "A1" }
      ],
      "exams": [ { "id": 4, "title": "Unit 1 Reading Quiz", "exam_type": "reading" } ]
    }
  }
}

Test Et

Sınavlarım (Exams)

11 Endpoint

Skill-based sınavlar: Reading, Listening, Speaking, Writing. Zamanlı sınav sistemi, otomatik değerlendirme ve manuel review desteği.

Zamanlayıcı: Sınav başlatıldığında expires_at hesaplanır. Süre dolduğunda cevap kabul edilmez ve sınav otomatik sonlandırılır.
GET /classroom/exams/current Auth Güncel Sınavlar

Şu an açık olan ve öğrenciye atanmış sınavları listeler.

Test Et

GET /classroom/exams/upcoming Auth Yaklaşan Sınavlar

Gelecekte açılacak sınavları listeler (opens_at > now).

Test Et

GET /classroom/exams/past Auth Geçmiş Sınavlar

Tamamlanan veya süresi dolan sınavları listeler.

Test Et

POST /classroom/exams/{assignment_id}/start Auth Sınav Başlat

Yeni sınav oturumu oluşturur ve zamanlayıcıyı başlatır.

Test Et

GET /classroom/exams/sessions/{session_id} Auth Sınav Oturumu

Sınav sorularını ve kalan süreyi döner. Doğru cevaplar gizlidir.

Test Et

POST /classroom/exams/sessions/{session_id}/answer Auth Cevap Kaydet

Soru bazlı otomatik kayıt (autosave). Süre dolduysa kabul edilmez.

Request Body

Parametre Tip Açıklama
question_id Zorunlu integer Soru ID'si
answer_json Zorunlu mixed Cevap (şık, metin vb.)

Test Et

POST /classroom/exams/sessions/{session_id}/submit Auth Sınavı Bitir

Sınavı sonlandırır, otomatik puanlama yapar ve sonuç üretir.

Test Et

GET /classroom/exams/sessions/{session_id}/result Auth Sınav Sonucu

Sınav sonuç detaylarını döner. show_result_immediately false ise 403 döner.

Test Et

POST /classroom/exams/answers/{answer_id}/upload-audio Auth Ses Cevabı Yükle (Speaking)

Speaking sınavlarında veya audio_response/open/essay sorularında ses dosyası yükler. Multipart form-data ile gönderilmeli. Önceki yükleme varsa silinir.

Alanlar: audio (file, mp3/wav/m4a/webm/ogg, max 15MB), opsiyonel duration_ms ve transcript.
Örnek Yanıt (200)
{
  "success": true,
  "data": {
    "file_id": 42,
    "file_url": "http://localhost:8001/storage/exam-audio/12/xyz.webm",
    "transcript": null,
    "duration_ms": 8200
  }
}
Hatalar: 403 başka kullanıcının cevabı, 400 EXAM_EXPIRED süre dolmuş, 422 AUDIO_NOT_ALLOWED soru tipi uygun değil.
POST /classroom/exams/answers/{answer_id}/upload-writing Auth Yazılı Cevap Yükle + AI (Writing)

Writing sınavlarında veya essay/open sorularında uzun metin gönderir. analyze=true gönderilirse AI /writing/analyze ile ön değerlendirme yapılır ve sonuç cevap içine kaydedilir.

Alanlar: text (string, 10–10000 karakter, zorunlu), analyze (boolean, opsiyonel).
Örnek Yanıt (200)
{
  "success": true,
  "data": {
    "answer_id": 17,
    "word_count": 142,
    "ai_analysis": {
      "overall_score": 78,
      "task_achievement": 80,
      "grammar": 75,
      "vocabulary": 82,
      "coherence": 74,
      "suggestions": ["Use more linking words...", "Vary sentence length..."],
      "corrected_version": "..."
    },
    "saved_at": "2026-04-16T17:24:00Z"
  }
}

Derslerim (Education)

8 Endpoint

Klasik eğitim omurgası: Program → Ünite → Ders → İçerik hiyerarşisi. Kilitli ilerleme sistemi ile çalışır - bir ders bitmeden sonraki açılmaz.

Kilit Mantığı: Kullanıcı programa kayıt olduğunda ilk ünitenin ilk dersi açık, diğerleri kilitlidir. Ders tamamlandıkça sıradaki içerikler otomatik açılır.
GET /classroom/education/programs Auth Program Listesi

Kullanıcının grade_level'ına uygun programları listeler.

Test Et

POST /classroom/education/programs/{id}/enroll Auth Programa Kayıt Ol

Kullanıcıyı programa kaydeder ve ilerleme tablolarını başlatır.

Test Et

GET /classroom/education/programs/{id} Auth Program Detayı

Programın ünitelerini ve tamamlanma yüzdesini döner.

Test Et

GET /classroom/education/units/{id} Auth Ünite Detayı

Ünitenin derslerini ve her ders için kilit durumunu döner.

Test Et

GET /classroom/education/lessons/{id} Auth Ders Detayı

Dersin içeriğini ve soru bankasını döner. Kilitliyse 403 döner.

Test Et

POST /classroom/education/lessons/{id}/complete Auth Ders Tamamla

Dersi tamamlandı olarak işaretler ve sonraki dersi/üniteyi açar.

Test Et

POST /classroom/education/lessons/{id}/answer Auth Soru Cevapla

Ders içindeki bir soruyu cevaplar.

Request Body

Parametre Tip Açıklama
question_id Zorunlu integer Soru ID'si
answer Zorunlu mixed Cevap

Test Et

Takvim & Etkinlik

5 Endpoint

Sınav, ders, etkinlik ve tatil tarihlerini yönetir. Aylık/günlük görünüm ve yaklaşan etkinlikler.

GET /calendar/app/month Auth Aylık Görünüm

Belirtilen ay için etkinlikleri gruplandırılmış olarak döner.

Query Parametreleri

Parametre Tip Açıklama
year Zorunlu integer Yıl (örn: 2025)
month Zorunlu integer Ay (1-12)

Test Et

GET /calendar/app/day Auth Günlük Görünüm

Belirtilen gün için etkinlikleri döner.

Query Parametreleri

Parametre Tip Açıklama
date Zorunlu string Tarih (YYYY-MM-DD)

Test Et

GET /calendar/app/today Auth Bugün

Bugünkü etkinlikleri döner.

Test Et

GET /calendar/app/upcoming Auth Yaklaşan Etkinlikler

Gelecek N gün içindeki etkinlikleri döner. Push bildirimi için kullanışlı.

Query Parametreleri

Parametre Tip Açıklama
days Opsiyonel integer Gün sayısı (varsayılan: 7)

Test Et

GET /calendar/app/events/{id} Auth Etkinlik Detayı

Belirli bir etkinliğin detaylarını döner.

Test Et

Bildirimler & Duyurular

8 Endpoint

Sistem bildirimleri, duyurular ve bildirim ayarları. Push bildirimine hazır yapı.

GET /notifications/app Auth Bildirim Listesi

Kullanıcının bildirimlerini sayfalanmış olarak döner.

Test Et

GET /notifications/app/unread-count Auth Okunmamış Sayısı

Okunmamış bildirim sayısını döner. Badge gösterimi için kullanılır.

Test Et

POST /notifications/app/{id}/read Auth Okundu İşaretle

Belirli bir bildirimi okundu olarak işaretler.

Test Et

POST /notifications/app/read-all Auth Tümünü Okundu İşaretle

Tüm bildirimleri okundu olarak işaretler.

Test Et

GET /notifications/app/feed Auth Birleşik Feed

Bildirimler ve duyuruları birleşik akış olarak döner.

Test Et

GET /notifications/settings Auth Bildirim Ayarları

Kullanıcının bildirim tercihlerini döner.

Test Et

POST /notifications/settings Auth Ayarları Güncelle

Bildirim tercihlerini günceller.

Request Body

Parametre Tip Açıklama
push_enabled Opsiyonel boolean Push bildirimleri
email_enabled Opsiyonel boolean E-posta bildirimleri
exam_reminders Opsiyonel boolean Sınav hatırlatıcıları

Test Et

İlerleme & Rozet & XP

7 Endpoint

Kullanıcının tüm gelişimini takip eden sistem. XP → Level → Rozet zinciri ve modül bazlı ilerleme.

GET /progress/overview Auth Genel Bakış

Kullanıcının genel ilerleme özetini döner: toplam XP, seviye, streak, rozet sayısı.

Test Et

GET /progress/modules Auth Modül Bazlı İlerleme

Reading, Listening, Speaking, Writing modüllerinin yüzdelik ilerlemesini döner.

Test Et

GET /progress/badges Auth Rozetlerim

Kullanıcının kazandığı ve henüz kazanmadığı rozetleri listeler.

Test Et

GET /progress/xp-history Auth XP Geçmişi

Kullanıcının XP kazanım geçmişini döner.

Test Et

GET /progress/leaderboard Auth Sıralama

XP bazlı kullanıcı sıralamasını döner.

Test Et

POST /progress/daily-check Auth Günlük Kontrol

Günlük giriş kontrolü yapar, streak günceller ve XP verir.

Test Et

POST /progress/badges/{id}/showcase Auth Rozet Vitrin

Rozeti profilinde göster/gizle.

Test Et

Profil & Hesap

10 Endpoint

Kullanıcı profili, avatar, şifre değişikliği ve hesap güvenliği işlemleri.

GET /profile Auth Profil Bilgisi

Kullanıcının profil bilgilerini döner.

Test Et

PUT /profile Auth Profil Güncelle

Profil bilgilerini günceller.

Request Body

Parametre Tip Açıklama
name Opsiyonel string Ad soyad
grade Opsiyonel integer Sınıf (1-12)
school_name Opsiyonel string Okul adı
city Opsiyonel string Şehir
birth_date Opsiyonel date Doğum tarihi (YYYY-MM-DD)

Test Et

GET /profile/education-info Auth Eğitim Bilgilerini Getir

Kullanıcının eğitim bilgilerini ve mevcut seçenekleri döner. Öğrenci kayıt sonrası eğitim bilgilerini toplamak için kullanılır.

Test Et

POST /profile/education-info Auth Eğitim Bilgilerini Kaydet

Öğrenci kayıt olduktan sonra eğitim bilgilerini kaydeder veya günceller. Sadece öğrenciler için kullanılabilir.

Request Body

Parametre Tip Açıklama
education_level Zorunlu string Eğitim seviyesi (primary, secondary, high_school, university, graduate, other)
grade Opsiyonel integer Sınıf (1-12 arası, sadece ilkokul/ortaokul/lise için)
school_name Opsiyonel string Okul adı (max 255 karakter)

Test Et

POST /profile/avatar Auth Avatar Yükle

Profil fotoğrafı yükler. Multipart form-data kullanılır.

Bu endpoint dosya yüklemesi gerektirir. Postman veya mobil uygulama ile test edin.
POST /profile/change-password Auth Şifre Değiştir

Kullanıcı şifresini değiştirir. Mevcut token iptal edilir.

Request Body

Parametre Tip Açıklama
current_password Zorunlu string Mevcut şifre
password Zorunlu string Yeni şifre (min: 8)
password_confirmation Zorunlu string Yeni şifre tekrarı

Test Et

POST /profile/change-email Auth Email Değiştir

Kullanıcı emailini değiştirir. Yeni email için doğrulama gerekir.

Request Body

Parametre Tip Açıklama
email Zorunlu string Yeni email adresi
password Zorunlu string Mevcut şifre (doğrulama için)

Test Et

GET /profile/security-logs Auth Güvenlik Logları

Hesap güvenlik geçmişini döner (giriş, şifre değişikliği vb.).

Test Et

DELETE /profile Auth Hesap Sil

Kullanıcı hesabını kalıcı olarak siler.

Dikkat: Bu işlem geri alınamaz! Hesap ve tüm veriler kalıcı olarak silinir.

Request Body

Parametre Tip Açıklama
password Zorunlu string Mevcut şifre (doğrulama için)

Test Et

API Durumu (External)

2 Endpoint

Harici API servislerinin durumunu ve bilgilerini kontrol etmek için kullanılan endpoint'ler. Sistemin sağlık durumu ve versiyon bilgisi alınabilir.

GET /external/info Public API Bilgisi

API hakkında genel bilgileri döner. Versiyon, desteklenen özellikler ve konfigürasyon bilgisi içerir.

Test Et

GET /external/health Public Sağlık Kontrolü

Harici servislerin (OpenAI, ElevenLabs vb.) çalışma durumunu kontrol eder. Her servisin durumu ve yanıt süresi döner.

Test Et

Admin API

12 Endpoint

Admin yetkisi gerektiren endpoint'ler. Onboarding flow, step ve option yönetimi.

Yetki Gerekli: Bu endpoint'ler sadece admin rolüne sahip kullanıcılar tarafından erişilebilir. Base URL: /api/admin/onboarding
GET /api/admin/onboarding/flows Admin Onboarding Flow Listesi

Tüm onboarding flow'larını listeler.

Test Et

POST /api/admin/onboarding/flows Admin Flow Oluştur

Yeni onboarding flow'u oluşturur.

Request Body

Parametre Tip Açıklama
name Zorunlu string Flow adı
description Opsiyonel string Açıklama
is_active Opsiyonel boolean Aktif mi? (varsayılan: false)

Test Et

GET /api/admin/onboarding/flows/{flow} Admin Flow Detayı

Belirli bir flow'un detayını döner.

Test Et

POST /api/admin/onboarding/flows/{flow}/activate Admin Flow Aktifleştir

Flow'u aktif eder. Diğer aktif flow'lar deaktif edilir.

Test Et

GET /api/admin/onboarding/flows/{flow}/steps Admin Step Listesi

Flow'a ait adımları listeler.

Test Et

GET /api/admin/onboarding/steps/{step}/options Admin Option Listesi

Step'e ait seçenekleri listeler.

Test Et