{"openapi":"3.0.0","paths":{"/v1/generations":{"post":{"description":"JSON veya tek dosyalı multipart kabul eder. featureType=LIVE_TRANSCRIPTION bu uçta kabul edilmez (POST /v1/live-transcriptions). Tek bir girdi (inputText, inputUrl veya file) sağlanmalıdır (NEWS/PRESS_RELEASE event modu hariç). Sonuç GET /v1/generations/{id} ile poll edilir.","operationId":"createGeneration","parameters":[{"name":"Idempotency-Key","in":"header","description":"Zorunlu, en çok 255 karakter. Aynı anahtar + aynı gövde önceki sonucu döner; aynı anahtar + farklı gövde 409 IDEMPOTENCY_KEY_CONFLICT. Kapsam: API anahtarı.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/CreateApiGenerationDto"},{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Yalnız multipart/form-data. inputText/inputUrl ile birlikte gönderilemez; featureParams bu istekte JSON string olabilir."}}}]}},"multipart/form-data":{"schema":{"allOf":[{"$ref":"#/components/schemas/CreateApiGenerationDto"},{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Yalnız multipart/form-data. inputText/inputUrl ile birlikte gönderilemez; featureParams bu istekte JSON string olabilir."}}}]}}}},"responses":{"202":{"description":"Üretim kuyruğa alındı (veya aynı anahtarla önceki sonuç)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiGenerationEnvelopeDto"}}}},"400":{"description":"Geçersiz istek (doğrulama, Idempotency-Key, geçersiz parametre)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"401":{"description":"API anahtarı eksik, geçersiz, iptal edilmiş veya askıya alınmış (INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"403":{"description":"Yetersiz API kredisi (INSUFFICIENT_API_CREDIT)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"409":{"description":"Çakışma (Idempotency-Key, eşzamanlı üretim sınırı, uzatılamayan oturum)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"413":{"description":"Yük çok büyük (dosya veya JSON gövde sınırı)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"429":{"description":"İstek limiti aşıldı (RATE_LIMIT_EXCEEDED); Retry-After başlığı saniye cinsinden bekleme süresini verir","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"503":{"description":"Geçici olarak kullanılamıyor (RATE_LIMIT_UNAVAILABLE, SERVICE_BUSY veya sistem yoğunluğu); tekrar deneyin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Asenkron üretim başlat","tags":["Public API v1"]},"get":{"operationId":"listGenerations","parameters":[{"name":"skip","required":false,"in":"query","schema":{"default":0,"type":"number"}},{"name":"take","required":false,"in":"query","schema":{"maximum":100,"default":20,"type":"number"}},{"name":"featureType","required":false,"in":"query","schema":{"$ref":"#/components/schemas/FeatureType"}},{"name":"status","required":false,"in":"query","schema":{"$ref":"#/components/schemas/GenerationStatus"}},{"name":"apiKeyId","required":false,"in":"query","description":"Yalnız bu API anahtarının ürettiklerini listele/filtrele","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiGenerationListEnvelopeDto"}}}},"400":{"description":"Geçersiz istek (doğrulama, Idempotency-Key, geçersiz parametre)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"401":{"description":"API anahtarı eksik, geçersiz, iptal edilmiş veya askıya alınmış (INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"429":{"description":"İstek limiti aşıldı (RATE_LIMIT_EXCEEDED); Retry-After başlığı saniye cinsinden bekleme süresini verir","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"503":{"description":"Geçici olarak kullanılamıyor (RATE_LIMIT_UNAVAILABLE, SERVICE_BUSY veya sistem yoğunluğu); tekrar deneyin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Hesabın API üretimlerini sayfalı listele","tags":["Public API v1"]}},"/v1/generations/{id}":{"get":{"operationId":"getGeneration","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiGenerationEnvelopeDto"}}}},"400":{"description":"Geçersiz istek (doğrulama, Idempotency-Key, geçersiz parametre)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"401":{"description":"API anahtarı eksik, geçersiz, iptal edilmiş veya askıya alınmış (INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"404":{"description":"Kaynak bulunamadı","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"429":{"description":"İstek limiti aşıldı (RATE_LIMIT_EXCEEDED); Retry-After başlığı saniye cinsinden bekleme süresini verir","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"503":{"description":"Geçici olarak kullanılamıyor (RATE_LIMIT_UNAVAILABLE, SERVICE_BUSY veya sistem yoğunluğu); tekrar deneyin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"API üretiminin polling sonucunu getir","tags":["Public API v1"]}},"/v1/live-transcriptions/options":{"get":{"operationId":"liveOptions","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiLiveOptionsEnvelopeDto"}}}},"401":{"description":"API anahtarı eksik, geçersiz, iptal edilmiş veya askıya alınmış (INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"429":{"description":"İstek limiti aşıldı (RATE_LIMIT_EXCEEDED); Retry-After başlığı saniye cinsinden bekleme süresini verir","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"503":{"description":"Geçici olarak kullanılamıyor (RATE_LIMIT_UNAVAILABLE, SERVICE_BUSY veya sistem yoğunluğu); tekrar deneyin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Canlı yayın süre seçeneklerini ve fiyatlarını getir","tags":["Public API v1"]}},"/v1/live-transcriptions/active":{"get":{"description":"Canlı yayın uçları API anahtarı kapsamlıdır (generations ise hesap kapsamlı): yalnız aynı anahtarla başlatılan oturumlar görünür.","operationId":"activeLive","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiActiveLiveSessionsEnvelopeDto"}}}},"401":{"description":"API anahtarı eksik, geçersiz, iptal edilmiş veya askıya alınmış (INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"429":{"description":"İstek limiti aşıldı (RATE_LIMIT_EXCEEDED); Retry-After başlığı saniye cinsinden bekleme süresini verir","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"503":{"description":"Geçici olarak kullanılamıyor (RATE_LIMIT_UNAVAILABLE, SERVICE_BUSY veya sistem yoğunluğu); tekrar deneyin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Bu API anahtarının aktif canlı yayın oturumlarını listele","tags":["Public API v1"]}},"/v1/live-transcriptions":{"post":{"description":"API anahtarıyla yalnız source='url' (herkese açık YouTube/X canlı yayın URL'i) desteklenir; 'microphone' 400 alır. Oturum durumu GET /v1/live-transcriptions/{id} ile okunur.","operationId":"startLive","parameters":[{"name":"Idempotency-Key","in":"header","description":"Zorunlu, en çok 255 karakter. Aynı anahtar + aynı gövde önceki sonucu döner; aynı anahtar + farklı gövde 409 IDEMPOTENCY_KEY_CONFLICT. Kapsam: API anahtarı.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLiveTranscriptionDto"}}}},"responses":{"202":{"description":"Oturum başlatıldı (veya aynı anahtarla mevcut oturum)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiLiveSessionEnvelopeDto"}}}},"400":{"description":"Geçersiz istek (doğrulama, Idempotency-Key, geçersiz parametre)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"401":{"description":"API anahtarı eksik, geçersiz, iptal edilmiş veya askıya alınmış (INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"403":{"description":"Yetersiz API kredisi (INSUFFICIENT_API_CREDIT)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"409":{"description":"Çakışma (Idempotency-Key, eşzamanlı üretim sınırı, uzatılamayan oturum)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"429":{"description":"İstek limiti aşıldı (RATE_LIMIT_EXCEEDED); Retry-After başlığı saniye cinsinden bekleme süresini verir","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"503":{"description":"Geçici olarak kullanılamıyor (RATE_LIMIT_UNAVAILABLE, SERVICE_BUSY veya sistem yoğunluğu); tekrar deneyin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Canlı yayın transkripsiyonu başlat","tags":["Public API v1"]}},"/v1/live-transcriptions/{id}":{"get":{"operationId":"getLive","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiLiveSessionEnvelopeDto"}}}},"400":{"description":"Geçersiz istek (doğrulama, Idempotency-Key, geçersiz parametre)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"401":{"description":"API anahtarı eksik, geçersiz, iptal edilmiş veya askıya alınmış (INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"404":{"description":"Kaynak bulunamadı","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"429":{"description":"İstek limiti aşıldı (RATE_LIMIT_EXCEEDED); Retry-After başlığı saniye cinsinden bekleme süresini verir","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"503":{"description":"Geçici olarak kullanılamıyor (RATE_LIMIT_UNAVAILABLE, SERVICE_BUSY veya sistem yoğunluğu); tekrar deneyin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Canlı yayın oturumunu ve turn'lerini getir","tags":["Public API v1"]}},"/v1/live-transcriptions/{id}/extend-options":{"get":{"operationId":"getLiveExtendOptions","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiLiveExtendOptionsEnvelopeDto"}}}},"400":{"description":"Geçersiz istek (doğrulama, Idempotency-Key, geçersiz parametre)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"401":{"description":"API anahtarı eksik, geçersiz, iptal edilmiş veya askıya alınmış (INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"404":{"description":"Kaynak bulunamadı","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"409":{"description":"Çakışma (Idempotency-Key, eşzamanlı üretim sınırı, uzatılamayan oturum)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"429":{"description":"İstek limiti aşıldı (RATE_LIMIT_EXCEEDED); Retry-After başlığı saniye cinsinden bekleme süresini verir","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"503":{"description":"Geçici olarak kullanılamıyor (RATE_LIMIT_UNAVAILABLE, SERVICE_BUSY veya sistem yoğunluğu); tekrar deneyin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Oturum için uzatma seçeneklerini ve ek maliyetini getir","tags":["Public API v1"]}},"/v1/live-transcriptions/{id}/stop":{"post":{"description":"Zaten bitmiş oturumda mevcut durumu değiştirmeden döner.","operationId":"stopLive","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiLiveSessionEnvelopeDto"}}}},"400":{"description":"Geçersiz istek (doğrulama, Idempotency-Key, geçersiz parametre)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"401":{"description":"API anahtarı eksik, geçersiz, iptal edilmiş veya askıya alınmış (INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"404":{"description":"Kaynak bulunamadı","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"429":{"description":"İstek limiti aşıldı (RATE_LIMIT_EXCEEDED); Retry-After başlığı saniye cinsinden bekleme süresini verir","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"503":{"description":"Geçici olarak kullanılamıyor (RATE_LIMIT_UNAVAILABLE, SERVICE_BUSY veya sistem yoğunluğu); tekrar deneyin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Canlı yayın oturumunu durdur","tags":["Public API v1"]}},"/v1/live-transcriptions/{id}/extend":{"post":{"description":"totalDurationMinutes mevcut süreden büyük, 15 dakikanın katı ve üst sınırı aşmayan bir değer olmalıdır; aksi halde 400 LIVE_EXTENSION_INVALID. Başarılı yanıt HTTP 201 döner.","operationId":"extendLive","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","description":"Zorunlu, en çok 255 karakter. Aynı anahtar + aynı gövde önceki sonucu döner; aynı anahtar + farklı gövde 409 IDEMPOTENCY_KEY_CONFLICT. Kapsam: API anahtarı.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendApiLiveTranscriptionDto"}}}},"responses":{"201":{"description":"Süre uzatıldı (veya aynı anahtarla uygulanmış uzatma)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiLiveSessionEnvelopeDto"}}}},"400":{"description":"Geçersiz istek (doğrulama, Idempotency-Key, geçersiz parametre)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"401":{"description":"API anahtarı eksik, geçersiz, iptal edilmiş veya askıya alınmış (INVALID_API_KEY)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"403":{"description":"Yetersiz API kredisi (INSUFFICIENT_API_CREDIT)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"404":{"description":"Kaynak bulunamadı","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"409":{"description":"Çakışma (Idempotency-Key, eşzamanlı üretim sınırı, uzatılamayan oturum)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"429":{"description":"İstek limiti aşıldı (RATE_LIMIT_EXCEEDED); Retry-After başlığı saniye cinsinden bekleme süresini verir","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}},"503":{"description":"Geçici olarak kullanılamıyor (RATE_LIMIT_UNAVAILABLE, SERVICE_BUSY veya sistem yoğunluğu); tekrar deneyin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Canlı yayın oturumunu yeni toplam süreye uzat","tags":["Public API v1"]}}},"info":{"title":"Appress Public API","description":"Appress Public API (`/v1`). Kimlik doğrulama: `Authorization: Bearer <API anahtarı>`. Başarılı yanıtlar `{ success: true, data }`, hatalar `{ success: false, statusCode, message, code? }` zarfındadır. Yayınlanan hata kodları, limitler ve enum'lar: `GET /api-reference/config`.","version":"1","contact":{}},"tags":[],"servers":[{"url":"https://api.appress.ai"}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"API key","type":"http"}},"schemas":{"FeatureType":{"type":"string","enum":["TRANSCRIPTION","LIVE_TRANSCRIPTION","PRESS_RELEASE","NEWS","DIARIZATION","PROOFREADING"]},"GenerationStatus":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","ERROR","CANCELLED"]},"CreateApiGenerationDto":{"type":"object","properties":{"featureType":{"example":"PRESS_RELEASE","allOf":[{"$ref":"#/components/schemas/FeatureType"}]},"inputText":{"type":"string","description":"Metin girdisi"},"inputUrl":{"type":"string","description":"Public URL girdisi"},"featureParams":{"type":"object","description":"Feature'a özgü parametreler. multipart istekte JSON string olabilir."}},"required":["featureType"]},"ApiGenerationInputType":{"type":"string","enum":["TEXT","URL","FILE"]},"GenerationProgressStep":{"type":"string","enum":["preparing","processing","finalizing"],"description":"Kaba ilerleme adımı; yeni değerler eklenebilir."},"ApiGenerationProgressDto":{"type":"object","properties":{"step":{"nullable":true,"example":"processing","description":"Kaba ilerleme adımı; yeni değerler eklenebilir.","allOf":[{"$ref":"#/components/schemas/GenerationProgressStep"}]},"percent":{"type":"number","nullable":true,"example":40}},"required":["step","percent"]},"ApiGenerationDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"featureType":{"allOf":[{"$ref":"#/components/schemas/FeatureType"}]},"inputType":{"allOf":[{"$ref":"#/components/schemas/ApiGenerationInputType"}]},"status":{"allOf":[{"$ref":"#/components/schemas/GenerationStatus"}]},"title":{"type":"string","nullable":true},"progress":{"$ref":"#/components/schemas/ApiGenerationProgressDto"},"estimatedCostUsd":{"type":"string","example":"0.012500","description":"Rezerve edilen azami maliyet (USD, 6 ondalık)."},"actualCostUsd":{"type":"string","nullable":true,"example":"0.009800","description":"Gerçekleşen maliyet (USD); yalnız COMPLETED iken dolu, aksi halde null."},"result":{"type":"object","nullable":true,"additionalProperties":true,"description":"Feature'a özgü AI çıktısı (JSON). Yalnız status=COMPLETED iken bulunur."},"quoteAnchors":{"type":"array","nullable":true,"items":{"type":"object","additionalProperties":true},"description":"Haber alıntı zaman çapaları (id, startSeconds, endSeconds, confidence, matchType). Yalnız COMPLETED iken bulunur."},"audioTimelineOffsetSeconds":{"type":"number","nullable":true,"description":"Yalnız COMPLETED iken bulunur."},"originalText":{"type":"string","nullable":true,"description":"Girdi metni/çözümlenmiş ham metin. Yalnız COMPLETED iken bulunur."},"error":{"type":"string","description":"Hata/iptal açıklaması. Yalnız status=ERROR veya CANCELLED iken bulunur."},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","featureType","inputType","status","title","progress","estimatedCostUsd","actualCostUsd","createdAt","updatedAt"]},"ApiGenerationEnvelopeDto":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#/components/schemas/ApiGenerationDto"}},"required":["success","data"]},"ApiErrorResponseDto":{"type":"object","properties":{"success":{"type":"boolean","example":false},"statusCode":{"type":"number","example":409},"message":{"type":"string","example":"Bu Idempotency-Key farklı bir istek gövdesiyle kullanıldı","description":"İnsan okuyabilir mesaj; programatik karar için `code` kullanın."},"code":{"type":"string","example":"IDEMPOTENCY_KEY_CONFLICT","description":"Kararlı hata kodu. Yayınlanan liste: GET /api-reference/config → errors.codes. Her hata kod taşımaz (ör. doğrulama hataları yalnız status + message içerir)."}},"required":["success","statusCode","message"]},"ApiGenerationListDto":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ApiGenerationDto"}},"total":{"type":"number","example":42,"description":"Filtreye uyan toplam kayıt sayısı"}},"required":["items","total"]},"ApiGenerationListEnvelopeDto":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#/components/schemas/ApiGenerationListDto"}},"required":["success","data"]},"ApiLiveDurationOptionDto":{"type":"object","properties":{"minutes":{"type":"number","example":60},"reservedCostUsd":{"type":"string","example":"0.150000","description":"USD, 6 ondalık"}},"required":["minutes","reservedCostUsd"]},"ApiLiveOptionsDto":{"type":"object","properties":{"durationOptions":{"type":"array","items":{"$ref":"#/components/schemas/ApiLiveDurationOptionDto"}}},"required":["durationOptions"]},"ApiLiveOptionsEnvelopeDto":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#/components/schemas/ApiLiveOptionsDto"}},"required":["success","data"]},"LiveTranscriptionState":{"type":"string","enum":["CREATED","STARTING","STREAMING","STOPPING","COMPLETED","FAILED"]},"LiveTranscriptionPlatform":{"type":"string","enum":["youtube","x","microphone"]},"ApiActiveLiveSessionDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","nullable":true},"generationId":{"type":"string","format":"uuid"},"title":{"type":"string"},"state":{"allOf":[{"$ref":"#/components/schemas/LiveTranscriptionState"}]},"platform":{"allOf":[{"$ref":"#/components/schemas/LiveTranscriptionPlatform"}]},"maxDurationMinutes":{"type":"number","example":60},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"startedAt":{"type":"string","nullable":true,"format":"date-time"},"createdAt":{"format":"date-time","type":"string"},"reservedCostUsd":{"type":"string","example":"0.150000"}},"required":["id","url","generationId","title","state","platform","maxDurationMinutes","expiresAt","startedAt","createdAt","reservedCostUsd"]},"ApiActiveLiveSessionsEnvelopeDto":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/ApiActiveLiveSessionDto"}}},"required":["success","data"]},"CreateLiveTranscriptionDto":{"type":"object","properties":{"source":{"type":"string","example":"url","enum":["url","microphone"],"default":"url","description":"Ses kaynağı: 'url' (YouTube/X public canlı yayın) veya 'microphone' (tarayıcı mikrofonundan POST /:id/audio ile chunk gönderimi). Geriye dönük uyum için varsayılan 'url'."},"url":{"type":"string","example":"https://www.youtube.com/watch?v=vjNZVmImcxg","description":"Herkese açık YouTube veya X Live Video/Broadcast URL'i. yalnızca source='url' iken zorunludur."},"title":{"type":"string","example":"TRT Haber Canlı Yayın","description":"NestJS media-probe sonucundan gelen yayın başlığı"},"expectedLanguage":{"type":"string","enum":["auto","af","ar","ca","da","de","en","es","et","fa","fi","fr","gl","he","hi","it","ja","ko","mr","nl","nn","no","pt","ro","ru","sv","tr","ur","vi","xh","yue","zh","zu"],"example":"tr","default":"tr","description":"Konuşma dili; \"auto\" dil sabitlemeden çok dilli algılar (konuşma sırasında dil değişebilir)."},"speakerLabels":{"type":"boolean","example":false,"default":false},"maxSpeakers":{"type":"number","minimum":1,"maximum":10,"nullable":true},"includeWords":{"type":"boolean","example":false,"default":false},"maxDurationMinutes":{"type":"number","example":120,"default":120,"enum":[1,15,30,45,60,120]}}},"LiveTranscriptionFailureCode":{"type":"string","enum":["UNSUPPORTED_URL","NOT_LIVE_STREAM","NO_AUDIO_STREAM","SOURCE_UNAVAILABLE","PROCESSING_FAILED","SERVICE_UNAVAILABLE","SERVICE_BUSY","INVALID_INPUT","RESERVATION_EXPIRED","INTERRUPTED","INTERNAL_ERROR"],"description":"Yalnız state=FAILED iken dolu; yeni değerler eklenebilir."},"ApiLiveWordDto":{"type":"object","properties":{"text":{"type":"string"},"startMs":{"type":"number"},"endMs":{"type":"number"},"confidence":{"type":"number","minimum":0,"maximum":1},"speaker":{"type":"string","nullable":true}},"required":["text","startMs","endMs","confidence","speaker"]},"ApiLiveTurnDto":{"type":"object","properties":{"turnId":{"type":"string"},"sequence":{"type":"number"},"text":{"type":"string"},"isFinal":{"type":"boolean"},"startMs":{"type":"number","nullable":true},"endMs":{"type":"number","nullable":true},"speaker":{"type":"string","nullable":true},"language":{"type":"string","nullable":true},"words":{"nullable":true,"description":"Kelime düzeyi zaman damgaları; yalnız includeWords=true ise dolu.","type":"array","items":{"$ref":"#/components/schemas/ApiLiveWordDto"}}},"required":["turnId","sequence","text","isFinal","startMs","endMs","speaker","language","words"]},"ApiLiveSessionDto":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","nullable":true},"generationId":{"type":"string","format":"uuid"},"state":{"allOf":[{"$ref":"#/components/schemas/LiveTranscriptionState"}]},"platform":{"allOf":[{"$ref":"#/components/schemas/LiveTranscriptionPlatform"}]},"expectedLanguage":{"type":"string","example":"tr"},"maxDurationMinutes":{"type":"number","example":60},"expiresAt":{"type":"string","nullable":true,"format":"date-time"},"lastSequence":{"type":"number","description":"Son işlenen turn sıra numarası"},"mediaTitle":{"type":"string","nullable":true},"failureCode":{"nullable":true,"description":"Yalnız state=FAILED iken dolu; yeni değerler eklenebilir.","allOf":[{"$ref":"#/components/schemas/LiveTranscriptionFailureCode"}]},"failureMessage":{"type":"string","nullable":true},"turns":{"type":"array","items":{"$ref":"#/components/schemas/ApiLiveTurnDto"}},"createdAt":{"format":"date-time","type":"string"},"startedAt":{"type":"string","nullable":true,"format":"date-time"},"completedAt":{"type":"string","nullable":true,"format":"date-time"},"reservedCostUsd":{"type":"string","example":"0.150000","description":"Oturum için rezerve edilen toplam kredi (USD, 6 ondalık)."}},"required":["id","url","generationId","state","platform","expectedLanguage","maxDurationMinutes","expiresAt","lastSequence","mediaTitle","failureCode","failureMessage","turns","createdAt","startedAt","completedAt","reservedCostUsd"]},"ApiLiveSessionEnvelopeDto":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#/components/schemas/ApiLiveSessionDto"}},"required":["success","data"]},"ApiLiveExtendOptionDto":{"type":"object","properties":{"totalDurationMinutes":{"type":"number","example":75,"description":"Uzatma sonrası yeni toplam süre (dk)"},"additionalReservedCostUsd":{"type":"string","example":"0.037500","description":"Ek rezervasyon (USD)"},"totalReservedCostUsd":{"type":"string","example":"0.187500","description":"Uzatma sonrası toplam rezervasyon (USD)"}},"required":["totalDurationMinutes","additionalReservedCostUsd","totalReservedCostUsd"]},"ApiLiveExtendOptionsDto":{"type":"object","properties":{"currentDurationMinutes":{"type":"number","example":60},"currentReservedCostUsd":{"type":"string","example":"0.150000"},"options":{"type":"array","items":{"$ref":"#/components/schemas/ApiLiveExtendOptionDto"}}},"required":["currentDurationMinutes","currentReservedCostUsd","options"]},"ApiLiveExtendOptionsEnvelopeDto":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#/components/schemas/ApiLiveExtendOptionsDto"}},"required":["success","data"]},"ExtendApiLiveTranscriptionDto":{"type":"object","properties":{"totalDurationMinutes":{"type":"number","example":30,"description":"Oturumun yeni toplam süresi"}},"required":["totalDurationMinutes"]}}}}