İçeriğe geç

API referansı · API reference

Sürüm / version 2027-01-15 · openapi.json

GET /v1/me

Profil kartın · Your profile card

Scope: profile:basic · Risk: R1

Görünen ad, kullanıcı adı, fotoğraf ve doğrulanmış rozeti. profile:read izni de verildiyse biyografi ve ilgi alanları eklenir. Telefon, e-posta, ad soyad ve konum asla dönmez.

Display name, username, picture and verified badge. With profile:read also bio and interests. Phone, e-mail, legal name and location are never returned. App feature: Profile › card

{
  "id": "u_7HqY2kQ9mXv3Lp0sZt1aBc",
  "name": "Rüzgar",
  "username": "ruzgar",
  "picture": "https://…",
  "verified": true,
  "bio": "Kahve ve yürüyüş",
  "interests": [
    "doğa",
    "kahve"
  ]
}

GET /v1/members/{id}

Üye kartı · Member card

Scope: profile:basic · Risk: R1

Engellediğin ya da seni engelleyen üyeler ve gizli hesaplar 404 döner.

Members you blocked or who blocked you, and hidden accounts, return 404.

ParametreYerAçıklama / Description
idpathÜyenin bu uygulamaya özel kimliği. · The member's app-specific (pairwise) id.
{
  "id": "u_7HqY2kQ9mXv3Lp0sZt1aBc",
  "name": "Rüzgar",
  "username": "ruzgar",
  "picture": "https://…",
  "verified": true
}

GET /v1/members/{id}/posts

Üyenin gönderileri · A member's posts

Scope: feed:read · Risk: R2

Yalnızca senin görebildiğin gönderiler (herkese açık, sana açık liste ya da kendi gönderilerin). Medya adresleri sonraki sürümde imzalı adreslerle gelir.

Only posts you can see (public, shared with you, or your own). Signed media URLs arrive in a later version.

ParametreYerAçıklama / Description
idpathÜyenin bu uygulamaya özel kimliği (kendin için /v1/me kimliği). · The member's pairwise id (your own /v1/me id for yourself).
limitquerySayfa boyutu (en çok 50, varsayılan 20). · Page size (max 50, default 20).
cursorqueryÖnceki yanıttaki `next` imleci (opak, 15 dk). · Opaque `next` cursor from the previous response (15 min).
{
  "items": [
    {
      "id": "p_9f3k",
      "author": "u_7HqY2kQ9mXv3Lp0sZt1aBc",
      "kind": "text",
      "text": "Pazar yürüyüşü harikaydı!",
      "mediaCount": 0,
      "audience": "all",
      "createdAt": "2027-01-15T09:00:00.000Z",
      "counts": {
        "likes": 12,
        "comments": 3,
        "reposts": 0
      },
      "aiLabel": null
    }
  ],
  "next": "eyJr…"
}

GET /v1/events

Yaklaşan herkese açık etkinlikler · Upcoming public events

Scope: events:read · Risk: R1

Tarih sırasıyla; konum il/ilçe düzeyinde (açık adres yalnızca katılımcılara, uygulamada).

By date; location at province/district level (exact address only for attendees, in the app).

ParametreYerAçıklama / Description
limitquerySayfa boyutu (en çok 50, varsayılan 20). · Page size (max 50, default 20).
cursorqueryÖnceki yanıttaki `next` imleci (opak, 15 dk). · Opaque `next` cursor from the previous response (15 min).
{
  "items": [
    {
      "eventId": "evt_s4nd",
      "datetime": "2027-01-20T16:00:00.000Z",
      "location": "Kadıköy, İstanbul",
      "name": "Pazar Kahvaltısı",
      "description": "…",
      "capacity": 20,
      "price": 0,
      "attendees": 8,
      "imageUrl": "https://…"
    }
  ],
  "next": null
}

GET /v1/events/{id}

Etkinlik ayrıntısı · Event details

Scope: events:read · Risk: R1

Herkese açık etkinlik ya da katıldığın etkinlik.

A public event or one you attend.

