API Health v1.0

Seteka API

Seteka platformu ile entegre olmak isteyen kurumlar bu dokümantasyonu kullanarak API'ye bağlanabilir. Üyelik yönetimi, bağış toplama, aidat tahsilatı ve duyuru yayınlama işlemlerini API üzerinden gerçekleştirebilirsiniz.

Base URL: https://api.seteka.com

Yanıt Formatı

Tüm yanıtlar { success, data?, error?, meta? } formatında JSON döner.

Kimlik Doğrulama

Korumalı endpointler Authorization: Bearer <token> header'ı gerektirir.

Rate Limiting

API istekleri IP bazlı sınırlandırılmıştır. Limit: 30 istek/saniye.

Kimlik Doğrulama

API'ye erişim için JWT (JSON Web Token) tabanlı kimlik doğrulama kullanılır. /auth/login ile token alın, sonra her istekte Authorization: Bearer <token> header'ı gönderin. Access token süresi 15 dakikadır, /auth/refresh ile yenilenebilir.

{
  "Authorization": "Bearer eyJhbGciOiJIUzI1NiIs..."
}

Hata Kodları

Hata durumunda aşağıdaki formatta yanıt döner:

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "E-posta adresi geçersiz"
  }
}
HTTP KoduAçıklama
400Geçersiz istek / Doğrulama hatası
401Kimlik doğrulama gerekli / Token geçersiz
403Yetki yetersiz
404Kaynak bulunamadı
409Çakışma (örn: zaten kayıtlı)
429Çok fazla istek (rate limit)
500Sunucu hatası

Oturum (Auth)

Kayıt, giriş, şifre sıfırlama ve token yenileme işlemleri.

POST /auth/register Herkese Açık Yeni kullanıcı kaydı
Request Body
AlanTürZorunluAçıklama
emailstringZorunluE-posta adresi
passwordstringZorunluŞifre (min 6 karakter)
firstNamestringZorunluAd
lastNamestringZorunluSoyad
Yanıt (201)
{
  "success": true,
  "data": {
    "id": "uuid",
    "email": "kullanici@ornek.com",
    "firstName": "Ahmet",
    "lastName": "Yılmaz"
  }
}
POST /auth/login Herkese Açık Kullanıcı girişi
Request Body
AlanTürZorunluAçıklama
emailstringZorunluE-posta adresi
passwordstringZorunluŞifre
Yanıt (200)
{
  "success": true,
  "data": {
    "user": { "id", "email", "firstName", "lastName", "avatarUrl", "isVerified" },
    "accessToken": "eyJhbGciOi..."
  }
}

Refresh token httpOnly cookie olarak set edilir (7 gün).

POST /auth/refresh Herkese Açık Token yenileme

Cookie'deki refresh token ile yeni access token alır.

Yanıt (200)
{
  "success": true,
  "data": { "accessToken": "eyJhbGciOi..." }
}
POST /auth/logout Herkese Açık Oturumu kapat

Refresh token cookie'sini temizler.

Kurumlar

Kurum listeleme, arama ve detay bilgileri. Tüm endpointler herkese açıktır.

GET /institutions Herkese Açık Kurum listesi (sayfalı)
Query Parametreleri
AlanTürZorunluAçıklama
pagenumberOpsiyonelSayfa numarası (varsayılan: 1)
limitnumberOpsiyonelSayfa başına kayıt (varsayılan: 20)
tipstringOpsiyonelKurum tipi slug (dernek, vakif)
turstringOpsiyonelKategori slug
sehirstringOpsiyonelŞehir filtresi
Yanıt (200)
{
  "success": true,
  "data": [
    { "id", "name", "slug", "shortDesc", "logoUrl", "city", "isVerified" }
  ],
  "meta": { "page": 1, "limit": 20, "total": 45, "pages": 3 }
}
GET /institutions/search?q=... Herkese Açık Full-text arama
Query Parametreleri
AlanTürZorunluAçıklama
qstringZorunluArama sorgusu
pagenumberOpsiyonelSayfa numarası
limitnumberOpsiyonelSayfa başına kayıt

PostgreSQL tsvector ile full-text arama. Sonuçlar alaka sırasına göre sıralanır.

GET /institutions/:slug Herkese Açık Kurum detayı
Yanıt (200)
{
  "success": true,
  "data": {
    "id", "name", "slug", "description", "shortDesc",
    "logoUrl", "coverUrl", "city", "district",
    "isVerified", "followerCount",
    "typeName", "categoryName",
    "announcements": [...],
    "campaigns": [...]
  }
}
GET /institutions/types Herkese Açık Kurum tipleri
{ "success": true, "data": [{ "id": 1, "name": "Dernek", "slug": "dernek" }, ...] }
GET /institutions/categories Herkese Açık Kurum kategorileri
{ "success": true, "data": [{ "id": 1, "name": "Sosyal Yardım", "slug": "sosyal-yardim" }, ...] }

İçerik

SSS, statik sayfalar ve platform duyuruları.

GET /content/faq Herkese Açık Sıkça sorulan sorular
{ "data": [{ "id", "question", "answer", "category", "sortOrder" }] }
GET /content/pages/:slug Herkese Açık Statik sayfa içeriği
{ "data": { "slug", "title", "content", "updatedAt" } }

Kullanıcı Profili

