{
  "openapi": "3.1.0",
  "info": {
    "title": "HADİ me.api",
    "version": "2027-01-15",
    "description": "Member-scoped REST API of HADİ Sosyal. All requests need a DPoP-bound access token (OAuth 2.1 + PKCE + PAR). Pairwise member ids only. TR/EN docs: https://devs.hadisosyal.com",
    "x-hadi-tr": "HADİ Sosyal üye adına REST API. Her istek DPoP'a bağlı erişim jetonu ister (OAuth 2.1 + PKCE + PAR). Üye kimlikleri yalnızca uygulamaya özeldir.",
    "termsOfService": "https://devs.hadisosyal.com/politikalar/gelistirici-sozlesmesi",
    "contact": {
      "url": "https://devs.hadisosyal.com"
    }
  },
  "servers": [
    {
      "url": "https://me.api.hadisosyal.com",
      "description": "Production"
    },
    {
      "url": "https://me.api.sandbox.hadisosyal.com",
      "description": "Sandbox (synthetic data)"
    }
  ],
  "paths": {
    "/v1/me": {
      "get": {
        "operationId": "meGet",
        "summary": "Your profile card",
        "description": "Display name, username, picture and verified badge. With profile:read also bio and interests. Phone, e-mail, legal name and location are never returned.\n\nApp feature: Profile › card",
        "x-hadi-tr": {
          "summary": "Profil kartın",
          "description": "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.",
          "appFeature": "Profil › kart"
        },
        "x-hadi-scope": [
          "profile:basic"
        ],
        "x-hadi-risk": "R1",
        "x-hadi-services": [],
        "x-hadi-mcp": {
          "tool": "hadi_me",
          "humanApproval": "never"
        },
        "security": [
          {
            "DPoP": [
              "profile:basic"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "u_7HqY2kQ9mXv3Lp0sZt1aBc",
                  "name": "Rüzgar",
                  "username": "ruzgar",
                  "picture": "https://…",
                  "verified": true,
                  "bio": "Kahve ve yürüyüş",
                  "interests": [
                    "doğa",
                    "kahve"
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/members/{id}": {
      "get": {
        "operationId": "membersGet",
        "summary": "Member card",
        "description": "Members you blocked or who blocked you, and hidden accounts, return 404.",
        "x-hadi-tr": {
          "summary": "Üye kartı",
          "description": "Engellediğin ya da seni engelleyen üyeler ve gizli hesaplar 404 döner.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "profile:basic"
        ],
        "x-hadi-risk": "R1",
        "x-hadi-services": [],
        "security": [
          {
            "DPoP": [
              "profile:basic"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The member's app-specific (pairwise) id.",
            "x-hadi-tr": "Üyenin bu uygulamaya özel kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "u_7HqY2kQ9mXv3Lp0sZt1aBc",
                  "name": "Rüzgar",
                  "username": "ruzgar",
                  "picture": "https://…",
                  "verified": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/members/{id}/posts": {
      "get": {
        "operationId": "membersPosts",
        "summary": "A member's posts",
        "description": "Only posts you can see (public, shared with you, or your own). Signed media URLs arrive in a later version.",
        "x-hadi-tr": {
          "summary": "Üyenin gönderileri",
          "description": "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.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "feed:read"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [
          "feed"
        ],
        "security": [
          {
            "DPoP": [
              "feed:read"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The member's pairwise id (your own /v1/me id for yourself).",
            "x-hadi-tr": "Üyenin bu uygulamaya özel kimliği (kendin için /v1/me kimliği).",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size (max 50, default 20).",
            "x-hadi-tr": "Sayfa boyutu (en çok 50, varsayılan 20).",
            "schema": {
              "type": "integer",
              "maximum": 50,
              "minimum": 1
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque `next` cursor from the previous response (15 min).",
            "x-hadi-tr": "Önceki yanıttaki `next` imleci (opak, 15 dk).",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.-]{1,512}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "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…"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/events": {
      "get": {
        "operationId": "eventsList",
        "summary": "Upcoming public events",
        "description": "By date; location at province/district level (exact address only for attendees, in the app).",
        "x-hadi-tr": {
          "summary": "Yaklaşan herkese açık etkinlikler",
          "description": "Tarih sırasıyla; konum il/ilçe düzeyinde (açık adres yalnızca katılımcılara, uygulamada).",
          "appFeature": null
        },
        "x-hadi-scope": [
          "events:read"
        ],
        "x-hadi-risk": "R1",
        "x-hadi-services": [
          "events"
        ],
        "x-hadi-mcp": {
          "tool": "hadi_events_list",
          "humanApproval": "never"
        },
        "security": [
          {
            "DPoP": [
              "events:read"
            ]
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size (max 50, default 20).",
            "x-hadi-tr": "Sayfa boyutu (en çok 50, varsayılan 20).",
            "schema": {
              "type": "integer",
              "maximum": 50,
              "minimum": 1
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque `next` cursor from the previous response (15 min).",
            "x-hadi-tr": "Önceki yanıttaki `next` imleci (opak, 15 dk).",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.-]{1,512}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "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
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/events/{id}": {
      "get": {
        "operationId": "eventsGet",
        "summary": "Event details",
        "description": "A public event or one you attend.",
        "x-hadi-tr": {
          "summary": "Etkinlik ayrıntısı",
          "description": "Herkese açık etkinlik ya da katıldığın etkinlik.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "events:read"
        ],
        "x-hadi-risk": "R1",
        "x-hadi-services": [
          "events"
        ],
        "security": [
          {
            "DPoP": [
              "events:read"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Event id.",
            "x-hadi-tr": "Etkinlik kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "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://…"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/posts": {
      "post": {
        "operationId": "postsCreate",
        "summary": "Create a post",
        "description": "Goes through the same moderation as in-app posts; the post shows your app's name. Posts held for review return review:true.\n\nApp feature: Feed › Share",
        "x-hadi-tr": {
          "summary": "Gönderi paylaş",
          "description": "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.",
          "appFeature": "Akış › Paylaş"
        },
        "x-hadi-scope": [
          "posts:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [
          "feed"
        ],
        "x-hadi-mcp": {
          "tool": "hadi_post_create",
          "humanApproval": "always"
        },
        "security": [
          {
            "DPoP": [
              "posts:write"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "text"
                ],
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "Text (caption for photo posts), max 2,200 chars.",
                    "x-hadi-tr": "Metin (fotoğraflı gönderide açıklama), en çok 2.200 karakter."
                  },
                  "audience": {
                    "type": "string",
                    "description": "all | followers | close (default all).",
                    "x-hadi-tr": "all | followers | close (varsayılan all)."
                  },
                  "mediaIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Up to 10 photo ids from POST /v1/media/uploads.",
                    "x-hadi-tr": "POST /v1/media/uploads ile yüklenen en çok 10 fotoğrafın kimlikleri."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "p_9f3k",
                  "status": "published",
                  "review": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/posts/{id}": {
      "delete": {
        "operationId": "postsDelete",
        "summary": "Delete your post",
        "x-hadi-tr": {
          "summary": "Gönderini sil",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "posts:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [
          "feed"
        ],
        "security": [
          {
            "DPoP": [
              "posts:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Post id (your own posts only).",
            "x-hadi-tr": "Gönderi kimliği (yalnızca kendi gönderin).",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "deleted": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/posts/{id}/like": {
      "post": {
        "operationId": "postsLike",
        "summary": "Like a post",
        "x-hadi-tr": {
          "summary": "Gönderiyi beğen",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "reactions:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [
          "feed"
        ],
        "x-hadi-mcp": {
          "tool": "hadi_post_like",
          "humanApproval": "write"
        },
        "security": [
          {
            "DPoP": [
              "reactions:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Post id.",
            "x-hadi-tr": "Gönderi kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "liked": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      },
      "delete": {
        "operationId": "postsUnlike",
        "summary": "Unlike a post",
        "x-hadi-tr": {
          "summary": "Beğeniyi geri al",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "reactions:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [
          "feed"
        ],
        "security": [
          {
            "DPoP": [
              "reactions:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Post id.",
            "x-hadi-tr": "Gönderi kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "liked": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/posts/{id}/comments": {
      "post": {
        "operationId": "commentsCreate",
        "summary": "Add a comment",
        "description": "Comments caught by hidden words return hidden:true (visible only to the author).",
        "x-hadi-tr": {
          "summary": "Yorum yaz",
          "description": "Gizli kelimelere takılan yorum hidden:true döner (yalnızca yazana görünür).",
          "appFeature": null
        },
        "x-hadi-scope": [
          "comments:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [
          "feed"
        ],
        "x-hadi-mcp": {
          "tool": "hadi_comment_create",
          "humanApproval": "always"
        },
        "security": [
          {
            "DPoP": [
              "comments:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Post id.",
            "x-hadi-tr": "Gönderi kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "text"
                ],
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "Comment, max 1,000 chars.",
                    "x-hadi-tr": "Yorum, en çok 1.000 karakter."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "c_1",
                  "hidden": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/posts/{id}/comments/{commentId}": {
      "delete": {
        "operationId": "commentsDelete",
        "summary": "Delete your comment",
        "x-hadi-tr": {
          "summary": "Yorumunu sil",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "comments:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [
          "feed"
        ],
        "security": [
          {
            "DPoP": [
              "comments:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Post id.",
            "x-hadi-tr": "Gönderi kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "name": "commentId",
            "in": "path",
            "required": true,
            "description": "Comment id (your own).",
            "x-hadi-tr": "Yorum kimliği (kendi yorumun).",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "deleted": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/polls/{id}/votes": {
      "post": {
        "operationId": "pollsVote",
        "summary": "Vote in a poll",
        "x-hadi-tr": {
          "summary": "Ankete oy ver",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "polls:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [
          "polls"
        ],
        "security": [
          {
            "DPoP": [
              "polls:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Poll id.",
            "x-hadi-tr": "Anket kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "choices"
                ],
                "properties": {
                  "choices": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Choice ids (1–10).",
                    "x-hadi-tr": "Seçenek kimlikleri (1–10)."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "voted": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/events/{id}/join": {
      "post": {
        "operationId": "eventsJoin",
        "summary": "Join an event",
        "description": "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.",
        "x-hadi-tr": {
          "summary": "Etkinliğe katıl",
          "description": "Ü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.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "events:join"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [
          "events"
        ],
        "x-hadi-mcp": {
          "tool": "hadi_event_join",
          "humanApproval": "always",
          "annotations": {
            "destructiveHint": false
          }
        },
        "security": [
          {
            "DPoP": [
              "events:join"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Event id.",
            "x-hadi-tr": "Etkinlik kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "status": "joined"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      },
      "delete": {
        "operationId": "eventsLeave",
        "summary": "Leave an event",
        "x-hadi-tr": {
          "summary": "Etkinlikten ayrıl",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "events:join"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [
          "events"
        ],
        "security": [
          {
            "DPoP": [
              "events:join"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Event id.",
            "x-hadi-tr": "Etkinlik kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "status": "left"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/members/{id}/follow": {
      "post": {
        "operationId": "membersFollow",
        "summary": "Follow",
        "x-hadi-tr": {
          "summary": "Takip et",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "social.follow:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [],
        "security": [
          {
            "DPoP": [
              "social.follow:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The member's pairwise id.",
            "x-hadi-tr": "Üyenin uygulamaya özel kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "state": "following"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      },
      "delete": {
        "operationId": "membersUnfollow",
        "summary": "Unfollow",
        "x-hadi-tr": {
          "summary": "Takibi bırak",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "social.follow:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [],
        "security": [
          {
            "DPoP": [
              "social.follow:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The member's pairwise id.",
            "x-hadi-tr": "Üyenin uygulamaya özel kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "state": "none"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/members/{id}/block": {
      "post": {
        "operationId": "membersBlock",
        "summary": "Block",
        "x-hadi-tr": {
          "summary": "Engelle",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "social.safety:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [],
        "security": [
          {
            "DPoP": [
              "social.safety:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The member's pairwise id.",
            "x-hadi-tr": "Üyenin uygulamaya özel kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "blocked": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      },
      "delete": {
        "operationId": "membersUnblock",
        "summary": "Unblock",
        "x-hadi-tr": {
          "summary": "Engeli kaldır",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "social.safety:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [],
        "security": [
          {
            "DPoP": [
              "social.safety:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The member's pairwise id.",
            "x-hadi-tr": "Üyenin uygulamaya özel kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "blocked": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/members/{id}/mute": {
      "post": {
        "operationId": "membersMute",
        "summary": "Mute",
        "x-hadi-tr": {
          "summary": "Sessize al",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "social.safety:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [],
        "security": [
          {
            "DPoP": [
              "social.safety:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The member's pairwise id.",
            "x-hadi-tr": "Üyenin uygulamaya özel kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "muted": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      },
      "delete": {
        "operationId": "membersUnmute",
        "summary": "Unmute",
        "x-hadi-tr": {
          "summary": "Sessizden çıkar",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "social.safety:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [],
        "security": [
          {
            "DPoP": [
              "social.safety:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The member's pairwise id.",
            "x-hadi-tr": "Üyenin uygulamaya özel kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "muted": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/media/uploads": {
      "post": {
        "operationId": "mediaUpload",
        "summary": "Get a photo upload URL",
        "description": "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.",
        "x-hadi-tr": {
          "summary": "Fotoğraf yükleme adresi al",
          "description": "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.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "posts:write"
        ],
        "x-hadi-risk": "R2",
        "x-hadi-services": [
          "feed"
        ],
        "security": [
          {
            "DPoP": [
              "posts:write"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "contentType",
                  "size"
                ],
                "properties": {
                  "contentType": {
                    "type": "string",
                    "description": "image/jpeg",
                    "x-hadi-tr": "image/jpeg"
                  },
                  "size": {
                    "type": "integer",
                    "description": "Bytes (max 15 MB).",
                    "x-hadi-tr": "Bayt (en çok 15 MB)."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "mediaId": "med_8sd7f6g5h4",
                  "uploadUrl": "https://storage.googleapis.com/…",
                  "method": "PUT",
                  "headers": {
                    "content-type": "image/jpeg"
                  },
                  "expiresIn": 900
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/wallet": {
      "get": {
        "operationId": "walletGet",
        "summary": "Wallet balance",
        "description": "Available and locked Elmas/Akçe. No purchase or refund details.\n\nApp feature: Wallet",
        "x-hadi-tr": {
          "summary": "Cüzdan bakiyesi",
          "description": "Kullanılabilir ve kilitli Elmas/Akçe. Satın alma ve iade ayrıntısı dönmez.",
          "appFeature": "Cüzdan"
        },
        "x-hadi-scope": [
          "wallet:read"
        ],
        "x-hadi-risk": "R3",
        "x-hadi-services": [
          "wallet"
        ],
        "security": [
          {
            "DPoP": [
              "wallet:read"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "elmas": 120,
                  "akce": 3400,
                  "elmasLocked": 0,
                  "akceLocked": 0
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/wallet/history": {
      "get": {
        "operationId": "walletHistory",
        "summary": "Wallet history",
        "description": "Kind, amounts and time; no counterparty or order details.",
        "x-hadi-tr": {
          "summary": "Cüzdan hareketleri",
          "description": "Tür grubu, tutar ve zaman; karşı taraf ve sipariş ayrıntısı dönmez.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "wallet:read"
        ],
        "x-hadi-risk": "R3",
        "x-hadi-services": [
          "wallet"
        ],
        "security": [
          {
            "DPoP": [
              "wallet:read"
            ]
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size (max 50, default 20).",
            "x-hadi-tr": "Sayfa boyutu (en çok 50, varsayılan 20).",
            "schema": {
              "type": "integer",
              "maximum": 50,
              "minimum": 1
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque `next` cursor from the previous response (15 min).",
            "x-hadi-tr": "Önceki yanıttaki `next` imleci (opak, 15 dk).",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.-]{1,512}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "items": [
                    {
                      "id": "tkt_x",
                      "kind": "bilet",
                      "elmas": -50,
                      "akce": 0,
                      "at": "2026-11-02T10:00:00.000Z"
                    }
                  ],
                  "next": null
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/members/{id}/gifts": {
      "post": {
        "operationId": "giftsSend",
        "summary": "Send a gift",
        "description": "Mutual followers only; tier 3, per-transaction approval (PIN) and monthly Elmas limit.\n\nApp feature: Profile › Gift",
        "x-hadi-tr": {
          "summary": "Hediye gönder",
          "description": "Yalnızca karşılıklı takipleşilen üyelere; Kademe 3, işlem onayı (PIN) ve aylık Elmas limiti.",
          "appFeature": "Profil › Hediye"
        },
        "x-hadi-scope": [
          "gifts:send"
        ],
        "x-hadi-risk": "R4",
        "x-hadi-services": [
          "wallet"
        ],
        "security": [
          {
            "DPoP": [
              "gifts:send"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Recipient's pairwise id (a mutual follower).",
            "x-hadi-tr": "Alıcının uygulamaya özel kimliği (karşılıklı takipleştiğin üye).",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "giftId"
                ],
                "properties": {
                  "giftId": {
                    "type": "string",
                    "description": "Gift id.",
                    "x-hadi-tr": "Hediye kimliği."
                  },
                  "note": {
                    "type": "string",
                    "description": "Note, max 140 chars.",
                    "x-hadi-tr": "Not, en çok 140 karakter."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "sent": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/donations/orgs": {
      "get": {
        "operationId": "donationsOrgs",
        "summary": "Donation organizations",
        "x-hadi-tr": {
          "summary": "Bağış kurumları",
          "description": null,
          "appFeature": null
        },
        "x-hadi-scope": [
          "donations:give"
        ],
        "x-hadi-risk": "R4",
        "x-hadi-services": [
          "donations"
        ],
        "security": [
          {
            "DPoP": [
              "donations:give"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "items": [
                    {
                      "id": "org_x",
                      "name": "Örnek Vakfı",
                      "category": "eğitim",
                      "website": "https://ornek.org"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/donations": {
      "post": {
        "operationId": "donationsGive",
        "summary": "Donate",
        "description": "Purchased Elmas only; tier 3, per-transaction approval (PIN) and monthly limit.",
        "x-hadi-tr": {
          "summary": "Bağış yap",
          "description": "Yalnızca satın alınmış Elmas; Kademe 3, işlem onayı (PIN) ve aylık Elmas limiti.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "donations:give"
        ],
        "x-hadi-risk": "R4",
        "x-hadi-services": [
          "wallet",
          "donations"
        ],
        "security": [
          {
            "DPoP": [
              "donations:give"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "orgId",
                  "amount"
                ],
                "properties": {
                  "orgId": {
                    "type": "string",
                    "description": "Organization id.",
                    "x-hadi-tr": "Kurum kimliği."
                  },
                  "amount": {
                    "type": "integer",
                    "description": "Elmas (within the org's min/max and your app's limit).",
                    "x-hadi-tr": "Elmas (kurumun alt/üst sınırı ve uygulamanın limiti içinde)."
                  },
                  "anonymous": {
                    "type": "boolean",
                    "description": "Hide your name from the org.",
                    "x-hadi-tr": "Adın kuruma görünmesin."
                  },
                  "message": {
                    "type": "string",
                    "description": "Message, max 140 chars.",
                    "x-hadi-tr": "Mesaj, en çok 140 karakter."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "donationId": "don_x",
                  "status": "pending"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/chats": {
      "get": {
        "operationId": "chatsList",
        "summary": "Selected chats",
        "description": "Only the 1:1 chats the member selected for your app in HADİ (max 10). The id is the other member's pairwise id.",
        "x-hadi-tr": {
          "summary": "Seçili sohbetler",
          "description": "Yalnızca üyenin HADİ'de bu uygulama için seçtiği birebir sohbetler (en çok 10). Kimlik, karşı üyenin uygulamaya özel kimliğidir.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "messages.dm:read"
        ],
        "x-hadi-risk": "R4",
        "x-hadi-services": [
          "inbox"
        ],
        "security": [
          {
            "DPoP": [
              "messages.dm:read"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "items": [
                    {
                      "id": "u_7HqY2kQ9mXv3Lp0sZt1aBc",
                      "name": "Rüzgar",
                      "lastAt": "2026-11-02T10:00:00.000Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/chats/{id}/messages": {
      "get": {
        "operationId": "chatsMessages",
        "summary": "Chat messages",
        "description": "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.",
        "x-hadi-tr": {
          "summary": "Sohbet mesajları",
          "description": "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.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "messages.dm:read"
        ],
        "x-hadi-risk": "R4",
        "x-hadi-services": [
          "inbox"
        ],
        "security": [
          {
            "DPoP": [
              "messages.dm:read"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The other member's pairwise id (GET /v1/chats).",
            "x-hadi-tr": "Karşı üyenin uygulamaya özel kimliği (GET /v1/chats).",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size (max 50, default 20).",
            "x-hadi-tr": "Sayfa boyutu (en çok 50, varsayılan 20).",
            "schema": {
              "type": "integer",
              "maximum": 50,
              "minimum": 1
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque `next` cursor from the previous response (15 min).",
            "x-hadi-tr": "Önceki yanıttaki `next` imleci (opak, 15 dk).",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.-]{1,512}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "items": [
                    {
                      "id": "m_1",
                      "from": "them",
                      "text": "Yarın geliyor musun?",
                      "at": "2026-11-02T10:00:00.000Z"
                    }
                  ],
                  "next": null
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      },
      "post": {
        "operationId": "chatsSend",
        "summary": "Send a message",
        "description": "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.",
        "x-hadi-tr": {
          "summary": "Sohbete yaz",
          "description": "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.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "messages.dm:send"
        ],
        "x-hadi-risk": "R4",
        "x-hadi-services": [
          "inbox"
        ],
        "security": [
          {
            "DPoP": [
              "messages.dm:send"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The other member's pairwise id.",
            "x-hadi-tr": "Karşı üyenin uygulamaya özel kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "text"
                ],
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "Message, max 4,000 chars.",
                    "x-hadi-tr": "Mesaj, en çok 4.000 karakter."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "m_2",
                  "status": "sent"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/health/workouts": {
      "get": {
        "operationId": "healthWorkouts",
        "summary": "Workout history",
        "description": "Special-category data: the member must have given health consent in HADİ and separate explicit consent for your app. Last 60 workouts.",
        "x-hadi-tr": {
          "summary": "Antrenman geçmişi",
          "description": "Ö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.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "health:read"
        ],
        "x-hadi-risk": "R4",
        "x-hadi-services": [
          "saglik",
          "trainer"
        ],
        "security": [
          {
            "DPoP": [
              "health:read"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "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
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      },
      "post": {
        "operationId": "healthWorkoutsCreate",
        "summary": "Log a workout",
        "description": "Each log needs the member's PIN approval in HADİ (202 pending_approval). Requires the trainer subscription and separate explicit consent.",
        "x-hadi-tr": {
          "summary": "Antrenman kaydet",
          "description": "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.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "health:write"
        ],
        "x-hadi-risk": "R4",
        "x-hadi-services": [
          "saglik",
          "trainer"
        ],
        "security": [
          {
            "DPoP": [
              "health:write"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "items"
                ],
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "Title, max 80 chars.",
                    "x-hadi-tr": "Başlık, en çok 80 karakter."
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object"
                    },
                    "description": "Exercises: {id, sets, amount, done} (max 30; HADİ exercise ids).",
                    "x-hadi-tr": "Egzersizler: {id, sets, amount, done} (en çok 30; HADİ egzersiz kimlikleri)."
                  },
                  "durationSec": {
                    "type": "integer",
                    "description": "Duration (s, max 4 h).",
                    "x-hadi-tr": "Süre (sn, en çok 4 saat)."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "logged": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/health/metrics": {
      "get": {
        "operationId": "healthMetrics",
        "summary": "Daily health metrics",
        "description": "Daily totals for the last 30 days (steps, calories, etc.). Separate explicit consent required.",
        "x-hadi-tr": {
          "summary": "Günlük sağlık ölçümleri",
          "description": "Son 30 günün günlük toplamları (adım, kalori vb.). Ayrı açık rıza gerekir.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "health:read"
        ],
        "x-hadi-risk": "R4",
        "x-hadi-services": [
          "saglik"
        ],
        "security": [
          {
            "DPoP": [
              "health:read"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "items": [
                    {
                      "day": "2026-11-01",
                      "steps": 8400,
                      "kcal": 320
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/events/{id}/rides": {
      "get": {
        "operationId": "ridesList",
        "summary": "Shared rides for an event",
        "description": "Car, departure, pickup points, free seats and seat price. No driver/passenger identity, plate or coordinates; blocked drivers are hidden. Requires tier 2 review.\n\nApp feature: Event › Rides",
        "x-hadi-tr": {
          "summary": "Etkinliğin paylaşımlı yolculukları",
          "description": "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.",
          "appFeature": "Etkinlik › Yolculuk"
        },
        "x-hadi-scope": [
          "rides:read"
        ],
        "x-hadi-risk": "R3",
        "x-hadi-services": [
          "rides"
        ],
        "security": [
          {
            "DPoP": [
              "rides:read"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Event id.",
            "x-hadi-tr": "Etkinlik kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "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
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/rides/{id}/reservations": {
      "post": {
        "operationId": "ridesReserve",
        "summary": "Request a seat",
        "description": "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.",
        "x-hadi-tr": {
          "summary": "Yolculukta yer iste",
          "description": "Ü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.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "rides:write"
        ],
        "x-hadi-risk": "R3",
        "x-hadi-services": [
          "rides"
        ],
        "security": [
          {
            "DPoP": [
              "rides:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Ride id.",
            "x-hadi-tr": "Yolculuk kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [],
                "properties": {
                  "pickupId": {
                    "type": "string",
                    "description": "Pickup point (required for new rides).",
                    "x-hadi-tr": "Buluşma noktası (yeni yolculuklarda zorunlu)."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "status": "pending"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      },
      "delete": {
        "operationId": "ridesCancel",
        "summary": "Cancel a seat request",
        "description": "Cancels a free seat, or a paid seat more than 3 hours before departure (full refund). Later paid cancellations are app-only.",
        "x-hadi-tr": {
          "summary": "Yolculuk isteğini iptal et",
          "description": "Ü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.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "rides:write"
        ],
        "x-hadi-risk": "R3",
        "x-hadi-services": [
          "rides"
        ],
        "security": [
          {
            "DPoP": [
              "rides:write"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Ride id.",
            "x-hadi-tr": "Yolculuk kimliği.",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "status": "cancelled"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/approvals/{id}": {
      "get": {
        "operationId": "approvalsGet",
        "summary": "Transaction approval status",
        "description": "pending | approved | denied | used | failed | expired. Webhook: approval.decided.",
        "x-hadi-tr": {
          "summary": "İşlem onayı durumu",
          "description": "pending | approved | denied | used | failed | expired. Onay webhook'u: approval.decided.",
          "appFeature": null
        },
        "x-hadi-scope": [
          "openid"
        ],
        "x-hadi-risk": "R1",
        "x-hadi-services": [
          "api_tx_approval"
        ],
        "security": [
          {
            "DPoP": [
              "openid"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "approval_id.",
            "x-hadi-tr": "approval_id.",
            "schema": {
              "type": "string",
              "pattern": "^tx_[A-Za-z0-9_-]{16,40}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "status": "approved"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/events/drafts": {
      "post": {
        "operationId": "eventsSubmit",
        "summary": "Submit a member event draft",
        "description": "For Premium members. The draft is published after HADİ team approval; max 3 pending drafts. No paid events.\n\nApp feature: Events › Create event (Premium)",
        "x-hadi-tr": {
          "summary": "Üye etkinliği taslağı gönder",
          "description": "Premium üyeler içindir. Taslak HADİ ekibinin onayından sonra yayımlanır; aynı anda en çok 3 bekleyen taslak. Ücretli etkinlik yok.",
          "appFeature": "Etkinlikler › Etkinlik oluştur (Premium)"
        },
        "x-hadi-scope": [
          "events:create"
        ],
        "x-hadi-risk": "R3",
        "x-hadi-services": [
          "events"
        ],
        "security": [
          {
            "DPoP": [
              "events:create"
            ]
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "title",
                  "description",
                  "category",
                  "startAt",
                  "city",
                  "capacity"
                ],
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "3–90 chars.",
                    "x-hadi-tr": "3–90 karakter."
                  },
                  "description": {
                    "type": "string",
                    "description": "20–4,000 chars.",
                    "x-hadi-tr": "20–4.000 karakter."
                  },
                  "category": {
                    "type": "string",
                    "description": "Category.",
                    "x-hadi-tr": "Kategori."
                  },
                  "startAt": {
                    "type": "string",
                    "description": "ISO 8601; at least 1 hour ahead.",
                    "x-hadi-tr": "ISO 8601; en az 1 saat sonrası."
                  },
                  "endAt": {
                    "type": "string",
                    "description": "ISO 8601 (optional).",
                    "x-hadi-tr": "ISO 8601 (isteğe bağlı)."
                  },
                  "venueName": {
                    "type": "string",
                    "description": "Venue name (or address).",
                    "x-hadi-tr": "Mekân adı (ya da adres)."
                  },
                  "address": {
                    "type": "string",
                    "description": "Full address; shown to attendees only.",
                    "x-hadi-tr": "Açık adres; yalnızca katılımcılara gösterilir."
                  },
                  "city": {
                    "type": "string",
                    "description": "Province.",
                    "x-hadi-tr": "İl."
                  },
                  "capacity": {
                    "type": "integer",
                    "description": "2–500.",
                    "x-hadi-tr": "2–500."
                  },
                  "interests": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Interests (max 20).",
                    "x-hadi-tr": "İlgi alanları (en çok 20)."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "me_8d2k",
                  "status": "pending_review"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    },
    "/v1/communities/{id}": {
      "patch": {
        "operationId": "communitiesUpdate",
        "summary": "Update a community",
        "description": "Only on behalf of the community owner/moderator. Chat games and features cannot be changed via the API.\n\nApp feature: Community › Edit",
        "x-hadi-tr": {
          "summary": "Topluluğu düzenle",
          "description": "Yalnızca topluluğun sahibi/yöneticisi olan üye adına. Sohbet oyunları ve özellikler API'den değişmez.",
          "appFeature": "Topluluk › Düzenle"
        },
        "x-hadi-scope": [
          "communities:manage"
        ],
        "x-hadi-risk": "R3",
        "x-hadi-services": [
          "communities"
        ],
        "security": [
          {
            "DPoP": [
              "communities:manage"
            ]
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Community id (one you manage).",
            "x-hadi-tr": "Topluluk kimliği (yöneticisi olduğun).",
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_-]{1,64}$"
            }
          },
          {
            "$ref": "#/components/parameters/HadiVersion"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "name",
                  "about",
                  "emoji",
                  "interest",
                  "join",
                  "color"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "3–40 chars.",
                    "x-hadi-tr": "3–40 karakter."
                  },
                  "about": {
                    "type": "string",
                    "description": "Max 400 chars (profanity-filtered).",
                    "x-hadi-tr": "En çok 400 karakter (küfür süzgecinden geçer)."
                  },
                  "emoji": {
                    "type": "string",
                    "description": "One emoji.",
                    "x-hadi-tr": "Tek emoji."
                  },
                  "interest": {
                    "type": "string",
                    "description": "Interest.",
                    "x-hadi-tr": "İlgi alanı."
                  },
                  "join": {
                    "type": "string",
                    "description": "open | approval",
                    "x-hadi-tr": "open | approval"
                  },
                  "color": {
                    "type": "integer",
                    "description": "0–3.",
                    "x-hadi-tr": "0–3."
                  },
                  "visibility": {
                    "type": "string",
                    "description": "open | closed (owner only; unchanged if omitted).",
                    "x-hadi-tr": "open | closed (yalnızca sahip; gönderilmezse değişmez)."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "g_4kd9",
                  "updated": true
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Problem"
          },
          "401": {
            "$ref": "#/components/responses/Problem"
          },
          "403": {
            "$ref": "#/components/responses/Problem"
          },
          "404": {
            "$ref": "#/components/responses/Problem"
          },
          "409": {
            "$ref": "#/components/responses/Problem"
          },
          "422": {
            "$ref": "#/components/responses/Problem"
          },
          "428": {
            "$ref": "#/components/responses/Problem"
          },
          "429": {
            "$ref": "#/components/responses/Problem"
          },
          "503": {
            "$ref": "#/components/responses/Problem"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "DPoP": {
        "type": "oauth2",
        "description": "Authorization: DPoP <token> + DPoP proof header (RFC 9449). PAR required (RFC 9126).",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://auth.hadisosyal.com/authorize",
            "tokenUrl": "https://auth.hadisosyal.com/token",
            "refreshUrl": "https://auth.hadisosyal.com/token",
            "scopes": {
              "comments:write": "comments:write",
              "communities:manage": "communities:manage",
              "donations:give": "donations:give",
              "events:create": "events:create",
              "events:join": "events:join",
              "events:read": "events:read",
              "feed:read": "feed:read",
              "gifts:send": "gifts:send",
              "health:read": "health:read",
              "health:write": "health:write",
              "messages.dm:read": "messages.dm:read",
              "messages.dm:send": "messages.dm:send",
              "openid": "openid",
              "polls:write": "polls:write",
              "posts:write": "posts:write",
              "profile:basic": "profile:basic",
              "reactions:write": "reactions:write",
              "rides:read": "rides:read",
              "rides:write": "rides:write",
              "social.follow:write": "social.follow:write",
              "social.safety:write": "social.safety:write",
              "wallet:read": "wallet:read"
            }
          }
        }
      }
    },
    "parameters": {
      "HadiVersion": {
        "name": "HADI-Version",
        "in": "header",
        "required": false,
        "schema": {
          "type": "string",
          "enum": [
            "2027-01-15"
          ]
        },
        "description": "API version (dated)."
      },
      "IdempotencyKey": {
        "name": "Idempotency-Key",
        "in": "header",
        "required": true,
        "schema": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{8,64}$"
        },
        "description": "Required for writes; the same key returns the same response for 24 h (different body → 422)."
      }
    },
    "responses": {
      "Problem": {
        "description": "RFC 9457 problem details",
        "content": {
          "application/problem+json": {
            "schema": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "format": "uri"
                },
                "title": {
                  "type": "string"
                },
                "status": {
                  "type": "integer"
                },
                "detail": {
                  "type": "string"
                },
                "instance": {
                  "type": "string"
                }
              },
              "required": [
                "type",
                "title",
                "status"
              ]
            }
          }
        }
      }
    }
  }
}