ParametreYerAçıklama / Description
idpathEtkinlik kimliği. · Event id.
{
  "eventId": "evt_s4nd",
  "datetime": "2027-01-20T16:00:00.000Z",
  "location": "Kadıköy, İstanbul",
  "name": "Pazar Kahvaltısı",
  "description": "…",
  "capacity": 20,
  "price": 0,
  "attendees": 8,
  "imageUrl": "https://…"
}

POST /v1/posts

Gönderi paylaş · Create a post

Scope: posts:write · Risk: R2

Uygulamadaki gönderiyle aynı moderasyondan geçer; gönderide uygulamanın adı görünür. Yapay zekâ incelemesine düşen gönderi review:true döner.

Goes through the same moderation as in-app posts; the post shows your app's name. Posts held for review return review:true. App feature: Feed › Share

{
  "id": "p_9f3k",
  "status": "published",
  "review": false
}

DELETE /v1/posts/{id}

Gönderini sil · Delete your post

Scope: posts:write · Risk: R2

ParametreYerAçıklama / Description
idpathGönderi kimliği (yalnızca kendi gönderin). · Post id (your own posts only).
{
  "deleted": true
}

POST /v1/posts/{id}/like

Gönderiyi beğen · Like a post

Scope: reactions:write · Risk: R2

ParametreYerAçıklama / Description
idpathGönderi kimliği. · Post id.
{
  "liked": true
}

DELETE /v1/posts/{id}/like

Beğeniyi geri al · Unlike a post

Scope: reactions:write · Risk: R2

ParametreYerAçıklama / Description
idpathGönderi kimliği. · Post id.
{
  "liked": false
}

POST /v1/posts/{id}/comments

Yorum yaz · Add a comment

Scope: comments:write · Risk: R2

Gizli kelimelere takılan yorum hidden:true döner (yalnızca yazana görünür).

Comments caught by hidden words return hidden:true (visible only to the author).

ParametreYerAçıklama / Description
idpathGönderi kimliği. · Post id.
{
  "id": "c_1",
  "hidden": false
}

DELETE /v1/posts/{id}/comments/{commentId}

Yorumunu sil · Delete your comment

Scope: comments:write · Risk: R2

ParametreYerAçıklama / Description
idpathGönderi kimliği. · Post id.
commentIdpathYorum kimliği (kendi yorumun). · Comment id (your own).
{
  "deleted": true
}

POST /v1/polls/{id}/votes

Ankete oy ver · Vote in a poll

Scope: polls:write · Risk: R2

ParametreYerAçıklama / Description
idpathAnket kimliği. · Poll id.
{
  "voted": true
}

POST /v1/events/{id}/join

Etkinliğe katıl · Join an event

Scope: events:join · Risk: R2

Ücretsiz etkinlikte doğrudan katılır. Ücretli etkinlikte (Kademe 3, elmas:spend) önce 202 pending_approval döner; üye HADİ'de PIN'le onaylayınca aynı isteği HADI-Approval başlığıyla yinele.

Free events join directly. Paid events (tier 3, elmas:spend) first return 202 pending_approval; after the member approves in HADİ with PIN, repeat the request with the HADI-Approval header.

ParametreYerAçıklama / Description
idpathEtkinlik kimliği. · Event id.
{
  "status": "joined"
}

DELETE /v1/events/{id}/join

Etkinlikten ayrıl · Leave an event

Scope: events:join · Risk: R2

ParametreYerAçıklama / Description
idpathEtkinlik kimliği. · Event id.
{
  "status": "left"
}

POST /v1/members/{id}/follow

Takip et · Follow

Scope: social.follow:write · Risk: R2

ParametreYerAçıklama / Description
idpathÜyenin uygulamaya özel kimliği. · The member's pairwise id.
{
  "state": "following"
}

DELETE /v1/members/{id}/follow

Takibi bırak · Unfollow

Scope: social.follow:write · Risk: R2

ParametreYerAçıklama / Description
idpathÜyenin uygulamaya özel kimliği. · The member's pairwise id.
{
  "state": "none"
}

POST /v1/members/{id}/block

Engelle · Block

Scope: social.safety:write · Risk: R2

ParametreYerAçıklama / Description
idpathÜyenin uygulamaya özel kimliği. · The member's pairwise id.
{
  "blocked": true
}

