{"openapi":"3.1.0","info":{"title":"xiddaa Spor Verisi API","version":"1.0.0","description":"Canlı skor, oran, market, istatistik ve zaman damgalı maç geçmişini kalıcı arşivden sunan xiddaa API.","contact":{"name":"xiddaa API Yönetimi","email":"info@xiddaa.com","url":"https://xiddaa.com"}},"servers":[{"url":"https://xiddaa.com"}],"tags":[{"name":"Auth","description":"Hesap, oturum ve parola kurtarma işlemleri"},{"name":"Content","description":"Oturum gerektirmeyen paket ve blog içeriği"},{"name":"Events","description":"Arşivlenmiş etkinlik verileri"},{"name":"Catalog","description":"Spor ve organizasyon katalogları"},{"name":"System","description":"Servis durumu"}],"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"Error":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","example":"EVENT_NOT_FOUND"},"message":{"type":"string"},"details":{"type":["object","null"],"additionalProperties":true}}}}},"EventSummary":{"type":"object","properties":{"id":{"type":"integer","format":"int64","example":2994784},"providerEventId":{"type":["integer","null"],"format":"int64"},"name":{"type":["string","null"]},"sport":{"type":"object","additionalProperties":true},"competition":{"type":"object","additionalProperties":true},"participants":{"type":"object","additionalProperties":true},"startTime":{"type":["string","null"],"format":"date-time"},"classification":{"type":"string","enum":["prematch","live","paused","postponed","finished","cancelled","unknown"]},"score":{"type":"object","additionalProperties":true},"highlighted":{"type":"boolean"},"betting":{"type":"object","additionalProperties":true},"lastSyncedAt":{"type":["string","null"],"format":"date-time"}}},"PaginatedEvents":{"type":"object","properties":{"success":{"type":"boolean","const":true},"meta":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"total":{"type":"integer"},"totalPages":{"type":"integer"}}},"data":{"type":"array","items":{"$ref":"#/components/schemas/EventSummary"}}}}},"parameters":{"Page":{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},"Limit":{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},"Classification":{"name":"classification","in":"query","description":"Virgülle ayrılmış bir veya daha fazla durum.","schema":{"type":"string","example":"prematch,live"}}},"responses":{"Unauthorized":{"description":"API anahtarı eksik veya geçersiz","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"BadRequest":{"description":"Geçersiz istek","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"Kayıt bulunamadı","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/public/config":{"get":{"tags":["Content"],"summary":"Marka, satış iletişimi ve reCAPTCHA istemci ayarlarını getir","responses":{"200":{"description":"Genel istemci yapılandırması"}}}},"/public/plans":{"get":{"tags":["Content"],"summary":"Fiyatları gizlenmiş aktif paket kataloğunu getir","responses":{"200":{"description":"Aktif paketler; aylık fiyat yalnız oturumlu panel uçlarında sunulur"}}}},"/public/live-match":{"get":{"tags":["Content"],"summary":"Landing için güncel canlı maç özetini getir","description":"Canlı veya geçici olarak duraklatılmış maç yoksa match alanı null döner ve landing örnek veriyi kullanır.","responses":{"200":{"description":"Canlı maç özeti ve önerilen yenileme aralığı"}}}},"/public/blog":{"get":{"tags":["Content"],"summary":"Yayınlanmış blog yazılarını listele","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":24,"default":6}}],"responses":{"200":{"description":"Yayınlanmış blog yazıları"}}}},"/public/blog/{slug}":{"get":{"tags":["Content"],"summary":"Yayınlanmış blog yazısını getir","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Blog yazısı"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/auth/register":{"post":{"tags":["Auth"],"summary":"Başvuru doğrulama kodu iste","description":"Henüz kullanıcı hesabı oluşturmaz; e-posta adresine 6 haneli, süreli bir doğrulama kodu gönderir.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","email","password","intendedUse"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"companyName":{"type":["string","null"]},"intendedUse":{"type":"string","minLength":20,"maxLength":1000},"password":{"type":"string","minLength":10},"recaptchaToken":{"type":["string","null"]}}}}}},"responses":{"202":{"description":"Doğrulama kodu gönderildi"},"400":{"$ref":"#/components/responses/BadRequest"},"409":{"description":"E-posta kullanımda"}}}},"/auth/register/verify":{"post":{"tags":["Auth"],"summary":"E-postayı doğrula ve başvuruyu tamamla","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["verificationId","code"],"properties":{"verificationId":{"type":"string"},"code":{"type":"string","pattern":"^\\d{6}$"}}}}}},"responses":{"201":{"description":"E-posta doğrulandı; başvuru yönetici incelemesine alındı"},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"description":"Kod deneme sınırı aşıldı"}}}},"/auth/forgot-password":{"post":{"tags":["Auth"],"summary":"Parola sıfırlama bağlantısı iste","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"},"recaptchaToken":{"type":["string","null"]}}}}}},"responses":{"200":{"description":"Hesap varlığını ifşa etmeyen genel yanıt"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/auth/reset-password":{"post":{"tags":["Auth"],"summary":"Tek kullanımlık bağlantıyla yeni parola belirle","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token","newPassword"],"properties":{"token":{"type":"string"},"newPassword":{"type":"string","minLength":10}}}}}},"responses":{"200":{"description":"Parola güncellendi"},"400":{"$ref":"#/components/responses/BadRequest"}}}},"/health":{"get":{"tags":["System"],"summary":"Servis ve veritabanı sağlık kontrolü","responses":{"200":{"description":"Servis hazır"},"503":{"description":"Servis kısmen kullanılamıyor"}}}},"/api/v1/events":{"get":{"tags":["Events"],"summary":"Etkinlikleri filtreleyerek listele","security":[{"ApiKey":[]}],"parameters":[{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Classification"},{"name":"sportId","in":"query","schema":{"type":"integer"}},{"name":"competitionId","in":"query","schema":{"type":"integer","format":"int64"}},{"name":"highlighted","in":"query","schema":{"type":"boolean"}},{"name":"from","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Sayfalanmış etkinlik listesi","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEvents"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/api/v1/events/highlighted":{"get":{"tags":["Events"],"summary":"Öne çıkan etkinlikleri listele","security":[{"ApiKey":[]}],"parameters":[{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"description":"Öne çıkan etkinlikler"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/api/v1/live":{"get":{"tags":["Events"],"summary":"Canlı ve geçici olarak durmuş etkinlikleri listele","security":[{"ApiKey":[]}],"responses":{"200":{"description":"Canlı etkinlikler"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/api/v1/events/{eventId}":{"get":{"tags":["Events"],"summary":"Etkinlik, market, istatistik ve isteğe bağlı geçmiş detayı","security":[{"ApiKey":[]}],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"includeHistory","in":"query","schema":{"type":"boolean","default":false}},{"name":"historyMode","in":"query","description":"score yalnız skor/dakika, full market ve tüm yapılandırılmış snapshot verisini döndürür.","schema":{"type":"string","enum":["score","full"],"default":"score"}},{"name":"includeRaw","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Etkinlik detayı"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/api/v1/sports":{"get":{"tags":["Catalog"],"summary":"Arşivdeki sporları listele","security":[{"ApiKey":[]}],"responses":{"200":{"description":"Sporlar"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/api/v1/competitions":{"get":{"tags":["Catalog"],"summary":"Arşivdeki organizasyonları listele","security":[{"ApiKey":[]}],"parameters":[{"name":"sportId","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"Organizasyonlar"},"401":{"$ref":"#/components/responses/Unauthorized"}}}}}}