{
    "openapi": "3.1.0",
    "info": {
        "title": "OmrarCast API",
        "version": "1.1.0",
        "summary": "Ekranlarınızı kendi yazılımınızdan yönetin.",
        "description": "OmrarCast API'si ile ekranlarınızı listeleyebilir, eşleştirebilir, adlandırabilir, gruplayabilir ve silebilir; toplu komut gönderebilir; medya yükleyip silebilir; playlist ve widget oluşturup ekranlara, gruplara ve zamanlamalara atayabilir; şablon tasarımları ve içerik talepleri oluşturabilir; fiyat panolarını yönetip ekranlara gönderebilir; ürün fiyatlarını (POS ya da ERP sisteminizden) güncelleyip toplu zam uygulayabilir; oynatma raporlarını okuyup CSV olarak indirebilirsiniz.\n\n**Kimlik doğrulama:** Panelde Ayarlar → API bölümünden anahtar oluşturun ve her istekte `Authorization: Bearer oc_live_...` başlığını gönderin. Anahtar yalnız oluşturulurken bir kez gösterilir.\n\n**Yetkiler:** `read` (okuma), `content:write` (medya, playlist, widget, şablon, zamanlama, içerik talebi), `screens:command` (ekran komutları), `screens:manage` (ekran, ağ ve grup yönetimi), `products:write` (ürün fiyatları ve fiyat panoları). Her uç noktanın gerektirdiği yetki `x-ability` alanında ve açıklamasında belirtilmiştir. Bir anahtar yalnız kendisine verilen yetkilerin uç noktalarını çağırabilir.\n\n**Sınır:** Anahtar başına dakikada 120 istek. Aşıldığında `429` ve `Retry-After` başlığı döner.\n\n**Hata biçimi:** Tüm hatalarda `message` (Türkçe) bulunur; doğrulama hatalarında ayrıca `errors` nesnesi gelir. Başka hesaba ait kayıtlar `404` döner.\n\n**Sayfalama:** Liste uç noktaları `page` ve `per_page` (en fazla 100) kabul eder; yanıtta `data` ve `meta` bulunur.\n\n**Abonelik:** Aboneliği aktif olmayan hesaplarda yazma uç noktaları `402` döner; okuma uç noktaları çalışmaya devam eder.\n\n**Webhook'lar:** `screen.offline`, `screen.online`, `media.ready`, `media.failed`, `screen.paired`, `screen.deleted`, `command.acked`, `products.prices_changed` olayları, panelde tanımladığınız adrese `POST` edilir. Her istekte `X-OmrarCast-Signature: t=<unix>,v1=<hex>` başlığı bulunur; imza, `<t>.<ham gövde>` metninin webhook anahtarıyla HMAC-SHA256 özetidir. Başarısız bildirimler 3 kez denenir. Olay yükleri `webhooks` bölümünde tanımlıdır."
    },
    "servers": [
        {
            "url": "https://tv.omrar.com/api/public/v1",
            "description": "Canlı"
        }
    ],
    "security": [
        {
            "bearerAuth": []
        }
    ],
    "tags": [
        {
            "name": "Hesap",
            "description": "Hesap, plan ve kullanım bilgisi"
        },
        {
            "name": "Ekranlar",
            "description": "Ekranları listeleme, eşleştirme, adlandırma, silme, komut, zamanlama, içerik kopyalama ve fiyat listesi; toplu işlemler"
        },
        {
            "name": "Ağlar",
            "description": "Ekranların bağlandığı ağlar ve ağ adları"
        },
        {
            "name": "Medya",
            "description": "Medya kütüphanesi: yükleme, listeleme, silme"
        },
        {
            "name": "Playlistler",
            "description": "Playlist oluşturma, düzenleme, silme, widget ekleme ve ekranlara atama"
        },
        {
            "name": "Gruplar",
            "description": "Ekran grupları: yönetim, üyelik, playlist, dağıtım, zamanlama ve fiyat listesi"
        },
        {
            "name": "Widgetlar",
            "description": "Saat, hava durumu, kur, kayan yazı, web sayfası, RSS, YouTube ve fiyat panosu widgetları"
        },
        {
            "name": "Şablonlar",
            "description": "Hazır şablonlar ve kayıtlı şablon tasarımları"
        },
        {
            "name": "İçerik talepleri",
            "description": "Yönetimli hizmet: içerik değişikliği ve tasarım talepleri"
        },
        {
            "name": "Fiyat panoları",
            "description": "Menü görseli üzerindeki fiyat kutuları ve panoların ekranlara gönderilmesi"
        },
        {
            "name": "Ürünler",
            "description": "Ürün ve fiyat kataloğu; fiyat panolarındaki fiyatlar buradan çizilir"
        },
        {
            "name": "Raporlar",
            "description": "Oynatma kayıtları ve CSV dışa aktarma"
        }
    ],
    "paths": {
        "/me": {
            "get": {
                "tags": [
                    "Hesap"
                ],
                "summary": "Hesap, plan ve kullanım",
                "description": "Anahtarın bağlı olduğu hesabı, planı, ekran ve depolama kullanımını döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Me"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens": {
            "get": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Ekranları listele",
                "description": "Eşleşmiş ekranları sayfalı döner. Bir ekran, son 90 saniye içinde sinyal verdiyse `online` sayılır. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "description": "Çevrimiçi durumuna göre süzer.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "online",
                                "offline"
                            ]
                        }
                    },
                    {
                        "name": "group_id",
                        "in": "query",
                        "required": false,
                        "description": "Yalnız bu gruptaki ekranları döner.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa numarası.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa başına kayıt (en fazla 100).",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Screen"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/pair": {
            "post": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Ekranı eşleştir",
                "description": "Ekranda görünen eşleştirme kodunu hesabınıza bağlar. Kod harf, rakam, boşluk ve tireden oluşur (6-16 karakter); büyük/küçük harf ve ayraçlar önemsenmez. Kod geçersiz, süresi dolmuş ya da kullanılmışsa `422` döner. Başarılı eşleştirmede `screen.paired` webhook'u gönderilir. Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "code"
                                ],
                                "properties": {
                                    "code": {
                                        "type": "string",
                                        "minLength": 6,
                                        "maxLength": 16,
                                        "example": "K7M2-9QXP"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Ekran eşleştirildi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Screen"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/distribute": {
            "post": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Playlistleri ekranlara dağıt",
                "description": "Seçilen ekranlara verilen playlistleri dağıtır. `sequential`: playlistler sırayla ekranlara atanır. `split`: playlistlerin içerikleri ekranlar arasında bölünür ve gerekli otomatik playlistler oluşturulur. `dry_run: true` ile değişiklik yapmadan önizleme alınır. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "ids",
                                    "playlist_ids",
                                    "mode"
                                ],
                                "properties": {
                                    "ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 2,
                                        "maxItems": 100,
                                        "uniqueItems": true,
                                        "description": "Ekran kimlikleri.",
                                        "example": [
                                            12,
                                            14
                                        ]
                                    },
                                    "playlist_ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 1,
                                        "maxItems": 20,
                                        "uniqueItems": true,
                                        "example": [
                                            3,
                                            4
                                        ]
                                    },
                                    "mode": {
                                        "type": "string",
                                        "enum": [
                                            "sequential",
                                            "split"
                                        ],
                                        "description": "`sequential`: playlistler sırayla ekranlara atanır. `split`: içerikler ekranlar arasında bölünür.",
                                        "example": "split"
                                    },
                                    "dry_run": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "`true` iken yalnız önizleme döner, hiçbir şey değişmez."
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Önizleme (`dry_run: true`) ya da uygulanan dağıtım",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "oneOf": [
                                                {
                                                    "$ref": "#/components/schemas/DistributionPreview"
                                                },
                                                {
                                                    "$ref": "#/components/schemas/DistributionResult"
                                                }
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/bulk/playlist": {
            "post": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Birden çok ekrana playlist ata",
                "description": "Ekranların oynatma kaynağını verilen playlist yapar. Tek seferde en fazla 500 ekran. Gönderilen ekranlardan biri bulunamazsa hiçbiri değişmez ve `422` döner. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "ids",
                                    "playlist_id"
                                ],
                                "properties": {
                                    "ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 1,
                                        "maxItems": 500,
                                        "uniqueItems": true,
                                        "description": "Ekran kimlikleri.",
                                        "example": [
                                            12,
                                            14
                                        ]
                                    },
                                    "playlist_id": {
                                        "type": "integer",
                                        "example": 3
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Assigned"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/bulk/command": {
            "post": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Birden çok ekrana komut gönder",
                "description": "Aynı komutu en fazla 500 ekrana gönderir. Komutlar ekranlara bir sonraki sinyallerinde (en geç 30 saniye) iletilir; 5 dakika içinde ulaşmazsa süresi dolar. Çevrimdışı ekranlara da komut kuyruğa alınır; `offline` alanı bunların sayısını verir. Gerekli yetki: `screens:command`.",
                "x-ability": "screens:command",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:command"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "ids",
                                    "command"
                                ],
                                "properties": {
                                    "ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 1,
                                        "maxItems": 500,
                                        "uniqueItems": true,
                                        "description": "Ekran kimlikleri.",
                                        "example": [
                                            12,
                                            14
                                        ]
                                    },
                                    "command": {
                                        "type": "string",
                                        "enum": [
                                            "sync_now",
                                            "reload",
                                            "identify",
                                            "set_brightness"
                                        ],
                                        "example": "set_brightness"
                                    },
                                    "payload": {
                                        "type": [
                                            "object",
                                            "null"
                                        ],
                                        "description": "`set_brightness` için gerekli.",
                                        "properties": {
                                            "level": {
                                                "type": "integer",
                                                "minimum": 0,
                                                "maximum": 100,
                                                "example": 60
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Komutlar kuyruğa alındı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/BulkCommand"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/bulk/delete": {
            "post": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Birden çok ekranı sil",
                "description": "Ekranları hesaptan kaldırır; ekranlar eşleştirme ekranına döner. Tek seferde en fazla 500 ekran. Her ekran için `screen.deleted` webhook'u gönderilir. Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "ids"
                                ],
                                "properties": {
                                    "ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 1,
                                        "maxItems": 500,
                                        "uniqueItems": true,
                                        "description": "Ekran kimlikleri.",
                                        "example": [
                                            12,
                                            14
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ScreensDeleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/bulk/group": {
            "post": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Birden çok ekranı gruba ekle",
                "description": "Ekranları verilen gruba üye yapar; zaten üye olanlar sayılır ama değiştirilmez. Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "ids",
                                    "group_id"
                                ],
                                "properties": {
                                    "ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 1,
                                        "maxItems": 500,
                                        "uniqueItems": true,
                                        "description": "Ekran kimlikleri.",
                                        "example": [
                                            12,
                                            14
                                        ]
                                    },
                                    "group_id": {
                                        "type": "integer",
                                        "example": 5
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ScreensGrouped"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/{id}": {
            "get": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Ekran ayrıntısı",
                "description": "Ekranın şu an oynattığı içeriği ve oynatma kaynağını (ekrana atanmış playlist, grup playlisti, zamanlamalar) döner. `playing.items`, ekranın şu an çözdüğü içerik listesidir; `playing.reported_media` ve `playing.reported_widget`, ekranın son sinyalde bildirdiği içeriktir. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Ekran kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ScreenDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Ekranı yeniden adlandır",
                "description": "Ekranın adını değiştirir. Ad harf ya da rakamla başlamalı; harf, rakam, boşluk ve `. , & ' ( ) / # + -` karakterlerini içerebilir. Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Ekran kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "minLength": 2,
                                        "maxLength": 60,
                                        "example": "Lobi Ekranı"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Screen"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Ekranı sil",
                "description": "Ekranı hesaptan kaldırır; ekran eşleştirme ekranına döner ve yeniden eşleştirilebilir. `screen.deleted` webhook'u gönderilir. Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Ekran kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ekran silindi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Deleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/{id}/commands": {
            "post": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Ekrana komut gönder",
                "description": "Komut ekrana bir sonraki sinyalinde (en geç 30 saniye) iletilir; 5 dakika içinde ulaşmazsa süresi dolar. Ekran komutu aldığında `command.acked` webhook'u gönderilir. Gerekli yetki: `screens:command`.",
                "x-ability": "screens:command",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:command"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Ekran kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "command"
                                ],
                                "properties": {
                                    "command": {
                                        "type": "string",
                                        "enum": [
                                            "sync_now",
                                            "reload",
                                            "identify",
                                            "set_brightness"
                                        ],
                                        "example": "set_brightness"
                                    },
                                    "payload": {
                                        "type": [
                                            "object",
                                            "null"
                                        ],
                                        "description": "`set_brightness` için gerekli.",
                                        "properties": {
                                            "level": {
                                                "type": "integer",
                                                "minimum": 0,
                                                "maximum": 100,
                                                "example": 60
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Komut kuyruğa alındı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Command"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/{id}/playlist": {
            "post": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Ekrana playlist ata",
                "description": "Ekranın oynatma kaynağını verilen playlist yapar. Atamayı kaldırmak için `playlist_id` alanına `null` gönderin; alan hiç gönderilmezse `422` döner. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Ekran kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "playlist_id"
                                ],
                                "properties": {
                                    "playlist_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "example": 3
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Screen"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/{id}/schedules": {
            "post": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Ekrana zamanlanmış playlist ekle",
                "description": "Belirtilen gün ve saat aralığında ekranın oynatacağı playlisti tanımlar; aralık dışında ekran varsayılan kaynağına döner. `days` boş liste ise her günü kapsar. Bitiş saati başlangıçtan önceyse kural gece yarısını aşar. Güncel kurallar ekran ayrıntısında `assignment.schedules` altında listelenir. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Ekran kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "playlist_id",
                                    "days",
                                    "start_time",
                                    "end_time"
                                ],
                                "properties": {
                                    "playlist_id": {
                                        "type": "integer",
                                        "example": 3
                                    },
                                    "days": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "enum": [
                                                "mon",
                                                "tue",
                                                "wed",
                                                "thu",
                                                "fri",
                                                "sat",
                                                "sun"
                                            ]
                                        },
                                        "description": "Geçerli günler; boş liste her günü kapsar.",
                                        "example": [
                                            "mon",
                                            "tue",
                                            "wed",
                                            "thu",
                                            "fri"
                                        ]
                                    },
                                    "start_time": {
                                        "type": "string",
                                        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
                                        "description": "SS:DD biçiminde başlangıç saati.",
                                        "example": "09:00"
                                    },
                                    "end_time": {
                                        "type": "string",
                                        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
                                        "description": "SS:DD biçiminde bitiş saati.",
                                        "example": "18:00"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Zamanlama eklendi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ScreenSchedule"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/{id}/schedules/{assignment}": {
            "delete": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Ekran zamanlamasını sil",
                "description": "Ekrana tanımlı zamanlanmış kuralı kaldırır. `assignment`, kuralın `assignment_id` değeridir. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Ekran kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "assignment",
                        "in": "path",
                        "required": true,
                        "description": "Zamanlama kuralı kimliği (`assignment_id`)",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Zamanlama silindi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ScheduleDeleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/{id}/copy-content": {
            "post": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Ekranın içeriğini başka ekranlara kopyala",
                "description": "Bu ekranın içeriğini `ids` ile verilen ekranlara kopyalar (en fazla 500; kaynak ekran listede olamaz). `source: playlist` kaynak ekrana doğrudan atanmış playlisti hedeflere atar; `source: content` ekranın kendi içerik listesini hedeflere yazar. Kaynakta ilgili içerik yoksa `422` döner. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Kaynak ekran kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "ids",
                                    "source"
                                ],
                                "properties": {
                                    "ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 1,
                                        "maxItems": 500,
                                        "uniqueItems": true,
                                        "description": "İçeriğin kopyalanacağı ekran kimlikleri.",
                                        "example": [
                                            12,
                                            14
                                        ]
                                    },
                                    "source": {
                                        "type": "string",
                                        "enum": [
                                            "content",
                                            "playlist"
                                        ],
                                        "example": "playlist"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/CopyContent"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/screens/{id}/price-list": {
            "put": {
                "tags": [
                    "Ekranlar"
                ],
                "summary": "Ekranın fiyat listesini ayarla",
                "description": "Ekranın fiyat panolarında hangi fiyat listesinin gösterileceğini belirler. `none`: üst düzeyden (grup, hesap) devral. `branch`: POS şubesinin fiyat listesi (`branch_id`). `list`: doğrudan bir fiyat listesi (`price_list`). Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Ekran kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "mode"
                                ],
                                "properties": {
                                    "mode": {
                                        "type": "string",
                                        "enum": [
                                            "none",
                                            "branch",
                                            "list"
                                        ],
                                        "example": "list"
                                    },
                                    "branch_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "description": "`mode: branch` iken zorunlu POS şube kimliği."
                                    },
                                    "price_list": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 40,
                                        "description": "`mode: list` iken zorunlu; hesapta tanımlı bir fiyat listesi olmalı.",
                                        "example": "PREMIUM"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ScreenPriceList"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/networks": {
            "get": {
                "tags": [
                    "Ağlar"
                ],
                "summary": "Ağları listele",
                "description": "Ekranların bağlandığı ağları, her ağdaki ekranlarla birlikte döner. Ad verilmemiş ağlarda `name` boştur. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Network"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/networks/{key}": {
            "put": {
                "tags": [
                    "Ağlar"
                ],
                "summary": "Ağı adlandır",
                "description": "Ağa okunur bir ad verir (2-80 karakter). Adı silmek için `name` alanına `null` ya da boş metin gönderin. `key`, ağ listesindeki 16 karakterlik ağ anahtarıdır. Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "key",
                        "in": "path",
                        "required": true,
                        "description": "Ağ anahtarı (16 karakter, 0-9 a-f)",
                        "schema": {
                            "type": "string",
                            "pattern": "^[a-f0-9]{16}$"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name"
                                ],
                                "properties": {
                                    "name": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "minLength": 2,
                                        "maxLength": 80,
                                        "example": "Merkez ofis ağı"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Network"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/media": {
            "get": {
                "tags": [
                    "Medya"
                ],
                "summary": "Medyaları listele",
                "description": "Medya kütüphanesini en yeniden eskiye sayfalı döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "type",
                        "in": "query",
                        "required": false,
                        "description": "Medya türü.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "image",
                                "video",
                                "gif"
                            ]
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "description": "İşlenme durumu.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "processing",
                                "ready",
                                "failed"
                            ]
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "required": false,
                        "description": "Ad ya da özgün dosya adında arar (en fazla 100 karakter).",
                        "schema": {
                            "type": "string",
                            "maxLength": 100
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa numarası.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa başına kayıt (en fazla 100).",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Media"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "post": {
                "tags": [
                    "Medya"
                ],
                "summary": "Medya yükle",
                "description": "Dosyayı `multipart/form-data` ile `file` alanında gönderin. Desteklenen biçimler: jpg, jpeg, png, webp, gif, mp4, webm, mov. Videolar gerekirse arka planda dönüştürülür; hazır olduğunda `media.ready`, dönüştürme başarısız olursa `media.failed` webhook'u gönderilir. Depolama kotası aşılırsa `422` döner. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "file"
                                ],
                                "properties": {
                                    "file": {
                                        "type": "string",
                                        "format": "binary"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Medya yüklendi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Media"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/media/bulk-delete": {
            "post": {
                "tags": [
                    "Medya"
                ],
                "summary": "Birden çok medyayı sil",
                "description": "En fazla 500 medyayı siler. Kullanımda olanlar (playlist, ekran içeriği ya da şu an oynayan) silinmez ve `skipped_in_use` sayısına eklenir. Hiçbiri silinemezse ve hepsi kullanımdaysa `422` döner. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "ids"
                                ],
                                "properties": {
                                    "ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 1,
                                        "maxItems": 500,
                                        "uniqueItems": true,
                                        "description": "Medya kimlikleri.",
                                        "example": [
                                            12,
                                            14
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/MediaBulkDeleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/media/{id}": {
            "get": {
                "tags": [
                    "Medya"
                ],
                "summary": "Medya ayrıntısı",
                "description": "Tek bir medyayı döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Medya kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Media"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Medya"
                ],
                "summary": "Medyayı sil",
                "description": "Medyayı ve dosyasını siler. Medya bir playlistte, bir ekranın içeriğinde ya da bir ekranda şu an oynuyorsa silinmez ve `422` döner; önce kullanıldığı yerden kaldırın. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Medya kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Medya silindi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Deleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/playlists": {
            "get": {
                "tags": [
                    "Playlistler"
                ],
                "summary": "Playlistleri listele",
                "description": "Playlistleri sayfalı döner. `auto: true` olanlar dağıtım ile otomatik oluşturulmuş playlistlerdir. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa numarası.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa başına kayıt (en fazla 100).",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Playlist"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "post": {
                "tags": [
                    "Playlistler"
                ],
                "summary": "Playlist oluştur",
                "description": "Yeni playlist oluşturur; isterseniz `media_ids` ile hazır medyaları sırayla ekler. Videolar kendi süresiyle, görseller 10 saniyeyle eklenir. Dönüştürülmekte olan medya eklenemez (`422`). Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 190,
                                        "example": "Sabah Kampanyası"
                                    },
                                    "media_ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "maxItems": 200,
                                        "example": [
                                            4,
                                            7,
                                            9
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Playlist oluşturuldu",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PlaylistDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/playlists/{id}": {
            "get": {
                "tags": [
                    "Playlistler"
                ],
                "summary": "Playlist ayrıntısı",
                "description": "Playlisti öğeleriyle birlikte döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Playlist kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PlaylistDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "put": {
                "tags": [
                    "Playlistler"
                ],
                "summary": "Playlisti güncelle",
                "description": "Adı ve öğe listesini tümüyle değiştirir; gönderilen `items` sırası yeni oynatma sırası olur. Boş liste için `[]` gönderin. Öğeler medya (`media_id`) ya da widget (`widget_id`) olabilir. `video_full_length` yalnız videolarda geçerlidir; `true` iken video kendi süresince oynar. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Playlist kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name",
                                    "items"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 190,
                                        "example": "Sabah Kampanyası"
                                    },
                                    "items": {
                                        "type": "array",
                                        "maxItems": 200,
                                        "items": {
                                            "type": "object",
                                            "required": [
                                                "duration_seconds"
                                            ],
                                            "description": "Her öğe için `media_id` ya da `widget_id` gönderin; ikisi birlikte gönderilemez.",
                                            "properties": {
                                                "media_id": {
                                                    "type": [
                                                        "integer",
                                                        "null"
                                                    ],
                                                    "example": 4
                                                },
                                                "widget_id": {
                                                    "type": [
                                                        "integer",
                                                        "null"
                                                    ],
                                                    "example": 2
                                                },
                                                "duration_seconds": {
                                                    "type": "integer",
                                                    "minimum": 1,
                                                    "maximum": 86400,
                                                    "example": 10
                                                },
                                                "video_full_length": {
                                                    "type": "boolean",
                                                    "example": true
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PlaylistDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Playlistler"
                ],
                "summary": "Playlisti sil",
                "description": "Playlisti ve ona yapılmış tüm ekran, grup ve zamanlama atamalarını siler. Bu playlisti oynatan ekranlar bir sonraki eşitlemede içeriği bırakır. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Playlist kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Playlist silindi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Deleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/playlists/{id}/duplicate": {
            "post": {
                "tags": [
                    "Playlistler"
                ],
                "summary": "Playlisti çoğalt",
                "description": "Playlistin öğeleriyle birlikte \" (kopya)\" ekli bir kopyasını oluşturur. Atamalar kopyalanmaz. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Playlist kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Kopya oluşturuldu",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PlaylistDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/playlists/{id}/items": {
            "post": {
                "tags": [
                    "Playlistler"
                ],
                "summary": "Playlist sonuna medya ekle",
                "description": "Verilen hazır medyaları, gönderilen sırayla playlistin sonuna ekler. Dönüştürülmekte olan medya eklenemez (`422`). Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Playlist kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "media_ids"
                                ],
                                "properties": {
                                    "media_ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 1,
                                        "maxItems": 200,
                                        "example": [
                                            4,
                                            7
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PlaylistDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/playlists/{id}/items/{item}": {
            "delete": {
                "tags": [
                    "Playlistler"
                ],
                "summary": "Playlist öğesini kaldır",
                "description": "Playlistten tek bir öğeyi çıkarır. `item`, playlist ayrıntısındaki öğenin `item_id` değeridir. Bu playlisti oynatan ekranlar güncellenir. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Playlist kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "item",
                        "in": "path",
                        "required": true,
                        "description": "Playlist öğesi kimliği (`item_id`)",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PlaylistDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/playlists/{id}/widgets": {
            "post": {
                "tags": [
                    "Playlistler"
                ],
                "summary": "Playlist sonuna widget ekle",
                "description": "Bir widgetı playlistin sonuna ekler. `duration_seconds` verilmezse playlistin varsayılan öğe süresi (yoksa 10 saniye) kullanılır. Widget playlistte zaten varsa `422` döner. Bu playlisti oynatan ekranlar güncellenir. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Playlist kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "widget_id"
                                ],
                                "properties": {
                                    "widget_id": {
                                        "type": "integer",
                                        "example": 2
                                    },
                                    "duration_seconds": {
                                        "type": "integer",
                                        "minimum": 1,
                                        "maximum": 86400,
                                        "example": 15
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Widget eklendi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PlaylistDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/playlists/{id}/assign": {
            "post": {
                "tags": [
                    "Playlistler"
                ],
                "summary": "Playlisti ekranlara ata",
                "description": "Verilen ekranların oynatma kaynağını bu playlist yapar. Tek seferde en fazla 500 ekran. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Playlist kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "ids"
                                ],
                                "properties": {
                                    "ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 1,
                                        "maxItems": 500,
                                        "uniqueItems": true,
                                        "description": "Ekran kimlikleri.",
                                        "example": [
                                            12,
                                            14
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Assigned"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/groups": {
            "get": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Grupları listele",
                "description": "Ekran gruplarını sayfalı döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa numarası.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa başına kayıt (en fazla 100).",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Group"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "post": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Grup oluştur",
                "description": "Yeni ekran grubu oluşturur; `parent_id` ile başka bir grubun altına yerleştirilebilir. Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 150,
                                        "example": "Kadıköy Şubesi"
                                    },
                                    "parent_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "description": "Üst grup. Ana grup için `null`.",
                                        "example": 2
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Grup oluşturuldu",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/GroupDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/groups/{id}": {
            "get": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Grup ayrıntısı",
                "description": "Grubu; üst grubunu, alt gruplarını, varsayılan playlistini, fiyat listesi ayarını ve içindeki ekranları birlikte döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Grup kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/GroupDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "put": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Grubu güncelle",
                "description": "Adı ve/veya üst grubu değiştirir; gönderilmeyen alan değişmez. Grup kendisinin ya da alt gruplarından birinin altına taşınamaz (`422`). Üst grup değişince alt ağaçtaki ekranlar yeniden eşitlenir. Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Grup kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 150,
                                        "example": "Kadıköy Şubesi"
                                    },
                                    "parent_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "description": "Üst grup. Ana grup için `null`.",
                                        "example": 2
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/GroupDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Grubu sil",
                "description": "Grubu ve gruba yapılmış playlist atamalarını siler; üye ekranlar silinmez, gruptan çıkarılır. Alt grupları olan grup silinemez (`422`). Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Grup kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Grup silindi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/GroupDeleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/groups/{id}/playlist": {
            "post": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Gruba playlist ata",
                "description": "Grubun varsayılan oynatma kaynağını verilen playlist yapar; alt grupların ekranları da etkilenir (kendi atamaları yoksa devralırlar). Atamayı kaldırmak için `playlist_id` alanına `null` gönderin. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Grup kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "playlist_id"
                                ],
                                "properties": {
                                    "playlist_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "example": 3
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Group"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/groups/{id}/distribute": {
            "post": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Playlistleri grubun ekranlarına dağıt",
                "description": "Grubun ekranlarına verilen playlistleri ekran adı sırasıyla dağıtır; kurallar `POST /screens/distribute` ile aynıdır, ekran listesi `ids` yerine grubun üyelerinden alınır (en az 2, en fazla 100 ekran). Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Grup kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "playlist_ids",
                                    "mode"
                                ],
                                "properties": {
                                    "playlist_ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 1,
                                        "maxItems": 20,
                                        "uniqueItems": true,
                                        "example": [
                                            3,
                                            4
                                        ]
                                    },
                                    "mode": {
                                        "type": "string",
                                        "enum": [
                                            "sequential",
                                            "split"
                                        ],
                                        "description": "`sequential`: playlistler sırayla ekranlara atanır. `split`: içerikler ekranlar arasında bölünür.",
                                        "example": "split"
                                    },
                                    "dry_run": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "`true` iken yalnız önizleme döner, hiçbir şey değişmez."
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Önizleme (`dry_run: true`) ya da uygulanan dağıtım",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "oneOf": [
                                                {
                                                    "$ref": "#/components/schemas/DistributionPreview"
                                                },
                                                {
                                                    "$ref": "#/components/schemas/DistributionResult"
                                                }
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/groups/{id}/members": {
            "post": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Gruba ekran ekle",
                "description": "Verilen ekranları gruba üye yapar (en fazla 500). Zaten üye olanlar `already_members` sayısına eklenir. Yanıt, güncel grup ayrıntısıdır. Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Grup kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "screen_ids"
                                ],
                                "properties": {
                                    "screen_ids": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "minItems": 1,
                                        "maxItems": 500,
                                        "uniqueItems": true,
                                        "description": "Ekran kimlikleri.",
                                        "example": [
                                            12,
                                            14
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/GroupMembersResult"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/groups/{id}/members/{screen}": {
            "delete": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Ekranı gruptan çıkar",
                "description": "Ekranı gruptan çıkarır; ekran silinmez. Ekran grubun üyesi değilse `404` döner. Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Grup kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "screen",
                        "in": "path",
                        "required": true,
                        "description": "Ekran kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/GroupMemberRemoved"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/groups/{id}/schedules": {
            "get": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Grup zamanlamalarını listele",
                "description": "Gruba tanımlı zamanlanmış playlist kurallarını döner. `meta.timezone`, kuralların yorumlandığı saat dilimidir. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Grup kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/ScheduleRule"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "timezone": {
                                                    "type": "string",
                                                    "example": "Europe/Istanbul"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "post": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Gruba zamanlanmış playlist ekle",
                "description": "Belirtilen gün ve saat aralığında gruptaki ekranların oynatacağı playlisti tanımlar; aralık dışında ekranlar varsayılan kaynaklarına döner. `days` boş liste ise her günü kapsar. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Grup kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "playlist_id",
                                    "days",
                                    "start_time",
                                    "end_time"
                                ],
                                "properties": {
                                    "playlist_id": {
                                        "type": "integer",
                                        "example": 3
                                    },
                                    "days": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "enum": [
                                                "mon",
                                                "tue",
                                                "wed",
                                                "thu",
                                                "fri",
                                                "sat",
                                                "sun"
                                            ]
                                        },
                                        "description": "Geçerli günler; boş liste her günü kapsar.",
                                        "example": [
                                            "mon",
                                            "tue",
                                            "wed",
                                            "thu",
                                            "fri"
                                        ]
                                    },
                                    "start_time": {
                                        "type": "string",
                                        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
                                        "description": "SS:DD biçiminde başlangıç saati.",
                                        "example": "09:00"
                                    },
                                    "end_time": {
                                        "type": "string",
                                        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
                                        "description": "SS:DD biçiminde bitiş saati.",
                                        "example": "18:00"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Zamanlama eklendi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ScheduleRule"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/groups/{id}/schedules/{assignment}": {
            "delete": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Grup zamanlamasını sil",
                "description": "Gruba tanımlı zamanlanmış kuralı kaldırır. `assignment`, kuralın `assignment_id` değeridir. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Grup kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "assignment",
                        "in": "path",
                        "required": true,
                        "description": "Zamanlama kuralı kimliği (`assignment_id`)",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Zamanlama silindi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ScheduleDeleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/groups/{id}/price-list": {
            "put": {
                "tags": [
                    "Gruplar"
                ],
                "summary": "Grubun fiyat listesini ayarla",
                "description": "Gruptaki ekranların fiyat panolarında hangi fiyat listesinin gösterileceğini belirler; alt gruplar ve kendi ayarı olmayan ekranlar devralır. `none`: üst düzeyden devral. `branch`: POS şubesinin fiyat listesi. `list`: doğrudan bir fiyat listesi. Yanıt, güncel grup ayrıntısıdır. Gerekli yetki: `screens:manage`.",
                "x-ability": "screens:manage",
                "security": [
                    {
                        "bearerAuth": [
                            "screens:manage"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Grup kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "mode"
                                ],
                                "properties": {
                                    "mode": {
                                        "type": "string",
                                        "enum": [
                                            "none",
                                            "branch",
                                            "list"
                                        ],
                                        "example": "list"
                                    },
                                    "branch_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "description": "`mode: branch` iken zorunlu POS şube kimliği."
                                    },
                                    "price_list": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 40,
                                        "description": "`mode: list` iken zorunlu; hesapta tanımlı bir fiyat listesi olmalı.",
                                        "example": "PREMIUM"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/GroupDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/widgets/types": {
            "get": {
                "tags": [
                    "Widgetlar"
                ],
                "summary": "Widget türlerini listele",
                "description": "Desteklenen widget türlerini, her türün `config` alanlarını (ad, tür, zorunluluk, sınırlar, varsayılan) ve varsayılan ayarlarını döner. Widget oluştururken `config` bu şemaya göre doldurulur. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/WidgetType"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/widgets": {
            "get": {
                "tags": [
                    "Widgetlar"
                ],
                "summary": "Widgetları listele",
                "description": "Widgetları en yeniden eskiye sayfalı döner. `usage`, widgetın kaç playlistte ve kaç ekranın içeriğinde kullanıldığını verir. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "type",
                        "in": "query",
                        "required": false,
                        "description": "Widget türü.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "clock",
                                "weather",
                                "currency",
                                "ticker",
                                "web",
                                "rss",
                                "youtube",
                                "price_board"
                            ]
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa numarası.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa başına kayıt (en fazla 100).",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Widget"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "post": {
                "tags": [
                    "Widgetlar"
                ],
                "summary": "Widget oluştur",
                "description": "Yeni widget oluşturur. `config` alanları türe göre değişir; `GET /widgets/types` ile öğrenin. RSS adresleri ve web sayfası adresleri güvenlik denetiminden geçer. Tür gerektiren özellik hesabın planında yoksa `422` döner. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "type",
                                    "name",
                                    "config"
                                ],
                                "properties": {
                                    "type": {
                                        "type": "string",
                                        "enum": [
                                            "clock",
                                            "weather",
                                            "currency",
                                            "ticker",
                                            "web",
                                            "rss",
                                            "youtube",
                                            "price_board"
                                        ],
                                        "example": "clock"
                                    },
                                    "name": {
                                        "type": "string",
                                        "minLength": 2,
                                        "maxLength": 120,
                                        "example": "Lobi saati"
                                    },
                                    "config": {
                                        "type": "object",
                                        "description": "Türe özel ayarlar; alanlar için `GET /widgets/types`.",
                                        "additionalProperties": true,
                                        "example": {
                                            "style": "dark",
                                            "show_seconds": false
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Widget oluşturuldu",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Widget"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/widgets/{id}": {
            "get": {
                "tags": [
                    "Widgetlar"
                ],
                "summary": "Widget ayrıntısı",
                "description": "Tek bir widgetı ayarlarıyla birlikte döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Widget kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Widget"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "put": {
                "tags": [
                    "Widgetlar"
                ],
                "summary": "Widgetı güncelle",
                "description": "Adı ve ayarları değiştirir; widget türü sonradan değiştirilemez. Widgetı kullanan ekranlar güncellenir. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Widget kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name",
                                    "config"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "minLength": 2,
                                        "maxLength": 120,
                                        "example": "Lobi saati"
                                    },
                                    "config": {
                                        "type": "object",
                                        "description": "Türe özel ayarlar; alanlar için `GET /widgets/types`.",
                                        "additionalProperties": true,
                                        "example": {
                                            "style": "dark",
                                            "show_seconds": false
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Widget"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Widgetlar"
                ],
                "summary": "Widgetı sil",
                "description": "Widgetı siler. Bir playlistte ya da ekran içeriğinde kullanılıyorsa silinmez ve `422` döner; önce kullanıldığı yerden kaldırın. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Widget kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Widget silindi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Deleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/templates": {
            "get": {
                "tags": [
                    "Şablonlar"
                ],
                "summary": "Şablonları listele",
                "description": "Kullanılabilir hazır şablonları; yönlerini, ölçülerini ve doldurulacak alanlarını döner. `meta`, geçerli palet, yazı tipi ve biçim değerlerini verir. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Template"
                                            }
                                        },
                                        "meta": {
                                            "type": "object",
                                            "properties": {
                                                "palettes": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    },
                                                    "example": [
                                                        "gece",
                                                        "kahve",
                                                        "taze",
                                                        "mercan",
                                                        "okyanus",
                                                        "mono",
                                                        "marka"
                                                    ]
                                                },
                                                "fonts": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    },
                                                    "example": [
                                                        "modern",
                                                        "klasik",
                                                        "guclu"
                                                    ]
                                                },
                                                "formats": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    },
                                                    "example": [
                                                        "png",
                                                        "webp"
                                                    ]
                                                },
                                                "custom_palette_tokens": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string"
                                                    },
                                                    "example": [
                                                        "bg",
                                                        "surface",
                                                        "text",
                                                        "accent"
                                                    ]
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/templates/designs": {
            "get": {
                "tags": [
                    "Şablonlar"
                ],
                "summary": "Şablon tasarımlarını listele",
                "description": "Kayıtlı tasarımları son güncellemeye göre sayfalı döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "template_key",
                        "in": "query",
                        "required": false,
                        "description": "Yalnız bu şablondan üretilen tasarımlar.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa numarası.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa başına kayıt (en fazla 100).",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/TemplateDesign"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "post": {
                "tags": [
                    "Şablonlar"
                ],
                "summary": "Şablon tasarımı oluştur",
                "description": "Bir şablondan yeni tasarım kaydeder. Üretilmiş görseli `file` ile (multipart) gönderirseniz medya kütüphanesine yüklenir; `playlist_id` ile birlikte playlistin sonuna eklenir. Görsel boyutu şablonla uyuşmazsa ya da depolama kotası doluysa `422` döner. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "template_key",
                                    "name",
                                    "data"
                                ],
                                "properties": {
                                    "template_key": {
                                        "type": "string",
                                        "example": "menu-panosu"
                                    },
                                    "name": {
                                        "type": "string",
                                        "maxLength": 120,
                                        "example": "Kampanya afişi"
                                    },
                                    "data": {
                                        "type": "object",
                                        "description": "Şablon bilgileri. `multipart/form-data` gönderirken JSON metni olarak da verilebilir (en fazla 200.000 karakter). Eksik `values` alanları şablonun varsayılanlarıyla tamamlanır.",
                                        "properties": {
                                            "orientation": {
                                                "type": "string",
                                                "description": "Şablonun desteklediği yönlerden biri (`GET /templates`).",
                                                "example": "landscape"
                                            },
                                            "palette": {
                                                "type": "string",
                                                "enum": [
                                                    "gece",
                                                    "kahve",
                                                    "taze",
                                                    "mercan",
                                                    "okyanus",
                                                    "mono",
                                                    "marka"
                                                ]
                                            },
                                            "customPalette": {
                                                "type": [
                                                    "object",
                                                    "null"
                                                ],
                                                "description": "`palette: marka` iken `bg`, `surface`, `text` ve `accent` renklerinin dördü de `#rrggbb` biçiminde gerekir.",
                                                "additionalProperties": {
                                                    "type": "string",
                                                    "pattern": "^#[0-9a-fA-F]{6}$"
                                                }
                                            },
                                            "font": {
                                                "type": "string",
                                                "enum": [
                                                    "modern",
                                                    "klasik",
                                                    "guclu"
                                                ]
                                            },
                                            "currency": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ],
                                                "maxLength": 4,
                                                "example": "₺"
                                            },
                                            "format": {
                                                "type": "string",
                                                "enum": [
                                                    "png",
                                                    "webp"
                                                ]
                                            },
                                            "values": {
                                                "type": "object",
                                                "description": "Şablon alanlarının değerleri; alan anahtarları `GET /templates` yanıtında `fields` altındadır. Görsel alanlarına medya kütüphanesindeki hazır bir görselin ya da GIF'in kimliği verilir.",
                                                "additionalProperties": true
                                            }
                                        }
                                    },
                                    "playlist_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "description": "`file` gönderildiğinde, üretilen görselin ekleneceği playlist."
                                    }
                                }
                            }
                        },
                        "multipart/form-data": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "template_key",
                                    "name",
                                    "data"
                                ],
                                "properties": {
                                    "template_key": {
                                        "type": "string",
                                        "example": "menu-panosu"
                                    },
                                    "name": {
                                        "type": "string",
                                        "maxLength": 120,
                                        "example": "Kampanya afişi"
                                    },
                                    "data": {
                                        "type": "object",
                                        "description": "Şablon bilgileri. `multipart/form-data` gönderirken JSON metni olarak da verilebilir (en fazla 200.000 karakter). Eksik `values` alanları şablonun varsayılanlarıyla tamamlanır.",
                                        "properties": {
                                            "orientation": {
                                                "type": "string",
                                                "description": "Şablonun desteklediği yönlerden biri (`GET /templates`).",
                                                "example": "landscape"
                                            },
                                            "palette": {
                                                "type": "string",
                                                "enum": [
                                                    "gece",
                                                    "kahve",
                                                    "taze",
                                                    "mercan",
                                                    "okyanus",
                                                    "mono",
                                                    "marka"
                                                ]
                                            },
                                            "customPalette": {
                                                "type": [
                                                    "object",
                                                    "null"
                                                ],
                                                "description": "`palette: marka` iken `bg`, `surface`, `text` ve `accent` renklerinin dördü de `#rrggbb` biçiminde gerekir.",
                                                "additionalProperties": {
                                                    "type": "string",
                                                    "pattern": "^#[0-9a-fA-F]{6}$"
                                                }
                                            },
                                            "font": {
                                                "type": "string",
                                                "enum": [
                                                    "modern",
                                                    "klasik",
                                                    "guclu"
                                                ]
                                            },
                                            "currency": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ],
                                                "maxLength": 4,
                                                "example": "₺"
                                            },
                                            "format": {
                                                "type": "string",
                                                "enum": [
                                                    "png",
                                                    "webp"
                                                ]
                                            },
                                            "values": {
                                                "type": "object",
                                                "description": "Şablon alanlarının değerleri; alan anahtarları `GET /templates` yanıtında `fields` altındadır. Görsel alanlarına medya kütüphanesindeki hazır bir görselin ya da GIF'in kimliği verilir.",
                                                "additionalProperties": true
                                            }
                                        }
                                    },
                                    "playlist_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "description": "`file` gönderildiğinde, üretilen görselin ekleneceği playlist."
                                    },
                                    "file": {
                                        "type": "string",
                                        "format": "binary",
                                        "description": "Tasarımın üretilmiş görseli (PNG ya da WebP, en fazla 20 MB). Boyutu şablonun seçilen yönündeki ölçüsüyle birebir aynı olmalıdır; gönderilirse medya kütüphanesine yüklenir ve tasarıma bağlanır."
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Tasarım oluşturuldu",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/TemplateDesignDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/templates/designs/{id}": {
            "get": {
                "tags": [
                    "Şablonlar"
                ],
                "summary": "Şablon tasarımı ayrıntısı",
                "description": "Tasarımı `data` alanıyla birlikte döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Tasarım kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/TemplateDesignDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "put": {
                "tags": [
                    "Şablonlar"
                ],
                "summary": "Şablon tasarımını güncelle",
                "description": "Tasarımın adını ve bilgilerini değiştirir; şablon sonradan değiştirilemez. `file` gönderilirse tasarımın önceki görselinin yerine geçer. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Tasarım kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name",
                                    "data"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 120,
                                        "example": "Kampanya afişi"
                                    },
                                    "data": {
                                        "type": "object",
                                        "description": "Şablon bilgileri. `multipart/form-data` gönderirken JSON metni olarak da verilebilir (en fazla 200.000 karakter). Eksik `values` alanları şablonun varsayılanlarıyla tamamlanır.",
                                        "properties": {
                                            "orientation": {
                                                "type": "string",
                                                "description": "Şablonun desteklediği yönlerden biri (`GET /templates`).",
                                                "example": "landscape"
                                            },
                                            "palette": {
                                                "type": "string",
                                                "enum": [
                                                    "gece",
                                                    "kahve",
                                                    "taze",
                                                    "mercan",
                                                    "okyanus",
                                                    "mono",
                                                    "marka"
                                                ]
                                            },
                                            "customPalette": {
                                                "type": [
                                                    "object",
                                                    "null"
                                                ],
                                                "description": "`palette: marka` iken `bg`, `surface`, `text` ve `accent` renklerinin dördü de `#rrggbb` biçiminde gerekir.",
                                                "additionalProperties": {
                                                    "type": "string",
                                                    "pattern": "^#[0-9a-fA-F]{6}$"
                                                }
                                            },
                                            "font": {
                                                "type": "string",
                                                "enum": [
                                                    "modern",
                                                    "klasik",
                                                    "guclu"
                                                ]
                                            },
                                            "currency": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ],
                                                "maxLength": 4,
                                                "example": "₺"
                                            },
                                            "format": {
                                                "type": "string",
                                                "enum": [
                                                    "png",
                                                    "webp"
                                                ]
                                            },
                                            "values": {
                                                "type": "object",
                                                "description": "Şablon alanlarının değerleri; alan anahtarları `GET /templates` yanıtında `fields` altındadır. Görsel alanlarına medya kütüphanesindeki hazır bir görselin ya da GIF'in kimliği verilir.",
                                                "additionalProperties": true
                                            }
                                        }
                                    },
                                    "playlist_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "description": "`file` gönderildiğinde, üretilen görselin ekleneceği playlist."
                                    }
                                }
                            }
                        },
                        "multipart/form-data": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name",
                                    "data"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 120,
                                        "example": "Kampanya afişi"
                                    },
                                    "data": {
                                        "type": "object",
                                        "description": "Şablon bilgileri. `multipart/form-data` gönderirken JSON metni olarak da verilebilir (en fazla 200.000 karakter). Eksik `values` alanları şablonun varsayılanlarıyla tamamlanır.",
                                        "properties": {
                                            "orientation": {
                                                "type": "string",
                                                "description": "Şablonun desteklediği yönlerden biri (`GET /templates`).",
                                                "example": "landscape"
                                            },
                                            "palette": {
                                                "type": "string",
                                                "enum": [
                                                    "gece",
                                                    "kahve",
                                                    "taze",
                                                    "mercan",
                                                    "okyanus",
                                                    "mono",
                                                    "marka"
                                                ]
                                            },
                                            "customPalette": {
                                                "type": [
                                                    "object",
                                                    "null"
                                                ],
                                                "description": "`palette: marka` iken `bg`, `surface`, `text` ve `accent` renklerinin dördü de `#rrggbb` biçiminde gerekir.",
                                                "additionalProperties": {
                                                    "type": "string",
                                                    "pattern": "^#[0-9a-fA-F]{6}$"
                                                }
                                            },
                                            "font": {
                                                "type": "string",
                                                "enum": [
                                                    "modern",
                                                    "klasik",
                                                    "guclu"
                                                ]
                                            },
                                            "currency": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ],
                                                "maxLength": 4,
                                                "example": "₺"
                                            },
                                            "format": {
                                                "type": "string",
                                                "enum": [
                                                    "png",
                                                    "webp"
                                                ]
                                            },
                                            "values": {
                                                "type": "object",
                                                "description": "Şablon alanlarının değerleri; alan anahtarları `GET /templates` yanıtında `fields` altındadır. Görsel alanlarına medya kütüphanesindeki hazır bir görselin ya da GIF'in kimliği verilir.",
                                                "additionalProperties": true
                                            }
                                        }
                                    },
                                    "playlist_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "description": "`file` gönderildiğinde, üretilen görselin ekleneceği playlist."
                                    },
                                    "file": {
                                        "type": "string",
                                        "format": "binary",
                                        "description": "Tasarımın üretilmiş görseli (PNG ya da WebP, en fazla 20 MB). Boyutu şablonun seçilen yönündeki ölçüsüyle birebir aynı olmalıdır; gönderilirse medya kütüphanesine yüklenir ve tasarıma bağlanır."
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/TemplateDesignDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Şablonlar"
                ],
                "summary": "Şablon tasarımını sil",
                "description": "Tasarım kaydını siler. Tasarımdan üretilmiş medya kütüphanesindeki görsel silinmez. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Tasarım kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Tasarım silindi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Deleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/requests": {
            "get": {
                "tags": [
                    "İçerik talepleri"
                ],
                "summary": "Talepleri listele",
                "description": "Hesabın içerik değişikliği ve tasarım taleplerini en yeniden eskiye sayfalı döner. `summary`, aylık talep ve tasarım haklarının durumunu verir. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "description": "Talep durumu.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "received",
                                "in_progress",
                                "awaiting_approval",
                                "published",
                                "rejected"
                            ]
                        }
                    },
                    {
                        "name": "kind",
                        "in": "query",
                        "required": false,
                        "description": "Talep türü.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "change",
                                "design"
                            ]
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa numarası.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa başına kayıt (en fazla 100).",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/ContentRequest"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        },
                                        "summary": {
                                            "$ref": "#/components/schemas/RequestSummary"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "post": {
                "tags": [
                    "İçerik talepleri"
                ],
                "summary": "Talep oluştur",
                "description": "Yönetimli hizmet kapsamında içerik değişikliği ya da yeni tasarım talebi açar; `multipart/form-data` ile gönderilir. Hesapta yönetimli hizmet ya da kalan talep/tasarım hakkı yoksa `403` döner. Aylık talep hakkı dolduğunda `confirm_extra: true` gönderilmezse `422` döner. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "kind",
                                    "title"
                                ],
                                "properties": {
                                    "kind": {
                                        "type": "string",
                                        "enum": [
                                            "change",
                                            "design"
                                        ],
                                        "description": "`change`: mevcut içeriğin değiştirilmesi. `design`: yeni tasarım.",
                                        "example": "change"
                                    },
                                    "title": {
                                        "type": "string",
                                        "minLength": 3,
                                        "maxLength": 120,
                                        "example": "Hafta sonu kampanyası"
                                    },
                                    "note": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 2000,
                                        "description": "`design` talebinde zorunludur (en az 10 karakter)."
                                    },
                                    "screens": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "maxItems": 500,
                                        "description": "Hedef ekranlar. `screens` ve `groups` alanlarından en az biri gerekir."
                                    },
                                    "groups": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer"
                                        },
                                        "maxItems": 200,
                                        "description": "Hedef gruplar."
                                    },
                                    "starts_at": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "date",
                                        "description": "İstenen yayın başlangıcı; bugünden önce olamaz. `design` talebinde zorunludur."
                                    },
                                    "ends_at": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "date",
                                        "description": "Yayın bitişi (yalnız `change`)."
                                    },
                                    "orientation": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "enum": [
                                            "landscape",
                                            "portrait",
                                            "other",
                                            null
                                        ],
                                        "description": "`design` için zorunlu: `landscape` (1920×1080), `portrait` (1080×1920) ya da `other`."
                                    },
                                    "size": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 40,
                                        "description": "`orientation: other` iken zorunlu ölçü (ör. `1366×768`)."
                                    },
                                    "files": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "format": "binary"
                                        },
                                        "maxItems": 10,
                                        "description": "`change` için zorunlu en az bir dosya; `design` için isteğe bağlı referans dosyaları. Her dosya en fazla 500 MB. `change` biçimleri: jpg, jpeg, png, webp, gif, mp4, webm, mov. `design` biçimleri: jpg, jpeg, png, webp, gif, svg, pdf, mp4, webm, mov."
                                    },
                                    "confirm_extra": {
                                        "type": "boolean",
                                        "description": "Aylık talep hakkı dolmuşsa ek ücretli talebi onaylar; talep ek ücret olarak faturalanır."
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Talep alındı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ContentRequest"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Hesapta bu talep türü için hak yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/requests/{id}": {
            "get": {
                "tags": [
                    "İçerik talepleri"
                ],
                "summary": "Talep ayrıntısı",
                "description": "Talebi hedefleri, dosyaları ve durum geçmişiyle döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Talep kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ContentRequest"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/requests/{id}/approve": {
            "post": {
                "tags": [
                    "İçerik talepleri"
                ],
                "summary": "Tasarımı onayla",
                "description": "Onay bekleyen (`awaiting_approval`) bir tasarım talebini onaylar; talep yayına alınmak üzere `in_progress` durumuna geçer. Talep onay beklemiyorsa `422` döner. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Talep kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ContentRequest"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/requests/{id}/revision": {
            "post": {
                "tags": [
                    "İçerik talepleri"
                ],
                "summary": "Tasarım için revizyon iste",
                "description": "Onay bekleyen bir tasarım için değişiklik ister; talep `in_progress` durumuna döner ve bir revizyon hakkı düşer. Revizyon hakkı bittiyse ya da talep onay beklemiyorsa `422` döner. Gerekli yetki: `content:write`.",
                "x-ability": "content:write",
                "security": [
                    {
                        "bearerAuth": [
                            "content:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Talep kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "revision"
                                ],
                                "properties": {
                                    "revision": {
                                        "type": "string",
                                        "minLength": 5,
                                        "maxLength": 1000,
                                        "example": "Başlığı biraz daha büyük yapın."
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ContentRequest"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/price-boards": {
            "get": {
                "tags": [
                    "Fiyat panoları"
                ],
                "summary": "Fiyat panolarını listele",
                "description": "Fiyat panolarını son güncellemeye göre sayfalı döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa numarası.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa başına kayıt (en fazla 100).",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/PriceBoard"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "post": {
                "tags": [
                    "Fiyat panoları"
                ],
                "summary": "Fiyat panosu oluştur",
                "description": "Menü görseli ve ürünlere bağlı fiyat kutularıyla yeni pano oluşturur. Pano, kutulardaki `product_code` ürünlerinin güncel fiyatını gösterir. Boş pano için `boxes: []` gönderin. Gerekli yetki: `products:write`.",
                "x-ability": "products:write",
                "security": [
                    {
                        "bearerAuth": [
                            "products:write"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "name",
                                    "media_asset_id",
                                    "boxes"
                                ],
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 120,
                                        "example": "Burger menüsü"
                                    },
                                    "media_asset_id": {
                                        "type": "integer",
                                        "description": "Menü görseli: medya kütüphanesindeki hazır (`ready`) bir görsel (`image`). Görselin yönü panonun yönünü belirler.",
                                        "example": 14
                                    },
                                    "boxes": {
                                        "type": "array",
                                        "maxItems": 200,
                                        "description": "Görsel üzerindeki fiyat kutuları. Konum ve ölçüler görselin genişlik ve yüksekliğine oranla 0-1 arası verilir.",
                                        "items": {
                                            "$ref": "#/components/schemas/PriceBoardBox"
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Pano oluşturuldu",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PriceBoardDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/price-boards/{id}": {
            "get": {
                "tags": [
                    "Fiyat panoları"
                ],
                "summary": "Fiyat panosu ayrıntısı",
                "description": "Panoyu kutularıyla ve ekranda çizilecek hazır `payload` ile döner. `price_list` verilirse fiyatlar o fiyat listesinden çözülür. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Fiyat panosu kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "price_list",
                        "in": "query",
                        "required": false,
                        "description": "Fiyatların çözüleceği fiyat listesi (en fazla 40 karakter; harf, rakam, nokta, alt çizgi, tire).",
                        "schema": {
                            "type": "string",
                            "maxLength": 40
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PriceBoardDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "put": {
                "tags": [
                    "Fiyat panoları"
                ],
                "summary": "Fiyat panosunu güncelle",
                "description": "Gönderilen alanları değiştirir (`name`, `media_asset_id`, `boxes`); en az biri gerekir. Panoyu gösteren ekranlar bir sonraki eşitlemede yenilenir. Gerekli yetki: `products:write`.",
                "x-ability": "products:write",
                "security": [
                    {
                        "bearerAuth": [
                            "products:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Fiyat panosu kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 120,
                                        "example": "Burger menüsü"
                                    },
                                    "media_asset_id": {
                                        "type": "integer",
                                        "description": "Menü görseli: medya kütüphanesindeki hazır (`ready`) bir görsel (`image`). Görselin yönü panonun yönünü belirler.",
                                        "example": 14
                                    },
                                    "boxes": {
                                        "type": "array",
                                        "maxItems": 200,
                                        "description": "Görsel üzerindeki fiyat kutuları. Konum ve ölçüler görselin genişlik ve yüksekliğine oranla 0-1 arası verilir.",
                                        "items": {
                                            "$ref": "#/components/schemas/PriceBoardBox"
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PriceBoardDetail"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Fiyat panoları"
                ],
                "summary": "Fiyat panosunu sil",
                "description": "Panoyu siler; kullanılmayan pano widgetları da silinir. Panoyu gösteren ekranlar bir sonraki eşitlemede panoyu bırakır. Gerekli yetki: `products:write`.",
                "x-ability": "products:write",
                "security": [
                    {
                        "bearerAuth": [
                            "products:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Fiyat panosu kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Pano silindi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PriceBoardDeleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/price-boards/{id}/targets": {
            "get": {
                "tags": [
                    "Fiyat panoları"
                ],
                "summary": "Panonun gönderilebileceği hedefleri listele",
                "description": "Panonun gönderilebileceği playlistleri, ekranları ve grupları; panonun hangilerinde zaten bulunduğunu (`has_board`) belirterek döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Fiyat panosu kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PriceBoardTargets"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/price-boards/{id}/send": {
            "post": {
                "tags": [
                    "Fiyat panoları"
                ],
                "summary": "Panoyu hedefe gönder",
                "description": "Panoyu bir playlistin sonuna, bir ekranın içeriğine ya da bir grubun tüm ekranlarına ekler. Pano hedefte zaten varsa `added: false` döner. `detach_playlist` ekran ya da grup hedefinde ekranın playlist atamasını kaldırıp yalnız panoyu gösterir. Panonun menü görseli hazır değilse `422` döner. Gerekli yetki: `products:write`.",
                "x-ability": "products:write",
                "security": [
                    {
                        "bearerAuth": [
                            "products:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "Fiyat panosu kimliği",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "target"
                                ],
                                "properties": {
                                    "target": {
                                        "type": "string",
                                        "enum": [
                                            "playlist",
                                            "screen",
                                            "group"
                                        ],
                                        "example": "screen"
                                    },
                                    "playlist_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "description": "`target: playlist` iken zorunlu."
                                    },
                                    "screen_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "description": "`target: screen` iken zorunlu. `device_id` adıyla da gönderilebilir."
                                    },
                                    "group_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "description": "`target: group` iken zorunlu."
                                    },
                                    "duration_seconds": {
                                        "type": "integer",
                                        "minimum": 5,
                                        "maximum": 86400,
                                        "default": 30
                                    },
                                    "detach_playlist": {
                                        "type": "boolean",
                                        "default": false
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/PriceBoardSent"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/products": {
            "get": {
                "tags": [
                    "Ürünler"
                ],
                "summary": "Ürünleri listele",
                "description": "Ürün kataloğunu koda göre sıralı ve sayfalı döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "q",
                        "in": "query",
                        "required": false,
                        "description": "Kodda ya da adda arar.",
                        "schema": {
                            "type": "string",
                            "maxLength": 120
                        }
                    },
                    {
                        "name": "category",
                        "in": "query",
                        "required": false,
                        "description": "Yalnız bu kategorideki ürünler.",
                        "schema": {
                            "type": "string",
                            "maxLength": 120
                        }
                    },
                    {
                        "name": "active",
                        "in": "query",
                        "required": false,
                        "description": "Aktif ya da pasif ürünler.",
                        "schema": {
                            "type": "boolean"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa numarası.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa başına kayıt (en fazla 100).",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Product"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "put": {
                "tags": [
                    "Ürünler"
                ],
                "summary": "Ürünleri toplu ekle ya da güncelle",
                "description": "Gönderilen ürünleri koda göre eşleştirir: olmayanı ekler, değişeni günceller, aynı olanı atlar. Tek seferde en fazla 1000 ürün. Gövde bir dizi ya da `{\"products\": [...]}` olabilir. Her fiyat değişimi fiyat geçmişine `api` kaynağıyla yazılır ve `products.prices_changed` webhook'u gönderilir; bu ürünleri gösteren ekranlar bir sonraki eşitlemede yeni fiyatı alır. Hatalı bir öğe varsa hiçbir değişiklik yapılmaz ve `422` döner (`errors` anahtarları `0.price` gibi öğe sırasını gösterir). Yeni ürün eklendiyse `201`, yoksa `200` döner. Gerekli yetki: `products:write`.",
                "x-ability": "products:write",
                "security": [
                    {
                        "bearerAuth": [
                            "products:write"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "array",
                                "maxItems": 1000,
                                "items": {
                                    "type": "object",
                                    "required": [
                                        "code",
                                        "price"
                                    ],
                                    "properties": {
                                        "code": {
                                            "type": "string",
                                            "maxLength": 64,
                                            "description": "Ürün kodu (POS kodu). Harf, rakam, boşluk, nokta, tire ve alt çizgi; büyük/küçük harf ayrımı yapılmaz.",
                                            "example": "BURGER-01"
                                        },
                                        "name": {
                                            "type": "string",
                                            "maxLength": 190,
                                            "description": "Yeni ürünler için zorunlu; mevcut ürünlerde gönderilmezse ad değişmez.",
                                            "example": "Çıtır Tavuk Burger"
                                        },
                                        "price": {
                                            "type": [
                                                "number",
                                                "string"
                                            ],
                                            "minimum": 0,
                                            "description": "Sayı (`189.9`) ya da metin (`\"189,90\"`). En fazla 2 ondalık basamak; fazlası yuvarlanır.",
                                            "example": 189.9
                                        },
                                        "currency": {
                                            "type": "string",
                                            "enum": [
                                                "TRY",
                                                "USD",
                                                "EUR"
                                            ],
                                            "description": "Gönderilmezse yeni ürünlerde hesabın varsayılan para birimi (TRY) kullanılır. `TL` de kabul edilir."
                                        },
                                        "category": {
                                            "type": [
                                                "string",
                                                "null"
                                            ],
                                            "maxLength": 120,
                                            "example": "Burgerler"
                                        },
                                        "is_active": {
                                            "type": "boolean",
                                            "description": "`false` olan ürün panolarda \"Tükendi\" yazılır ya da gizlenir.",
                                            "example": true
                                        },
                                        "price_list": {
                                            "type": [
                                                "string",
                                                "null"
                                            ],
                                            "maxLength": 40,
                                            "description": "İsteğe bağlı fiyat listesi (ör. şube fiyat tipi `PREMIUM`). Verilirse fiyat o listeye yazılır ve o listeyi kullanan ekranlarda görünür; verilmezse katalog fiyatı güncellenir. Harf, rakam, nokta, alt çizgi, tire.",
                                            "example": "PREMIUM"
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ProductUpsert"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "201": {
                        "description": "En az bir yeni ürün eklendi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ProductUpsert"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/products/adjust": {
            "post": {
                "tags": [
                    "Ürünler"
                ],
                "summary": "Toplu fiyat ayarı (zam ya da indirim)",
                "description": "Kataloğun tamamına, bir kategoriye ya da kategorisiz ürünlere yüzde olarak zam (pozitif) ya da indirim (negatif) uygular. `rounding` ile sonuç yuvarlanır (`0.10`, `0.50`, `1`, `5`, `10`; `none` yuvarlamaz). `dry_run: true` ile değişiklik yapmadan önizleme alınır. Yanıttaki `changes` listesi en fazla 300 ürün içerir; fazlası için `changes_truncated: true` döner. Uygulanan değişiklikler fiyat geçmişine yazılır ve `products.prices_changed` webhook'u gönderilir. Gerekli yetki: `products:write`.",
                "x-ability": "products:write",
                "security": [
                    {
                        "bearerAuth": [
                            "products:write"
                        ]
                    }
                ],
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "required": [
                                    "percent"
                                ],
                                "properties": {
                                    "percent": {
                                        "type": "number",
                                        "minimum": -90,
                                        "maximum": 500,
                                        "description": "Sıfır olamaz. Zam için pozitif, indirim için negatif.",
                                        "example": 10
                                    },
                                    "scope": {
                                        "type": "string",
                                        "enum": [
                                            "all",
                                            "category",
                                            "uncategorized"
                                        ],
                                        "description": "Gönderilmezse `category` verilmişse `category`, verilmemişse `all` kullanılır.",
                                        "example": "category"
                                    },
                                    "category": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 120,
                                        "description": "`scope: category` iken zorunlu.",
                                        "example": "Burgerler"
                                    },
                                    "rounding": {
                                        "type": "string",
                                        "enum": [
                                            "none",
                                            "0.10",
                                            "0.50",
                                            1,
                                            5,
                                            10
                                        ],
                                        "default": "none"
                                    },
                                    "dry_run": {
                                        "type": "boolean",
                                        "default": false
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ProductAdjust"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/products/{code}": {
            "get": {
                "tags": [
                    "Ürünler"
                ],
                "summary": "Ürün ayrıntısı",
                "description": "Tek bir ürünü döner. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "code",
                        "in": "path",
                        "required": true,
                        "description": "Ürün kodu (URL kodlamasıyla)",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Product"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "patch": {
                "tags": [
                    "Ürünler"
                ],
                "summary": "Ürünü güncelle",
                "description": "Yalnız gönderilen alanları değiştirir (`name`, `price`, `currency`, `category`, `is_active`). `price_list` ile birlikte gönderilen `price` yalnız o listenin fiyatını değiştirir. Gerekli yetki: `products:write`.",
                "x-ability": "products:write",
                "security": [
                    {
                        "bearerAuth": [
                            "products:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "code",
                        "in": "path",
                        "required": true,
                        "description": "Ürün kodu (URL kodlamasıyla)",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "maxLength": 190,
                                        "description": "Yeni ürünler için zorunlu; mevcut ürünlerde gönderilmezse ad değişmez.",
                                        "example": "Çıtır Tavuk Burger"
                                    },
                                    "price": {
                                        "type": [
                                            "number",
                                            "string"
                                        ],
                                        "minimum": 0,
                                        "description": "Sayı (`189.9`) ya da metin (`\"189,90\"`). En fazla 2 ondalık basamak; fazlası yuvarlanır.",
                                        "example": 189.9
                                    },
                                    "currency": {
                                        "type": "string",
                                        "enum": [
                                            "TRY",
                                            "USD",
                                            "EUR"
                                        ],
                                        "description": "Gönderilmezse yeni ürünlerde hesabın varsayılan para birimi (TRY) kullanılır. `TL` de kabul edilir."
                                    },
                                    "category": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 120,
                                        "example": "Burgerler"
                                    },
                                    "is_active": {
                                        "type": "boolean",
                                        "description": "`false` olan ürün panolarda \"Tükendi\" yazılır ya da gizlenir.",
                                        "example": true
                                    },
                                    "price_list": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 40,
                                        "description": "İsteğe bağlı fiyat listesi (ör. şube fiyat tipi `PREMIUM`). Verilirse fiyat o listeye yazılır ve o listeyi kullanan ekranlarda görünür; verilmezse katalog fiyatı güncellenir. Harf, rakam, nokta, alt çizgi, tire.",
                                        "example": "PREMIUM"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/Product"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            },
            "delete": {
                "tags": [
                    "Ürünler"
                ],
                "summary": "Ürünü sil",
                "description": "Ürünü ve fiyat geçmişini siler. Bu ürüne bağlı pano kutuları ekranda gizlenir. Gerekli yetki: `products:write`.",
                "x-ability": "products:write",
                "security": [
                    {
                        "bearerAuth": [
                            "products:write"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "code",
                        "in": "path",
                        "required": true,
                        "description": "Ürün kodu (URL kodlamasıyla)",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ürün silindi",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ProductDeleted"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "402": {
                        "description": "Abonelik aktif değil",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/products/{code}/history": {
            "get": {
                "tags": [
                    "Ürünler"
                ],
                "summary": "Ürün fiyat geçmişi",
                "description": "Ürünün fiyat değişikliklerini en yeniden eskiye sayfalı döner. `source`: `manual`, `csv`, `api` ya da `poscube`; `price_list` boşsa katalog fiyatıdır. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "code",
                        "in": "path",
                        "required": true,
                        "description": "Ürün kodu (URL kodlamasıyla)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa numarası.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa başına kayıt (en fazla 100).",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/ProductPriceChange"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "404": {
                        "description": "Kayıt bulunamadı (başka hesaba ait kayıtlar da 404 döner)",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/reports/playbacks": {
            "get": {
                "tags": [
                    "Raporlar"
                ],
                "summary": "Oynatma kayıtları",
                "description": "Ekranların oynattığı içeriklerin kayıtlarını, en yeniden eskiye sayfalı döner. Tarihler hesabınızın saat dilimine göre yorumlanır; aralık en fazla 92 gün olabilir. Varsayılan: son 7 gün. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Başlangıç günü (YYYY-AA-GG).",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Bitiş günü (YYYY-AA-GG), bu gün dahil.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "screen_id",
                        "in": "query",
                        "required": false,
                        "description": "Yalnız bu ekranın kayıtları.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa numarası.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "description": "Sayfa başına kayıt (en fazla 100).",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 25
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Başarılı",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Playback"
                                            }
                                        },
                                        "meta": {
                                            "$ref": "#/components/schemas/PageMeta"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/reports/playbacks/export": {
            "get": {
                "tags": [
                    "Raporlar"
                ],
                "summary": "Oynatma kayıtlarını CSV olarak indir",
                "description": "Aynı kayıtları sayfalamadan, noktalı virgülle ayrılmış UTF-8 CSV dosyası olarak indirir. Sütunlar: tarih, saat, ekran, içerik, süre (saniye), durum. Saat dilimi hesabınızınkidir; aralık en fazla 92 gündür. Silinmiş ekran ve içerikler adlarının yanında belirtilir. Gerekli yetki: `read`.",
                "x-ability": "read",
                "security": [
                    {
                        "bearerAuth": [
                            "read"
                        ]
                    }
                ],
                "parameters": [
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Başlangıç günü (YYYY-AA-GG).",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Bitiş günü (YYYY-AA-GG), bu gün dahil.",
                        "schema": {
                            "type": "string",
                            "format": "date"
                        }
                    },
                    {
                        "name": "screen_id",
                        "in": "query",
                        "required": false,
                        "description": "Yalnız bu ekranın kayıtları.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "lang",
                        "in": "query",
                        "required": false,
                        "description": "Sütun başlıklarının ve durum metinlerinin dili.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "tr",
                                "en"
                            ],
                            "default": "tr"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "CSV dosyası",
                        "headers": {
                            "Content-Disposition": {
                                "schema": {
                                    "type": "string"
                                },
                                "description": "attachment; filename=...csv"
                            }
                        },
                        "content": {
                            "text/csv": {
                                "schema": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Anahtar eksik, geçersiz, iptal edilmiş ya da süresi dolmuş",
                        "$ref": "#/components/responses/Error"
                    },
                    "403": {
                        "description": "Anahtarın bu işlem için yetkisi yok",
                        "$ref": "#/components/responses/Error"
                    },
                    "422": {
                        "description": "Doğrulama hatası",
                        "$ref": "#/components/responses/Error"
                    },
                    "429": {
                        "description": "İstek sınırı aşıldı (`Retry-After` başlığına bakın)",
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "scheme": "bearer",
                "description": "Panelden oluşturduğunuz anahtar: `oc_live_...`"
            }
        },
        "responses": {
            "Error": {
                "description": "Hata",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            }
        },
        "schemas": {
            "Error": {
                "type": "object",
                "required": [
                    "message"
                ],
                "properties": {
                    "message": {
                        "type": "string",
                        "example": "Ekran bulunamadı."
                    },
                    "errors": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "PageMeta": {
                "type": "object",
                "properties": {
                    "page": {
                        "type": "integer"
                    },
                    "per_page": {
                        "type": "integer"
                    },
                    "total": {
                        "type": "integer"
                    },
                    "last_page": {
                        "type": "integer"
                    }
                }
            },
            "Screen": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "example": 12
                    },
                    "uuid": {
                        "type": "string",
                        "format": "uuid"
                    },
                    "name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Lobi Ekranı"
                    },
                    "status": {
                        "type": "string",
                        "enum": [
                            "online",
                            "offline"
                        ]
                    },
                    "platform": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "model": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "os_version": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "enrolled_via": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Ekranın hesaba nasıl eklendiği."
                    },
                    "orientation": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "resolution": {
                        "type": "object",
                        "properties": {
                            "width": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "height": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            }
                        }
                    },
                    "timezone": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "app_version": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "last_seen_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "paired_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "groups": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "integer"
                                },
                                "name": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "current_media": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "description": "Ekranın son sinyalde bildirdiği medya.",
                        "properties": {
                            "id": {
                                "type": "integer"
                            },
                            "name": {
                                "type": "string"
                            },
                            "type": {
                                "type": "string"
                            }
                        }
                    },
                    "current_widget": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "description": "Ekranın son sinyalde bildirdiği widget.",
                        "properties": {
                            "id": {
                                "type": "integer"
                            },
                            "name": {
                                "type": "string"
                            },
                            "type": {
                                "type": "string",
                                "example": "widget"
                            },
                            "widget_type": {
                                "type": "string"
                            }
                        }
                    },
                    "network": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "description": "Ekranın bağlı olduğu ağ; ağ bilinmiyorsa `null`.",
                        "properties": {
                            "key": {
                                "type": "string"
                            },
                            "label": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "name": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "screen_count": {
                                "type": "integer"
                            }
                        }
                    },
                    "playlist": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "description": "Ekranın oynattığı playlist. `source`: `screen` (ekrana atanmış) ya da `group` (gruptan devralınan).",
                        "properties": {
                            "id": {
                                "type": "integer"
                            },
                            "name": {
                                "type": "string"
                            },
                            "source": {
                                "type": "string",
                                "enum": [
                                    "screen",
                                    "group"
                                ]
                            }
                        }
                    },
                    "group_playlist": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "description": "Ekranın gruptan devraldığı playlist.",
                        "properties": {
                            "group": {
                                "type": "string"
                            },
                            "playlist": {
                                "type": "string"
                            },
                            "group_id": {
                                "type": "integer"
                            },
                            "playlist_id": {
                                "type": "integer"
                            }
                        }
                    },
                    "unassigned": {
                        "type": "boolean",
                        "description": "Hiçbir gruba, playlist atamasına ya da içeriğe bağlı olmayan ekran."
                    },
                    "price_list": {
                        "type": "object",
                        "properties": {
                            "branch_id": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "price_list": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        },
                        "description": "Ekrana atanmış fiyat listesi ayarı."
                    }
                }
            },
            "ScreenDetail": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/Screen"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "manifest_version": {
                                "type": "integer"
                            },
                            "service_state": {
                                "type": "string",
                                "enum": [
                                    "active",
                                    "trial",
                                    "expired",
                                    "suspended"
                                ]
                            },
                            "playing": {
                                "type": "object",
                                "properties": {
                                    "reported_media": {
                                        "type": [
                                            "object",
                                            "null"
                                        ]
                                    },
                                    "reported_widget": {
                                        "type": [
                                            "object",
                                            "null"
                                        ]
                                    },
                                    "items": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "media_id": {
                                                    "type": [
                                                        "integer",
                                                        "null"
                                                    ]
                                                },
                                                "name": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ]
                                                },
                                                "type": {
                                                    "type": "string"
                                                },
                                                "duration_seconds": {
                                                    "type": "number"
                                                }
                                            }
                                        }
                                    }
                                }
                            },
                            "assignment": {
                                "type": "object",
                                "properties": {
                                    "source": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "enum": [
                                            "schedule",
                                            "screen_playlist",
                                            "group_playlist",
                                            "screen_contents",
                                            null
                                        ]
                                    },
                                    "screen_playlist": {
                                        "type": [
                                            "object",
                                            "null"
                                        ],
                                        "properties": {
                                            "id": {
                                                "type": "integer"
                                            },
                                            "name": {
                                                "type": "string"
                                            }
                                        }
                                    },
                                    "group_playlist": {
                                        "type": [
                                            "object",
                                            "null"
                                        ],
                                        "properties": {
                                            "group": {
                                                "type": "string"
                                            },
                                            "playlist": {
                                                "type": "string"
                                            },
                                            "group_id": {
                                                "type": "integer"
                                            },
                                            "playlist_id": {
                                                "type": "integer"
                                            }
                                        }
                                    },
                                    "screen_contents_count": {
                                        "type": "integer"
                                    },
                                    "schedules": {
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/components/schemas/ScheduleRule"
                                        }
                                    }
                                }
                            }
                        }
                    }
                ]
            },
            "Command": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "screen_id": {
                        "type": "integer"
                    },
                    "command": {
                        "type": "string"
                    },
                    "payload": {
                        "type": [
                            "object",
                            "null"
                        ]
                    },
                    "status": {
                        "type": "string",
                        "example": "pending"
                    },
                    "expires_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                }
            },
            "BulkCommand": {
                "type": "object",
                "properties": {
                    "command": {
                        "type": "string"
                    },
                    "payload": {
                        "type": [
                            "object",
                            "null"
                        ]
                    },
                    "sent": {
                        "type": "integer",
                        "example": 5
                    },
                    "offline": {
                        "type": "integer",
                        "description": "Komut gönderilen çevrimdışı ekran sayısı; bu ekranlar çevrimiçi olunca komutu alır (5 dakika içinde)."
                    },
                    "commands": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "integer"
                                },
                                "screen_id": {
                                    "type": "integer"
                                },
                                "status": {
                                    "type": "string",
                                    "example": "pending"
                                },
                                "expires_at": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "format": "date-time"
                                }
                            }
                        }
                    }
                }
            },
            "ScreensDeleted": {
                "type": "object",
                "properties": {
                    "deleted": {
                        "type": "integer",
                        "example": 3
                    },
                    "ids": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        }
                    }
                }
            },
            "ScreensGrouped": {
                "type": "object",
                "properties": {
                    "group_id": {
                        "type": "integer"
                    },
                    "added": {
                        "type": "integer"
                    },
                    "already_members": {
                        "type": "integer"
                    },
                    "screen_ids": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        }
                    }
                }
            },
            "ScheduleRule": {
                "type": "object",
                "properties": {
                    "assignment_id": {
                        "type": "integer"
                    },
                    "playlist_id": {
                        "type": "integer"
                    },
                    "playlist_name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "days": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "enum": [
                                "mon",
                                "tue",
                                "wed",
                                "thu",
                                "fri",
                                "sat",
                                "sun"
                            ]
                        }
                    },
                    "start_time": {
                        "type": "string",
                        "example": "09:00"
                    },
                    "end_time": {
                        "type": "string",
                        "example": "18:00"
                    },
                    "active_now": {
                        "type": "boolean"
                    }
                }
            },
            "ScreenSchedule": {
                "type": "object",
                "properties": {
                    "assignment_id": {
                        "type": "integer"
                    },
                    "screen_id": {
                        "type": "integer"
                    },
                    "playlist_id": {
                        "type": "integer"
                    },
                    "playlist_name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "days": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "enum": [
                                "mon",
                                "tue",
                                "wed",
                                "thu",
                                "fri",
                                "sat",
                                "sun"
                            ]
                        }
                    },
                    "start_time": {
                        "type": "string",
                        "example": "09:00"
                    },
                    "end_time": {
                        "type": "string",
                        "example": "18:00"
                    }
                }
            },
            "ScheduleDeleted": {
                "type": "object",
                "properties": {
                    "assignment_id": {
                        "type": "integer"
                    },
                    "screen_id": {
                        "type": "integer"
                    },
                    "deleted": {
                        "type": "boolean",
                        "example": true
                    }
                }
            },
            "CopyContent": {
                "type": "object",
                "properties": {
                    "source_screen_id": {
                        "type": "integer"
                    },
                    "source": {
                        "type": "string",
                        "enum": [
                            "content",
                            "playlist"
                        ]
                    },
                    "updated": {
                        "type": "integer",
                        "description": "İçeriğin yazıldığı ekran sayısı."
                    },
                    "screen_ids": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        }
                    },
                    "playlist_id": {
                        "type": "integer",
                        "description": "Yalnız `source: playlist` iken: hedeflere atanan playlist."
                    },
                    "items_count": {
                        "type": "integer",
                        "description": "Yalnız `source: content` iken: kopyalanan içerik öğesi sayısı."
                    }
                }
            },
            "ScreenPriceList": {
                "type": "object",
                "properties": {
                    "screen_id": {
                        "type": "integer"
                    },
                    "price_list": {
                        "type": "object",
                        "properties": {
                            "branch_id": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "price_list": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        }
                    }
                }
            },
            "DistributionPreview": {
                "type": "object",
                "properties": {
                    "dry_run": {
                        "type": "boolean",
                        "example": true
                    },
                    "mode": {
                        "type": "string",
                        "enum": [
                            "sequential",
                            "split"
                        ]
                    },
                    "screens_count": {
                        "type": "integer"
                    },
                    "pool_count": {
                        "type": "integer",
                        "description": "Dağıtılacak toplam içerik sayısı."
                    },
                    "few_items": {
                        "type": "boolean",
                        "description": "İçerik, ekran sayısından az olduğu için bazı ekranlarda tekrar edecekse `true`."
                    },
                    "replaces": {
                        "type": "integer",
                        "description": "Mevcut playlist atamasının değişeceği ekran sayısı."
                    },
                    "inherited": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "description": "Ekranların gruptan devraldığı bir playlist varsa örneği.",
                        "properties": {
                            "count": {
                                "type": "integer"
                            },
                            "group": {
                                "type": "string"
                            },
                            "playlist": {
                                "type": "string"
                            }
                        }
                    },
                    "slots": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "screen_id": {
                                    "type": "integer"
                                },
                                "screen_name": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                },
                                "playlist_name": {
                                    "type": "string"
                                },
                                "items_count": {
                                    "type": "integer"
                                },
                                "repeated": {
                                    "type": "boolean"
                                },
                                "thumbnails": {
                                    "type": "array",
                                    "items": {
                                        "type": "object",
                                        "properties": {
                                            "name": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ]
                                            },
                                            "type": {
                                                "type": "string"
                                            },
                                            "thumbnail_url": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ],
                                                "format": "uri"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "DistributionResult": {
                "type": "object",
                "properties": {
                    "dry_run": {
                        "type": "boolean",
                        "example": false
                    },
                    "mode": {
                        "type": "string",
                        "enum": [
                            "sequential",
                            "split"
                        ]
                    },
                    "screens": {
                        "type": "integer"
                    },
                    "created": {
                        "type": "integer",
                        "description": "Oluşturulan otomatik playlist sayısı."
                    },
                    "updated": {
                        "type": "integer",
                        "description": "Güncellenen otomatik playlist sayısı."
                    },
                    "deleted": {
                        "type": "integer",
                        "description": "Artık kullanılmadığı için silinen otomatik playlist sayısı."
                    },
                    "assignments": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "screen_id": {
                                    "type": "integer"
                                },
                                "playlist_id": {
                                    "type": "integer"
                                },
                                "playlist_name": {
                                    "type": "string"
                                }
                            }
                        }
                    }
                }
            },
            "Network": {
                "type": "object",
                "properties": {
                    "key": {
                        "type": "string",
                        "example": "3f9a1c0be27d4a58"
                    },
                    "label": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Verdiğiniz ağ adı."
                    },
                    "screen_count": {
                        "type": "integer"
                    },
                    "screens": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "integer"
                                },
                                "name": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                }
                            }
                        }
                    }
                }
            },
            "Deleted": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "deleted": {
                        "type": "boolean",
                        "example": true
                    }
                }
            },
            "Assigned": {
                "type": "object",
                "properties": {
                    "updated": {
                        "type": "integer",
                        "example": 2
                    },
                    "playlist_id": {
                        "type": "integer"
                    }
                }
            },
            "Media": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "original_name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "type": {
                        "type": "string",
                        "enum": [
                            "image",
                            "video",
                            "gif"
                        ]
                    },
                    "status": {
                        "type": "string",
                        "enum": [
                            "processing",
                            "ready",
                            "failed"
                        ]
                    },
                    "mime_type": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "url": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri"
                    },
                    "thumbnail_url": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uri"
                    },
                    "duration_seconds": {
                        "type": [
                            "number",
                            "null"
                        ]
                    },
                    "width": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "height": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "file_size": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                }
            },
            "MediaBulkDeleted": {
                "type": "object",
                "properties": {
                    "deleted": {
                        "type": "integer"
                    },
                    "skipped_in_use": {
                        "type": "integer",
                        "description": "Kullanımda olduğu için silinmeyen medya sayısı."
                    },
                    "not_found": {
                        "type": "integer"
                    },
                    "removed": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "integer"
                                },
                                "name": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                }
                            }
                        }
                    }
                }
            },
            "Playlist": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "items_count": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "total_duration_seconds": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "version": {
                        "type": "integer"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "auto": {
                        "type": "boolean",
                        "description": "Dağıtım ile otomatik oluşturulmuş playlist."
                    },
                    "distribution_slot": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "description": "Otomatik playlistin dağıtımdaki sırası."
                    }
                }
            },
            "PlaylistDetail": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/Playlist"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "items": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "item_id": {
                                            "type": "integer"
                                        },
                                        "position": {
                                            "type": "integer"
                                        },
                                        "media_id": {
                                            "type": [
                                                "integer",
                                                "null"
                                            ]
                                        },
                                        "widget_id": {
                                            "type": [
                                                "integer",
                                                "null"
                                            ]
                                        },
                                        "widget_type": {
                                            "type": [
                                                "string",
                                                "null"
                                            ]
                                        },
                                        "name": {
                                            "type": [
                                                "string",
                                                "null"
                                            ]
                                        },
                                        "type": {
                                            "type": [
                                                "string",
                                                "null"
                                            ],
                                            "description": "image, video, gif ya da widget."
                                        },
                                        "duration_seconds": {
                                            "type": "integer"
                                        },
                                        "video_full_length": {
                                            "type": "boolean"
                                        }
                                    }
                                }
                            }
                        }
                    }
                ]
            },
            "Group": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "parent_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "screens_count": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "playlist_id": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "description": "Gruba atanmış varsayılan playlist."
                    }
                }
            },
            "GroupDetail": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/Group"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "parent": {
                                "type": [
                                    "object",
                                    "null"
                                ],
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    },
                                    "name": {
                                        "type": "string"
                                    }
                                }
                            },
                            "children": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "id": {
                                            "type": "integer"
                                        },
                                        "name": {
                                            "type": "string"
                                        },
                                        "screens_count": {
                                            "type": "integer"
                                        }
                                    }
                                }
                            },
                            "playlist": {
                                "type": [
                                    "object",
                                    "null"
                                ],
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    },
                                    "name": {
                                        "type": "string"
                                    }
                                }
                            },
                            "price_list": {
                                "type": "object",
                                "properties": {
                                    "branch_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ]
                                    },
                                    "price_list": {
                                        "type": [
                                            "string",
                                            "null"
                                        ]
                                    },
                                    "effective": {
                                        "type": [
                                            "object",
                                            "null"
                                        ],
                                        "description": "Grubun kendi ayarından çözülen fiyat listesi.",
                                        "properties": {
                                            "price_list": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ]
                                            },
                                            "branch_id": {
                                                "type": [
                                                    "integer",
                                                    "null"
                                                ]
                                            },
                                            "branch": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ]
                                            }
                                        }
                                    },
                                    "inherited": {
                                        "type": "object",
                                        "description": "Grubun kendi ayarı yoksa üst düzeyden devraldığı fiyat listesi.",
                                        "properties": {
                                            "price_list": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ]
                                            },
                                            "branch_id": {
                                                "type": [
                                                    "integer",
                                                    "null"
                                                ]
                                            },
                                            "branch": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ]
                                            },
                                            "source": {
                                                "type": "string",
                                                "enum": [
                                                    "group",
                                                    "organization",
                                                    "default"
                                                ]
                                            },
                                            "group": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ]
                                            }
                                        }
                                    }
                                }
                            },
                            "screens": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "id": {
                                            "type": "integer"
                                        },
                                        "name": {
                                            "type": [
                                                "string",
                                                "null"
                                            ]
                                        },
                                        "status": {
                                            "type": "string",
                                            "enum": [
                                                "online",
                                                "offline"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                ]
            },
            "GroupDeleted": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "deleted": {
                        "type": "boolean",
                        "example": true
                    },
                    "released_screens": {
                        "type": "integer",
                        "description": "Gruptan çıkan ekran sayısı."
                    }
                }
            },
            "GroupMembersResult": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/GroupDetail"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "added": {
                                "type": "integer"
                            },
                            "already_members": {
                                "type": "integer"
                            }
                        }
                    }
                ]
            },
            "GroupMemberRemoved": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/GroupDetail"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "removed_screen_id": {
                                "type": "integer"
                            }
                        }
                    }
                ]
            },
            "WidgetType": {
                "type": "object",
                "properties": {
                    "type": {
                        "type": "string",
                        "enum": [
                            "clock",
                            "weather",
                            "currency",
                            "ticker",
                            "web",
                            "rss",
                            "youtube",
                            "price_board"
                        ]
                    },
                    "label": {
                        "type": "string"
                    },
                    "default_duration_seconds": {
                        "type": "integer"
                    },
                    "has_live_data": {
                        "type": "boolean",
                        "description": "Canlı veri çeken widget (hava durumu, kur, RSS, fiyat panosu)."
                    },
                    "needs_network": {
                        "type": "boolean",
                        "description": "Ekranın internete bağlı olmasını gerektirir."
                    },
                    "required_feature": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Hesabın planında bulunması gereken özellik."
                    },
                    "fields": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "key": {
                                    "type": "string"
                                },
                                "type": {
                                    "type": "string",
                                    "description": "string, boolean, integer, number, enum, array, url ya da hex_color."
                                },
                                "required": {
                                    "type": "boolean"
                                },
                                "description": {
                                    "type": "string"
                                },
                                "options": {
                                    "type": "array",
                                    "items": {
                                        "type": "string"
                                    }
                                },
                                "min": {
                                    "type": "number"
                                },
                                "max": {
                                    "type": "number"
                                },
                                "default": []
                            }
                        }
                    },
                    "defaults": {
                        "type": "object",
                        "additionalProperties": true
                    }
                }
            },
            "Widget": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "type": {
                        "type": "string",
                        "enum": [
                            "clock",
                            "weather",
                            "currency",
                            "ticker",
                            "web",
                            "rss",
                            "youtube",
                            "price_board"
                        ]
                    },
                    "type_label": {
                        "type": "string"
                    },
                    "config": {
                        "type": "object",
                        "additionalProperties": true
                    },
                    "default_duration_seconds": {
                        "type": "integer"
                    },
                    "is_band": {
                        "type": "boolean",
                        "description": "Ekranın altında şerit olarak gösterilen widget."
                    },
                    "usage": {
                        "type": "object",
                        "properties": {
                            "playlists": {
                                "type": "integer"
                            },
                            "screens": {
                                "type": "integer"
                            }
                        }
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                }
            },
            "Template": {
                "type": "object",
                "properties": {
                    "key": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "category": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "default_palette": {
                        "type": "string"
                    },
                    "default_font": {
                        "type": "string"
                    },
                    "orientations": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "orientation": {
                                    "type": "string"
                                },
                                "width": {
                                    "type": "integer"
                                },
                                "height": {
                                    "type": "integer"
                                }
                            }
                        }
                    },
                    "fields": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "key": {
                                    "type": "string"
                                },
                                "type": {
                                    "type": "string"
                                },
                                "label": {
                                    "type": "string"
                                },
                                "help": {
                                    "type": "string"
                                },
                                "max": {
                                    "type": "integer"
                                },
                                "min": {
                                    "type": "integer"
                                },
                                "item_label": {
                                    "type": "string"
                                },
                                "item_fields": {
                                    "type": "array",
                                    "items": {
                                        "type": "object",
                                        "additionalProperties": true
                                    }
                                },
                                "default": []
                            }
                        }
                    }
                }
            },
            "TemplateDesign": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "template_key": {
                        "type": "string"
                    },
                    "template_name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "orientation": {
                        "type": "string"
                    },
                    "has_media": {
                        "type": "boolean"
                    },
                    "media": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "properties": {
                            "id": {
                                "type": "integer"
                            },
                            "name": {
                                "type": "string"
                            },
                            "status": {
                                "type": "string"
                            },
                            "width": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "height": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "url": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "uri"
                            },
                            "thumbnail_url": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "uri"
                            }
                        }
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                }
            },
            "TemplateDesignDetail": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/TemplateDesign"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "data": {
                                "type": "object",
                                "additionalProperties": true
                            }
                        }
                    }
                ]
            },
            "RequestSummary": {
                "type": "object",
                "properties": {
                    "tier": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Yönetimli hizmet paketi."
                    },
                    "allowance": {
                        "type": "integer",
                        "description": "Aylık içerik değişikliği talep hakkı."
                    },
                    "used": {
                        "type": "integer"
                    },
                    "remaining": {
                        "type": "integer"
                    },
                    "next_is_extra": {
                        "type": "boolean",
                        "description": "Bir sonraki talep ek ücretliyse `true`."
                    },
                    "can_change": {
                        "type": "boolean"
                    },
                    "design": {
                        "type": "object",
                        "properties": {
                            "allowance": {
                                "type": "integer"
                            },
                            "used": {
                                "type": "integer"
                            },
                            "remaining": {
                                "type": "integer"
                            },
                            "credits": {
                                "type": "integer"
                            },
                            "available": {
                                "type": "boolean"
                            },
                            "source": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "enum": [
                                    "quota",
                                    "credit",
                                    null
                                ]
                            },
                            "revisions": {
                                "type": "integer"
                            }
                        }
                    }
                }
            },
            "ContentRequest": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "kind": {
                        "type": "string",
                        "enum": [
                            "change",
                            "design"
                        ]
                    },
                    "title": {
                        "type": "string"
                    },
                    "note": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "status": {
                        "type": "string",
                        "enum": [
                            "received",
                            "in_progress",
                            "awaiting_approval",
                            "published",
                            "rejected"
                        ]
                    },
                    "status_label": {
                        "type": "string"
                    },
                    "admin_note": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "funding": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Tasarım talebinin hangi haktan karşılandığı: quota ya da credit."
                    },
                    "is_extra": {
                        "type": "boolean"
                    },
                    "design_spec": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "properties": {
                            "orientation": {
                                "type": "string"
                            },
                            "size": {
                                "type": "string"
                            }
                        }
                    },
                    "revisions_used": {
                        "type": "integer"
                    },
                    "revisions_limit": {
                        "type": "integer"
                    },
                    "screens": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "integer"
                                },
                                "name": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                }
                            }
                        }
                    },
                    "groups": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "integer"
                                },
                                "name": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                }
                            }
                        }
                    },
                    "starts_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "ends_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "approved_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "published_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "requested_by": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "files": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "integer"
                                },
                                "name": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                },
                                "mime": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                },
                                "size": {
                                    "type": [
                                        "integer",
                                        "null"
                                    ]
                                }
                            }
                        }
                    },
                    "events": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "status": {
                                    "type": "string"
                                },
                                "label": {
                                    "type": "string"
                                },
                                "note": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                },
                                "at": {
                                    "type": [
                                        "string",
                                        "null"
                                    ],
                                    "format": "date-time"
                                }
                            }
                        }
                    }
                }
            },
            "PriceBoardBox": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "description": "Kutu kimliği (harf, rakam, alt çizgi, tire; en fazla 40 karakter). Gönderilmezse `k1`, `k2`... atanır.",
                        "example": "k1"
                    },
                    "x": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1,
                        "description": "Sol kenar (görsel genişliğine oran).",
                        "example": 0.62
                    },
                    "y": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1,
                        "description": "Üst kenar (görsel yüksekliğine oran).",
                        "example": 0.2
                    },
                    "w": {
                        "type": "number",
                        "minimum": 0.005,
                        "maximum": 1,
                        "example": 0.15
                    },
                    "h": {
                        "type": "number",
                        "minimum": 0.005,
                        "maximum": 1,
                        "example": 0.08
                    },
                    "product_code": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Fiyatı gösterilecek ürünün kodu.",
                        "example": "BURGER-01"
                    },
                    "style": {
                        "type": "object",
                        "description": "Yazı biçimi; gönderilmeyen alanlar varsayılanla tamamlanır.",
                        "properties": {
                            "font": {
                                "type": "string",
                                "enum": [
                                    "modern",
                                    "klasik",
                                    "guclu"
                                ]
                            },
                            "size": {
                                "type": [
                                    "number",
                                    "null"
                                ],
                                "minimum": 4,
                                "maximum": 2000
                            },
                            "color": {
                                "type": "string",
                                "example": "#ffffff"
                            },
                            "align": {
                                "type": "string",
                                "enum": [
                                    "left",
                                    "center",
                                    "right"
                                ]
                            },
                            "valign": {
                                "type": "string",
                                "enum": [
                                    "top",
                                    "middle",
                                    "bottom"
                                ]
                            },
                            "weight": {
                                "type": "integer",
                                "enum": [
                                    400,
                                    500,
                                    600,
                                    700,
                                    800,
                                    900
                                ]
                            },
                            "format": {
                                "type": "string",
                                "description": "Fiyat biçimi: symbol, code, decimal ya da number."
                            },
                            "sold_out": {
                                "type": "string",
                                "enum": [
                                    "text",
                                    "hide"
                                ],
                                "description": "Pasif ürün için: `text` yazı gösterir, `hide` kutuyu gizler."
                            },
                            "sold_out_text": {
                                "type": "string",
                                "maxLength": 30
                            },
                            "shadow": {
                                "type": [
                                    "object",
                                    "null"
                                ]
                            },
                            "stroke": {
                                "type": [
                                    "object",
                                    "null"
                                ]
                            }
                        }
                    }
                }
            },
            "PriceBoard": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "orientation": {
                        "type": "string",
                        "enum": [
                            "landscape",
                            "portrait"
                        ]
                    },
                    "boxes_count": {
                        "type": "integer"
                    },
                    "background": {
                        "type": [
                            "object",
                            "null"
                        ],
                        "properties": {
                            "media_id": {
                                "type": "integer"
                            },
                            "name": {
                                "type": "string"
                            },
                            "width": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "height": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "thumbnail_url": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        }
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                }
            },
            "PriceBoardDetail": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/PriceBoard"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "boxes": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/components/schemas/PriceBoardBox"
                                }
                            },
                            "created_at": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date-time"
                            },
                            "payload": {
                                "type": "object",
                                "description": "Yalnız ayrıntı (`GET`) yanıtında: ekranın çizdiği hazır veri. Güncel fiyat metinleri `boxes[].text` alanındadır.",
                                "properties": {
                                    "type": {
                                        "type": "string",
                                        "example": "price_board"
                                    },
                                    "board_id": {
                                        "type": "integer"
                                    },
                                    "name": {
                                        "type": "string"
                                    },
                                    "orientation": {
                                        "type": "string"
                                    },
                                    "background_url": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "uri"
                                    },
                                    "background": {
                                        "type": [
                                            "object",
                                            "null"
                                        ],
                                        "properties": {
                                            "media_id": {
                                                "type": "integer"
                                            },
                                            "width": {
                                                "type": [
                                                    "integer",
                                                    "null"
                                                ]
                                            },
                                            "height": {
                                                "type": [
                                                    "integer",
                                                    "null"
                                                ]
                                            },
                                            "checksum": {
                                                "type": [
                                                    "string",
                                                    "null"
                                                ]
                                            }
                                        }
                                    },
                                    "boxes": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "additionalProperties": true,
                                            "properties": {
                                                "id": {
                                                    "type": "string"
                                                },
                                                "product_code": {
                                                    "type": "string"
                                                },
                                                "text": {
                                                    "type": "string",
                                                    "example": "189,90 ₺"
                                                },
                                                "sold_out": {
                                                    "type": "boolean"
                                                }
                                            }
                                        }
                                    },
                                    "prices_version": {
                                        "type": "string",
                                        "description": "Fiyat metinlerinin özeti; değişip değişmediğini anlamak için."
                                    },
                                    "price_list": {
                                        "type": "string",
                                        "description": "Yalnız `price_list` sorgusu verildiyse."
                                    },
                                    "updated_at": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "date-time"
                                    }
                                }
                            }
                        }
                    }
                ]
            },
            "PriceBoardDeleted": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "deleted": {
                        "type": "boolean",
                        "example": true
                    }
                }
            },
            "PriceBoardTargets": {
                "type": "object",
                "properties": {
                    "board_id": {
                        "type": "integer"
                    },
                    "default_duration_seconds": {
                        "type": "integer"
                    },
                    "playlists": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "integer"
                                },
                                "name": {
                                    "type": "string"
                                },
                                "items_count": {
                                    "type": "integer"
                                },
                                "has_board": {
                                    "type": "boolean"
                                }
                            }
                        }
                    },
                    "screens": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "integer"
                                },
                                "name": {
                                    "type": "string"
                                },
                                "status": {
                                    "type": "string",
                                    "enum": [
                                        "online",
                                        "offline"
                                    ]
                                },
                                "playlist": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                },
                                "inherited_playlist": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                },
                                "has_board": {
                                    "type": "boolean"
                                }
                            }
                        }
                    },
                    "groups": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "integer"
                                },
                                "name": {
                                    "type": "string"
                                },
                                "screens_count": {
                                    "type": "integer"
                                },
                                "screens_with_board": {
                                    "type": "integer"
                                }
                            }
                        }
                    }
                }
            },
            "PriceBoardSent": {
                "type": "object",
                "properties": {
                    "board_id": {
                        "type": "integer"
                    },
                    "target": {
                        "type": "string",
                        "enum": [
                            "playlist",
                            "screen",
                            "group"
                        ]
                    },
                    "duration_seconds": {
                        "type": "integer"
                    },
                    "playlist_id": {
                        "type": "integer"
                    },
                    "screen_id": {
                        "type": "integer"
                    },
                    "group_id": {
                        "type": "integer"
                    },
                    "added": {
                        "type": "boolean",
                        "description": "Pano hedefe eklendiyse `true`; zaten oradaysa `false`."
                    },
                    "added_screen_ids": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "description": "Yalnız grup hedefinde."
                    },
                    "already_present_screen_ids": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        },
                        "description": "Yalnız grup hedefinde."
                    },
                    "message": {
                        "type": "string"
                    }
                }
            },
            "Playback": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "screen": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "integer"
                            },
                            "name": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        }
                    },
                    "media": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "name": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        }
                    },
                    "playlist_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "started_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "ended_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "played_seconds": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "is_completed": {
                        "type": "boolean"
                    },
                    "stop_reason": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                }
            },
            "Product": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "code": {
                        "type": "string",
                        "example": "BURGER-01"
                    },
                    "name": {
                        "type": "string",
                        "example": "Çıtır Tavuk Burger"
                    },
                    "category": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "price": {
                        "type": "number",
                        "example": 189.9
                    },
                    "currency": {
                        "type": "string",
                        "enum": [
                            "TRY",
                            "USD",
                            "EUR"
                        ]
                    },
                    "is_active": {
                        "type": "boolean"
                    },
                    "source": {
                        "type": "string",
                        "enum": [
                            "manual",
                            "csv",
                            "api",
                            "poscube"
                        ]
                    },
                    "prices": {
                        "type": "object",
                        "description": "Fiyat listelerindeki fiyatlar, liste adına göre.",
                        "additionalProperties": {
                            "type": "object",
                            "properties": {
                                "price": {
                                    "type": "number"
                                },
                                "currency": {
                                    "type": "string"
                                },
                                "is_active": {
                                    "type": "boolean"
                                }
                            }
                        },
                        "example": {
                            "PREMIUM": {
                                "price": 140,
                                "currency": "TRY",
                                "is_active": true
                            }
                        }
                    },
                    "updated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                }
            },
            "ProductPriceChange": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "code": {
                        "type": "string"
                    },
                    "old_price": {
                        "type": [
                            "number",
                            "null"
                        ]
                    },
                    "new_price": {
                        "type": "number"
                    },
                    "old_currency": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "new_currency": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "source": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "manual",
                            "csv",
                            "api",
                            "poscube",
                            null
                        ]
                    },
                    "source_label": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "price_list": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Boşsa katalog fiyatı."
                    },
                    "changed_by": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "created_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                }
            },
            "ProductAdjust": {
                "type": "object",
                "properties": {
                    "dry_run": {
                        "type": "boolean"
                    },
                    "percent": {
                        "type": "number"
                    },
                    "scope": {
                        "type": "string",
                        "enum": [
                            "all",
                            "category",
                            "uncategorized"
                        ]
                    },
                    "category": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "rounding": {
                        "type": "string"
                    },
                    "count": {
                        "type": "integer",
                        "description": "Fiyatı değişen (`dry_run` ise değişecek) ürün sayısı."
                    },
                    "changes": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "code": {
                                    "type": "string"
                                },
                                "name": {
                                    "type": "string"
                                },
                                "category": {
                                    "type": [
                                        "string",
                                        "null"
                                    ]
                                },
                                "old_price": {
                                    "type": "number"
                                },
                                "new_price": {
                                    "type": "number"
                                },
                                "currency": {
                                    "type": "string"
                                }
                            }
                        }
                    },
                    "changes_truncated": {
                        "type": "boolean",
                        "description": "`changes` en fazla 300 ürün içerir; fazlası varsa `true`."
                    }
                }
            },
            "ProductUpsert": {
                "type": "object",
                "properties": {
                    "created": {
                        "type": "integer",
                        "example": 2
                    },
                    "updated": {
                        "type": "integer",
                        "example": 5
                    },
                    "unchanged": {
                        "type": "integer",
                        "example": 140
                    },
                    "total": {
                        "type": "integer",
                        "example": 147
                    }
                }
            },
            "ProductDeleted": {
                "type": "object",
                "properties": {
                    "code": {
                        "type": "string"
                    },
                    "deleted": {
                        "type": "boolean",
                        "example": true
                    }
                }
            },
            "Me": {
                "type": "object",
                "properties": {
                    "organization": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "integer"
                            },
                            "name": {
                                "type": "string"
                            },
                            "timezone": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            }
                        }
                    },
                    "plan": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "subscription_status": {
                                "type": [
                                    "string",
                                    "null"
                                ]
                            },
                            "service_state": {
                                "type": "string"
                            },
                            "service_active": {
                                "type": "boolean"
                            },
                            "trial_ends_at": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date-time"
                            },
                            "trial_days_left": {
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "grace_ends_at": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date-time"
                            }
                        }
                    },
                    "usage": {
                        "type": "object",
                        "properties": {
                            "screens": {
                                "type": "object",
                                "properties": {
                                    "used": {
                                        "type": "integer"
                                    },
                                    "limit": {
                                        "type": "integer"
                                    },
                                    "remaining": {
                                        "type": "integer"
                                    }
                                }
                            },
                            "storage": {
                                "type": "object",
                                "properties": {
                                    "used_mb": {
                                        "type": "integer"
                                    },
                                    "limit_mb": {
                                        "type": "integer"
                                    }
                                }
                            }
                        }
                    },
                    "api_key": {
                        "type": "object",
                        "properties": {
                            "name": {
                                "type": "string"
                            },
                            "prefix": {
                                "type": "string"
                            },
                            "abilities": {
                                "type": "array",
                                "items": {
                                    "type": "string"
                                }
                            },
                            "expires_at": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date-time"
                            },
                            "last_used_at": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date-time"
                            }
                        }
                    },
                    "rate_limit": {
                        "type": "object",
                        "properties": {
                            "per_minute": {
                                "type": "integer"
                            }
                        }
                    }
                }
            },
            "ScreenEvent": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "example": "evt_k3j2h4g5f6d7s8a9q1w2e3r4"
                    },
                    "type": {
                        "type": "string",
                        "example": "screen.offline"
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "organization_id": {
                        "type": "integer"
                    },
                    "data": {
                        "type": "object",
                        "properties": {
                            "screen": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    },
                                    "uuid": {
                                        "type": "string"
                                    },
                                    "name": {
                                        "type": [
                                            "string",
                                            "null"
                                        ]
                                    },
                                    "status": {
                                        "type": "string",
                                        "enum": [
                                            "online",
                                            "offline"
                                        ]
                                    },
                                    "last_seen_at": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "date-time"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "MediaEvent": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "example": "evt_k3j2h4g5f6d7s8a9q1w2e3r4"
                    },
                    "type": {
                        "type": "string",
                        "example": "media.ready"
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "organization_id": {
                        "type": "integer"
                    },
                    "data": {
                        "type": "object",
                        "properties": {
                            "media": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    },
                                    "name": {
                                        "type": "string"
                                    },
                                    "type": {
                                        "type": "string"
                                    },
                                    "status": {
                                        "type": "string",
                                        "example": "ready"
                                    },
                                    "mime_type": {
                                        "type": [
                                            "string",
                                            "null"
                                        ]
                                    },
                                    "file_size": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ]
                                    },
                                    "duration_seconds": {
                                        "type": [
                                            "number",
                                            "null"
                                        ]
                                    },
                                    "width": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ]
                                    },
                                    "height": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ]
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "MediaFailedEvent": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "example": "evt_k3j2h4g5f6d7s8a9q1w2e3r4"
                    },
                    "type": {
                        "type": "string",
                        "example": "media.failed"
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "organization_id": {
                        "type": "integer"
                    },
                    "data": {
                        "type": "object",
                        "properties": {
                            "media": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    },
                                    "name": {
                                        "type": "string"
                                    },
                                    "type": {
                                        "type": "string"
                                    }
                                }
                            },
                            "reason": {
                                "type": "string",
                                "description": "Hatanın kısa açıklaması."
                            }
                        }
                    }
                }
            },
            "ScreenPairedEvent": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "example": "evt_k3j2h4g5f6d7s8a9q1w2e3r4"
                    },
                    "type": {
                        "type": "string",
                        "example": "screen.paired"
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "organization_id": {
                        "type": "integer"
                    },
                    "data": {
                        "type": "object",
                        "properties": {
                            "screen": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    },
                                    "uuid": {
                                        "type": "string"
                                    },
                                    "name": {
                                        "type": [
                                            "string",
                                            "null"
                                        ]
                                    },
                                    "platform": {
                                        "type": [
                                            "string",
                                            "null"
                                        ]
                                    },
                                    "model": {
                                        "type": [
                                            "string",
                                            "null"
                                        ]
                                    }
                                }
                            },
                            "enrolled_via": {
                                "type": "string",
                                "description": "Ekranın nasıl eklendiği."
                            }
                        }
                    }
                }
            },
            "ScreenDeletedEvent": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "example": "evt_k3j2h4g5f6d7s8a9q1w2e3r4"
                    },
                    "type": {
                        "type": "string",
                        "example": "screen.deleted"
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "organization_id": {
                        "type": "integer"
                    },
                    "data": {
                        "type": "object",
                        "properties": {
                            "screen": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    },
                                    "uuid": {
                                        "type": "string"
                                    },
                                    "name": {
                                        "type": [
                                            "string",
                                            "null"
                                        ]
                                    },
                                    "platform": {
                                        "type": [
                                            "string",
                                            "null"
                                        ]
                                    },
                                    "model": {
                                        "type": [
                                            "string",
                                            "null"
                                        ]
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "CommandAckedEvent": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "example": "evt_k3j2h4g5f6d7s8a9q1w2e3r4"
                    },
                    "type": {
                        "type": "string",
                        "example": "command.acked"
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "organization_id": {
                        "type": "integer"
                    },
                    "data": {
                        "type": "object",
                        "properties": {
                            "command": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    },
                                    "command": {
                                        "type": "string",
                                        "example": "reload"
                                    },
                                    "status": {
                                        "type": "string",
                                        "example": "acked"
                                    }
                                }
                            },
                            "screen": {
                                "type": "object",
                                "properties": {
                                    "id": {
                                        "type": "integer"
                                    },
                                    "name": {
                                        "type": [
                                            "string",
                                            "null"
                                        ]
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "PricesChangedEvent": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "example": "evt_k3j2h4g5f6d7s8a9q1w2e3r4"
                    },
                    "type": {
                        "type": "string",
                        "example": "products.prices_changed"
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "organization_id": {
                        "type": "integer"
                    },
                    "data": {
                        "type": "object",
                        "properties": {
                            "changed_count": {
                                "type": "integer",
                                "description": "Fiyatı gerçekten değişen toplam ürün sayısı.",
                                "example": 12
                            },
                            "products": {
                                "type": "array",
                                "maxItems": 100,
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "code": {
                                            "type": "string",
                                            "example": "BURGER-01"
                                        },
                                        "name": {
                                            "type": "string"
                                        },
                                        "old_price": {
                                            "type": [
                                                "number",
                                                "null"
                                            ],
                                            "description": "Yeni eklenen ürünlerde `null`."
                                        },
                                        "new_price": {
                                            "type": "number"
                                        },
                                        "currency": {
                                            "type": "string",
                                            "example": "TRY"
                                        },
                                        "price_list": {
                                            "type": [
                                                "string",
                                                "null"
                                            ],
                                            "description": "Boşsa katalog fiyatı; doluysa o fiyat listesi."
                                        }
                                    }
                                }
                            },
                            "source": {
                                "type": "string",
                                "enum": [
                                    "panel",
                                    "api",
                                    "pos"
                                ],
                                "description": "Değişikliğin kaynağı: panel, api ya da pos."
                            }
                        }
                    }
                }
            }
        }
    },
    "webhooks": {
        "screen.offline": {
            "post": {
                "summary": "Ekran çevrimdışı oldu",
                "description": "Ekran sinyal vermeyi bıraktığında gönderilir. Adresinize `POST` edilir. `2xx` dışındaki yanıtlar başarısız sayılır ve 3 kez denenir. İmzayı `X-OmrarCast-Signature` başlığıyla doğrulayın.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ScreenEvent"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Bildirim alındı"
                    }
                }
            }
        },
        "screen.online": {
            "post": {
                "summary": "Ekran yeniden çevrimiçi oldu",
                "description": "Çevrimdışı olan ekran yeniden sinyal verdiğinde gönderilir. Adresinize `POST` edilir. `2xx` dışındaki yanıtlar başarısız sayılır ve 3 kez denenir. İmzayı `X-OmrarCast-Signature` başlığıyla doğrulayın.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ScreenEvent"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Bildirim alındı"
                    }
                }
            }
        },
        "media.ready": {
            "post": {
                "summary": "Medya işlendi ve kullanıma hazır",
                "description": "Yüklenen medya işlendiğinde ve oynatılabilir olduğunda gönderilir. Adresinize `POST` edilir. `2xx` dışındaki yanıtlar başarısız sayılır ve 3 kez denenir. İmzayı `X-OmrarCast-Signature` başlığıyla doğrulayın.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MediaEvent"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Bildirim alındı"
                    }
                }
            }
        },
        "media.failed": {
            "post": {
                "summary": "Medya işlenemedi",
                "description": "Yüklenen medya (ör. video dönüştürme) işlenemediğinde gönderilir. Adresinize `POST` edilir. `2xx` dışındaki yanıtlar başarısız sayılır ve 3 kez denenir. İmzayı `X-OmrarCast-Signature` başlığıyla doğrulayın.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MediaFailedEvent"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Bildirim alındı"
                    }
                }
            }
        },
        "screen.paired": {
            "post": {
                "summary": "Ekran eşleştirildi",
                "description": "Yeni bir ekran hesaba eşleştirildiğinde (panelden, API'den ya da otomatik kurulumla) gönderilir. Adresinize `POST` edilir. `2xx` dışındaki yanıtlar başarısız sayılır ve 3 kez denenir. İmzayı `X-OmrarCast-Signature` başlığıyla doğrulayın.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ScreenPairedEvent"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Bildirim alındı"
                    }
                }
            }
        },
        "screen.deleted": {
            "post": {
                "summary": "Ekran silindi",
                "description": "Bir ekran hesaptan kaldırıldığında gönderilir. Adresinize `POST` edilir. `2xx` dışındaki yanıtlar başarısız sayılır ve 3 kez denenir. İmzayı `X-OmrarCast-Signature` başlığıyla doğrulayın.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ScreenDeletedEvent"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Bildirim alındı"
                    }
                }
            }
        },
        "command.acked": {
            "post": {
                "summary": "Ekran komutu aldı",
                "description": "Bir ekran kendisine gönderilen komutu işleyip onayladığında gönderilir. Adresinize `POST` edilir. `2xx` dışındaki yanıtlar başarısız sayılır ve 3 kez denenir. İmzayı `X-OmrarCast-Signature` başlığıyla doğrulayın.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CommandAckedEvent"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Bildirim alındı"
                    }
                }
            }
        },
        "products.prices_changed": {
            "post": {
                "summary": "Ürün fiyatları değişti",
                "description": "Ürün fiyatlarında gerçek bir değişiklik olduğunda gönderilir. Aynı istekte yapılan değişiklikler tek olayda toplanır; `products` en fazla 100 ürün içerir, toplam sayı `changed_count` alanındadır. Adresinize `POST` edilir. `2xx` dışındaki yanıtlar başarısız sayılır ve 3 kez denenir. İmzayı `X-OmrarCast-Signature` başlığıyla doğrulayın.",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/PricesChangedEvent"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Bildirim alındı"
                    }
                }
            }
        }
    }
}