DELETE /v1/members/{id}/block

Engeli kaldır · Unblock

Scope: social.safety:write · Risk: R2

ParametreYerAçıklama / Description
idpathÜyenin uygulamaya özel kimliği. · The member's pairwise id.
{
  "blocked": false
}

POST /v1/members/{id}/mute

Sessize al · Mute

Scope: social.safety:write · Risk: R2

ParametreYerAçıklama / Description
idpathÜyenin uygulamaya özel kimliği. · The member's pairwise id.
{
  "muted": true
}

DELETE /v1/members/{id}/mute

Sessizden çıkar · Unmute

Scope: social.safety:write · Risk: R2

ParametreYerAçıklama / Description
idpathÜyenin uygulamaya özel kimliği. · The member's pairwise id.
{
  "muted": false
}

POST /v1/media/uploads

Fotoğraf yükleme adresi al · Get a photo upload URL

Scope: posts:write · Risk: R2

Tek kullanımlık, 15 dakikalık imzalı PUT adresi döner. Dosya karantinaya iner; gönderide kullanıldığında konum/EXIF silinir, yüz kapısı ve moderasyon uygulanır.

Returns a one-time signed PUT URL valid for 15 minutes. Files land in quarantine; EXIF/location is stripped and face gate + moderation run when used in a post.

{
  "mediaId": "med_8sd7f6g5h4",
  "uploadUrl": "https://storage.googleapis.com/…",
  "method": "PUT",
  "headers": {
    "content-type": "image/jpeg"
  },
  "expiresIn": 900
}

GET /v1/wallet

Cüzdan bakiyesi · Wallet balance

Scope: wallet:read · Risk: R3

Kullanılabilir ve kilitli Elmas/Akçe. Satın alma ve iade ayrıntısı dönmez.

Available and locked Elmas/Akçe. No purchase or refund details. App feature: Wallet

{
  "elmas": 120,
  "akce": 3400,
  "elmasLocked": 0,
  "akceLocked": 0
}

GET /v1/wallet/history

Cüzdan hareketleri · Wallet history

Scope: wallet:read · Risk: R3

Tür grubu, tutar ve zaman; karşı taraf ve sipariş ayrıntısı dönmez.

Kind, amounts and time; no counterparty or order details.

ParametreYerAçıklama / Description
limitquerySayfa boyutu (en çok 50, varsayılan 20). · Page size (max 50, default 20).
cursorqueryÖnceki yanıttaki `next` imleci (opak, 15 dk). · Opaque `next` cursor from the previous response (15 min).
{
  "items": [
    {
      "id": "tkt_x",
      "kind": "bilet",
      "elmas": -50,
      "akce": 0,
      "at": "2026-11-02T10:00:00.000Z"
    }
  ],
  "next": null
}

POST /v1/members/{id}/gifts

Hediye gönder · Send a gift

Scope: gifts:send · Risk: R4

Yalnızca karşılıklı takipleşilen üyelere; Kademe 3, işlem onayı (PIN) ve aylık Elmas limiti.

Mutual followers only; tier 3, per-transaction approval (PIN) and monthly Elmas limit. App feature: Profile › Gift

ParametreYerAçıklama / Description
idpathAlıcının uygulamaya özel kimliği (karşılıklı takipleştiğin üye). · Recipient's pairwise id (a mutual follower).
{
  "sent": true
}

GET /v1/donations/orgs

Bağış kurumları · Donation organizations

Scope: donations:give · Risk: R4

{
  "items": [
    {
      "id": "org_x",
      "name": "Örnek Vakfı",
      "category": "eğitim",
      "website": "https://ornek.org"
    }
  ]
}

POST /v1/donations

Bağış yap · Donate

Scope: donations:give · Risk: R4

Yalnızca satın alınmış Elmas; Kademe 3, işlem onayı (PIN) ve aylık Elmas limiti.

Purchased Elmas only; tier 3, per-transaction approval (PIN) and monthly limit.

{
  "donationId": "don_x",
  "status": "pending"
}

GET /v1/chats

Seçili sohbetler · Selected chats

Scope: messages.dm:read · Risk: R4