Kullanıcı bilgileri ve profil güncelleme.

GET /users/me Auth Gerekli Mevcut kullanıcı bilgileri
{
  "data": {
    "id", "email", "firstName", "lastName", "phone",
    "avatarUrl", "birthDate", "city", "district", "isVerified"
  }
}
PUT /users/me Auth Gerekli Profil güncelle
AlanTürZorunluAçıklama
firstNamestringOpsiyonelAd
lastNamestringOpsiyonelSoyad
phonestringOpsiyonelTelefon
citystringOpsiyonelŞehir
districtstringOpsiyonelİlçe
birthDatestringOpsiyonelDoğum tarihi (YYYY-MM-DD)
PUT /users/me/password Auth Gerekli Şifre değiştir
AlanTürZorunluAçıklama
currentPasswordstringZorunluMevcut şifre
newPasswordstringZorunluYeni şifre

Takip

Kurum takip işlemleri.

GET /follows Auth Gerekli Takip edilen kurumlar
{ "data": [{ "id", "institutionId", "createdAt", "institution": { "id", "name", "slug", ... } }] }
POST /follows/:institutionId Auth Gerekli Kurum takip et
{ "data": { "message": "Takip edildi" } }
DELETE /follows/:institutionId Auth Gerekli Takibi bırak
{ "data": { "message": "Takipten çıkıldı" } }

Üyelik

Kurum üyelik başvuruları ve üyelik bilgileri.

GET /memberships Auth Gerekli Üyeliklerim
{ "data": [{ "id", "membershipNo", "status", "joinedAt", "institutionName", "institutionSlug" }] }
POST /memberships/:institutionId/apply Auth Gerekli Üyelik başvurusu
AlanTürZorunluAçıklama
messagestringOpsiyonelBaşvuru mesajı
GET /memberships/applications Auth Gerekli Başvurularım
{ "data": [{ "id", "status", "message", "createdAt", "institutionName" }] }

Bağışlar

Kullanıcının bağış geçmişi.

GET /donations Auth Gerekli Bağış geçmişi
{ "data": [{ "id", "amount", "currency", "status", "isAnonymous", "paidAt", "institutionName" }] }

Aidatlar

Kullanıcının aidat ödemeleri.

GET /dues Auth Gerekli Aidat geçmişi
{ "data": [{ "id", "amount", "status", "paidAt", "periodTitle", "dueDate", "institutionName" }] }

Kurum Paneli (Business API)

Kurum yetkililerinin kullandığı endpointler. Auth + kurum yetkisi (staff) gerektirir.

GET /business/dashboard Staff Gerekli Kurum dashboard istatistikleri
{
  "data": {
    "totalMembers": 150,
    "activeMembers": 120,
    "pendingApplications": 5,
    "totalDonations": 45000.00,
    "totalDuesCollected": 18000.00,
    "followerCount": 320
  }
}
GET /business/members Staff Gerekli Üye listesi
{ "data": [{ "id", "membershipNo", "status", "joinedAt", "firstName", "lastName", "email", "phone", "city" }] }
GET /business/applications Staff Gerekli Üyelik başvuruları

Query: ?status=pending|approved|rejected (varsayılan: pending)

PUT /business/applications/:id Staff Gerekli Başvuru onayla/reddet
AlanTürZorunluAçıklama
statusstringZorunlu"approved" veya "rejected"
POST /business/dues-periods Staff Gerekli Aidat dönemi oluştur
AlanTürZorunluAçıklama
titlestringZorunluDönem adı (örn: "2026 Mart Aidatı")
amountnumberZorunluAidat tutarı (TL)
periodStartstringZorunluBaşlangıç tarihi (YYYY-MM-DD)
periodEndstringZorunluBitiş tarihi
dueDatestringZorunluSon ödeme tarihi
POST /business/announcements Staff Gerekli Duyuru oluştur
AlanTürZorunluAçıklama
titlestringZorunluDuyuru başlığı
contentstringZorunluDuyuru içeriği
isPublishedbooleanOpsiyonelHemen yayınla (varsayılan: false)
GET /business/donations Staff Gerekli Kuruma yapılan bağışlar
{ "data": [{ "id", "amount", "status", "isAnonymous", "paidAt", "donorName" }] }

Ödeme

Bağış ve aidat ödeme işlemleri. PayTR altyapısı kullanılır.

POST /payments/donate Auth Gerekli Bağış yap
AlanTürZorunluAçıklama
institutionIdstringZorunluKurum UUID
amountnumberZorunluTutar (min 10 TL)
campaignIdstringOpsiyonelKampanya UUID
isAnonymousbooleanOpsiyonelAnonim bağış
messagestringOpsiyonelBağış mesajı
Yanıt (201)
{
  "data": {
    "paymentId": "uuid",
    "merchant_oid": "SET-...",
    "iframeSrc": "https://www.paytr.com/odeme/...",
    "status": "pending"
  }
}
POST /payments/pay-dues Auth Gerekli Aidat öde
AlanTürZorunluAçıklama
duesPeriodIdstringZorunluAidat dönemi UUID
GET /payments/status/:paymentId Auth Gerekli Ödeme durumu sorgula
{
  "data": {
    "id": "uuid",
    "status": "completed",
    "type": "donation",
    "grossAmount": 100.00,
    "completedAt": "2026-03-07T..."
  }
}