Yalnızca üyenin HADİ'de bu uygulama için seçtiği birebir sohbetler (en çok 10). Kimlik, karşı üyenin uygulamaya özel kimliğidir.

Only the 1:1 chats the member selected for your app in HADİ (max 10). The id is the other member's pairwise id.

{
  "items": [
    {
      "id": "u_7HqY2kQ9mXv3Lp0sZt1aBc",
      "name": "Rüzgar",
      "lastAt": "2026-11-02T10:00:00.000Z"
    }
  ]
}

GET /v1/chats/{id}/messages

Sohbet mesajları · Chat messages

Scope: messages.dm:read · Risk: R4

Yalnızca metin mesajları; gönderen me | them. Süreli/tek seferlik/silinmiş mesajlar ve gizli sohbetler yok. En çok 24 saat saklayabilirsin; analiz ve yapay zekâ eğitimi yasak.

Text messages only; sender me | them. No disappearing/view-once/deleted messages or secret chats. Store at most 24 hours; no analytics or AI training.

ParametreYerAçıklama / Description
idpathKarşı üyenin uygulamaya özel kimliği (GET /v1/chats). · The other member's pairwise id (GET /v1/chats).
limitquerySayfa boyutu (en çok 50, varsayılan 20). · Page size (max 50, default 20).
cursorqueryÖnceki yanıttaki `next` imleci (opak, 15 dk). · Opaque `next` cursor from the previous response (15 min).
{
  "items": [
    {
      "id": "m_1",
      "from": "them",
      "text": "Yarın geliyor musun?",
      "at": "2026-11-02T10:00:00.000Z"
    }
  ],
  "next": null
}

POST /v1/chats/{id}/messages

Sohbete yaz · Send a message

Scope: messages.dm:send · Risk: R4

Yalnızca seçili, var olan birebir sohbetlere (yeni DM yok). Üye her sohbet için 1 saatlik oturumu HADİ'de PIN'le onaylar (202 pending_approval → HADI-Approval ile yinele); saatte en çok 20 mesaj; mesajda uygulama etiketi görünür.

Only to selected existing 1:1 chats (no new DMs). The member approves a 1-hour session per chat with PIN in HADİ (202 pending_approval → repeat with HADI-Approval); max 20 messages/hour; the message shows your app label.

ParametreYerAçıklama / Description
idpathKarşı üyenin uygulamaya özel kimliği. · The other member's pairwise id.
{
  "id": "m_2",
  "status": "sent"
}

GET /v1/health/workouts

Antrenman geçmişi · Workout history

Scope: health:read · Risk: R4

Özel nitelikli veri: üye HADİ'de sağlık açık rızasını ve bu uygulama için ayrı açık rızayı vermiş olmalı. Son 60 antrenman.

Special-category data: the member must have given health consent in HADİ and separate explicit consent for your app. Last 60 workouts.

{
  "stats": {
    "streak": 3,
    "best": 9,
    "total": 41,
    "minutes": 1230
  },
  "items": [
    {
      "id": "w_1",
      "title": "Üst vücut",
      "day": "2026-11-01",
      "durationSec": 1800,
      "exercises": 6
    }
  ]
}

POST /v1/health/workouts

Antrenman kaydet · Log a workout

Scope: health:write · Risk: R4

Her kayıt üyenin HADİ'de PIN'le onayını ister (202 pending_approval). Antrenör aboneliği ve ayrı açık rıza gerekir.

Each log needs the member's PIN approval in HADİ (202 pending_approval). Requires the trainer subscription and separate explicit consent.

{
  "logged": true
}

GET /v1/health/metrics

Günlük sağlık ölçümleri · Daily health metrics

Scope: health:read · Risk: R4

Son 30 günün günlük toplamları (adım, kalori vb.). Ayrı açık rıza gerekir.

Daily totals for the last 30 days (steps, calories, etc.). Separate explicit consent required.

{
  "items": [
    {
      "day": "2026-11-01",
      "steps": 8400,
      "kcal": 320
    }
  ]
}

GET /v1/events/{id}/rides

Etkinliğin paylaşımlı yolculukları · Shared rides for an event

Scope: rides:read · Risk: R3

Araç, kalkış, buluşma noktaları, boş koltuk ve koltuk ücreti. Şoför/yolcu kimliği, plaka ve konum koordinatları dönmez; engellediğin ya da seni engelleyen şoför görünmez. Kademe 2 incelemesi gerekir.

Car, departure, pickup points, free seats and seat price. No driver/passenger identity, plate or coordinates; blocked drivers are hidden. Requires tier 2 review. App feature: Event › Rides

ParametreYerAçıklama / Description
idpathEtkinlik kimliği. · Event id.
{
  "rides": [
    {
      "id": "r_1",
      "status": "open",
      "departAt": "2026-11-08T07:30:00.000Z",
      "capacity": 3,
      "seatsTaken": 1,
      "car": {
        "brand": "Renault",
        "model": "Clio",
        "color": "Beyaz"
      },
      "destination": "Belgrad Ormanı",
      "priceElmas": 40,
      "km": 28,
      "durationMin": 45,
      "delayMin": 0,
      "prefs": {
        "smoking": false
      },
      "pickupPoints": [
        {
          "id": "p1",
          "label": "Kadıköy İskele",
          "etaAt": "2026-11-08T07:30:00.000Z",
          "priceElmas": 40
        }
      ]
    }
  ],
  "myReservation": null
}

POST /v1/rides/{id}/reservations

Yolculukta yer iste · Request a seat

Scope: rides:write · Risk: R3

Ücretsiz koltukta şoför onayı kuyruğuna (ilk gelen ilk) girer: status pending. Ücretli koltukta API ödeme yapmaz: üyeye bildirim gider, ödeme ve rezervasyon HADİ uygulamasında tamamlanır (status payment_in_app). Kendi aracın, engel ve yolculuk cezası kuralları aynen geçerli.

Free seats join the driver's FIFO approval queue: status pending. For paid seats the API does not pay: the member is notified and completes payment and booking in the HADİ app (status payment_in_app). Blocking and ride-ban rules apply.

ParametreYerAçıklama / Description
idpathYolculuk kimliği. · Ride id.
{
  "status": "pending"
}

DELETE /v1/rides/{id}/reservations

Yolculuk isteğini iptal et · Cancel a seat request

Scope: rides:write · Risk: R3

Ücretsiz koltukta ya da ücretli koltukta kalkıştan 3 saatten önce (tam iade) iptal eder. Daha geç ücretli iptal (ücretin şoföre geçebileceği durum) yalnızca HADİ uygulamasında.

Cancels a free seat, or a paid seat more than 3 hours before departure (full refund). Later paid cancellations are app-only.

ParametreYerAçıklama / Description
idpathYolculuk kimliği. · Ride id.
{
  "status": "cancelled"
}

GET /v1/approvals/{id}

İşlem onayı durumu · Transaction approval status

Scope: openid · Risk: R1

pending | approved | denied | used | failed | expired. Onay webhook'u: approval.decided.

pending | approved | denied | used | failed | expired. Webhook: approval.decided.

ParametreYerAçıklama / Description
idpathapproval_id. · approval_id.
{
  "status": "approved"
}

POST /v1/events/drafts

Üye etkinliği taslağı gönder · Submit a member event draft

Scope: events:create · Risk: R3

Premium üyeler içindir. Taslak HADİ ekibinin onayından sonra yayımlanır; aynı anda en çok 3 bekleyen taslak. Ücretli etkinlik yok.

For Premium members. The draft is published after HADİ team approval; max 3 pending drafts. No paid events. App feature: Events › Create event (Premium)

{
  "id": "me_8d2k",
  "status": "pending_review"
}

PATCH /v1/communities/{id}

Topluluğu düzenle · Update a community

Scope: communities:manage · Risk: R3

Yalnızca topluluğun sahibi/yöneticisi olan üye adına. Sohbet oyunları ve özellikler API'den değişmez.

Only on behalf of the community owner/moderator. Chat games and features cannot be changed via the API. App feature: Community › Edit

ParametreYerAçıklama / Description
idpathTopluluk kimliği (yöneticisi olduğun). · Community id (one you manage).
{
  "id": "g_4kd9",
  "updated": true
}