{
  "info": {
    "_postman_id": "7eb63f53-de5f-4bee-a57d-19a1b3897549",
    "name": "Entegra E-Ticaret API",
    "description": "**Current Version:** v1.2.0  \n**Last Updated:** 14.10.2026\n\nEntegra E-Ticaret API'yi kullanmak veya görüşlerinizi bizimle paylaşmak isterseniz [eticaretdestek@entegrabilisim.com](mailto:eticaretdestek@entegrabilisim.com) adresi üzerinden iletişime geçebilirsiniz.  \nAPI'yi kullanarak eticaret verilerine ulaşabilir ve kendi uygulamalarınız ile entegre edebilirsiniz.\n\n**Genel Bilgiler**\n\n- API için **BASE_URL** \"[https://www.example.com/api/ecommerce/v1\"](https://www.example.com/api/ecommerce/v1)\n    \n- Entegranın REST API'sine yapılan tüm isteklerin kimliğinin doğrulanması gerekmektedir.\n    \n- API endpointlerine ulaşmak için ilk olarak size verilen '**email**' , '**password**' ve '**api_key**' bilgileriyle sisteme login olup **access** **token** ve **refresh** **token** almalısınız.\n    \n- Bu alınan **access** token'ı sorgulara **Authorization** header'ı olarak `Bearer <access_token>` şeklinde eklenmelidir.\n    \n- Request limiti dakika/120 olarak ayarlanmıştır. Limit aşımında 1 saat ip engeli tanımlanmıştır. Limit, uç nokta ve IP adresi başına sayılır. Login ve refresh-auth uçları için dakika/10, Raporlar ve Toplu Ürün Güncelle uçları için dakika/60 ile sınırlıdır\n    \n- **Access** token süresi **1 saat**.\n    \n- **Refresh** token süresi **1 aydır**.\n    \n- _**Not: Her Request için token isteği yapılmamalıdır. Aksi durumda otomatik olarak engellenirsiniz.**_\n    \n\n---\n\n### Error Codes & Descriptions\n\n| HTTP Kodu | Error Key | Açıklama |\n| --- | --- | --- |\n| 415 | `invalid_content_type` | Content-Type header değeri tam olarak application/json olmalıdır (`application/json; charset=utf-8` kabul edilmez). |\n| 400 | `invalid_json` | Gövde geçerli bir JSON değil. |\n| 400 | `end_point_error` | Sorgu parametreleri doğrulanamadı ya da işlem tamamlanamadı. |\n| 403 | `ip_blocked` | İp Engellenmiş |\n| 401 | `user_not_found` | Api Kullanıcısı bulunamadı ya da pasif |\n| 403 | `permission_denied` | İşlem için yetkiniz yok |\n| 401 | `authorization_header_missing` | Authorization header eksik |\n| 401 | `invalid_authorization_format` | Header “Bearer” ile başlamıyor |\n| 401 | `missing_bearer_token` | “Bearer” sonrası token yok |\n| 401 | `invalid_token` | Token geçersiz veya bozuk |\n| 401 | `expired_or_invalid_token` | Token expired veya yanlış |\n| 401 | `unauthorized` | Login / Refresh Token: bilgiler hatalı ya da refresh token geçersiz |\n| 404 | `invalid_request` | Geçersiz Endpoint |\n| 404 | `not_found` | Kayıt bulunamadı |\n| 422 | `validation_error` | Gövde doğrulanamadı; `message` alan bazında hataları içerir |\n| 422 | `no_data` | Güncellenecek alan gönderilmedi |\n| 429 | `too_many_requests` | İstek limiti aşıldı; IP adresi engellenir |\n| 503 | `api_disabled` | API panelden kapatılmış |\n\n---\n\n### Sample Error Response\n\n``` json\n{\n    \"status\": false,\n    \"error\": \"ip_blocked\",\n    \"message\": \"This IP address has been blocked\"\n}\n\n ```",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "_exporter_id": "11722031",
    "_collection_link": "https://go.postman.co/collection/11722031-7eb63f53-de5f-4bee-a57d-19a1b3897549?source=collection_link"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{token}}",
        "type": "string"
      }
    ]
  },
  "item": [
    {
      "name": "Auth",
      "item": [
        {
          "name": "Login",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "const res = pm.response.json();",
                  "",
                  "if (res?.data?.access_token) {",
                  "    pm.collectionVariables.set(\"token\", res.data.access_token);",
                  "    pm.variables.set(\"token\", res.data.access_token); // runtime'a da yaz",
                  "}",
                  "if (res?.data?.refresh_token) {",
                  "    pm.collectionVariables.set(\"refresh_token\", res.data.refresh_token);",
                  "    pm.variables.set(\"refresh_token\", res.data.refresh_token);",
                  "} "
                ],
                "type": "text/javascript",
                "packages": {},
                "requests": {}
              }
            }
          ],
          "request": {
            "auth": {
              "type": "noauth"
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"email\": \"api-user@example.com\",\n    \"password\": \"Panelde-Belirlenen-En-Az-24-Karakterlik-Sifre\",\n    \"api_key\": \"<panelde-verilen-128-karakterlik-api-anahtari>\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/login",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "login"
              ]
            },
            "description": "> Kullanıcı e-posta, şifre ve API anahtarı ile giriş yapar. `password` en az 24 karakterdir; `api_key` panelde 128 karakter olarak üretilir. Başarılı giriş önceki `refresh_token`'ı geçersiz kılar. \n  \n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"access_token\": \"...\",\n        \"refresh_token\": \"...\"\n    }\n}\n\n ```\n\n**Rate limit:** 10 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Refresh Token",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "const res = pm.response.json();",
                  "",
                  "if (res?.data?.access_token) {",
                  "    pm.collectionVariables.set(\"token\", res.data.access_token);",
                  "    pm.variables.set(\"token\", res.data.access_token);",
                  "    pm.collectionVariables.set(\"refresh_token\", res.data.refresh_token);",
                  "    pm.variables.set(\"refresh_token\", res.data.refresh_token);",
                  "} "
                ],
                "type": "text/javascript",
                "packages": {},
                "requests": {}
              }
            },
            {
              "listen": "prerequest",
              "script": {
                "packages": {},
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "auth": {
              "type": "noauth"
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"refresh_token\": \"{{refresh_token}}\"\n}"
            },
            "url": {
              "raw": "{{base_url}}/refresh-auth",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "refresh-auth"
              ]
            },
            "description": "> Kullanıcı, süresi geçerli bir `refresh_token` kullanarak API’ye istek gönderdiğinde: \n  \n\n1. Sistem, kullanıcının doğrulamasını yapar ve geçerli `refresh_token` kontrolünü sağlar.\n    \n2. Yeni bir `access_token` ve `refresh_token` oluşturur ve kullanıcıya döner.\n    \n3. Önceki `refresh_token` artık geçersiz hale gelir; önceki `access_token` süresi dolana kadar geçerli kalır.\n    \n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"access_token\": \"....\",\n        \"refresh_token\": \"...\"\n    }\n}\n\n ```\n\n**Rate limit:** 10 istek/dakika"
          },
          "response": []
        }
      ],
      "description": "> Oturum Açma ve Token Yenileme İşlemler"
    },
    {
      "name": "Müşteriler",
      "item": [
        {
          "name": "Müşteriler Listesi",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customers",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "arama kelimesi",
                  "description": "Müşteri Arama;\nAranacak olan alanalar :Ad Soyad, E-posta, Telefon, Kullanıcı Kodu",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "inactive",
                  "description": "Müşteri Durumu",
                  "disabled": true
                },
                {
                  "key": "current_account",
                  "value": "active",
                  "description": "Cari Hesap Durumu",
                  "disabled": true
                },
                {
                  "key": "dealer",
                  "value": "1",
                  "description": "Bayi ID",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "name",
                  "description": "Hangi Alana Göre Sıralanacak",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "desc",
                  "description": "Sıralama Yönü",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "2",
                  "description": "Sayfa Numarası",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "",
                  "description": "Sayfa Limiti",
                  "disabled": true
                }
              ]
            },
            "description": "### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| search | string | Arama;  <br>Ad, Soyad, E-posta, Telefon, Müşteri/Cari Kod; Max: 100 |\n| status | string | Durum;  <br>Values : active / inactive |\n| current_account | string | Cari Hesap Durumu;  <br>Values : active / inactive |\n| dealer | integer | Bayi Grubu;  <br>Bayi Grubu ID |\n| sort | string | Sıralanacak Sutun:  <br>Values : id / name |\n| order | string | Sıralama Tipi:  <br>Values : asc / desc |\n| page | integer | Sayfa Numarası  <br>Min : 1 |\n| limit | integer | Limit  <br>Min : 1 - Max : 500 |\n\n### Response (200 OK)\n\n``` json\n{\n  \"status\": true,\n  \"data\": {\n    \"items\": [\n      {\n        \"id\": 1,\n        \"status\": \"active\",\n        \"name\": \"Entegra\",\n        \"surname\": \"Bilişim\",\n        \"email\": \"info@entegrabilisim.com\",\n        \"telephone_code\": \"tr\",\n        \"telephone\": \"+90 8507339152\",\n        \"customer_code\": \"cari1\",\n        \"communication_consent\": true,\n        \"sms_communication_consent\": true,\n        \"tel_communication_consent\": false,\n        \"created_at\": \"1694608756\",\n        \"created_at_local\": \"13.09.2023 15:39:16\",\n        \"dealer\": {\n           \"id\": 1,\n           \"title\": \"Bayi Grubu 1\"\n        },\n        \"current_account\": {\n           \"status\": \"active\",\n           \"balance\": 300\n        },\n        \"addresses\": [\n          {\n            \"id\": 11,\n            \"user_id\": 8348,\n            \"title\": \"Ofis Adresi\",\n            \"is_default\": true,\n            \"country\": \"Türkiye\",\n            \"city\": \"İstanbul\",\n            \"district\": \"Bahçelievler\",\n            \"address\": \"Şirinevler Mah. Adnan Kahveci Bulvarı. No.204 Emek İş Merkezi Kat.7 D.57 \",\n            \"post_code\": \"34188\",\n            \"invoice_type\": \"institutional\",\n            \"company_name\": \"Entegra Bilişim\",\n            \"tax_office\": \"Vergi Dairesi\",\n            \"tax_number\": \"Vergi No\",\n            \"tc\": \"11111111111\"\n          }\n        ]\n      }\n    ],\n    \"pager\": {\n      \"currentPage\": 1,\n      \"totalPages\": 3,\n      \"totalRecords\": 5\n    }\n  }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Müşteri Detayı",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customers/detail",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "123",
                  "disabled": true
                },
                {
                  "key": "customer_code",
                  "value": "test",
                  "disabled": true
                },
                {
                  "key": "email",
                  "value": "eticaretdestek@entegrabilisim.com",
                  "disabled": true
                },
                {
                  "key": "phone",
                  "value": "+90 0500000000",
                  "disabled": true
                }
              ]
            },
            "description": "Aşağıdaki parametrelerden en az birini kullanarak müşteri bilgilerini sorgulayabilir ve ilgili kayda erişebilirsiniz.\n\n### Query Parameters\n\n| Field | Type | Descripton |\n| --- | --- | --- |\n| id | integer | Müşteri ID |\n| customer_code | string | Müşteri/Cari Kodu |\n| email | string | E-Posta |\n| phone | string | Telefon |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"id\": 51,\n        \"status\": \"inactive\",\n        \"name\": \"Entegra\",\n        \"surname\": \"Bilisim\",\n        \"email\": \"eticaretdestek@entegrabilisim.com\",\n        \"telephone_code\": \"tr\",\n        \"telephone\": \"+90 1214945545\",\n        \"customer_code\": \"\",\n        \"communication_consent\": true,\n        \"sms_communication_consent\": true,\n        \"tel_communication_consent\": false,\n        \"dealer\": {\n            \"id\": 1,\n            \"title\": \"Bayi Grubu 1\"\n        },\n        \"current_account\": {\n            \"status\": \"active\",\n            \"balance\": 300\n        },\n        \"addresses\": [\n            {\n                \"id\": 38,\n                \"user_id\": 51,\n                \"title\": \"Test\",\n                \"is_default\": true,\n                \"country\": \"Türkiye\",\n                \"city\": \"İstanbul\",\n                \"district\": \"Avcılar\",\n                \"address\": \"Örnek Adres\",\n                \"post_code\": \"34416\",\n                \"invoice_type\": \"individual\",\n                \"company_name\": \"\",\n                \"tax_office\": \"\",\n                \"tax_number\": \"\",\n                \"tc\": \"\"\n            },\n            {\n                \"id\": 39,\n                \"user_id\": 51,\n                \"title\": \"Test\",\n                \"is_default\": false,\n                \"country\": \"Türkiye\",\n                \"city\": \"İstanbul\",\n                \"district\": \"Avcılar\",\n                \"address\": \"Adres 2\",\n                \"post_code\": \"34416\",\n                \"invoice_type\": \"individual\",\n                \"company_name\": \"\",\n                \"tax_office\": \"\",\n                \"tax_number\": \"\",\n                \"tc\": \"\"\n            }\n        ],\n        \"created_at\": \"1763459978\",\n        \"created_at_local\": \"18.11.2025 12:59:38\",\n        \"last_logins\": [\n            {\n                \"user_ip\": \"88.250.10.20\",\n                \"login_time\": \"1763460000\"\n            }\n        ]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Müşteri Ekle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"dealer_id\": 1,\n    \"status\": \"active\",\n    \"name\": \"Entegra\",\n    \"surname\": \"Bilisim\",\n    \"email\": \"eticaretdestek@entegrabilisim.com\",\n    \"telephone_code\": \"tr\",\n    \"telephone\": \"+90 1214945545\",\n    \"customer_code\": \"\",\n    \"password\": \"Password1234example\",\n    \"communication_consent\": true,\n    \"sms_communication_consent\": true,\n    \"tel_communication_consent\": false,\n    \"current_account_status\": \"active\",\n    \"current_account_min_limit\": 10,\n    \"dealer_min_order_status\": \"active\",\n    \"dealer_min_order_type\": \"same_product_quantity\",\n    \"dealer_min_order_count\": 1,\n    \"addresses\": [\n        {\n            \"title\": \"Ofis Adresi\",\n            \"is_default\": true,\n            \"country\": \"Türkiye\",\n            \"city\": \"İstanbul\",\n            \"district\": \"Avcılar\",\n            \"address\": \"Örnek Sokak No:1\",\n            \"post_code\": \"34416\",\n            \"invoice_type\": \"institutional\",\n            \"company_name\": \"Entegra Bilişim\",\n            \"tax_office\": \"Bağcılar VD\",\n            \"tax_number\": \"1234567890\",\n            \"tc\": \"\"\n        }\n    ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/customers",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers"
              ]
            },
            "description": "> Yeni müşteri kayıt işlemi\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| status | string - required | Durum; Values: active / inactive |\n| name | string - required | Ad; Sadece harf (TR dahil); Max: 100 |\n| surname | string - required | Soyad; Sadece harf (TR dahil); Max: 100 |\n| email | email - required | E-Posta; benzersiz olmalı |\n| telephone_code | string - required | Telefon ülke kodu; Values: tr / de / ru ... (ISO 2) |\n| telephone | string - required | Telefon; TR Format: +90 5xxxxxxxxx |\n| password | string - required | Min 12 karakter, harf ve rakam içermeli |\n| communication_consent | boolean | Elektronik İleti Onayı; Values: true / false |\n| sms_communication_consent | boolean | SMS İleti Onayı; Values: true / false |\n| tel_communication_consent | boolean | Telefon İleti Onayı; Values: true / false |\n| current_account_status | string - required | Cari hesap durumu; Values: active / inactive |\n| current_account_min_limit | decimal | Cari hesap borç limiti (varsayılan: 0) |\n| customer_code | string | Müşteri/Cari kodu; isteğe bağlı. Doluysa benzersiz olmalı; baştaki ve sondaki boşluklar silinir |\n| dealer_id | integer | Bayi Grubu ID |\n| dealer_min_order_status | string | Bayi min. sipariş durumu; Values: active / inactive |\n| dealer_min_order_type | string | Bayi min. sipariş tipi; Values: total_quantity / same_product_quantity |\n| dealer_min_order_count | integer | Bayi min. sipariş adedi |\n| addresses | array | Adres listesi; **en fazla 20 adres** gönderilebilir |\n| addresses.*.title | string | Adres başlığı; addresses varsa zorunlu |\n| addresses.*.is_default | boolean | Varsayılan adres; addresses varsa zorunlu; sadece 1 adres true olabilir |\n| addresses.*.country | string | Ülke adı; ny_country tablosunda kayıtlı olmalı |\n| addresses.*.city | string | Şehir adı; ny_citys tablosunda kayıtlı olmalı |\n| addresses.*.district | string | İlçe adı; ny_citys_detail tablosunda kayıtlı olmalı |\n| addresses.*.address | string | Açık adres; addresses varsa zorunlu |\n| addresses.*.post_code | integer | Posta kodu; addresses varsa zorunlu |\n| addresses.*.invoice_type | string | Fatura tipi; addresses varsa zorunlu; Values: individual / institutional |\n| addresses.*.company_name | string | Şirket ünvanı (kurumsal fatura için) |\n| addresses.*.tax_office | string | Vergi dairesi (kurumsal fatura için) |\n| addresses.*.tax_number | string | Vergi numarası (kurumsal fatura için) |\n| addresses.*.tc | integer | TC kimlik numarası (bireysel fatura için) |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Customer created successfully.\",\n        \"customer_id\": 3\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Müşteri Düzenle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n   \"status\": \"active\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/customers",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "54",
                  "disabled": true
                },
                {
                  "key": "customer_code",
                  "value": "code123",
                  "disabled": true
                },
                {
                  "key": "email",
                  "value": "eticaretdestek@entegrabisim.com",
                  "disabled": true
                },
                {
                  "key": "phone",
                  "value": "+90 1214945545",
                  "disabled": true
                }
              ]
            },
            "description": "\n> `addresses` gönderilirse müşteriye ait **tüm mevcut adresler silinir** ve yerine gönderilen liste yazılır. Adres listesini korumak istiyorsanız bu alanı body'e dahil etmeyin.\n> Düzenleme işlemi için yalnızca değiştirmek istediğiniz alanları göndermeniz yeterlidir. Gönderilmeyen alanlar mevcut değerlerini korur \n  \n> Aşağıdaki parametrelerden en az birini kullanarak müşteri düzenlemesini gerçekleştirebilirsiniz \n  \n\n### Query Parameters\n\n| Field | Type | Descripton |\n| --- | --- | --- |\n| id | integer | Müşteri ID |\n| customer_code | string | Müşteri/Cari Kodu |\n| email | string | E-Posta |\n| phone | string | Telefon |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| status | string | Durum  <br>Values : active/inactive |\n| name | string | Ad |\n| surname | string | Soyad |\n| email | email | E-Posta |\n| customer_code | string | Müşteri/Cari Kodu; başka bir müşteride kullanılmıyor olmalı; boş gönderilirse kod kaldırılır |\n| telephone_code | string | Telefon Numarası ülke kodu.  <br>Values : tr/de/ru.... |\n| telephone | string | TR Format : +90 54xxxxxxxx  <br>DE Format : +49 54xxxxxxxx |\n| password | string | Min 12 karakter harf ve rakam. |\n| communication_consent | boolean | Elektronik İleti Onayı.  <br>Values : true/false |\n| sms_communication_consent | boolean | SMS İleti Onayı.  <br>Values : true/false |\n| tel_communication_consent | boolean | Telefon İleti Onayı.  <br>Values : true/false |\n| current_account_status | string | Cari hesap durumu.  <br>Values : active/inactive. |\n| current_account_min_limit | decimal | Cari hesap borç limiti |\n| dealer_id | integer | Bayi Grup ID |\n| dealer_min_order_status | string | Bayi Min. Sipariş Durumu  <br>Values: active/inactive. |\n| dealer_min_order_type | string | Bayi Min. Sipariş Tipi  <br>values: total_quantity / same_product_quantity  <br>total_quantity : Toplam ürün adeti üzerinden.  <br>same_product_quantity : Aynı ürün adeti üzerinden |\n| dealer_min_order_count | integer | Bayi Min. Sipariş Adeti |\n| addresses | array | Adres Bilgileri; **en fazla 20 adres** gönderilebilir; gönderilirse mevcut adresler **tümüyle silinir** ve yenileri yazılır |\n| addresses.\\*.title | string | Adres Başlığı  <br>addresses mevcut ise zorunlu |\n| addresses.\\*.is_default | boolean | Varsayılan Adres.  <br>addresses mevcut ise zorunlu  <br>Sadece 1 adres true olabilir.  <br>Values : true/false |\n| addresses.\\*.country | string | Ülke  <br>addresses mevcut ise zorunlu. |\n| addresses.\\*.city | string | Şehir  <br>addresses mevcut ise zorunlu. |\n| addresses.\\*.district | string | İlçe  <br>addresses mevcut ise zorunlu. |\n| addresses.\\*.address | string | Adres  <br>addresses mevcut ise zorunlu. |\n| addresses.\\*.post_code | integer | Posta Kodu  <br>addresses mevcut ise zorunlu. |\n| addresses.\\*.invoice_type | string | Fatura Tipi  <br>addresses mevcut ise zorunlu.  <br>Values : individual/institutional  <br>individual : Bireysel Fatura  <br>institutional : Kurumsal Fatura |\n| addresses.\\*.company_name | string | Şirket Ünvanı |\n| addresses.\\*.tax_office | string | Vergi Dairesi |\n| addresses.\\*.tax_number | string | Vergi Numarası |\n| addresses.\\*.tc | integer | Tc Kimlik |\n\n### Example Request (JSON)\n\n``` json\n{\n    \"status\": \"inactive\",\n    \"name\": \"Yeni Ad\"\n}\n\n ```\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Customer updated successfully.\",\n        \"customer_id\": 49\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Müşteri Sil",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customers?id=51",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "51",
                  "description": "Müşteri ID — id/customer_code/email/phone parametrelerinden en az biri zorunludur"
                },
                {
                  "key": "customer_code",
                  "value": "",
                  "description": "Müşteri/Cari Kodu (alternatif)",
                  "disabled": true
                },
                {
                  "key": "email",
                  "value": "",
                  "description": "E-Posta (alternatif)",
                  "disabled": true
                },
                {
                  "key": "phone",
                  "value": "",
                  "description": "Telefon (alternatif)",
                  "disabled": true
                }
              ]
            },
            "description": "> Bu işlem, bir müşteriye ait tüm bilgilerin, adreslerin ve yorumların silinmesini sağlar. \n  \n> Aşağıdaki parametrelerden en az birini kullanarak müşteri silme işlemini gerçekleştirebilirsiniz. \n  \n\n### Query Parameters\n\n| Field | Type | Descripton |\n| --- | --- | --- |\n| id | integer | Müşteri ID |\n| customer_code | string | Müşteri/Cari Kodu |\n| email | string | E-Posta |\n| phone | string | Telefon |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Customer deleted successfully.\",\n        \"deleted_ids\": [41]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Cari Hareketler",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customers/transactions",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                "transactions"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "51",
                  "description": "Müşteri ID — id/customer_code/email/phone parametrelerinden en az biri zorunludur"
                },
                {
                  "key": "customer_code",
                  "value": "e2",
                  "description": "Müşteri/Cari Kodu (alternatif)",
                  "disabled": true
                },
                {
                  "key": "email",
                  "value": "eticaretdestek@entegrabisim.com",
                  "description": "E-Posta (alternatif)",
                  "disabled": true
                },
                {
                  "key": "phone",
                  "value": "+90 5551234567",
                  "description": "Telefon (alternatif)",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "1",
                  "disabled": true
                },
                {
                  "key": "type",
                  "value": "output",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "process_time",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "asc",
                  "disabled": true
                }
              ]
            },
            "description": "> Müşteriye ait bakiye ve hesap haraketlerini döndürür. Sorgu parametlerinden id,customer_code,email,phone alanlarından en az 1 tanesi zorunludur. \n  \n\n### Query Parameters\n\n| Field | Type | Descripton |\n| --- | --- | --- |\n| id | integer | Müşteri ID |\n| customer_code | string | Müşteri/Cari Kodu |\n| email | string | E-Posta |\n| phone | string | Telefon |\n| type | string | Hesap hareket tipi  <br>Values: entry/output  <br>entry: tahsilat  <br>output: borç |\n| page | integer | Sayfa Numarası |\n| limit | integer | Limit  <br>Min: 1 Max: 500 arası değerler alır |\n| sort | string | Sıralanacak Alan  <br>Values: id/amount/ process_time |\n| order | string | Sıralama Tipi  <br>Values : asc/desc |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"balance\": 300,\n        \"filtered_balance\": 300,\n        \"actions\": [\n            {\n                \"id\": 24,\n                \"amount\": 3300,\n                \"type\": \"entry\",\n                \"description\": \"X Bankası Havale\",\n                \"process_time\": \"1763732469\",\n                \"process_time_local\": \"21.11.2025 16:41:09\"\n            },\n            {\n                \"id\": 23,\n                \"amount\": 3000,\n                \"type\": \"output\",\n                \"description\": \"Sipariş Tutarı\",\n                \"process_time\": \"1763732450\",\n                \"process_time_local\": \"21.11.2025 16:40:50\"\n            }\n        ],\n        \"pager\": {\n            \"currentPage\": 1,\n            \"totalPages\": 1,\n            \"totalRecords\": 2\n        }\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Cari Hareket Ekle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"entry\", \n  \"amount\": 3300,\n  \"description\": \"Sipariş Tutarı\"\n}\n",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/customers/transactions",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                "transactions"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "51",
                  "disabled": true
                },
                {
                  "key": "customer_code",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "email",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "phone",
                  "value": "",
                  "disabled": true
                }
              ]
            },
            "description": "> Bu işlem, müşterinin cari hesabına borç (output) veya tahsilat (entry) yönünde bir hareket eklemek için kullanılır. \n  \n> Her hareket; işlem tipi, tutar, açıklama içerir. Doğru veri formatı ile gönderildiğinde sistem ilgili müşterinin cari bakiyesini otomatik olarak günceller. \n  \n> Sorgu parametlerinden id, customer_code, email, phone alanlarından en az 1 tanesi zorunludur. \n  \n\n### Query Parameters\n\n| Field | Type | Descripton |\n| --- | --- | --- |\n| id | integer | Müşteri ID |\n| customer_code | string | Müşteri/Cari Kodu |\n| email | string | E-Posta |\n| phone | string | Telefon |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| type | string | Required; `entry` (tahsilat) veya `output` (borç) |\n| amount | decimal | Required; 0'dan büyük ondalıklı sayı |\n| description | string | Required; Max 500 karakter |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Account transaction has been added successfully.\",\n        \"transaction_id\": 14,\n        \"customer_id\": 39,\n        \"amount\": \"150020\",\n        \"type\": \"output\",\n        \"process_time\": 1763042530,\n            \"process_time_local\": \"13.01.2026 12:42:10\"\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Cari Hareket Sil",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customers/transactions/4?id=51",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customers",
                "transactions",
                ":action_id"
              ],
              "variable": [
                {
                  "key": "action_id",
                  "value": "4",
                  "description": "Silinecek cari hareket kaydı ID'si"
                }
              ],
              "query": [
                {
                  "key": "id",
                  "value": "51",
                  "description": "Müşteri ID — id/customer_code/email/phone parametrelerinden en az biri zorunludur"
                },
                {
                  "key": "customer_code",
                  "value": "",
                  "description": "Müşteri/Cari Kodu (alternatif)",
                  "disabled": true
                },
                {
                  "key": "email",
                  "value": "",
                  "description": "E-Posta (alternatif)",
                  "disabled": true
                },
                {
                  "key": "phone",
                  "value": "",
                  "description": "Telefon (alternatif)",
                  "disabled": true
                }
              ]
            },
            "description": "> Bu işlem, bir müşteriye ait hatalı veya iptal edilmesi gereken bir cari hareket kaydını sistemden kaldırmak için kullanılır. \n  \n> Hareket silindiğinde müşterinin cari bakiyesi otomatik olarak yeniden hesaplanır. \n  \n> Sorgu parametlerinden id, customer_code, email, phone alanlarından en az 1 tanesi zorunludur. \n  \n> Kayıt bulunamazsa `404 not_found` döner. \n  \n\n### Query Parameters\n\n| Field | Type | Descripton |\n| --- | --- | --- |\n| id | integer | Müşteri ID |\n| customer_code | string | Müşteri/Cari Kodu |\n| email | string | E-Posta |\n| phone | string | Telefon |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Account transaction has been successfully deleted.\"\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        }
      ],
      "description": "> Müşterilere ait işlemler\n\n> Müşteri seçen uçlarda `phone` değerindeki `+` işareti `%2B` olarak kodlanmalıdır (ör. `%2B905551234567`); kodlanmazsa boşluk olarak okunur ve müşteri bulunamaz.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "event": [
        {
          "listen": "prerequest",
          "script": {
            "type": "text/javascript",
            "packages": {},
            "requests": {},
            "exec": [
              ""
            ]
          }
        },
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "packages": {},
            "requests": {},
            "exec": [
              ""
            ]
          }
        }
      ]
    },
    {
      "name": "Bayi Grupları",
      "description": "> Dealer gruplarını (bayi gruplarını) listeler, detaylarını döndürür; ekleme, güncelleme ve silme işlemlerini yapar.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Bayi Grupları Listesi",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/dealers",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "dealers"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "Bayi Grubu 1",
                  "description": "Grup adında arama; Max 100 karakter",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "active",
                  "description": "Durum filtresi; Values: active / inactive",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralanacak alan; Values: id / name",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "asc",
                  "description": "Sıralama yönü; Values: asc / desc",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa numarası; Min: 1",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "Sayfa limiti; Min: 1 Max: 500",
                  "disabled": true
                }
              ]
            },
            "description": "### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| search | string | Grup adında arama; Max 100 karakter |\n| status | string | Durum filtresi; Values: active / inactive |\n| sort | string | Sıralanacak alan; Values: id / name |\n| order | string | Sıralama yönü; Values: asc / desc |\n| page | integer | Sayfa numarası; Min: 1 |\n| limit | integer | Sayfa limiti; Min: 1 Max: 500 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"items\": [\n            {\n                \"id\": 1,\n                \"title\": \"Bayi Grubu 1 (%5 İskonto)\",\n                \"status\": \"active\",\n                \"minimum_order_amount\": 0,\n                \"installment_limit\": 12,\n                \"is_default\": false,\n                \"create_date\": \"1676061703\",\n                \"update_date\": \"1676061703\",\n                \"create_date_local\": \"10.02.2023 23:41:43\",\n                \"update_date_local\": \"10.02.2023 23:41:43\",\n                \"discount_scenario\": {\n                    \"type\": \"fixed_rate_on_all_products\",\n                    \"discount_rate\": 5\n                },\n                \"payment_type_restrictions\": []\n            },\n            {\n                \"id\": 2,\n                \"title\": \"Bayi Grubu 2\",\n                \"status\": \"inactive\",\n                \"minimum_order_amount\": 500,\n                \"installment_limit\": 12,\n                \"is_default\": false,\n                \"create_date\": \"1676061726\",\n                \"update_date\": \"1763548866\",\n                \"create_date_local\": \"10.02.2023 23:42:06\",\n                \"update_date_local\": \"19.07.2025 10:41:06\",\n                \"discount_scenario\": {\n                    \"type\": \"dealer_special_price\",\n                    \"price_type\": {\n                        \"id\": 4,\n                        \"title\": \"Price 1\",\n                        \"key\": \"b2bp-50251\"\n                    }\n                },\n                \"payment_type_restrictions\": [\n                    {\n                        \"id\": 1,\n                        \"title\": \"Kredi Kartı / Banka Kartı\"\n                    },\n                    {\n                        \"id\": 7,\n                        \"title\": \"Mağazadan Teslim Al\"\n                    }\n                ]\n            }\n        ],\n        \"pager\": {\n            \"currentPage\": 1,\n            \"totalPages\": 1,\n            \"totalRecords\": 2\n        }\n    }\n}\n\n ```\n\n`discount_scenario.discount_rate` okunurken ana ve ek indirimin bileşik toplam oranıdır (ör. %15 + %5 → 19.25).\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Bayi Grubu Detayı",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/dealers/detail?id=2",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "dealers",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "2",
                  "description": "Bayi Grubu ID (zorunlu)"
                }
              ]
            },
            "description": "> `id` query parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Bayi Grubu ID |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"id\": 2,\n        \"title\": \"Bayi Grubu 2\",\n        \"status\": \"inactive\",\n        \"minimum_order_amount\": 500,\n        \"installment_limit\": 12,\n        \"is_default\": false,\n        \"create_date\": \"1676061726\",\n        \"update_date\": \"1763548866\",\n        \"create_date_local\": \"10.02.2023 23:42:06\",\n        \"update_date_local\": \"19.07.2025 10:41:06\",\n        \"discount_scenario\": {\n            \"type\": \"dealer_special_price\",\n            \"price_type\": {\n                \"id\": 4,\n                \"title\": \"Price 1\",\n                \"key\": \"b2bp-50251\"\n            }\n        },\n        \"payment_type_restrictions\": [\n            {\n                \"id\": 1,\n                \"title\": \"Kredi Kartı / Banka Kartı\"\n            },\n            {\n                \"id\": 7,\n                \"title\": \"Mağazadan Teslim Al\"\n            }\n        ]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Bayi Grubu Ekle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"name\": \"Altın Bayi\",\n    \"status\": \"active\",\n    \"is_default\": false,\n    \"minimum_order_amount\": 500.00,\n    \"installment_limit\": 6,\n    \"payment_type_restrictions\": [2, 3],\n    \"discount_scenario\": {\n        \"type\": \"fixed_rate_on_all_products\",\n        \"discount_rate\": 15.00,\n        \"extra_discount_rate\": 5.00\n    }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/dealers",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "dealers"
              ]
            },
            "description": "> `name` ve `discount_scenario` alanları zorunludur. `discount_scenario.type` zorunludur.\n\n> `type` değeri `fixed_rate_on_all_products` ise `discount_rate` zorunludur; `extra_discount_rate` opsiyoneldir (bileşik indirim).\n\n> `type` değeri `dealer_special_price` ise `price_type_id` kullanılır.\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| name | string - required | Grup adı; Max 255 karakter |\n| status | string | Durum; Values: active / inactive (varsayılan: active) |\n| is_default | boolean | Varsayılan bayi grubu; true / false (varsayılan: false) |\n| minimum_order_amount | decimal | Minimum sipariş tutarı; Min 0 |\n| installment_limit | integer | Taksit limiti; Min 0 |\n| payment_type_restrictions | array | Kısıtlanacak ödeme tipi ID listesi |\n| discount_scenario | object - required | İndirim senaryosu |\n| discount_scenario.type | string - required | İndirim tipi; Values: fixed_rate_on_all_products / dealer_special_price |\n| discount_scenario.discount_rate | decimal | Ana indirim oranı (%); Min 0 Max 100 — type=fixed_rate_on_all_products ise zorunlu |\n| discount_scenario.extra_discount_rate | decimal | Ek indirim oranı (%); Min 0 Max 100 — opsiyonel; bileşik hesap: 1-(1-r1/100)*(1-r2/100) |\n| discount_scenario.price_type_id | integer | Fiyat tipi ID; ny_product_price_types.id — type=dealer_special_price ise kullanılır |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Dealer group created successfully.\",\n        \"id\": 5\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Bayi Grubu Düzenle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"name\": \"Platin Bayi\",\n    \"status\": \"active\",\n    \"discount_scenario\": {\n        \"type\": \"fixed_rate_on_all_products\",\n        \"discount_rate\": 20.00,\n        \"extra_discount_rate\": 3.00\n    }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/dealers?id=5",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "dealers"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "5",
                  "description": "Bayi Grubu ID",
                  "disabled": false
                }
              ]
            },
            "description": "> `id` query parametresi zorunludur. Body'de yalnızca güncellenmek istenen alanlar gönderilir.\n\n> `discount_scenario` gönderilirse `discount_scenario.type` zorunludur. `type` değeri `fixed_rate_on_all_products` ise `discount_rate` de zorunludur. Yalnız `discount_rate` gönderilirse ek indirim 0 sayılır; ek indirimi korumak için `extra_discount_rate`'i de birlikte gönderin.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Bayi Grubu ID |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| name | string | Grup adı; Max 255 karakter |\n| status | string | Durum; Values: active / inactive |\n| is_default | boolean | Varsayılan bayi grubu; true / false |\n| minimum_order_amount | decimal | Minimum sipariş tutarı; Min 0 |\n| installment_limit | integer | Taksit limiti; Min 0 |\n| payment_type_restrictions | array | Kısıtlanacak ödeme tipi ID listesi |\n| discount_scenario | object | İndirim senaryosu |\n| discount_scenario.type | string | İndirim tipi; Values: fixed_rate_on_all_products / dealer_special_price |\n| discount_scenario.discount_rate | decimal | Ana indirim oranı (%); Min 0 Max 100 — type=fixed_rate_on_all_products ise zorunlu |\n| discount_scenario.extra_discount_rate | decimal | Ek indirim oranı (%); Min 0 Max 100 — opsiyonel |\n| discount_scenario.price_type_id | integer | Fiyat tipi ID; ny_product_price_types.id |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Dealer group updated successfully.\",\n        \"id\": 5\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Bayi Grubu Sil",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/dealers?id=5",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "dealers"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "5",
                  "description": "Bayi Grubu ID",
                  "disabled": false
                }
              ]
            },
            "description": "> `id` query parametresi zorunludur.\n\n> Gruba bağlı müşteri varsa silme işlemi engellenir; müşteriler önce farklı bir gruba atanmalıdır.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Bayi Grubu ID |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Dealer group deleted successfully.\",\n        \"id\": 5\n    }\n}\n\n ```\n\n### Error — Bağlı Müşteri Var (422)\n\n``` json\n{\n    \"status\": false,\n    \"error\": \"has_customers\",\n    \"message\": \"This dealer group has 3 assigned customer(s). Reassign them before deleting.\"\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Ürünler",
      "description": "Ürün listeleme, detay, oluşturma, güncelleme, toplu güncelleme ve silme işlemleri. Çoklu dil desteği `languages[]` dizisi ile sağlanır. Görsel yükleme URL tabanlıdır (ImageManager). `showcase`, `cargo`, `visibility` alanları nesne olarak gruplandırılmıştır.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Ürünleri Listele",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa numarası (varsayılan: 1)"
                },
                {
                  "key": "limit",
                  "value": "20",
                  "description": "Sayfa başına kayıt sayısı (varsayılan: 100, en fazla 500)"
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID (varsayılan: 1 = TR)"
                },
                {
                  "key": "status",
                  "value": "active",
                  "description": "Durum filtresi: active | inactive"
                },
                {
                  "key": "category_id",
                  "value": "",
                  "description": "Kategori ID'sine göre filtrele"
                },
                {
                  "key": "brand_id",
                  "value": "",
                  "description": "Marka ID'sine göre filtrele"
                },
                {
                  "key": "search",
                  "value": "",
                  "description": "Ürün adı, kodu veya barkoduna göre arama; Max 100"
                },
                {
                  "key": "in_stock",
                  "value": "",
                  "description": "Stok filtresi: yes (stokta olanlar) | no (stokta olmayanlar)",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralama alanı: id | name | price | stock | created_at (varsayılan: id)",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "desc",
                  "description": "Sıralama yönü: asc | desc (varsayılan: desc)",
                  "disabled": true
                }
              ]
            },
            "description": "Ürünleri sayfalı olarak listeler. Belirtilen dil için ad ve URL bilgisi döner.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/products",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "products"
                  ],
                  "query": [
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Sayfa numarası (varsayılan: 1)"
                    },
                    {
                      "key": "limit",
                      "value": "20",
                      "description": "Sayfa başına kayıt sayısı (varsayılan: 100, en fazla 500)"
                    },
                    {
                      "key": "lang_id",
                      "value": "1",
                      "description": "Dil ID (varsayılan: 1 = TR)"
                    },
                    {
                      "key": "status",
                      "value": "active",
                      "description": "Durum filtresi: active | inactive"
                    },
                    {
                      "key": "category_id",
                      "value": "",
                      "description": "Kategori ID'sine göre filtrele"
                    },
                    {
                      "key": "brand_id",
                      "value": "",
                      "description": "Marka ID'sine göre filtrele"
                    },
                    {
                      "key": "search",
                      "value": "",
                      "description": "Ürün adı, kodu veya barkoduna göre arama; Max 100"
                    },
                    {
                      "key": "in_stock",
                      "value": "",
                      "description": "Stok filtresi: yes (stokta olanlar) | no (stokta olmayanlar)",
                      "disabled": true
                    },
                    {
                      "key": "sort",
                      "value": "id",
                      "description": "Sıralama alanı: id | name | price | stock | created_at (varsayılan: id)",
                      "disabled": true
                    },
                    {
                      "key": "order",
                      "value": "desc",
                      "description": "Sıralama yönü: asc | desc (varsayılan: desc)",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"items\": [\n      {\n        \"id\": 1,\n        \"name\": \"Örnek Ürün\",\n        \"url\": \"https://www.example.com/ornek-urun\",\n        \"image\": \"https://www.example.com/uploads/urunler/example.jpg\",\n        \"code\": \"PRD-001\",\n        \"store_code\": \"STR-001\",\n        \"mpn\": \"MPN123\",\n        \"ean\": \"8690000000017\",\n        \"barcode\": \"8690000000017\",\n        \"price\": 299.9,\n        \"old_price\": 349.9,\n        \"tax\": 18.0,\n        \"stock\": 150,\n        \"stock_status\": \"active\",\n        \"currency\": \"TRY\",\n        \"status\": \"active\",\n        \"sort\": 0,\n        \"delivery_days\": 3,\n        \"delivery_date\": null,\n        \"close_online\": false,\n        \"comment_status\": true,\n        \"showcase\": {\n          \"is_featured\": false,\n          \"has_discount\": true,\n          \"new_ticket\": false\n        },\n        \"visibility\": {\n          \"home\": true,\n          \"category\": true,\n          \"brand\": true,\n          \"search\": true,\n          \"price\": true\n        },\n        \"created_at\": 1778828400,\n        \"created_at_local\": \"15.05.2026 10:00:00\",\n        \"updated_at\": 1778835600,\n        \"updated_at_local\": \"15.05.2026 12:00:00\"\n      }\n    ],\n    \"pager\": {\n      \"currentPage\": 1,\n      \"totalPages\": 5,\n      \"totalRecords\": 98\n    }\n  }\n}"
            }
          ]
        },
        {
          "name": "Ürün Detayı",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products/detail?id=1&lang_id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Ürün ID — id veya code parametrelerinden en az biri zorunludur"
                },
                {
                  "key": "code",
                  "value": "",
                  "description": "Ürün kodu (alternatif olarak id yerine kullanılabilir)",
                  "disabled": true
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID (varsayılan: 1 = TR)"
                }
              ]
            },
            "description": "Belirtilen ürünün tüm alanlarını, dil çevirilerini, görselleri, varyantları, özellikleri ve ilişkili ürünleri döner.\n\n- Lansman tarihi üst düzeydeki `delivery_date` alanında döner (yazarken `cargo.delivery_date` kullanılır).\n- `customizations`: ürüne atanmış özelleştirme alanları; yazarken grup ID dizisi gönderilir.\n- `store_code` mağaza (model) kodudur; yazarken `model_code` alanı kullanılır.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/products/detail?id=1&lang_id=1",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "products",
                    "detail"
                  ],
                  "query": [
                    {
                      "key": "id",
                      "value": "1",
                      "description": "Ürün ID — id veya code parametrelerinden en az biri zorunludur"
                    },
                    {
                      "key": "code",
                      "value": "",
                      "description": "Ürün kodu (alternatif olarak id yerine kullanılabilir)",
                      "disabled": true
                    },
                    {
                      "key": "lang_id",
                      "value": "1",
                      "description": "Dil ID (varsayılan: 1 = TR)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"id\": 1,\n    \"name\": \"Örnek Ürün\",\n    \"description\": \"<p>Ürün açıklaması</p>\",\n    \"url\": \"https://www.example.com/ornek-urun\",\n    \"permalink\": \"ornek-urun\",\n    \"meta_title\": \"Örnek Ürün | Mağaza\",\n    \"meta_description\": \"SEO açıklaması\",\n    \"meta_keywords\": \"ürün, örnek\",\n    \"tags\": \"etiket1, etiket2\",\n    \"image\": \"https://www.example.com/uploads/urunler/example.jpg\",\n    \"code\": \"PRD-001\",\n    \"store_code\": \"STR-001\",\n    \"mpn\": \"MPN123\",\n    \"ean\": \"8690000000017\",\n    \"barcode\": \"8690000000017\",\n    \"price\": 299.9,\n    \"old_price\": 349.9,\n    \"tax\": 18.0,\n    \"stock\": 150,\n    \"stock_status\": \"active\",\n    \"currency\": \"TRY\",\n    \"status\": \"active\",\n    \"sort\": 0,\n    \"min_order_limit\": 1,\n    \"max_order_limit\": 10,\n    \"delivery_date\": null,\n    \"close_online\": false,\n    \"comment_status\": true,\n    \"parcel\": false,\n    \"condition\": 1,\n    \"made_in\": \"TR\",\n    \"expiration_date\": null,\n    \"production_date\": null,\n    \"date_start\": null,\n    \"date_end\": null,\n    \"showcase\": {\n      \"is_featured\": false,\n      \"has_discount\": true,\n      \"new_ticket\": false\n    },\n    \"cargo\": {\n      \"free_cargo_ticket\": false,\n      \"delivery_days\": 3,\n      \"desi\": 2.5,\n      \"weight\": 1.2,\n      \"width\": 15.0,\n      \"height\": 10.0,\n      \"depth\": 5.0\n    },\n    \"visibility\": {\n      \"home\": true,\n      \"category\": true,\n      \"brand\": true,\n      \"search\": true,\n      \"price\": true\n    },\n    \"categories\": [\n      {\n        \"id\": 3,\n        \"name\": \"Elektronik\",\n        \"url\": \"elektronik\"\n      }\n    ],\n    \"brands\": [\n      {\n        \"id\": 2,\n        \"name\": \"Örnek Marka\",\n        \"url\": \"ornek-marka\"\n      }\n    ],\n    \"catalogs\": [\n      {\n        \"id\": 1,\n        \"name\": \"Yaz Kataloğu\",\n        \"url\": \"yaz-katalog\"\n      }\n    ],\n    \"images\": [\n      {\n        \"image\": \"https://www.example.com/uploads/urunler/example.jpg\"\n      },\n      {\n        \"image\": \"https://www.example.com/uploads/urunler/example2.jpg\"\n      }\n    ],\n    \"videos\": [\n      {\n        \"id\": 1,\n        \"url\": \"https://youtube.com/watch?v=xxx\",\n        \"thumbnail\": \"https://www.example.com/uploads/urunler/thumb.jpg\"\n      }\n    ],\n    \"attributes\": [\n      {\n        \"group_id\": 1,\n        \"group_name\": \"Teknik Özellikler\",\n        \"values\": [\n          {\n            \"attribute_id\": 5,\n            \"attribute_name\": \"Malzeme\",\n            \"value_id\": 12,\n            \"value_name\": \"Pamuk\"\n          }\n        ]\n      }\n    ],\n    \"variants\": [\n      {\n        \"name\": \"S - Kırmızı\",\n        \"variant_code\": \"PRD-001-S-K\",\n        \"stock\": 50,\n        \"price_prefix\": \"+\",\n        \"price\": 0.0,\n        \"barcode\": \"1234567890123\",\n        \"gtin\": null,\n        \"mpn\": null\n      }\n    ],\n    \"related_products\": [\n      {\n        \"id\": 2,\n        \"name\": \"İlişkili Ürün\"\n      }\n    ],\n    \"compatible_products\": [\n      {\n        \"id\": 3,\n        \"name\": \"Uyumlu Ürün\"\n      }\n    ],\n    \"customizations\": [\n      {\n        \"id\": 3,\n        \"type\": 2,\n        \"title\": \"Renk Seçin\",\n        \"placeholder\": \"Bir renk seçin\",\n        \"description\": \"Lütfen bir renk seçiniz\",\n        \"input_type\": \"1\",\n        \"min\": \"0\",\n        \"max\": \"0\",\n        \"required\": true,\n        \"price\": 0.0,\n        \"price_prefix\": \"+\",\n        \"options\": [\n          {\n            \"id\": 7,\n            \"name\": \"Kırmızı\",\n            \"image\": null,\n            \"price\": 5.0,\n            \"price_prefix\": \"+\"\n          }\n        ]\n      }\n    ],\n    \"created_at\": 1747296000,\n    \"created_at_local\": \"15.05.2025 11:00:00\",\n    \"updated_at\": 1747382400,\n    \"updated_at_local\": \"16.05.2025 11:00:00\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Ürün Oluştur",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Örnek Ürün\",\n      \"description\": \"<p>Ürün açıklaması</p>\",\n      \"permalink\": \"ornek-urun\",\n      \"meta_title\": \"Örnek Ürün | Mağaza\",\n      \"meta_description\": \"SEO açıklaması\",\n      \"meta_keywords\": \"ürün, örnek\",\n      \"tags\": \"etiket1, etiket2\"\n    },\n    {\n      \"lang_id\": 2,\n      \"name\": \"Sample Product\",\n      \"description\": \"<p>Product description</p>\",\n      \"permalink\": \"sample-product\",\n      \"meta_title\": \"Sample Product | Store\",\n      \"meta_description\": \"SEO description\",\n      \"meta_keywords\": \"product, sample\",\n      \"tags\": \"tag1, tag2\"\n    }\n  ],\n  \"code\": \"PRD-001\",\n  \"model_code\": \"STR-001\",\n  \"ean\": \"8690000000017\",\n  \"barcode\": \"8690000000017\",\n  \"price\": 299.9,\n  \"old_price\": 349.9,\n  \"tax\": 18,\n  \"stock\": 150,\n  \"currency_id\": 1,\n  \"status\": \"active\",\n  \"sort\": 0,\n  \"installment\": 1,\n  \"min_order_limit\": 1,\n  \"max_order_limit\": 0,\n  \"close_online\": false,\n  \"comment_status\": true,\n  \"parcel\": null,\n  \"condition\": 1,\n  \"made_in\": \"TR\",\n  \"expiration_date\": null,\n  \"production_date\": null,\n  \"date_start\": null,\n  \"date_end\": null,\n  \"image_varyant_status\": false,\n  \"showcase\": {\n    \"is_featured\": false,\n    \"has_discount\": true,\n    \"new_ticket\": false\n  },\n  \"cargo\": {\n    \"free_cargo_ticket\": false,\n    \"delivery_days\": 3,\n    \"delivery_date\": null,\n    \"desi\": 2.5,\n    \"weight\": 1.2,\n    \"width\": 15,\n    \"height\": 10,\n    \"depth\": 5\n  },\n  \"visibility\": {\n    \"home\": true,\n    \"category\": true,\n    \"brand\": true,\n    \"search\": true,\n    \"price\": true\n  },\n  \"brand_ids\": [\n    2,\n    5\n  ],\n  \"category_ids\": [\n    3\n  ],\n  \"catalog_ids\": [\n    1\n  ],\n  \"related_ids\": [\n    10,\n    11\n  ],\n  \"compatible_ids\": [\n    20\n  ],\n  \"customizations\": [\n    1,\n    3\n  ],\n  \"image\": \"https://example.com/product-cover.jpg\",\n  \"images\": [\n    {\n      \"image\": \"https://example.com/product1.jpg\"\n    },\n    {\n      \"image\": \"https://example.com/product2.jpg\"\n    }\n  ],\n  \"variants\": {\n    \"option_ids\": [\n      1,\n      2\n    ],\n    \"values\": [\n      {\n        \"model\": \"PRD-001-S-K\",\n        \"specs\": [\n          {\n            \"option_id\": 1,\n            \"option_value_id\": 3,\n            \"sort_order\": 0\n          },\n          {\n            \"option_id\": 2,\n            \"option_value_id\": 7,\n            \"sort_order\": 1\n          }\n        ],\n        \"price_prefix\": \"+\",\n        \"price\": 0,\n        \"quantity\": 50,\n        \"barcode\": \"1234567890123\",\n        \"gtin\": \"\",\n        \"mpn\": \"\"\n      }\n    ]\n  },\n  \"attributes\": [\n    {\n      \"attribute_group_id\": 1,\n      \"attribute_value_id\": 5\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/products",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products"
              ]
            },
            "description": "Yeni ürün oluşturur.\n\n**Zorunlu alanlar:**\n- `languages[]` — tüm aktif diller için gönderilmeli (allActiveLangs); her dilde `name` zorunlu\n- `code` — benzersiz ürün kodu\n- `price` — ürün fiyatı\n- `status` — ürün durumu (active / inactive)\n- `stock` — stok adedi\n\n**Önemli notlar:**\n- `languages[]` dizisi aktif tüm dilleri içermeli; eksik dil varsa validasyon hatası döner\n- `old_price`: indirimli fiyat gösterimi için eski/önceki fiyat (yoksa 0 gönderin)\n- `tax`: KDV oranı (gönderilmezse 0)\n- `installment`: taksit sayısı; 1–12 arası\n- `model_code`: mağaza (model) kodu; `ean`, `barcode`: barkod bilgileri. `store_code` ve `mpn` bu uçtan yazılamaz\n- `brand_ids[]`: birden fazla marka atanabilir\n- `image`: kapak görselinin URL'i; `images[].image`: ek görsellerin URL'leri. Sistem görselleri bu adreslerden indirir\n- `permalink` boş gönderilirse `name` alanından otomatik oluşturulur\n- `cargo`, `showcase`, `visibility` nesne olarak gönderilmeli\n- `customizations[]`: özelleştirme grubu ID dizisi\n- `cargo.delivery_date`: lansman tarihi (YYYY-AA-GG)\n- `variants.values[]`: her kombinasyon `specs[]` ile `option_ids` sırasıyla eşleşen `option_id` + `option_value_id` çiftlerini, stok adedini `quantity` ile taşır; `model` varyant kodudur ve mağaza genelinde benzersiz olmalıdır. Varyantlı ürünün stoğu varyant adetlerinin toplamı olur\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Örnek Ürün\",\n      \"description\": \"<p>Ürün açıklaması</p>\",\n      \"permalink\": \"ornek-urun\",\n      \"meta_title\": \"Örnek Ürün | Mağaza\",\n      \"meta_description\": \"SEO açıklaması\",\n      \"meta_keywords\": \"ürün, örnek\",\n      \"tags\": \"etiket1, etiket2\"\n    },\n    {\n      \"lang_id\": 2,\n      \"name\": \"Sample Product\",\n      \"description\": \"<p>Product description</p>\",\n      \"permalink\": \"sample-product\",\n      \"meta_title\": \"Sample Product | Store\",\n      \"meta_description\": \"SEO description\",\n      \"meta_keywords\": \"product, sample\",\n      \"tags\": \"tag1, tag2\"\n    }\n  ],\n  \"code\": \"PRD-001\",\n  \"model_code\": \"STR-001\",\n  \"ean\": \"8690000000017\",\n  \"barcode\": \"8690000000017\",\n  \"price\": 299.9,\n  \"old_price\": 349.9,\n  \"tax\": 18,\n  \"stock\": 150,\n  \"currency_id\": 1,\n  \"status\": \"active\",\n  \"sort\": 0,\n  \"installment\": 1,\n  \"min_order_limit\": 1,\n  \"max_order_limit\": 0,\n  \"close_online\": false,\n  \"comment_status\": true,\n  \"parcel\": null,\n  \"condition\": 1,\n  \"made_in\": \"TR\",\n  \"expiration_date\": null,\n  \"production_date\": null,\n  \"date_start\": null,\n  \"date_end\": null,\n  \"image_varyant_status\": false,\n  \"showcase\": {\n    \"is_featured\": false,\n    \"has_discount\": true,\n    \"new_ticket\": false\n  },\n  \"cargo\": {\n    \"free_cargo_ticket\": false,\n    \"delivery_days\": 3,\n    \"delivery_date\": null,\n    \"desi\": 2.5,\n    \"weight\": 1.2,\n    \"width\": 15,\n    \"height\": 10,\n    \"depth\": 5\n  },\n  \"visibility\": {\n    \"home\": true,\n    \"category\": true,\n    \"brand\": true,\n    \"search\": true,\n    \"price\": true\n  },\n  \"brand_ids\": [\n    2,\n    5\n  ],\n  \"category_ids\": [\n    3\n  ],\n  \"catalog_ids\": [\n    1\n  ],\n  \"related_ids\": [\n    10,\n    11\n  ],\n  \"compatible_ids\": [\n    20\n  ],\n  \"customizations\": [\n    1,\n    3\n  ],\n  \"image\": \"https://example.com/product-cover.jpg\",\n  \"images\": [\n    {\n      \"image\": \"https://example.com/product1.jpg\"\n    },\n    {\n      \"image\": \"https://example.com/product2.jpg\"\n    }\n  ],\n  \"variants\": {\n    \"option_ids\": [\n      1,\n      2\n    ],\n    \"values\": [\n      {\n        \"model\": \"PRD-001-S-K\",\n        \"specs\": [\n          {\n            \"option_id\": 1,\n            \"option_value_id\": 3,\n            \"sort_order\": 0\n          },\n          {\n            \"option_id\": 2,\n            \"option_value_id\": 7,\n            \"sort_order\": 1\n          }\n        ],\n        \"price_prefix\": \"+\",\n        \"price\": 0,\n        \"quantity\": 50,\n        \"barcode\": \"1234567890123\",\n        \"gtin\": \"\",\n        \"mpn\": \"\"\n      }\n    ]\n  },\n  \"attributes\": [\n    {\n      \"attribute_group_id\": 1,\n      \"attribute_value_id\": 5\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/products",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "products"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"message\": \"Product created successfully.\",\n    \"product_id\": 42\n  }\n}"
            },
            {
              "name": "Validasyon Hatası",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Örnek Ürün\",\n      \"description\": \"<p>Ürün açıklaması</p>\",\n      \"permalink\": \"ornek-urun\",\n      \"meta_title\": \"Örnek Ürün | Mağaza\",\n      \"meta_description\": \"SEO açıklaması\",\n      \"meta_keywords\": \"ürün, örnek\",\n      \"tags\": \"etiket1, etiket2\"\n    },\n    {\n      \"lang_id\": 2,\n      \"name\": \"Sample Product\",\n      \"description\": \"<p>Product description</p>\",\n      \"permalink\": \"sample-product\",\n      \"meta_title\": \"Sample Product | Store\",\n      \"meta_description\": \"SEO description\",\n      \"meta_keywords\": \"product, sample\",\n      \"tags\": \"tag1, tag2\"\n    }\n  ],\n  \"code\": \"PRD-001\",\n  \"model_code\": \"STR-001\",\n  \"ean\": \"8690000000017\",\n  \"barcode\": \"8690000000017\",\n  \"price\": 299.9,\n  \"old_price\": 349.9,\n  \"tax\": 18,\n  \"stock\": 150,\n  \"currency_id\": 1,\n  \"status\": \"active\",\n  \"sort\": 0,\n  \"installment\": 1,\n  \"min_order_limit\": 1,\n  \"max_order_limit\": 0,\n  \"close_online\": false,\n  \"comment_status\": true,\n  \"parcel\": null,\n  \"condition\": 1,\n  \"made_in\": \"TR\",\n  \"expiration_date\": null,\n  \"production_date\": null,\n  \"date_start\": null,\n  \"date_end\": null,\n  \"image_varyant_status\": false,\n  \"showcase\": {\n    \"is_featured\": false,\n    \"has_discount\": true,\n    \"new_ticket\": false\n  },\n  \"cargo\": {\n    \"free_cargo_ticket\": false,\n    \"delivery_days\": 3,\n    \"delivery_date\": null,\n    \"desi\": 2.5,\n    \"weight\": 1.2,\n    \"width\": 15,\n    \"height\": 10,\n    \"depth\": 5\n  },\n  \"visibility\": {\n    \"home\": true,\n    \"category\": true,\n    \"brand\": true,\n    \"search\": true,\n    \"price\": true\n  },\n  \"brand_ids\": [\n    2,\n    5\n  ],\n  \"category_ids\": [\n    3\n  ],\n  \"catalog_ids\": [\n    1\n  ],\n  \"related_ids\": [\n    10,\n    11\n  ],\n  \"compatible_ids\": [\n    20\n  ],\n  \"customizations\": [\n    1,\n    3\n  ],\n  \"image\": \"https://example.com/product-cover.jpg\",\n  \"images\": [\n    {\n      \"image\": \"https://example.com/product1.jpg\"\n    },\n    {\n      \"image\": \"https://example.com/product2.jpg\"\n    }\n  ],\n  \"variants\": {\n    \"option_ids\": [\n      1,\n      2\n    ],\n    \"values\": [\n      {\n        \"model\": \"PRD-001-S-K\",\n        \"specs\": [\n          {\n            \"option_id\": 1,\n            \"option_value_id\": 3,\n            \"sort_order\": 0\n          },\n          {\n            \"option_id\": 2,\n            \"option_value_id\": 7,\n            \"sort_order\": 1\n          }\n        ],\n        \"price_prefix\": \"+\",\n        \"price\": 0,\n        \"quantity\": 50,\n        \"barcode\": \"1234567890123\",\n        \"gtin\": \"\",\n        \"mpn\": \"\"\n      }\n    ]\n  },\n  \"attributes\": [\n    {\n      \"attribute_group_id\": 1,\n      \"attribute_value_id\": 5\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/products",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "products"
                  ]
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": false,\n  \"error\": \"validation_error\",\n  \"message\": {\n    \"code\": \"Bu ürün kodu zaten kullanılıyor.\",\n    \"languages.0.name\": \"Ürün adı zorunludur.\"\n  }\n}"
            }
          ]
        },
        {
          "name": "Ürün Güncelle",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Güncellenmiş Ürün\",\n      \"description\": \"<p>Yeni açıklama</p>\",\n      \"permalink\": \"guncellenmis-urun\",\n      \"meta_title\": \"Güncellenmiş Ürün | Mağaza\",\n      \"meta_description\": \"Güncel SEO açıklaması\",\n      \"meta_keywords\": \"güncel, ürün\",\n      \"tags\": \"yeni-etiket\"\n    }\n  ],\n  \"price\": 279.9,\n  \"old_price\": 299.9,\n  \"stock\": 200,\n  \"status\": \"active\",\n  \"showcase\": {\n    \"is_featured\": true,\n    \"has_discount\": true,\n    \"new_ticket\": false\n  },\n  \"cargo\": {\n    \"free_cargo_ticket\": true,\n    \"delivery_days\": 2,\n    \"delivery_date\": \"2026-06-01\"\n  },\n  \"visibility\": {\n    \"home\": true,\n    \"search\": true\n  },\n  \"brand_ids\": [\n    2\n  ],\n  \"category_ids\": [\n    3,\n    7\n  ],\n  \"catalog_ids\": [\n    1\n  ],\n  \"related_ids\": [\n    10\n  ],\n  \"compatible_ids\": [],\n  \"customizations\": [\n    1\n  ],\n  \"images\": [\n    {\n      \"image\": \"https://example.com/new-image.jpg\"\n    }\n  ],\n  \"attributes\": [\n    {\n      \"attribute_group_id\": 1,\n      \"attribute_value_id\": 6\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/products?id=42",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "42",
                  "description": "Güncellenecek ürün ID — id veya code parametrelerinden en az biri zorunludur"
                },
                {
                  "key": "code",
                  "value": "",
                  "description": "Ürün kodu (alternatif olarak id yerine kullanılabilir)",
                  "disabled": true
                }
              ]
            },
            "description": "Mevcut ürünü günceller. Sadece gönderilen alanlar güncellenir.\n\n- Gövdede `languages` dizisi bulunmalıdır; ürün metinlerini değiştirmeyecekseniz `[{\"lang_id\": 1}]` gönderin.\n- `permalink` gönderilirse ürünün adresi değişir; adresi değiştirmeyecekseniz `permalink` göndermeyin.\n\n**TAM DEĞIŞTIRME (full replacement) davranışı — dikkat:**\n- `brand_ids[]` gönderilirse tüm marka ilişkileri silinip yeniden yazılır\n- `category_ids[]` gönderilirse tüm kategori ilişkileri silinip yeniden yazılır\n- `catalog_ids[]` gönderilirse tüm katalog ilişkileri silinip yeniden yazılır\n- `related_ids[]` gönderilirse tüm ilişkili ürünler silinip yeniden yazılır\n- `compatible_ids[]` gönderilirse tüm uyumlu ürünler silinip yeniden yazılır\n- `images[]` gönderilirse eski görseller **diskten silinir** ve yenileri indirilir\n- `variants{}` gönderilirse (`option_ids` dolu iken) tüm varyantlar silinip gönderilen kombinasyonlar yeniden yazılır; `values[]` ürünün bütün kombinasyonlarını Ürün Oluştur'daki `specs` yapısıyla içermelidir\n- `attributes[]` gönderilirse tüm özellik değerleri silinip yeniden yazılır\n- `customizations[]` gönderilirse tüm özelleştirme atamaları silinip yeniden yazılır\n\nBoş dizi göndermek (`[]`) ilgili tüm ilişkileri siler (varyantlar hariç).\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Güncellenmiş Ürün\",\n      \"description\": \"<p>Yeni açıklama</p>\",\n      \"permalink\": \"guncellenmis-urun\",\n      \"meta_title\": \"Güncellenmiş Ürün | Mağaza\",\n      \"meta_description\": \"Güncel SEO açıklaması\",\n      \"meta_keywords\": \"güncel, ürün\",\n      \"tags\": \"yeni-etiket\"\n    }\n  ],\n  \"price\": 279.9,\n  \"old_price\": 299.9,\n  \"stock\": 200,\n  \"status\": \"active\",\n  \"showcase\": {\n    \"is_featured\": true,\n    \"has_discount\": true,\n    \"new_ticket\": false\n  },\n  \"cargo\": {\n    \"free_cargo_ticket\": true,\n    \"delivery_days\": 2,\n    \"delivery_date\": \"2026-06-01\"\n  },\n  \"visibility\": {\n    \"home\": true,\n    \"search\": true\n  },\n  \"brand_ids\": [\n    2\n  ],\n  \"category_ids\": [\n    3,\n    7\n  ],\n  \"catalog_ids\": [\n    1\n  ],\n  \"related_ids\": [\n    10\n  ],\n  \"compatible_ids\": [],\n  \"customizations\": [\n    1\n  ],\n  \"images\": [\n    {\n      \"image\": \"https://example.com/new-image.jpg\"\n    }\n  ],\n  \"attributes\": [\n    {\n      \"attribute_group_id\": 1,\n      \"attribute_value_id\": 6\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/products?id=42",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "products"
                  ],
                  "query": [
                    {
                      "key": "id",
                      "value": "42",
                      "description": "Güncellenecek ürün ID — id veya code parametrelerinden en az biri zorunludur"
                    },
                    {
                      "key": "code",
                      "value": "",
                      "description": "Ürün kodu (alternatif olarak id yerine kullanılabilir)",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"message\": \"Product updated successfully.\",\n    \"product_id\": 42\n  }\n}"
            }
          ]
        },
        {
          "name": "Toplu Ürün Güncelle",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"products\": [\n    {\n      \"id\": 42,\n      \"price\": 199.9,\n      \"stock\": 50,\n      \"status\": \"active\"\n    },\n    {\n      \"code\": \"PRD-002\",\n      \"price\": 249.9,\n      \"stock\": 30,\n      \"status\": \"inactive\"\n    },\n    {\n      \"id\": 45,\n      \"old_price\": 300.0,\n      \"showcase\": {\n        \"is_featured\": true,\n        \"has_discount\": true,\n        \"new_ticket\": false\n      }\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/products/bulk",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products",
                "bulk"
              ]
            },
            "description": "Birden fazla ürünü tek istekle günceller.\n\n- Tek istekte en fazla **50 ürün** gönderilebilir\n- `id` veya `code` ile ürün belirlenir (ikisi de verilirse `id` önceliklidir)\n- Yalnızca skaler ve nesne alanlar güncellenebilir\n- `languages[]`, `images[]`, `variants{}`, `attributes[]`, `*_ids[]` ilişki dizileri **desteklenmez** — bunlar için tekil `PATCH /products?id=` kullanın\n\n**Yanıtta:**\n- `updated_ids[]`: başarıyla güncellenen ürün ID'leri\n- `skipped[]`: bulunamayan veya güncellenecek alanı olmayan ürünlerin `id` ya da `code` değerleri\n\n**Rate limit:** 60 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"products\": [\n    {\n      \"id\": 42,\n      \"price\": 199.9,\n      \"stock\": 50,\n      \"status\": \"active\"\n    },\n    {\n      \"code\": \"PRD-002\",\n      \"price\": 249.9,\n      \"stock\": 30,\n      \"status\": \"inactive\"\n    },\n    {\n      \"id\": 45,\n      \"old_price\": 300.0,\n      \"showcase\": {\n        \"is_featured\": true,\n        \"has_discount\": true,\n        \"new_ticket\": false\n      }\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/products/bulk",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "products",
                    "bulk"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"message\": \"Bulk update completed.\",\n    \"updated_ids\": [\n      42,\n      45\n    ],\n    \"updated_count\": 2,\n    \"skipped\": [\n      \"PRD-002\"\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Ürün Sil",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/products",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "products"
              ],
              "query": [
                {
                  "key": "ids",
                  "value": "42,43,44",
                  "description": "Silinecek ürün ID'leri (virgülle ayrılmış, max 50)"
                },
                {
                  "key": "codes",
                  "value": "",
                  "description": "Silinecek ürün kodları (virgülle ayrılmış)"
                }
              ]
            },
            "description": "Belirtilen ürünleri siler.\n\n- `ids`: ürün ID'leri, virgülle ayrılmış (örn: `42,43`)\n- `codes`: ürün kodları, virgülle ayrılmış (örn: `PRD-001,PRD-002`)\n- `ids` ve `codes` birlikte kullanılabilir\n- Silme işlemi ürünün adres kayıtlarını, görsel dosyalarını, varyantları ve ilişkili kayıtları da temizler; aynı adrese tanımlı yönlendirmeler korunur\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/products",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "products"
                  ],
                  "query": [
                    {
                      "key": "ids",
                      "value": "42,43,44",
                      "description": "Silinecek ürün ID'leri (virgülle ayrılmış, max 50)"
                    },
                    {
                      "key": "codes",
                      "value": "",
                      "description": "Silinecek ürün kodları (virgülle ayrılmış)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"message\": \"Products deleted successfully.\",\n    \"deleted_ids\": [\n      42,\n      43,\n      44\n    ],\n    \"count\": 3\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Varyantlar",
      "description": "Varyant tipleri (Renk, Beden vb.) ve değerlerini yönetir. `filter_status` / `image_status` alanları her zaman `\"active\"` veya `\"inactive\"` string olarak gönderilir ve döner. `values[]` PATCH'te tam değiştirme değildir — `option_value_id` verilirse güncelleme, verilmezse yeni değer eklenir.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Varyantlar Listesi",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/variants",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variants"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "",
                  "description": "Varyant adına göre arama (LIKE)"
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID (varsayılan: 1 = TR)"
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralama alanı: id | name | sort"
                },
                {
                  "key": "order",
                  "value": "asc",
                  "description": "Sıralama yönü: asc | desc"
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa numarası (varsayılan: 1)"
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "Sayfa başına kayıt (1–500, varsayılan: 100)"
                }
              ]
            },
            "description": "Varyant tiplerini sayfalı olarak listeler. Her kayıtta o varyanta ait değer sayısı (`value_count`) döner.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/variants",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "variants"
                  ],
                  "query": [
                    {
                      "key": "search",
                      "value": "",
                      "description": "Varyant adına göre arama (LIKE)"
                    },
                    {
                      "key": "lang_id",
                      "value": "1",
                      "description": "Dil ID (varsayılan: 1 = TR)"
                    },
                    {
                      "key": "sort",
                      "value": "id",
                      "description": "Sıralama alanı: id | name | sort"
                    },
                    {
                      "key": "order",
                      "value": "asc",
                      "description": "Sıralama yönü: asc | desc"
                    },
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Sayfa numarası (varsayılan: 1)"
                    },
                    {
                      "key": "limit",
                      "value": "100",
                      "description": "Sayfa başına kayıt (1–500, varsayılan: 100)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"total\": 5,\n    \"page\": 1,\n    \"limit\": 100,\n    \"items\": [\n      {\n        \"option_id\": \"1\",\n        \"name\": \"Renk\",\n        \"type\": \"select\",\n        \"sort_order\": \"0\",\n        \"filter_status\": \"active\",\n        \"image_status\": \"active\",\n        \"value_count\": \"8\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Varyant Detayı",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/variants/detail",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variants",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Varyant ID (zorunlu)"
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID (varsayılan: 1 = TR)"
                }
              ]
            },
            "description": "Belirtilen varyant tipinin bilgilerini ve tüm değerlerini döner. `values[].image` tam URL olarak döner.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/variants/detail",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "variants",
                    "detail"
                  ],
                  "query": [
                    {
                      "key": "id",
                      "value": "1",
                      "description": "Varyant ID (zorunlu)"
                    },
                    {
                      "key": "lang_id",
                      "value": "1",
                      "description": "Dil ID (varsayılan: 1 = TR)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"option_id\": \"1\",\n    \"name\": \"Renk\",\n    \"type\": \"select\",\n    \"sort_order\": \"0\",\n    \"filter_status\": \"active\",\n    \"image_status\": \"active\",\n    \"values\": [\n      {\n        \"option_value_id\": \"5\",\n        \"name\": \"Kırmızı\",\n        \"image\": \"https://example.com/uploads/options/kirmizi.png\",\n        \"sort_order\": \"0\"\n      },\n      {\n        \"option_value_id\": \"6\",\n        \"name\": \"Mavi\",\n        \"image\": \"\",\n        \"sort_order\": \"1\"\n      }\n    ]\n  }\n}"
            },
            {
              "name": "Hata — Bulunamadı",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/variants/detail",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "variants",
                    "detail"
                  ],
                  "query": [
                    {
                      "key": "id",
                      "value": "1",
                      "description": "Varyant ID (zorunlu)"
                    },
                    {
                      "key": "lang_id",
                      "value": "1",
                      "description": "Dil ID (varsayılan: 1 = TR)"
                    }
                  ]
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": false,\n  \"error\": \"not_found\",\n  \"message\": \"Variant not found.\"\n}"
            }
          ]
        },
        {
          "name": "Varyant Ekle",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Renk\"\n    },\n    {\n      \"lang_id\": 2,\n      \"name\": \"Color\"\n    },\n    {\n      \"lang_id\": 3,\n      \"name\": \"اللون\"\n    },\n    {\n      \"lang_id\": 4,\n      \"name\": \"Farbe\"\n    },\n    {\n      \"lang_id\": 5,\n      \"name\": \"Couleur\"\n    },\n    {\n      \"lang_id\": 6,\n      \"name\": \"Цвет\"\n    },\n    {\n      \"lang_id\": 7,\n      \"name\": \"Rəng\"\n    }\n  ],\n  \"sort\": 0,\n  \"filter_status\": \"active\",\n  \"image_status\": \"active\",\n  \"values\": [\n    {\n      \"sort\": 0,\n      \"image\": \"https://example.com/kirmizi.png\",\n      \"languages\": [\n        {\n          \"lang_id\": 1,\n          \"name\": \"Kırmızı\"\n        },\n        {\n          \"lang_id\": 2,\n          \"name\": \"Red\"\n        }\n      ]\n    },\n    {\n      \"sort\": 1,\n      \"image\": \"\",\n      \"languages\": [\n        {\n          \"lang_id\": 1,\n          \"name\": \"Mavi\"\n        },\n        {\n          \"lang_id\": 2,\n          \"name\": \"Blue\"\n        }\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/variants",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variants"
              ]
            },
            "description": "Yeni varyant tipi ve isteğe bağlı başlangıç değerleri oluşturur.\n\n- `languages[]` tüm aktif diller için zorunludur (allActiveLangs)\n- `filter_status` / `image_status`: `\"active\"` veya `\"inactive\"` (varsayılan: `\"inactive\"`)\n- `values[].image`: `https` veya `http` URL olmalıdır (max 2048 karakter); sistem görseli indirir (ImageManager). Görsel gönderilmeyecekse alanı boş bırakın\n- Tüm DB yazımları (varyant + dil tanımları + değerler) **tek transaction** içinde gerçekleşir; görsel indirme işlemi transaction başlamadan önce yapılır, herhangi bir hata durumunda indirilen dosyalar otomatik olarak silinir\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Renk\"\n    },\n    {\n      \"lang_id\": 2,\n      \"name\": \"Color\"\n    },\n    {\n      \"lang_id\": 3,\n      \"name\": \"اللون\"\n    },\n    {\n      \"lang_id\": 4,\n      \"name\": \"Farbe\"\n    },\n    {\n      \"lang_id\": 5,\n      \"name\": \"Couleur\"\n    },\n    {\n      \"lang_id\": 6,\n      \"name\": \"Цвет\"\n    },\n    {\n      \"lang_id\": 7,\n      \"name\": \"Rəng\"\n    }\n  ],\n  \"sort\": 0,\n  \"filter_status\": \"active\",\n  \"image_status\": \"active\",\n  \"values\": [\n    {\n      \"sort\": 0,\n      \"image\": \"https://example.com/kirmizi.png\",\n      \"languages\": [\n        {\n          \"lang_id\": 1,\n          \"name\": \"Kırmızı\"\n        },\n        {\n          \"lang_id\": 2,\n          \"name\": \"Red\"\n        }\n      ]\n    },\n    {\n      \"sort\": 1,\n      \"image\": \"\",\n      \"languages\": [\n        {\n          \"lang_id\": 1,\n          \"name\": \"Mavi\"\n        },\n        {\n          \"lang_id\": 2,\n          \"name\": \"Blue\"\n        }\n      ]\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/variants",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "variants"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"message\": \"Variant created successfully.\",\n    \"option_id\": 12\n  }\n}"
            }
          ]
        },
        {
          "name": "Varyant Güncelle",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Renk (Güncel)\"\n    },\n    {\n      \"lang_id\": 2,\n      \"name\": \"Color (Updated)\"\n    }\n  ],\n  \"sort\": 1,\n  \"filter_status\": \"active\",\n  \"image_status\": \"inactive\",\n  \"values\": [\n    {\n      \"option_value_id\": 5,\n      \"sort\": 0,\n      \"image\": \"https://example.com/yeni-kirmizi.png\",\n      \"languages\": [\n        {\n          \"lang_id\": 1,\n          \"name\": \"Kırmızı\"\n        },\n        {\n          \"lang_id\": 2,\n          \"name\": \"Red\"\n        }\n      ]\n    },\n    {\n      \"sort\": 2,\n      \"languages\": [\n        {\n          \"lang_id\": 1,\n          \"name\": \"Sarı\"\n        },\n        {\n          \"lang_id\": 2,\n          \"name\": \"Yellow\"\n        }\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/variants?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variants"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Güncellenecek varyant ID (zorunlu)"
                }
              ]
            },
            "description": "Mevcut varyant tipini günceller. Sadece gönderilen alanlar işlenir. Gövdede `languages` dizisi bulunmalıdır; gönderilen dil öğelerinde mevcut adları da gönderin.\n\n**`values[]` davranışı (tam değiştirme DEĞİL):**\n- `option_value_id` verilirse: o değer güncellenir (`sort`, `image`, `languages` — sadece gönderilenler)\n- `option_value_id` verilmezse: yeni değer eklenir\n- Değer silmek için bu endpoint kullanılmaz; silinecek değerler bu diziden çıkarılsa bile silinmez\n\n**`values[].image`:** `https` veya `http` URL olmalıdır (max 2048 karakter). URL gönderilirse yeni görsel indirilir; eski görsel silinir\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Renk (Güncel)\"\n    },\n    {\n      \"lang_id\": 2,\n      \"name\": \"Color (Updated)\"\n    }\n  ],\n  \"sort\": 1,\n  \"filter_status\": \"active\",\n  \"image_status\": \"inactive\",\n  \"values\": [\n    {\n      \"option_value_id\": 5,\n      \"sort\": 0,\n      \"image\": \"https://example.com/yeni-kirmizi.png\",\n      \"languages\": [\n        {\n          \"lang_id\": 1,\n          \"name\": \"Kırmızı\"\n        },\n        {\n          \"lang_id\": 2,\n          \"name\": \"Red\"\n        }\n      ]\n    },\n    {\n      \"sort\": 2,\n      \"languages\": [\n        {\n          \"lang_id\": 1,\n          \"name\": \"Sarı\"\n        },\n        {\n          \"lang_id\": 2,\n          \"name\": \"Yellow\"\n        }\n      ]\n    }\n  ]\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/variants?id=1",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "variants"
                  ],
                  "query": [
                    {
                      "key": "id",
                      "value": "1",
                      "description": "Güncellenecek varyant ID (zorunlu)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"message\": \"Variant updated successfully.\",\n    \"option_id\": 1\n  }\n}"
            }
          ]
        },
        {
          "name": "Varyant Sil",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/variants?ids=1,2",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "variants"
              ],
              "query": [
                {
                  "key": "ids",
                  "value": "1,2",
                  "description": "Silinecek varyant ID'leri, virgülle ayrılmış (zorunlu)"
                }
              ]
            },
            "description": "Belirtilen varyant tiplerini ve bağlı tüm değerlerini siler.\n\n- `ids`: silinecek varyant ID'leri, virgülle ayrılmış (örn: `1,2,3`)\n- Tek istekte en fazla **50 ID** gönderilebilir\n- Bulunamayan ID'ler sessizce atlanır; en az bir geçerli ID olmalıdır\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/variants?ids=1,2",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "variants"
                  ],
                  "query": [
                    {
                      "key": "ids",
                      "value": "1,2",
                      "description": "Silinecek varyant ID'leri, virgülle ayrılmış (zorunlu)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"message\": \"Variants deleted successfully.\",\n    \"deleted_ids\": [\n      1,\n      2\n    ],\n    \"count\": 2\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Özellik Grupları",
      "description": "> Ürün özellik gruplarına (Renk, Materyal vb.) ve özellik değerlerine ait işlemler. Her grup; özellikler (attributes) ve değerlerden (values) oluşur.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Özellik Grubu Listesi",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/attributes",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "attributes"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "renk",
                  "description": "Grup adında arama; Max 100 karakter",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "active",
                  "description": "Durum filtresi; Values: active / inactive",
                  "disabled": true
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralanacak Alan; Values: id / name / sort / status",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "asc",
                  "description": "Sıralama Yönü; Values: asc / desc",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa Numarası; Min: 1",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "Sayfa Limiti; Min: 1 Max: 500",
                  "disabled": true
                }
              ]
            },
            "description": "### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| search | string | Grup adında arama; Max 100 karakter |\n| status | string | Durum filtresi; Values: active / inactive |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1) |\n| sort | string | Sıralanacak Alan; Values: id / name / sort / status |\n| order | string | Sıralama Yönü; Values: asc / desc |\n| page | integer | Sayfa Numarası; Min: 1 |\n| limit | integer | Limit; Min: 1 Max: 500 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"items\": [\n            {\n                \"id\": 1,\n                \"name\": \"Renk\",\n                \"status\": \"active\",\n                \"filter_status\": \"active\",\n                \"sort\": 0,\n                \"created_at\": 1714500000,\n                \"updated_at\": 1714500000,\n                \"created_at_local\": \"30.04.2024 12:00:00\",\n                \"updated_at_local\": \"30.04.2024 12:00:00\"\n            },\n            {\n                \"id\": 2,\n                \"name\": \"Materyal\",\n                \"status\": \"active\",\n                \"filter_status\": \"inactive\",\n                \"sort\": 1,\n                \"created_at\": 1714600000,\n                \"updated_at\": 1714600000,\n                \"created_at_local\": \"01.05.2024 16:26:40\",\n                \"updated_at_local\": \"01.05.2024 16:26:40\"\n            }\n        ],\n        \"pager\": {\n            \"currentPage\": 1,\n            \"totalPages\": 1,\n            \"totalRecords\": 2\n        }\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Özellik Grubu Detayı",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/attributes/detail",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "attributes",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Özellik Grubu ID",
                  "disabled": false
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ",
                  "disabled": true
                }
              ]
            },
            "description": "> `id` parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Özellik Grubu ID |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1) |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"attribute_id\": 1,\n        \"name\": \"Renk\",\n        \"status\": \"active\",\n        \"filter_status\": \"active\",\n        \"sort\": 0,\n        \"created_at\": 1714500000,\n        \"updated_at\": 1714500000,\n        \"created_at_local\": \"30.04.2024 12:00:00\",\n        \"updated_at_local\": \"30.04.2024 12:00:00\",\n        \"attributes\": [\n            {\n                \"attribute_id\": 3,\n                \"sort\": 0,\n                \"status\": \"active\",\n                \"show_type\": 0,\n                \"languages\": [\n                    { \"lang_id\": 1, \"name\": \"Renk Seçenekleri\" },\n                    { \"lang_id\": 2, \"name\": \"Color Options\" },\n                    { \"lang_id\": 3, \"name\": \"خيارات اللون\" },\n                    { \"lang_id\": 4, \"name\": \"Farboptionen\" },\n                    { \"lang_id\": 5, \"name\": \"Options de couleur\" },\n                    { \"lang_id\": 6, \"name\": \"Цветовые варианты\" },\n                    { \"lang_id\": 7, \"name\": \"Rəng Seçimləri\" }\n                ],\n                \"values\": [\n                    {\n                        \"attribute_value_id\": 7,\n                        \"sort\": 0,\n                        \"status\": \"active\",\n                        \"languages\": [\n                            { \"lang_id\": 1, \"name\": \"Kırmızı\", \"image\": \"\" },\n                            { \"lang_id\": 2, \"name\": \"Red\", \"image\": \"\" },\n                            { \"lang_id\": 3, \"name\": \"أحمر\", \"image\": \"\" },\n                            { \"lang_id\": 4, \"name\": \"Rot\", \"image\": \"\" },\n                            { \"lang_id\": 5, \"name\": \"Rouge\", \"image\": \"\" },\n                            { \"lang_id\": 6, \"name\": \"Красный\", \"image\": \"\" },\n                            { \"lang_id\": 7, \"name\": \"Qırmızı\", \"image\": \"\" }\n                        ]\n                    },\n                    {\n                        \"attribute_value_id\": 8,\n                        \"sort\": 1,\n                        \"status\": \"active\",\n                        \"languages\": [\n                            { \"lang_id\": 1, \"name\": \"Siyah\", \"image\": \"\" },\n                            { \"lang_id\": 2, \"name\": \"Black\", \"image\": \"\" },\n                            { \"lang_id\": 3, \"name\": \"أسود\", \"image\": \"\" },\n                            { \"lang_id\": 4, \"name\": \"Schwarz\", \"image\": \"\" },\n                            { \"lang_id\": 5, \"name\": \"Noir\", \"image\": \"\" },\n                            { \"lang_id\": 6, \"name\": \"Чёрный\", \"image\": \"\" },\n                            { \"lang_id\": 7, \"name\": \"Qara\", \"image\": \"\" }\n                        ]\n                    }\n                ]\n            }\n        ]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Özellik Grubu Ekle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"languages\": [\n        { \"lang_id\": 1, \"name\": \"Renk\" },\n        { \"lang_id\": 2, \"name\": \"Color\" },\n        { \"lang_id\": 3, \"name\": \"اللون\" },\n        { \"lang_id\": 4, \"name\": \"Farbe\" },\n        { \"lang_id\": 5, \"name\": \"Couleur\" },\n        { \"lang_id\": 6, \"name\": \"Цвет\" },\n        { \"lang_id\": 7, \"name\": \"Rəng\" }\n    ],\n    \"status\": \"active\",\n    \"filter_status\": \"active\",\n    \"sort\": 0,\n    \"attributes\": [\n        {\n            \"sort\": 0,\n            \"status\": \"active\",\n            \"show_type\": 0,\n            \"languages\": [\n                { \"lang_id\": 1, \"name\": \"Renk Seçenekleri\" },\n                { \"lang_id\": 2, \"name\": \"Color Options\" },\n                { \"lang_id\": 3, \"name\": \"خيارات اللون\" },\n                { \"lang_id\": 4, \"name\": \"Farboptionen\" },\n                { \"lang_id\": 5, \"name\": \"Options de couleur\" },\n                { \"lang_id\": 6, \"name\": \"Цветовые варианты\" },\n                { \"lang_id\": 7, \"name\": \"Rəng Seçimləri\" }\n            ],\n            \"values\": [\n                {\n                    \"sort\": 0,\n                    \"status\": \"active\",\n                    \"languages\": [\n                        { \"lang_id\": 1, \"name\": \"Kırmızı\", \"image\": \"\" },\n                        { \"lang_id\": 2, \"name\": \"Red\", \"image\": \"\" },\n                        { \"lang_id\": 3, \"name\": \"أحمر\", \"image\": \"\" },\n                        { \"lang_id\": 4, \"name\": \"Rot\", \"image\": \"\" },\n                        { \"lang_id\": 5, \"name\": \"Rouge\", \"image\": \"\" },\n                        { \"lang_id\": 6, \"name\": \"Красный\", \"image\": \"\" },\n                        { \"lang_id\": 7, \"name\": \"Qırmızı\", \"image\": \"\" }\n                    ]\n                },\n                {\n                    \"sort\": 1,\n                    \"status\": \"active\",\n                    \"languages\": [\n                        { \"lang_id\": 1, \"name\": \"Siyah\", \"image\": \"\" },\n                        { \"lang_id\": 2, \"name\": \"Black\", \"image\": \"\" },\n                        { \"lang_id\": 3, \"name\": \"أسود\", \"image\": \"\" },\n                        { \"lang_id\": 4, \"name\": \"Schwarz\", \"image\": \"\" },\n                        { \"lang_id\": 5, \"name\": \"Noir\", \"image\": \"\" },\n                        { \"lang_id\": 6, \"name\": \"Чёрный\", \"image\": \"\" },\n                        { \"lang_id\": 7, \"name\": \"Qara\", \"image\": \"\" }\n                    ]\n                }\n            ]\n        }\n    ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/attributes",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "attributes"
              ]
            },
            "description": "> `languages` alanı zorunludur; tüm aktif diller için gönderilmesi gerekir.\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array - required | Grup adları; tüm aktif diller için gönderilmeli (allActiveLangs) |\n| languages.*.lang_id | integer - required | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ |\n| languages.*.name | string - required | Grup adı; Max 255 karakter |\n| status | string | Durum; Values: active / inactive (varsayılan: active) |\n| filter_status | string | Filtre durumu; Values: active / inactive (varsayılan: inactive) |\n| sort | integer | Sıralama; Min: 0 (varsayılan: 0) |\n| attributes | array | Özellikler listesi; Max: 50 özellik |\n| attributes.*.sort | integer | Özellik sıralaması; Min: 0 (varsayılan: 0) |\n| attributes.*.status | string | Özellik durumu; Values: active / inactive (varsayılan: inactive) |\n| attributes.*.show_type | integer | Gösterim tipi; Values: 0 (Görsel) / 1 (Metin) / 2 (Görsel ve Metin) (varsayılan: 0) |\n| attributes.*.languages | array | Özelliğe ait dil verileri; tüm aktif diller gönderilmeli |\n| attributes.*.languages.*.lang_id | integer | Dil ID |\n| attributes.*.languages.*.name | string | Özellik adı; Max 255 karakter |\n| attributes.*.values | array | Özelliğe ait değerler; Max: 200 değer |\n| attributes.*.values.*.sort | integer | Değer sıralaması; Min: 0 |\n| attributes.*.values.*.status | string | Değer durumu; Values: active / inactive |\n| attributes.*.values.*.languages | array | Değere ait dil verileri; tüm aktif diller gönderilmeli |\n| attributes.*.values.*.languages.*.lang_id | integer | Dil ID |\n| attributes.*.values.*.languages.*.name | string | Değer adı; Max 255 karakter |\n| attributes.*.values.*.languages.*.image | string | Dile özgü görsel URL'i (opsiyonel); indirilip kaydedilir |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Attribute group created successfully.\",\n        \"group_id\": 3\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Özellik Grubu Düzenle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"languages\": [\n        { \"lang_id\": 1, \"name\": \"Renk (Güncel)\" },\n        { \"lang_id\": 2, \"name\": \"Color (Updated)\" }\n    ],\n    \"status\": \"active\",\n    \"filter_status\": \"active\",\n    \"sort\": 1,\n    \"attributes\": [\n        {\n            \"attribute_id\": 3,\n            \"sort\": 0,\n            \"status\": \"active\",\n            \"show_type\": 0,\n            \"languages\": [\n                { \"lang_id\": 1, \"name\": \"Renk Seçenekleri (Güncel)\" },\n                { \"lang_id\": 2, \"name\": \"Color Options (Updated)\" }\n            ],\n            \"values\": [\n                {\n                    \"attribute_value_id\": 7,\n                    \"sort\": 0,\n                    \"status\": \"active\",\n                    \"languages\": [\n                        { \"lang_id\": 1, \"name\": \"Kırmızı\", \"image\": \"\" },\n                        { \"lang_id\": 2, \"name\": \"Red\", \"image\": \"\" }\n                    ]\n                },\n                {\n                    \"sort\": 2,\n                    \"status\": \"active\",\n                    \"languages\": [\n                        { \"lang_id\": 1, \"name\": \"Mavi\", \"image\": \"\" },\n                        { \"lang_id\": 2, \"name\": \"Blue\", \"image\": \"\" }\n                    ]\n                }\n            ]\n        },\n        {\n            \"sort\": 1,\n            \"status\": \"active\",\n            \"show_type\": 0,\n            \"languages\": [\n                { \"lang_id\": 1, \"name\": \"Yeni Özellik\" },\n                { \"lang_id\": 2, \"name\": \"New Attribute\" }\n            ]\n        }\n    ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/attributes?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "attributes"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Özellik Grubu ID"
                }
              ]
            },
            "description": "> Düzenleme için yalnızca değiştirmek istediğiniz alanları göndermeniz yeterlidir. Gönderilmeyen alanlar mevcut değerlerini korur.\n\n> Bir özelliği ya da değeri eklerken veya güncellerken `languages` dizisini **tüm aktif dillerle** gönderin; gönderilmeyen dillerin adları silinir. Özellik ve değerlerin `sort`, `status`, `show_type` alanları da yalnız aynı öğede `languages` gönderildiğinde işlenir.\n\n> `attributes: []` (boş dizi) gönderilirse gruba ait **tüm özellikler silinir**. `attributes` alanı gönderilmezse mevcut özellikler **korunur**.\n\n> `attributes` içinde `attribute_id` varsa mevcut özellik güncellenir; yoksa **yeni özellik eklenir**. `attribute_id` gönderilmeyen mevcut özellikler **silinmez**.\n\n> `values` key gönderilmezse o özelliğin değerleri **korunur**. `values: []` gönderilirse o özelliğin **tüm değerleri silinir**.\n\n> `values` içinde `attribute_value_id` varsa mevcut değer güncellenir; yoksa **yeni değer eklenir**.\n\n> `id` query parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Özellik Grubu ID |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array | Grup adları; gönderilen diller upsert edilir |\n| languages.*.lang_id | integer | Dil ID |\n| languages.*.name | string | Grup adı; Max 255 karakter |\n| status | string | Durum; Values: active / inactive |\n| filter_status | string | Filtre durumu; Values: active / inactive |\n| sort | integer | Sıralama; Min: 0 |\n| attributes | array | Özellikler; boş dizi → tümünü sil; Max: 50 özellik |\n| attributes.*.attribute_id | integer | Mevcut özellik ID; varsa günceller, yoksa yeni ekler |\n| attributes.*.sort | integer | Özellik sıralaması; Min: 0 |\n| attributes.*.status | string | Özellik durumu; Values: active / inactive |\n| attributes.*.show_type | integer | Gösterim tipi; Values: 0 (Görsel) / 1 (Metin) / 2 (Görsel ve Metin) |\n| attributes.*.languages | array | Özelliğe ait dil verileri |\n| attributes.*.languages.*.lang_id | integer | Dil ID |\n| attributes.*.languages.*.name | string | Özellik adı; Max 255 karakter |\n| attributes.*.values | array | Değerler; key yoksa dokunulmaz, boş dizi → tümünü sil; Max: 200 değer |\n| attributes.*.values.*.attribute_value_id | integer | Mevcut değer ID; varsa günceller, yoksa yeni ekler |\n| attributes.*.values.*.sort | integer | Değer sıralaması; Min: 0 |\n| attributes.*.values.*.status | string | Değer durumu; Values: active / inactive |\n| attributes.*.values.*.languages | array | Değere ait dil verileri |\n| attributes.*.values.*.languages.*.lang_id | integer | Dil ID |\n| attributes.*.values.*.languages.*.name | string | Değer adı; Max 255 karakter |\n| attributes.*.values.*.languages.*.image | string | Dile özgü görsel URL'i (opsiyonel); yeni URL gelirse indirilip güncellenir, gelmezse mevcut korunur |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Attribute group updated successfully.\",\n        \"group_id\": 1\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Özellik Grubu Sil",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/attributes?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "attributes"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Silinecek özellik grubu ID'leri; virgülle ayırarak birden fazla gönderilebilir. Örn: 1,2,3"
                }
              ]
            },
            "description": "> Bu işlem; grubu, tüm özelliklerini, tüm değerlerini ve dil kayıtlarını kalıcı olarak siler. Geri alınamaz.\n\n> Birden fazla grup aynı anda silinebilir.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | string - required | Silinecek özellik grubu ID'leri; virgülle ayrılmış. Örn: 1,2,3 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Attribute group deleted successfully.\",\n        \"deleted_ids\": [1]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Markalar",
      "description": "> Ürün markalarına ait işlemler. Her marka; çok dilli ad, açıklama, SEO ve yetkili satıcı belgesi (auth_doc) bilgilerini içerir.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Marka Listesi",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/brands",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "brands"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "nike",
                  "description": "Marka adı veya URL'de arama; Max 100 karakter",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "active",
                  "description": "Durum filtresi; Values: active / inactive",
                  "disabled": true
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralanacak Alan; Values: id / name / order / status",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "asc",
                  "description": "Sıralama Yönü; Values: asc / desc",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa Numarası; Min: 1",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "Sayfa Limiti; Min: 1 Max: 500",
                  "disabled": true
                }
              ]
            },
            "description": "### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| search | string | Marka adı veya URL'de arama; Max 100 karakter |\n| status | string | Durum filtresi; Values: active / inactive |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1) |\n| sort | string | Sıralanacak Alan; Values: id / name / order / status |\n| order | string | Sıralama Yönü; Values: asc / desc |\n| page | integer | Sayfa Numarası; Min: 1 |\n| limit | integer | Limit; Min: 1 Max: 500 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"items\": [\n            {\n                \"id\": 1,\n                \"status\": \"active\",\n                \"image\": \"https://www.example.com/uploads/markalar/nike.png\",\n                \"order\": 0,\n                \"lang_id\": 1,\n                \"name\": \"Nike\",\n                \"url\": \"https://www.example.com/nike\",\n                \"created_at\": 1714500000,\n                \"updated_at\": 1714500000,\n                \"created_at_local\": \"30.04.2024 12:00:00\",\n                \"updated_at_local\": \"30.04.2024 12:00:00\"\n            },\n            {\n                \"id\": 2,\n                \"status\": \"active\",\n                \"image\": \"\",\n                \"order\": 1,\n                \"lang_id\": 1,\n                \"name\": \"Adidas\",\n                \"url\": \"https://www.example.com/adidas\",\n                \"created_at\": 1714600000,\n                \"updated_at\": 1714600000,\n                \"created_at_local\": \"01.05.2024 16:26:40\",\n                \"updated_at_local\": \"01.05.2024 16:26:40\"\n            }\n        ],\n        \"pager\": {\n            \"currentPage\": 1,\n            \"totalPages\": 1,\n            \"totalRecords\": 2\n        }\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Marka Detayı",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/brands/detail",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "brands",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Marka ID",
                  "disabled": false
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ",
                  "disabled": true
                }
              ]
            },
            "description": "> `id` parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Marka ID |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1) |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"id\": 1,\n        \"lang_id\": 1,\n        \"order\": 0,\n        \"image\": \"https://www.example.com/uploads/markalar/nike.png\",\n        \"status\": \"active\",\n        \"filter_status\": \"active\",\n        \"image_status\": \"inactive\",\n        \"auth_doc_status\": \"inactive\",\n        \"auth_doc_sub\": \"\",\n        \"auth_doc_main\": \"\",\n        \"auth_doc_desc\": \"\",\n        \"name\": \"Nike\",\n        \"description\": \"<p>Nike hakkında açıklama</p>\",\n        \"permalink\": \"nike\",\n        \"url\": \"https://www.example.com/nike\",\n        \"meta_title\": \"Nike - Spor Ayakkabı ve Giyim\",\n        \"meta_description\": \"Nike ürünlerini keşfedin.\",\n        \"meta_keywords\": \"nike, spor, ayakkabı\",\n        \"created_at\": 1714500000,\n        \"updated_at\": 1714500000,\n        \"created_at_local\": \"30.04.2024 12:00:00\",\n        \"updated_at_local\": \"30.04.2024 12:00:00\"\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Marka Ekle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"languages\": [\n        {\n            \"lang_id\": 1,\n            \"name\": \"Nike\",\n            \"description\": \"<p>Nike hakkında açıklama</p>\",\n            \"permalink\": \"nike\",\n            \"meta_title\": \"Nike - Spor Ayakkabı ve Giyim\",\n            \"meta_description\": \"Nike ürünlerini keşfedin.\",\n            \"meta_keywords\": \"nike, spor, ayakkabı\",\n            \"auth_doc_sub\": \"\",\n            \"auth_doc_main\": \"\",\n            \"auth_doc_desc\": \"\"\n        },\n        {\n            \"lang_id\": 2,\n            \"name\": \"Nike\",\n            \"description\": \"<p>About Nike</p>\",\n            \"permalink\": \"nike\",\n            \"meta_title\": \"Nike - Sports Shoes & Clothing\",\n            \"meta_description\": \"Discover Nike products.\",\n            \"meta_keywords\": \"nike, sport, shoes\",\n            \"auth_doc_sub\": \"\",\n            \"auth_doc_main\": \"\",\n            \"auth_doc_desc\": \"\"\n        },\n        { \"lang_id\": 3, \"name\": \"نايك\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\", \"auth_doc_sub\": \"\", \"auth_doc_main\": \"\", \"auth_doc_desc\": \"\" },\n        { \"lang_id\": 4, \"name\": \"Nike\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\", \"auth_doc_sub\": \"\", \"auth_doc_main\": \"\", \"auth_doc_desc\": \"\" },\n        { \"lang_id\": 5, \"name\": \"Nike\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\", \"auth_doc_sub\": \"\", \"auth_doc_main\": \"\", \"auth_doc_desc\": \"\" },\n        { \"lang_id\": 6, \"name\": \"Найк\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\", \"auth_doc_sub\": \"\", \"auth_doc_main\": \"\", \"auth_doc_desc\": \"\" },\n        { \"lang_id\": 7, \"name\": \"Nike\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\", \"auth_doc_sub\": \"\", \"auth_doc_main\": \"\", \"auth_doc_desc\": \"\" }\n    ],\n    \"status\": \"active\",\n    \"filter_status\": \"inactive\",\n    \"auth_doc_status\": \"inactive\",\n    \"image_status\": \"inactive\",\n    \"order\": 0,\n    \"image\": \"https://example.com/nike-logo.png\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/brands",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "brands"
              ]
            },
            "description": "> `languages` alanı zorunludur; tüm aktif diller için gönderilmesi gerekir.\n\n> `permalink` gönderilmezse `name` alanından otomatik oluşturulur. Aynı permalink sistemde varsa otomatik suffix eklenir (örn. `nike-1`).\n\n> `image` olarak geçerli bir URL gönderilirse görsel indirilip sunucuya kaydedilir.\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array - required | Dil verileri; tüm aktif diller için gönderilmeli (allActiveLangs) |\n| languages.*.lang_id | integer - required | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ |\n| languages.*.name | string - required | Marka adı; Min 1 Max 255 karakter |\n| languages.*.description | string | Marka açıklaması; HTML içerik kabul edilir; Max 100000 karakter |\n| languages.*.permalink | string | SEO URL; Max 255 karakter; boş bırakılırsa name'den otomatik üretilir |\n| languages.*.meta_title | string | Meta başlık; Max 255 karakter |\n| languages.*.meta_description | string | Meta açıklama; Max 500 karakter |\n| languages.*.meta_keywords | string | Meta anahtar kelimeler; Max 500 karakter |\n| languages.*.auth_doc_sub | string | Yetkili satıcı belgesi alt başlık; Max 255 karakter |\n| languages.*.auth_doc_main | string | Yetkili satıcı belgesi ana başlık; Max 255 karakter |\n| languages.*.auth_doc_desc | string | Yetkili satıcı belgesi açıklaması; HTML içerik kabul edilir; Max 100000 karakter |\n| status | string | Durum; Values: active / inactive (varsayılan: active) |\n| filter_status | string | Filtre durumu; Values: active / inactive (varsayılan: inactive) |\n| auth_doc_status | string | Yetkili satıcı belgesi durumu; Values: active / inactive (varsayılan: inactive) |\n| image_status | string | Görsel durumu; Values: active / inactive (varsayılan: inactive) |\n| order | integer | Sıralama; Min 0 Max 99999 (varsayılan: 0) |\n| image | string | Marka görseli URL'i; geçerli URL olmalı; indirilip kaydedilir |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Brand created successfully.\",\n        \"brand_id\": 3\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Marka Düzenle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"languages\": [\n        {\n            \"lang_id\": 1,\n            \"name\": \"Nike (Güncel)\",\n            \"meta_title\": \"Nike - Yeni Sezon\"\n        },\n        {\n            \"lang_id\": 2,\n            \"name\": \"Nike (Updated)\",\n            \"meta_title\": \"Nike - New Season\"\n        }\n    ],\n    \"status\": \"active\",\n    \"filter_status\": \"active\",\n    \"order\": 1,\n    \"image\": \"https://example.com/nike-logo-new.png\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/brands?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "brands"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Marka ID"
                }
              ]
            },
            "description": "> Düzenleme için yalnızca değiştirmek istediğiniz alanları göndermeniz yeterlidir. Gönderilmeyen alanlar mevcut değerlerini korur.\n\n> `languages` içinde yalnızca gönderilen diller güncellenir (upsert). Gönderilmeyen dil kayıtları silinmez.\n\n> `permalink` bu endpoint üzerinden güncellenebilir; eski adres kaldırılır. Adresi değiştirmeyecekseniz `permalink` göndermeyin.\n\n> `id` query parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Marka ID |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array | Dil verileri; gönderilen diller upsert edilir; Max 20 giriş |\n| languages.*.lang_id | integer - required | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ |\n| languages.*.name | string | Marka adı; Min 1 Max 255 karakter |\n| languages.*.description | string | Marka açıklaması; HTML içerik kabul edilir; Max 100000 karakter |\n| languages.*.permalink | string | SEO URL; Max 255 karakter; adresi değiştirmeyecekseniz göndermeyin |\n| languages.*.meta_title | string | Meta başlık; Max 255 karakter |\n| languages.*.meta_description | string | Meta açıklama; Max 500 karakter |\n| languages.*.meta_keywords | string | Meta anahtar kelimeler; Max 500 karakter |\n| languages.*.doc_sub | string | Yetkili satıcı belgesi alt başlık; Max 255 karakter |\n| languages.*.doc_main | string | Yetkili satıcı belgesi ana başlık; Max 255 karakter |\n| languages.*.doc_desc | string | Yetkili satıcı belgesi açıklaması; HTML içerik kabul edilir; Max 100000 karakter |\n| status | string | Durum; Values: active / inactive |\n| filter_status | string | Filtre durumu; Values: active / inactive |\n| doc_status | string | Yetkili satıcı belgesi durumu; Values: active / inactive |\n| image_status | string | Görsel durumu; Values: active / inactive |\n| order | integer | Sıralama; Min 0 Max 99999 |\n| image | string | Marka görseli URL'i; yeni URL gelirse indirilip güncellenir |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Brand updated successfully.\",\n        \"brand_id\": 1\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Marka Sil",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/brands?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "brands"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Silinecek marka ID'leri; virgülle ayırarak birden fazla gönderilebilir. Örn: 1,2,3"
                }
              ]
            },
            "description": "> Bu işlem; markayı, tüm dil kayıtlarını, görselini ve route (SEO URL) kayıtlarını kalıcı olarak siler. Geri alınamaz.\n\n> Birden fazla marka aynı anda silinebilir.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | string - required | Silinecek marka ID'leri; virgülle ayrılmış. Örn: 1,2,3 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Brand deleted successfully.\",\n        \"deleted_ids\": [1]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Kataloglar",
      "description": "> Ürün kataloglarına ait işlemler. Her katalog; çok dilli ad, açıklama, SEO bilgileri ve kataloğa bağlı ürün listesini içerir.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Katalog Listesi",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/catalogs",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "catalogs"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "yaz",
                  "description": "Katalog adı veya URL'de arama; Max 200 karakter",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "active",
                  "description": "Durum filtresi; Values: active / inactive",
                  "disabled": true
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralanacak Alan; Values: id / name / sort / status",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "asc",
                  "description": "Sıralama Yönü; Values: asc / desc",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa Numarası; Min: 1",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "Sayfa Limiti; Min: 1 Max: 500",
                  "disabled": true
                }
              ]
            },
            "description": "### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| search | string | Katalog adı veya URL'de arama; Max 200 karakter |\n| status | string | Durum filtresi; Values: active / inactive |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1); yalnızca aktif diller kabul edilir |\n| sort | string | Sıralanacak Alan; Values: id / name / sort / status |\n| order | string | Sıralama Yönü; Values: asc / desc |\n| page | integer | Sayfa Numarası; Min: 1 |\n| limit | integer | Limit; Min: 1 Max: 500 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"items\": [\n            {\n                \"id\": 1,\n                \"status\": \"active\",\n                \"image\": \"https://www.example.com/uploads/katalog/yaz-koleksiyonu.png\",\n                \"order\": 0,\n                \"lang_id\": 1,\n                \"name\": \"Yaz Koleksiyonu\",\n                \"url\": \"https://www.example.com/yaz-koleksiyonu\",\n                \"created_at\": 1714500000,\n                \"updated_at\": 1714500000,\n                \"created_at_local\": \"30.04.2024 12:00:00\",\n                \"updated_at_local\": \"30.04.2024 12:00:00\"\n            },\n            {\n                \"id\": 2,\n                \"status\": \"active\",\n                \"image\": \"\",\n                \"order\": 1,\n                \"lang_id\": 1,\n                \"name\": \"Kış Sezonu\",\n                \"url\": \"https://www.example.com/kis-sezonu\",\n                \"created_at\": 1714600000,\n                \"updated_at\": 1714600000,\n                \"created_at_local\": \"01.05.2024 16:26:40\",\n                \"updated_at_local\": \"01.05.2024 16:26:40\"\n            }\n        ],\n        \"pager\": {\n            \"currentPage\": 1,\n            \"totalPages\": 1,\n            \"totalRecords\": 2\n        }\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Katalog Detayı",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/catalogs/detail",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "catalogs",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Katalog ID",
                  "disabled": false
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ",
                  "disabled": true
                }
              ]
            },
            "description": "> `id` parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Katalog ID |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1) |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"id\": 1,\n        \"lang_id\": 1,\n        \"order\": 0,\n        \"image\": \"https://www.example.com/uploads/katalog/yaz-koleksiyonu.png\",\n        \"status\": \"active\",\n        \"name\": \"Yaz Koleksiyonu\",\n        \"description\": \"<p>Yaz koleksiyonu hakkında açıklama</p>\",\n        \"permalink\": \"yaz-koleksiyonu\",\n        \"url\": \"https://www.example.com/yaz-koleksiyonu\",\n        \"meta_title\": \"Yaz Koleksiyonu - 2024\",\n        \"meta_description\": \"Yaz koleksiyonu ürünlerini keşfedin.\",\n        \"meta_keywords\": \"yaz, koleksiyon, 2024\",\n        \"created_at\": 1714500000,\n        \"updated_at\": 1714500000,\n        \"created_at_local\": \"30.04.2024 12:00:00\",\n        \"updated_at_local\": \"30.04.2024 12:00:00\",\n        \"products\": [\n            {\n                \"product_id\": 42,\n                \"sort_order\": 0,\n                \"name\": \"Yazlık Gömlek\"\n            },\n            {\n                \"product_id\": 57,\n                \"sort_order\": 1,\n                \"name\": \"Plaj Şortu\"\n            }\n        ]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Katalog Ekle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"languages\": [\n        {\n            \"lang_id\": 1,\n            \"name\": \"Yaz Koleksiyonu\",\n            \"description\": \"<p>Yaz koleksiyonu açıklaması</p>\",\n            \"permalink\": \"yaz-koleksiyonu\",\n            \"meta_title\": \"Yaz Koleksiyonu - 2024\",\n            \"meta_description\": \"Yaz koleksiyonu ürünlerini keşfedin.\",\n            \"meta_keywords\": \"yaz, koleksiyon, 2024\"\n        },\n        {\n            \"lang_id\": 2,\n            \"name\": \"Summer Collection\",\n            \"description\": \"<p>Summer collection description</p>\",\n            \"permalink\": \"summer-collection\",\n            \"meta_title\": \"Summer Collection - 2024\",\n            \"meta_description\": \"Discover summer collection products.\",\n            \"meta_keywords\": \"summer, collection, 2024\"\n        },\n        { \"lang_id\": 3, \"name\": \"مجموعة الصيف\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 4, \"name\": \"Sommerkollektion\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 5, \"name\": \"Collection été\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 6, \"name\": \"Летняя коллекция\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 7, \"name\": \"Yay Kolleksiyası\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" }\n    ],\n    \"status\": \"active\",\n    \"sort\": 0,\n    \"image\": \"https://example.com/yaz-koleksiyonu.png\",\n    \"products\": [\n        { \"product_id\": 42, \"sort_order\": 0 },\n        { \"product_id\": 57, \"sort_order\": 1 }\n    ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/catalogs",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "catalogs"
              ]
            },
            "description": "> `languages` alanı zorunludur; tüm aktif diller için gönderilmesi gerekir.\n\n> `permalink` gönderilmezse `name` alanından otomatik oluşturulur. Aynı permalink sistemde varsa otomatik suffix eklenir (örn. `yaz-koleksiyonu-1`).\n\n> `image` olarak geçerli bir URL gönderilirse görsel indirilip sunucuya kaydedilir.\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array - required | Dil verileri; tüm aktif diller için gönderilmeli (allActiveLangs) |\n| languages.*.lang_id | integer - required | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ; yalnızca aktif diller kabul edilir |\n| languages.*.name | string - required | Katalog adı; Min 1 Max 255 karakter |\n| languages.*.description | string | Katalog açıklaması; HTML içerik kabul edilir; Max 100000 karakter |\n| languages.*.permalink | string | SEO URL; Max 255 karakter; boş bırakılırsa name'den otomatik üretilir |\n| languages.*.meta_title | string | Meta başlık; Max 255 karakter |\n| languages.*.meta_description | string | Meta açıklama; Max 500 karakter |\n| languages.*.meta_keywords | string | Meta anahtar kelimeler; Max 500 karakter |\n| status | string | Durum; Values: active / inactive (varsayılan: active) |\n| sort | integer | Sıralama; Min: 0 Max: 99999 (varsayılan: 0) |\n| image | string | Katalog görseli URL'i; geçerli URL olmalı; indirilip kaydedilir |\n| products | array | Kataloğa eklenecek ürünler; Max 500 ürün |\n| products.*.product_id | integer | Ürün ID; Min: 1 |\n| products.*.sort_order | integer | Katalog içi sıralama; Min: 0 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Catalog created successfully.\",\n        \"catalog_id\": 3\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Katalog Düzenle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"languages\": [\n        {\n            \"lang_id\": 1,\n            \"name\": \"Yaz Koleksiyonu (Güncel)\",\n            \"meta_title\": \"Yaz Koleksiyonu - Yeni Sezon\"\n        },\n        {\n            \"lang_id\": 2,\n            \"name\": \"Summer Collection (Updated)\",\n            \"meta_title\": \"Summer Collection - New Season\"\n        }\n    ],\n    \"status\": \"active\",\n    \"sort\": 1,\n    \"image\": \"https://example.com/yaz-koleksiyonu-yeni.png\",\n    \"products\": [\n        { \"product_id\": 42, \"sort_order\": 0 },\n        { \"product_id\": 57, \"sort_order\": 1 },\n        { \"product_id\": 88, \"sort_order\": 2 }\n    ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/catalogs?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "catalogs"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Katalog ID"
                }
              ]
            },
            "description": "> Düzenleme için yalnızca değiştirmek istediğiniz alanları göndermeniz yeterlidir. Gönderilmeyen alanlar mevcut değerlerini korur.\n\n> `languages` içinde yalnızca gönderilen diller güncellenir (upsert). Gönderilmeyen dil kayıtları silinmez.\n\n> `products` gönderilirse katalogdaki **tüm mevcut ürünler silinir** ve yerine gönderilen liste yazılır. Ürün listesini korumak istiyorsanız bu alanı body'e dahil etmeyin.\n\n> `id` query parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Katalog ID |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array | Dil verileri; gönderilen diller upsert edilir; Max 20 dil |\n| languages.*.lang_id | integer - required | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ; yalnızca aktif diller kabul edilir |\n| languages.*.name | string | Katalog adı; Min 1 Max 255 karakter |\n| languages.*.description | string | Katalog açıklaması; HTML içerik kabul edilir; Max 100000 karakter |\n| languages.*.permalink | string | SEO URL; Max 255 karakter; adresi değiştirmeyecekseniz göndermeyin |\n| languages.*.meta_title | string | Meta başlık; Max 255 karakter |\n| languages.*.meta_description | string | Meta açıklama; Max 500 karakter |\n| languages.*.meta_keywords | string | Meta anahtar kelimeler; Max 500 karakter |\n| status | string | Durum; Values: active / inactive |\n| sort | integer | Sıralama; Min: 0 Max: 99999 |\n| image | string | Katalog görseli URL'i; yeni URL gelirse indirilip güncellenir; eski görsel commit sonrası silinir |\n| products | array | Katalog ürün listesi; **gönderilirse mevcut liste tamamen değiştirilir**; Max 500 ürün |\n| products.*.product_id | integer | Ürün ID; Min: 1 |\n| products.*.sort_order | integer | Katalog içi sıralama; Min: 0 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Catalog updated successfully.\",\n        \"catalog_id\": 1\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Katalog Sil",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/catalogs?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "catalogs"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Silinecek katalog ID'leri; virgülle ayırarak birden fazla gönderilebilir. Örn: 1,2,3"
                }
              ]
            },
            "description": "> Bu işlem; kataloğu, tüm dil kayıtlarını, görselini, route (SEO URL) kayıtlarını ve ürün bağlantılarını kalıcı olarak siler. Geri alınamaz.\n\n> Birden fazla katalog aynı anda silinebilir. Tek seferde maksimum 50 ID.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | string - required | Silinecek katalog ID'leri; virgülle ayrılmış. Örn: 1,2,3 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Catalog deleted successfully.\",\n        \"deleted_ids\": [1]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Kategoriler",
      "description": "> Ürün kategorilerine ait işlemler. Kategoriler hiyerarşik yapıdadır; `parent_id` ile üst kategori atanır. Her kategori; çok dilli ad, açıklama, SEO bilgileri, fırsat ürünleri ve Google kategori eşlemesi içerebilir.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Kategori Listesi",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/categories",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "giyim",
                  "description": "Kategori adı veya URL'de arama; Max 200 karakter",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "active",
                  "description": "Durum filtresi; Values: active / inactive",
                  "disabled": true
                },
                {
                  "key": "parent_id",
                  "value": "0",
                  "description": "Üst kategori ID filtresi; 0 = sadece ana kategoriler",
                  "disabled": true
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralanacak Alan; Values: id / name / order",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "asc",
                  "description": "Sıralama Yönü; Values: asc / desc",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa Numarası; Min: 1",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "Sayfa Limiti; Min: 1 Max: 500",
                  "disabled": true
                }
              ]
            },
            "description": "### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| search | string | Kategori adı veya URL'de arama; Max 200 karakter |\n| status | string | Durum filtresi; Values: active / inactive |\n| parent_id | integer | Üst kategori ID filtresi; 0 göndererek sadece ana kategoriler listelenebilir |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1); yalnızca aktif diller kabul edilir |\n| sort | string | Sıralanacak Alan; Values: id / name / order |\n| order | string | Sıralama Yönü; Values: asc / desc |\n| page | integer | Sayfa Numarası; Min: 1 |\n| limit | integer | Limit; Min: 1 Max: 500 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"items\": [\n            {\n                \"id\": 1,\n                \"parent\": 0,\n                \"status\": \"active\",\n                \"image\": \"https://www.example.com/uploads/kategoriler/giyim.png\",\n                \"order\": 0,\n                \"lang_id\": 1,\n                \"name\": \"Giyim\",\n                \"url\": \"https://www.example.com/giyim\",\n                \"created_at\": 1714500000,\n                \"updated_at\": 1714500000,\n                \"created_at_local\": \"30.04.2024 12:00:00\",\n                \"updated_at_local\": \"30.04.2024 12:00:00\"\n            },\n            {\n                \"id\": 2,\n                \"parent\": 1,\n                \"status\": \"active\",\n                \"image\": \"\",\n                \"order\": 0,\n                \"lang_id\": 1,\n                \"name\": \"Erkek Giyim\",\n                \"url\": \"https://www.example.com/erkek-giyim\",\n                \"created_at\": 1714600000,\n                \"updated_at\": 1714600000,\n                \"created_at_local\": \"01.05.2024 16:26:40\",\n                \"updated_at_local\": \"01.05.2024 16:26:40\"\n            }\n        ],\n        \"pager\": {\n            \"currentPage\": 1,\n            \"totalPages\": 1,\n            \"totalRecords\": 2\n        }\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Kategori Detayı",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/categories/detail",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Kategori ID",
                  "disabled": false
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ",
                  "disabled": true
                }
              ]
            },
            "description": "> `id` parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Kategori ID |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1) |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"id\": 2,\n        \"parent\": {\n            \"id\": 1,\n            \"name\": \"Giyim\"\n        },\n        \"status\": \"active\",\n        \"image\": \"\",\n        \"order\": 0,\n        \"installment\": 1,\n        \"filter_status\": \"inactive\",\n        \"lang_id\": 1,\n        \"name\": \"Erkek Giyim\",\n        \"description\": \"<p>Erkek giyim kategorisi açıklaması</p>\",\n        \"meta_title\": \"Erkek Giyim Ürünleri\",\n        \"meta_description\": \"Erkek giyim ürünlerini keşfedin.\",\n        \"meta_keywords\": \"erkek, giyim, moda\",\n        \"permalink\": \"erkek-giyim\",\n        \"url\": \"https://www.example.com/erkek-giyim\",\n        \"created_at\": 1714600000,\n        \"updated_at\": 1714600000,\n        \"created_at_local\": \"01.05.2024 16:26:40\",\n        \"updated_at_local\": \"01.05.2024 16:26:40\",\n        \"opportunity_products\": [\n            { \"id\": 42, \"name\": \"Erkek T-Shirt\" },\n            { \"id\": 57, \"name\": \"Erkek Pantolon\" }\n        ],\n        \"google_category\": {\n            \"id\": 185,\n            \"name\": \"Giyim ve Aksesuar\",\n            \"code\": 166\n        }\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Kategori Ekle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"languages\": [\n        {\n            \"lang_id\": 1,\n            \"name\": \"Erkek Giyim\",\n            \"description\": \"<p>Erkek giyim açıklaması</p>\",\n            \"permalink\": \"erkek-giyim\",\n            \"meta_title\": \"Erkek Giyim Ürünleri\",\n            \"meta_description\": \"Erkek giyim ürünlerini keşfedin.\",\n            \"meta_keywords\": \"erkek, giyim, moda\"\n        },\n        {\n            \"lang_id\": 2,\n            \"name\": \"Men's Clothing\",\n            \"description\": \"<p>Men's clothing description</p>\",\n            \"permalink\": \"mens-clothing\",\n            \"meta_title\": \"Men's Clothing Products\",\n            \"meta_description\": \"Discover men's clothing products.\",\n            \"meta_keywords\": \"men, clothing, fashion\"\n        },\n        { \"lang_id\": 3, \"name\": \"ملابس رجالية\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 4, \"name\": \"Herrenbekleidung\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 5, \"name\": \"Vêtements homme\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 6, \"name\": \"Мужская одежда\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 7, \"name\": \"Kişi geyimi\", \"description\": \"\", \"permalink\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" }\n    ],\n    \"parent_id\": 1,\n    \"status\": \"active\",\n    \"order\": 0,\n    \"filter_status\": \"inactive\",\n    \"installment\": 1,\n    \"google_category\": \"185\",\n    \"image\": \"https://example.com/erkek-giyim.png\",\n    \"opportunity_products\": \"42,57,88\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/categories",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories"
              ]
            },
            "description": "> `languages` alanı zorunludur; tüm aktif diller için gönderilmesi gerekir.\n\n> `permalink` gönderilmezse `name` alanından otomatik oluşturulur. Aynı permalink sistemde varsa otomatik suffix eklenir.\n\n> `parent_id` gönderilmezse ana kategori olarak oluşturulur; ana kategori için alanı göndermeyin.\n\n> `image` olarak geçerli bir URL gönderilirse görsel indirilip sunucuya kaydedilir.\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array - required | Dil verileri; tüm aktif diller için gönderilmeli (allActiveLangs) |\n| languages.*.lang_id | integer - required | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ; yalnızca aktif diller kabul edilir |\n| languages.*.name | string - required | Kategori adı; Min 1 Max 255 karakter |\n| languages.*.description | string | Kategori açıklaması; HTML içerik kabul edilir; Max 100000 karakter |\n| languages.*.permalink | string | SEO URL; Max 255 karakter; boş bırakılırsa name'den otomatik üretilir |\n| languages.*.meta_title | string | Meta başlık; Max 255 karakter |\n| languages.*.meta_description | string | Meta açıklama; Max 500 karakter |\n| languages.*.meta_keywords | string | Meta anahtar kelimeler; Max 500 karakter |\n| parent_id | integer | Üst kategori ID; kayıtlı bir kategori olmalı. Gönderilmezse ana kategori olur |\n| status | string | Durum; Values: active / inactive (varsayılan: active) |\n| order | integer | Sıralama; Min: 0 Max: 99999 (varsayılan: 0) |\n| filter_status | string | Filtre durumu; Values: active / inactive (varsayılan: inactive) |\n| installment | integer | Taksit sayısı; Values: 1–12 (varsayılan: 1; aralık dışı değer 1'e düşer) |\n| google_category | string | Google kategori ID; Max 100 karakter |\n| image | string | Kategori görseli URL'i; geçerli URL olmalı; indirilip kaydedilir |\n| opportunity_products | string | Fırsat ürün ID'leri; virgülle ayrılmış tam sayılar; Max 1000 karakter. Örn: \"42,57,88\" |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Category created successfully.\",\n        \"category_id\": 3\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Kategori Düzenle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"languages\": [\n        {\n            \"lang_id\": 1,\n            \"name\": \"Erkek Giyim (Güncel)\",\n            \"meta_title\": \"Erkek Giyim - Yeni Sezon\"\n        },\n        {\n            \"lang_id\": 2,\n            \"name\": \"Men's Clothing (Updated)\",\n            \"meta_title\": \"Men's Clothing - New Season\"\n        }\n    ],\n    \"status\": \"active\",\n    \"order\": 1,\n    \"filter_status\": \"active\",\n    \"installment\": 3,\n    \"opportunity_products\": \"42,57\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/categories?id=2",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "2",
                  "description": "Kategori ID"
                }
              ]
            },
            "description": "> Düzenleme için yalnızca değiştirmek istediğiniz alanları göndermeniz yeterlidir. Gönderilmeyen alanlar mevcut değerlerini korur.\n\n> `languages` içinde yalnızca gönderilen diller güncellenir (upsert). Gönderilmeyen dil kayıtları silinmez.\n\n> `opportunity_products` boş string (`\"\"`) gönderilirse fırsat ürünleri temizlenir. Alan hiç gönderilmezse mevcut liste korunur.\n\n> `id` query parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Kategori ID |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array | Dil verileri; gönderilen diller upsert edilir; Max 20 dil |\n| languages.*.lang_id | integer - required | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ; yalnızca aktif diller kabul edilir |\n| languages.*.name | string | Kategori adı; Min 1 Max 255 karakter |\n| languages.*.description | string | Kategori açıklaması; HTML içerik kabul edilir; Max 100000 karakter |\n| languages.*.permalink | string | SEO URL; Max 255 karakter; adresi değiştirmeyecekseniz göndermeyin |\n| languages.*.meta_title | string | Meta başlık; Max 255 karakter |\n| languages.*.meta_description | string | Meta açıklama; Max 500 karakter |\n| languages.*.meta_keywords | string | Meta anahtar kelimeler; Max 500 karakter |\n| parent_id | integer | Üst kategori ID |\n| status | string | Durum; Values: active / inactive |\n| order | integer | Sıralama; Min: 0 Max: 99999 |\n| filter_status | string | Filtre durumu; Values: active / inactive |\n| installment | integer | Taksit sayısı; Values: 1–12 (aralık dışı değer 1'e düşer) |\n| google_category | string | Google kategori ID; Max 100 karakter |\n| image | string | Kategori görseli URL'i; yeni URL gelirse indirilip güncellenir; eski görsel commit sonrası silinir |\n| opportunity_products | string | Fırsat ürün ID'leri; virgülle ayrılmış. Boş string göndererek temizlenebilir |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Category updated successfully.\",\n        \"category_id\": 2\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Kategori Sil",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/categories?id=2",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "categories"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "2",
                  "description": "Silinecek kategori ID'leri; virgülle ayırarak birden fazla gönderilebilir. Örn: 1,2,3"
                }
              ]
            },
            "description": "> Bu işlem; kategoriyi, tüm dil kayıtlarını, görselini, route (SEO URL) kayıtlarını ve kategori path verilerini kalıcı olarak siler. Geri alınamaz.\n\n> Birden fazla kategori aynı anda silinebilir. Tek seferde maksimum 50 ID.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | string - required | Silinecek kategori ID'leri; virgülle ayrılmış. Örn: 1,2,3 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Category deleted successfully.\",\n        \"deleted_ids\": [2]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Özelleştirmeler",
      "description": "> Ürün özelleştirme gruplarına (yazı alanı, seçim listesi vb.) ait işlemler. Her grup; customizations (özelleştirme kalemleri) ve values (seçenekler) içerebilir.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Özelleştirme Listesi",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customizations",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customizations"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "yazı",
                  "description": "Grup adında arama; Max 100 karakter",
                  "disabled": true
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralanacak Alan; Values: id / name / sort",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "asc",
                  "description": "Sıralama Yönü; Values: asc / desc",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa Numarası; Min: 1",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "Sayfa Limiti; Min: 1 Max: 500",
                  "disabled": true
                }
              ]
            },
            "description": "### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| search | string | Grup adında arama; Max 100 karakter |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1) |\n| sort | string | Sıralanacak Alan; Values: id / name / sort |\n| order | string | Sıralama Yönü; Values: asc / desc |\n| page | integer | Sayfa Numarası; Min: 1 |\n| limit | integer | Limit; Min: 1 Max: 500 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"items\": [\n            {\n                \"id\": 1,\n                \"name\": \"Yazı Ekle\",\n                \"status\": \"active\",\n                \"sort\": 0\n            },\n            {\n                \"id\": 2,\n                \"name\": \"Renk Seçimi\",\n                \"status\": \"inactive\",\n                \"sort\": 1\n            }\n        ],\n        \"pager\": {\n            \"currentPage\": 1,\n            \"totalPages\": 1,\n            \"totalRecords\": 2\n        }\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Özelleştirme Detayı",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customizations/detail?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customizations",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Özelleştirme Grubu ID",
                  "disabled": false
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)",
                  "disabled": true
                }
              ]
            },
            "description": "> `id` parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Özelleştirme Grubu ID |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1) |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"id\": 1,\n        \"name\": \"Renk Seçimi\",\n        \"status\": \"active\",\n        \"sort\": 0,\n        \"customizations\": [\n            {\n                \"customization_id\": 3,\n                \"tip\": 2,\n                \"title\": \"Renk Seçin\",\n                \"placeholder\": \"Bir renk seçin\",\n                \"desc\": \"Lütfen bir renk seçiniz\",\n                \"type\": 1,\n                \"min\": 0,\n                \"max\": 0,\n                \"sort\": 0,\n                \"price_prefix\": \"+\",\n                \"price\": \"0.00\",\n                \"required\": 1,\n                \"values\": [\n                    {\n                        \"value_id\": 7,\n                        \"name\": \"Kırmızı\",\n                        \"sort\": 0,\n                        \"status\": 1,\n                        \"price_prefix\": \"+\",\n                        \"price\": \"5.00\"\n                    },\n                    {\n                        \"value_id\": 8,\n                        \"name\": \"Mavi\",\n                        \"sort\": 1,\n                        \"status\": 1,\n                        \"price_prefix\": \"+\",\n                        \"price\": \"0.00\"\n                    }\n                ]\n            }\n        ]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Özelleştirme Ekle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"status\": \"active\",\n    \"sort\": 0,\n    \"languages\": [\n        { \"lang_id\": 1, \"name\": \"Renk Seçimi\" },\n        { \"lang_id\": 2, \"name\": \"Color Selection\" },\n        { \"lang_id\": 3, \"name\": \"اختيار اللون\" },\n        { \"lang_id\": 4, \"name\": \"Farbauswahl\" },\n        { \"lang_id\": 5, \"name\": \"Sélection de couleur\" },\n        { \"lang_id\": 6, \"name\": \"Выбор цвета\" },\n        { \"lang_id\": 7, \"name\": \"Rəng seçimi\" }\n    ],\n    \"customizations\": [\n        { \"lang_id\": 1, \"tip\": 2, \"title\": \"Renk Seçin\", \"placeholder\": \"Bir renk seçin\", \"desc\": \"\", \"type\": 1, \"min\": 0, \"max\": 0, \"sort\": 0, \"price_prefix\": \"+\", \"price\": \"0.00\", \"required\": 1,\n          \"values\": [\n            { \"lang_id\": 1, \"name\": \"Kırmızı\", \"sort\": 0, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"5.00\" },\n            { \"lang_id\": 1, \"name\": \"Mavi\", \"sort\": 1, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"0.00\" }\n          ]\n        },\n        { \"lang_id\": 2, \"tip\": 2, \"title\": \"Choose Color\", \"placeholder\": \"Select a color\", \"desc\": \"\", \"type\": 1, \"min\": 0, \"max\": 0, \"sort\": 0, \"price_prefix\": \"+\", \"price\": \"0.00\", \"required\": 1,\n          \"values\": [\n            { \"lang_id\": 2, \"name\": \"Red\", \"sort\": 0, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"5.00\" },\n            { \"lang_id\": 2, \"name\": \"Blue\", \"sort\": 1, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"0.00\" }\n          ]\n        },\n        { \"lang_id\": 3, \"tip\": 2, \"title\": \"اختر اللون\", \"placeholder\": \"\", \"desc\": \"\", \"type\": 1, \"min\": 0, \"max\": 0, \"sort\": 0, \"price_prefix\": \"+\", \"price\": \"0.00\", \"required\": 1,\n          \"values\": [\n            { \"lang_id\": 3, \"name\": \"أحمر\", \"sort\": 0, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"5.00\" },\n            { \"lang_id\": 3, \"name\": \"أزرق\", \"sort\": 1, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"0.00\" }\n          ]\n        },\n        { \"lang_id\": 4, \"tip\": 2, \"title\": \"Farbe wählen\", \"placeholder\": \"\", \"desc\": \"\", \"type\": 1, \"min\": 0, \"max\": 0, \"sort\": 0, \"price_prefix\": \"+\", \"price\": \"0.00\", \"required\": 1,\n          \"values\": [\n            { \"lang_id\": 4, \"name\": \"Rot\", \"sort\": 0, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"5.00\" },\n            { \"lang_id\": 4, \"name\": \"Blau\", \"sort\": 1, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"0.00\" }\n          ]\n        },\n        { \"lang_id\": 5, \"tip\": 2, \"title\": \"Choisir la couleur\", \"placeholder\": \"\", \"desc\": \"\", \"type\": 1, \"min\": 0, \"max\": 0, \"sort\": 0, \"price_prefix\": \"+\", \"price\": \"0.00\", \"required\": 1,\n          \"values\": [\n            { \"lang_id\": 5, \"name\": \"Rouge\", \"sort\": 0, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"5.00\" },\n            { \"lang_id\": 5, \"name\": \"Bleu\", \"sort\": 1, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"0.00\" }\n          ]\n        },\n        { \"lang_id\": 6, \"tip\": 2, \"title\": \"Выбрать цвет\", \"placeholder\": \"\", \"desc\": \"\", \"type\": 1, \"min\": 0, \"max\": 0, \"sort\": 0, \"price_prefix\": \"+\", \"price\": \"0.00\", \"required\": 1,\n          \"values\": [\n            { \"lang_id\": 6, \"name\": \"Красный\", \"sort\": 0, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"5.00\" },\n            { \"lang_id\": 6, \"name\": \"Синий\", \"sort\": 1, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"0.00\" }\n          ]\n        },\n        { \"lang_id\": 7, \"tip\": 2, \"title\": \"Rəng seçin\", \"placeholder\": \"\", \"desc\": \"\", \"type\": 1, \"min\": 0, \"max\": 0, \"sort\": 0, \"price_prefix\": \"+\", \"price\": \"0.00\", \"required\": 1,\n          \"values\": [\n            { \"lang_id\": 7, \"name\": \"Qırmızı\", \"sort\": 0, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"5.00\" },\n            { \"lang_id\": 7, \"name\": \"Mavi\", \"sort\": 1, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"0.00\" }\n          ]\n        }\n    ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/customizations",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customizations"
              ]
            },
            "description": "> `languages` alanı zorunludur; tüm aktif diller için gönderilmesi gerekir.\n\n> `customizations` dizisi düz (flat) yapıdadır. Her öğe bir dile ait bir özelleştirme kalemini temsil eder. Aynı özelleştirme kaleminin tüm dil girişleri arka arkaya sıralanmalı ve her dilden bir öğe geçildikten sonra sıradaki kalemin girişleri başlamalıdır (lang_id döngüsü tekrar ettiğinde yeni kalem başlar).\n\n> `values` dizisi de düz yapıdadır; her öğe bir dile ait bir seçenek kalemini temsil eder. Seçenekler pozisyona göre eşleştirilir: tüm dil girişlerindeki `values[0]` aynı seçenek, `values[1]` diğer seçenektir.\n\n> **tip değerine göre type kısıtı:** tip 1/2/3 → type ∈ [1,2] | tip 4/5 → type ∈ [1,2,3]\n\n> **tip değerine göre values kısıtı:** tip 1/4/5 → values gönderilemez | tip 2/3 → values gönderilebilir\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array - required | Grup adları; tüm aktif diller için gönderilmeli (allActiveLangs) |\n| languages.*.lang_id | integer - required | Dil ID |\n| languages.*.name | string - required | Grup adı; Max 255 karakter |\n| status | string | Durum; Values: active / inactive (varsayılan: inactive) |\n| sort | integer | Sıralama; Min: 0 (varsayılan: 0) |\n| customizations | array | Özelleştirme kalemleri (düz dizi — bir öğe = bir dil) |\n| customizations.*.lang_id | integer | Dil ID |\n| customizations.*.tip | integer | Alan tipi; Values: 1=Metin / 2=Tekli Seçim / 3=Çoklu Seçim / 4=Tarih / 5=Dosya |\n| customizations.*.title | string - required | Kalem başlığı; Max 255 karakter |\n| customizations.*.placeholder | string | Placeholder metni; Max 255 karakter |\n| customizations.*.desc | string | Açıklama; Max 500 karakter |\n| customizations.*.type | integer | İçerik tipi; tip 1/2/3 → [1,2] / tip 4/5 → [1,2,3] |\n| customizations.*.min | integer | Min değer; Min: 0 |\n| customizations.*.max | integer | Max değer; Min: 0 |\n| customizations.*.sort | integer | Sıralama; Min: 0 |\n| customizations.*.price_prefix | string | Fiyat operatörü; Values: + / - |\n| customizations.*.price | numeric | Fiyat farkı |\n| customizations.*.required | integer | Zorunlu alan; Values: 0 / 1 |\n| customizations.*.values | array | Seçenekler; yalnızca tip 2/3 için (düz dizi — bir öğe = bir dil) |\n| customizations.*.values.*.lang_id | integer | Dil ID |\n| customizations.*.values.*.name | string | Seçenek adı; Max 255 karakter |\n| customizations.*.values.*.sort | integer | Sıralama; Min: 0 |\n| customizations.*.values.*.status | integer | Durum; Values: 0 / 1 |\n| customizations.*.values.*.price_prefix | string | Fiyat operatörü; Values: + / - |\n| customizations.*.values.*.price | numeric | Fiyat farkı |\n| customizations.*.values.*.image | string | Seçenek görseli; geçerli URL — `uploads/customizations/` dizinine indirilir |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Customization group created successfully.\",\n        \"customization_group_id\": 3\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Özelleştirme Düzenle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"status\": \"active\",\n    \"sort\": 1,\n    \"languages\": [\n        { \"lang_id\": 1, \"name\": \"Renk Seçimi (Güncellendi)\" },\n        { \"lang_id\": 2, \"name\": \"Color Selection (Updated)\" }\n    ],\n    \"customizations\": [\n        { \"customization_id\": 3, \"lang_id\": 1, \"tip\": 2, \"title\": \"Renk Seçin\", \"placeholder\": \"Bir renk seçin\", \"desc\": \"\", \"type\": 1, \"min\": 0, \"max\": 0, \"sort\": 0, \"price_prefix\": \"+\", \"price\": \"0.00\", \"required\": 1,\n          \"values\": [\n            { \"value_id\": 7, \"lang_id\": 1, \"name\": \"Kırmızı (Güncellendi)\", \"sort\": 0, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"5.00\" },\n            { \"lang_id\": 1, \"name\": \"Sarı\", \"sort\": 2, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"3.00\" }\n          ]\n        },\n        { \"customization_id\": 3, \"lang_id\": 2, \"tip\": 2, \"title\": \"Choose Color (Updated)\", \"placeholder\": \"Select a color\", \"desc\": \"\", \"type\": 1, \"min\": 0, \"max\": 0, \"sort\": 0, \"price_prefix\": \"+\", \"price\": \"0.00\", \"required\": 1,\n          \"values\": [\n            { \"value_id\": 7, \"lang_id\": 2, \"name\": \"Red (Updated)\", \"sort\": 0, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"5.00\" },\n            { \"lang_id\": 2, \"name\": \"Yellow\", \"sort\": 2, \"status\": 1, \"price_prefix\": \"+\", \"price\": \"3.00\" }\n          ]\n        },\n        { \"lang_id\": 1, \"tip\": 1, \"title\": \"Kişiye Özel Not\", \"placeholder\": \"Notunuzu girin\", \"desc\": \"\", \"type\": 1, \"min\": 0, \"max\": 100, \"sort\": 1, \"price_prefix\": \"+\", \"price\": \"0.00\", \"required\": 0 },\n        { \"lang_id\": 2, \"tip\": 1, \"title\": \"Custom Note\", \"placeholder\": \"Enter your note\", \"desc\": \"\", \"type\": 1, \"min\": 0, \"max\": 100, \"sort\": 1, \"price_prefix\": \"+\", \"price\": \"0.00\", \"required\": 0 }\n    ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/customizations?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customizations"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Özelleştirme Grubu ID"
                }
              ]
            },
            "description": "> `id` query parametresi zorunludur.\n\n> Yalnızca değiştirmek istediğiniz alanları gönderin; `customizations` ve `languages` dizilerini göndermek zorunda değilsiniz.\n\n> Mevcut bir kalemi ya da seçeneği güncellerken o kalemin/seçeneğin **tüm alanlarını** gönderin; gönderilmeyen alanlar varsayılan değerine döner. Seçenekler (`values`) yalnız kalem girişinde `tip` 2 ya da 3 gönderildiğinde işlenir.\n\n> `customizations` dizisi düz (flat) yapıdadır. Aynı `customization_id` değerine sahip girişler aynı kalemi günceller; `customization_id` olmayan girişler yeni kalem olarak eklenir. Yeni kalemlerde lang_id döngüsü kuralı geçerlidir.\n\n> `customizations: []` (boş dizi) gönderilirse gruba ait **tüm özelleştirme kalemleri silinir**.\n\n> `values: []` (boş dizi) gönderilirse o kaleme ait **tüm seçenekler silinir**.\n\n> `value_id` varsa mevcut seçenek güncellenir; yoksa yeni seçenek eklenir. Seçenek silmek için `values: []` kullanın.\n\n> **tip değerine göre type kısıtı:** tip 1/2/3 → type ∈ [1,2] | tip 4/5 → type ∈ [1,2,3]\n\n> **tip değerine göre values kısıtı:** tip 1/4/5 → values gönderilemez | tip 2/3 → values gönderilebilir\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Özelleştirme Grubu ID |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array | Grup adları; gönderilen diller upsert edilir |\n| languages.*.lang_id | integer | Dil ID |\n| languages.*.name | string | Grup adı; Max 255 karakter |\n| status | string | Durum; Values: active / inactive |\n| sort | integer | Sıralama; Min: 0 |\n| customizations | array | Özelleştirme kalemleri (düz dizi); boş dizi → tümünü sil |\n| customizations.*.customization_id | integer | Mevcut kalem ID; varsa günceller, yoksa yeni ekler |\n| customizations.*.lang_id | integer | Dil ID |\n| customizations.*.tip | integer | Alan tipi; Values: 1 / 2 / 3 / 4 / 5 |\n| customizations.*.title | string - required | Başlık; her kalem girişinde zorunlu; Max 255 karakter |\n| customizations.*.placeholder | string | Placeholder; Max 255 karakter |\n| customizations.*.desc | string | Açıklama; Max 500 karakter |\n| customizations.*.type | integer | İçerik tipi; tip 1/2/3 → [1,2] / tip 4/5 → [1,2,3] |\n| customizations.*.min | integer | Min değer; Min: 0 |\n| customizations.*.max | integer | Max değer; Min: 0 |\n| customizations.*.sort | integer | Sıralama; Min: 0 |\n| customizations.*.price_prefix | string | Values: + / - |\n| customizations.*.price | numeric | Fiyat farkı |\n| customizations.*.required | integer | Values: 0 / 1 |\n| customizations.*.values | array | Seçenekler; boş dizi → bu kaleme ait tümünü sil |\n| customizations.*.values.*.value_id | integer | Mevcut seçenek ID; varsa günceller, yoksa yeni ekler |\n| customizations.*.values.*.lang_id | integer | Dil ID |\n| customizations.*.values.*.name | string | Seçenek adı; Max 255 karakter |\n| customizations.*.values.*.sort | integer | Sıralama; Min: 0 |\n| customizations.*.values.*.status | integer | Values: 0 / 1 |\n| customizations.*.values.*.price_prefix | string | Values: + / - |\n| customizations.*.values.*.price | numeric | Fiyat farkı |\n| customizations.*.values.*.image | string | Görsel URL; `uploads/customizations/` dizinine indirilir |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Customization group updated successfully.\",\n        \"customization_group_id\": 1\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Özelleştirme Sil",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/customizations?ids=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "customizations"
              ],
              "query": [
                {
                  "key": "ids",
                  "value": "1",
                  "description": "Silinecek grup ID'leri; virgülle ayırarak birden fazla gönderilebilir. Örn: 1,2,3"
                }
              ]
            },
            "description": "> Bu işlem; grubu, tüm özelleştirme kalemlerini, tüm seçeneklerini ve dil kayıtlarını kalıcı olarak siler. Geri alınamaz.\n\n> Birden fazla grup aynı anda silinebilir.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| ids | string - required | Silinecek grup ID'leri; virgülle ayrılmış. Örn: 1,2,3 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Customization groups deleted successfully.\",\n        \"deleted_ids\": [1, 2],\n        \"not_found_ids\": [],\n        \"count\": 2\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Bloglar",
      "description": "> Blog yazılarını listeleme, detay görüntüleme, oluşturma, güncelleme ve silme işlemleri. Her blog birden fazla dil kaydı ve kategori ilişkisi taşıyabilir; SEO URL'leri `ny_routes` tablosuna otomatik yazılır.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Blog Listesi",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/blogs",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "blogs"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "kahve",
                  "description": "Blog adında arama; Max 200 karakter",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "active",
                  "description": "Durum filtresi; Values: active / inactive",
                  "disabled": true
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralanacak alan; Values: id / name / order / date",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "desc",
                  "description": "Sıralama yönü; Values: asc / desc (varsayılan: desc)",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa numarası; Min: 1",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "Sayfa limiti; Min: 1 Max: 500",
                  "disabled": true
                }
              ]
            },
            "description": "### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| search | string | Blog adında arama; trim uygulanır; Max 200 karakter |\n| status | string | Durum filtresi; Values: active / inactive |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1) |\n| sort | string | Sıralanacak alan; Values: id / name / order / date (varsayılan: id) |\n| order | string | Sıralama yönü; Values: asc / desc (varsayılan: desc) |\n| page | integer | Sayfa numarası; Min: 1 |\n| limit | integer | Sayfa limiti; Min: 1 Max: 500 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"items\": [\n            {\n                \"id\": 1,\n                \"status\": \"active\",\n                \"image\": \"https://example.com/uploads/blog/kahve-rehberi.jpg\",\n                \"order\": 0,\n                \"lang_id\": 1,\n                \"name\": \"Kahve Rehberi\",\n                \"url\": \"https://example.com/kahve-rehberi\",\n                \"created_at\": 1676061703,\n                \"updated_at\": 1763548866,\n                \"created_at_local\": \"10.02.2023 23:41:43\",\n                \"updated_at_local\": \"19.07.2025 10:41:06\"\n            },\n            {\n                \"id\": 2,\n                \"status\": \"inactive\",\n                \"image\": \"\",\n                \"order\": 1,\n                \"lang_id\": 1,\n                \"name\": \"Espresso Teknikleri\",\n                \"url\": \"https://example.com/espresso-teknikleri\",\n                \"created_at\": 1676061726,\n                \"updated_at\": null,\n                \"created_at_local\": \"10.02.2023 23:42:06\",\n                \"updated_at_local\": null\n            }\n        ],\n        \"pager\": {\n            \"currentPage\": 1,\n            \"totalPages\": 1,\n            \"totalRecords\": 2\n        }\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Blog Detayı",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/blogs/detail?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "blogs",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Blog ID",
                  "disabled": false
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1)",
                  "disabled": true
                }
              ]
            },
            "description": "> `id` parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Blog ID |\n| lang_id | integer | Dil ID; 1=TR 2=EN 3=AR 4=DE 5=FR 6=RU 7=AZ (varsayılan: 1) |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"id\": 1,\n        \"status\": \"active\",\n        \"order\": 0,\n        \"image\": \"https://example.com/uploads/blog/kahve-rehberi.jpg\",\n        \"view_count\": 142,\n        \"lang_id\": 1,\n        \"name\": \"Kahve Rehberi\",\n        \"description\": \"<p>Kahve dünyasına kapsamlı bir giriş...</p>\",\n        \"permalink\": \"kahve-rehberi\",\n        \"url\": \"https://example.com/kahve-rehberi\",\n        \"meta_title\": \"Kahve Rehberi | Blog\",\n        \"meta_description\": \"Kahve çeşitleri ve demleme teknikleri hakkında kapsamlı rehber.\",\n        \"meta_keywords\": \"kahve, espresso, filtre kahve\",\n        \"created_at\": 1676061703,\n        \"updated_at\": 1763548866,\n        \"created_at_local\": \"10.02.2023 23:41:43\",\n        \"updated_at_local\": \"19.07.2025 10:41:06\",\n        \"categories\": [\n            {\n                \"id\": 3,\n                \"order\": 0,\n                \"name\": \"İçecekler\"\n            }\n        ]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Blog Ekle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"status\": \"active\",\n    \"order\": 0,\n    \"image\": \"https://cdn.example.com/images/kahve-rehberi.jpg\",\n    \"languages\": [\n        { \"lang_id\": 1, \"name\": \"Kahve Rehberi\", \"permalink\": \"kahve-rehberi\", \"description\": \"<p>Kahve dünyasına giriş...</p>\", \"meta_title\": \"Kahve Rehberi\", \"meta_description\": \"Kahve rehberi açıklaması\", \"meta_keywords\": \"kahve\" },\n        { \"lang_id\": 2, \"name\": \"Coffee Guide\", \"permalink\": \"coffee-guide\", \"description\": \"<p>Introduction to coffee...</p>\", \"meta_title\": \"Coffee Guide\", \"meta_description\": \"Coffee guide description\", \"meta_keywords\": \"coffee\" },\n        { \"lang_id\": 3, \"name\": \"دليل القهوة\", \"permalink\": \"\", \"description\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 4, \"name\": \"Kaffee-Leitfaden\", \"permalink\": \"\", \"description\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 5, \"name\": \"Guide du café\", \"permalink\": \"\", \"description\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 6, \"name\": \"Путеводитель по кофе\", \"permalink\": \"\", \"description\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 7, \"name\": \"Qəhvə bələdçisi\", \"permalink\": \"\", \"description\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" }\n    ],\n    \"categories\": [\n        { \"id\": 3, \"order\": 0 }\n    ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/blogs",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "blogs"
              ]
            },
            "description": "> `languages` alanı zorunludur; tüm aktif diller için gönderilmelidir.\n\n> `permalink` boş bırakılırsa `name` alanından otomatik üretilir. Aynı adres kullanılıyorsa sonuna otomatik ek konur (örn. `kahve-rehberi-1`).\n\n> `image` geçerli bir URL olmalıdır; `uploads/blog/` dizinine indirilir.\n\n> `status` alanı gönderilmezse **active** olarak varsayılır.\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array - required | Dil kayıtları; tüm aktif diller için gönderilmeli (allActiveLangs) |\n| languages.*.lang_id | integer - required | Dil ID |\n| languages.*.name | string - required | Blog başlığı; Min 1 Max 255 karakter |\n| languages.*.permalink | string | SEO URL; boş bırakılırsa name'den üretilir; Max 255 karakter |\n| languages.*.description | string | Blog içeriği (HTML kabul edilir); Max 100000 karakter |\n| languages.*.meta_title | string | Meta başlık; Max 255 karakter |\n| languages.*.meta_description | string | Meta açıklama; Max 500 karakter |\n| languages.*.meta_keywords | string | Meta anahtar kelimeler; Max 500 karakter |\n| status | string | Durum; Values: active / inactive (varsayılan: active) |\n| order | integer | Sıralama; Min 0 Max 99999 |\n| image | string | Görsel URL; `uploads/blog/` dizinine indirilir |\n| categories | array | Kategori ilişkileri; Max 50 |\n| categories.*.id | integer | Blog kategori ID |\n| categories.*.order | integer | Kategorideki sıralama; Min 0 Max 99999 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Blog created successfully.\",\n        \"blog_id\": 5\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Blog Düzenle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"status\": \"active\",\n    \"order\": 1,\n    \"image\": \"https://cdn.example.com/images/kahve-rehberi-v2.jpg\",\n    \"languages\": [\n        { \"lang_id\": 1, \"name\": \"Kahve Rehberi (Güncellendi)\", \"permalink\": \"kahve-rehberi-v2\", \"description\": \"<p>Güncel kahve rehberi...</p>\", \"meta_title\": \"Kahve Rehberi\", \"meta_description\": \"\", \"meta_keywords\": \"\" },\n        { \"lang_id\": 2, \"name\": \"Coffee Guide (Updated)\", \"permalink\": \"coffee-guide-v2\", \"description\": \"\", \"meta_title\": \"\", \"meta_description\": \"\", \"meta_keywords\": \"\" }\n    ],\n    \"categories\": [\n        { \"id\": 3, \"order\": 0 },\n        { \"id\": 5, \"order\": 1 }\n    ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/blogs?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "blogs"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Blog ID"
                }
              ]
            },
            "description": "> `id` query parametresi zorunludur.\n\n> Yalnızca değiştirmek istediğiniz alanları gönderin.\n\n> `languages`: mevcut dil kaydı varsa güncellenir; yoksa yeni eklenir. Permalink değiştirilirse eski SEO route silinerek yenisi eklenir.\n\n> `categories`: **tam değiştirme (full replace)** — gönderilen liste, blogun tüm kategori ilişkilerinin yerini alır. Boş dizi göndermek mevcut tüm kategori ilişkilerini siler.\n\n> `image` geçerli bir URL olmalıdır; `uploads/blog/` dizinine indirilir.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Blog ID |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| languages | array | Dil kayıtları; gönderilen diller upsert edilir; Max 20 giriş |\n| languages.*.lang_id | integer | Dil ID |\n| languages.*.name | string | Blog başlığı; Min 1 Max 255 karakter |\n| languages.*.permalink | string | SEO URL; değiştirilirse eski adres kaldırılır; adresi değiştirmeyecekseniz göndermeyin; Max 255 karakter |\n| languages.*.description | string | Blog içeriği (HTML kabul edilir); Max 100000 karakter |\n| languages.*.meta_title | string | Meta başlık; Max 255 karakter |\n| languages.*.meta_description | string | Meta açıklama; Max 500 karakter |\n| languages.*.meta_keywords | string | Meta anahtar kelimeler; Max 500 karakter |\n| status | string | Durum; Values: active / inactive |\n| order | integer | Sıralama; Min 0 Max 99999 |\n| image | string | Görsel URL; `uploads/blog/` dizinine indirilir |\n| categories | array | Kategori ilişkileri (tam değiştirme); Max 50 |\n| categories.*.id | integer | Blog kategori ID |\n| categories.*.order | integer | Kategorideki sıralama; Min 0 Max 99999 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Blog updated successfully.\",\n        \"blog_id\": 1\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Blog Sil",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/blogs?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "blogs"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Silinecek blog ID'leri; virgülle ayırarak birden fazla gönderilebilir. Örn: 1,2,3"
                }
              ]
            },
            "description": "> Bu işlem blogu ve tüm dil kayıtlarını kalıcı olarak siler. Geri alınamaz.\n\n> Birden fazla blog aynı anda silinebilir.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | string - required | Silinecek blog ID'leri; virgülle ayrılmış. Örn: 1,2,3 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Blog deleted successfully.\",\n        \"deleted_ids\": [1, 2]\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Siparişler",
      "description": "> Sipariş listeleme, detay görüntüleme, durum/ödeme/not güncelleme ve durum geçmişi / kargo hareketi ekleme işlemleri. Silme işlemi desteklenmez.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Siparişler Listesi",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/orders",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders"
              ],
              "query": [
                {
                  "key": "customer_id",
                  "value": "8,1",
                  "description": "Müşteri ID; virgülle birden fazla gönderilebilir. Örn: 1,2,3",
                  "disabled": true
                },
                {
                  "key": "customer_code",
                  "value": "code123",
                  "description": "Müşteri/Cari kodu",
                  "disabled": true
                },
                {
                  "key": "email",
                  "value": "ornek@mail.com",
                  "description": "E-posta adresi",
                  "disabled": true
                },
                {
                  "key": "phone",
                  "value": "+905001234567",
                  "description": "Telefon numarası",
                  "disabled": true
                },
                {
                  "key": "order_no",
                  "value": "3292609",
                  "description": "Sipariş numarası; virgülle birden fazla gönderilebilir",
                  "disabled": true
                },
                {
                  "key": "full_name",
                  "value": "Ahmet",
                  "description": "Ad soyad (LIKE araması)",
                  "disabled": true
                },
                {
                  "key": "start_date",
                  "value": "2025-01-01",
                  "description": "Tarih aralığı başlangıç; Format: YYYY-MM-DD veya YYYY-MM-DDTHH:MM:SSZ",
                  "disabled": true
                },
                {
                  "key": "end_date",
                  "value": "2025-12-31",
                  "description": "Tarih aralığı bitiş; Format: YYYY-MM-DD veya YYYY-MM-DDTHH:MM:SSZ",
                  "disabled": true
                },
                {
                  "key": "order_status",
                  "value": "pending_approval",
                  "description": "Sipariş durumu; Values: pending_approval / preparing / shipped / completed / on_hold / cancelled / sent_to_entegra / returned",
                  "disabled": true
                },
                {
                  "key": "payment_status",
                  "value": "approved",
                  "description": "Ödeme durumu; Values: pending_approval / approved / cancelled",
                  "disabled": true
                },
                {
                  "key": "device",
                  "value": "desktop",
                  "description": "Cihaz türü; Values: desktop / mobile_app",
                  "disabled": true
                },
                {
                  "key": "company",
                  "value": "Entegra",
                  "description": "Firma unvanı (LIKE araması)",
                  "disabled": true
                },
                {
                  "key": "invoice_type",
                  "value": "institutional",
                  "description": "Fatura tipi; Values: individual / institutional",
                  "disabled": true
                },
                {
                  "key": "customer_type",
                  "value": "dealers",
                  "description": "Müşteri tipi; Values: subscribed_customers / dealers",
                  "disabled": true
                },
                {
                  "key": "dealers",
                  "value": "1,2",
                  "description": "Bayi grubu ID; virgülle birden fazla gönderilebilir. Örn: 1,2,3",
                  "disabled": true
                },
                {
                  "key": "min_order_amount",
                  "value": "100",
                  "description": "Min sipariş tutarı",
                  "disabled": true
                },
                {
                  "key": "max_order_amount",
                  "value": "5000",
                  "description": "Max sipariş tutarı",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralanacak alan; Values: id / order_date / full_name / amount",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "desc",
                  "description": "Sıralama yönü; Values: asc / desc",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa numarası; Min: 1",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "Sayfa limiti; Min: 1 Max: 500",
                  "disabled": true
                }
              ]
            },
            "description": "#### Sipariş durumu değerleri\n\n| Değer | Açıklama |\n| --- | --- |\n| pending_approval | Onay Bekliyor |\n| preparing | Hazırlanıyor |\n| shipped | Kargolandı |\n| completed | Tamamlandı |\n| on_hold | Beklemede |\n| cancelled | İptal Edildi |\n| sent_to_entegra | Entegraya Düştü |\n| returned | İade Edildi |\n\n#### Ödeme durumu değerleri\n\n| Değer | Açıklama |\n| --- | --- |\n| pending_approval | Onay Bekliyor |\n| approved | Onaylandı |\n| cancelled | İptal Edildi |\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| customer_id | string | Müşteri ID; virgülle birden fazla gönderilebilir |\n| customer_code | string | Müşteri/Cari kodu |\n| email | string | E-posta adresi |\n| phone | string | Telefon numarası |\n| order_no | string | Sipariş numarası; virgülle birden fazla gönderilebilir |\n| full_name | string | Ad soyad (LIKE araması) |\n| start_date | string | Tarih aralığı başlangıç; Format: YYYY-MM-DD veya YYYY-MM-DDTHH:MM:SSZ |\n| end_date | string | Tarih aralığı bitiş; Format: YYYY-MM-DD veya YYYY-MM-DDTHH:MM:SSZ |\n| order_status | string | Sipariş durumu; Values: pending_approval / preparing / shipped / completed / on_hold / cancelled / sent_to_entegra / returned |\n| payment_status | string | Ödeme durumu; Values: pending_approval / approved / cancelled |\n| device | string | Cihaz türü; Values: desktop / mobile_app |\n| company | string | Firma unvanı (LIKE araması) |\n| invoice_type | string | Fatura tipi; Values: individual / institutional |\n| customer_type | string | Müşteri tipi; Values: subscribed_customers / dealers |\n| dealers | string | Bayi grubu ID; virgülle birden fazla gönderilebilir |\n| min_order_amount | decimal | Min sipariş tutarı |\n| max_order_amount | decimal | Max sipariş tutarı |\n| sort | string | Sıralanacak alan; Values: id / order_date / full_name / amount (varsayılan: id) |\n| order | string | Sıralama yönü; Values: asc / desc (varsayılan: desc) |\n| page | integer | Sayfa numarası; Min: 1 |\n| limit | integer | Sayfa limiti; Min: 1 Max: 500 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"items\": [\n            {\n                \"order_id\": 414,\n                \"customer_id\": 38,\n                \"order_no\": \"3292609\",\n                \"order_status\": \"pending_approval\",\n                \"payment_type\": \"Havale/EFT\",\n                \"bank_definition\": \"5\",\n                \"payment_status\": \"pending_approval\",\n                \"name\": \"Ahmet\",\n                \"surname\": \"Yılmaz\",\n                \"email\": \"ahmet@ornek.com\",\n                \"phone\": \"+905001234567\",\n                \"shipping\": {\n                    \"cargo\": \"Borusan Lojistik\",\n                    \"country\": \"Türkiye\",\n                    \"city\": \"İstanbul\",\n                    \"district\": \"Bahçelievler\",\n                    \"address\": \"Şirinevler Mah.\",\n                    \"delivery_type\": \"address\",\n                    \"pickup_point\": \"\",\n                    \"pickup_code\": \"\"\n                },\n                \"invoice\": {\n                    \"type\": \"individual\",\n                    \"name\": \"Ahmet Yılmaz\",\n                    \"country\": \"Türkiye\",\n                    \"city\": \"İstanbul\",\n                    \"district\": \"Bahçelievler\",\n                    \"adres\": \"Şirinevler Mah.\",\n                    \"phone\": \"+905001234567\",\n                    \"company\": \"\",\n                    \"tax_number\": \"\",\n                    \"tax_office\": \"\",\n                    \"invoice_url\": \"\"\n                },\n                \"total_amount\": 4161.805,\n                \"cargo_price\": 70.0,\n                \"extra_pay\": [],\n                \"discounts\": [],\n                \"card_type\": \"-\",\n                \"currency\": \"TL\",\n                \"exchange_rate\": 1.0,\n                \"pos_info\": {\n                    \"bank_name\": \"\",\n                    \"card_family\": \"-\",\n                    \"card_installment\": \"\"\n                },\n                \"customer_note\": \"\",\n                \"admin_note\": \"\",\n                \"pos_result\": \"\",\n                \"user_device\": \"Bilgisayar\",\n                \"mobile_device\": \"\",\n                \"ads_campaign\": \"\",\n                \"error_message\": \"\",\n                \"created_at\": \"1765974430\",\n                \"created_at_local\": \"17.06.2025 15:27:10\"\n            }\n        ],\n        \"pager\": {\n            \"currentPage\": 1,\n            \"totalPages\": 5,\n            \"totalRecords\": 79\n        }\n    }\n}\n\n ```\n\n- `shipping.delivery_type`: `address` (adrese teslim) / `pickup_point` (Gel Al noktasından teslim). Gel al siparişinde `shipping.pickup_point` noktanın adını, `shipping.pickup_code` müşterinin teslimde göstereceği kodu taşır; diğer siparişlerde ikisi boş döner.\n- `extra_pay`: ödeme türüne bağlı ek ücret (ör. kapıda ödeme bedeli) varsa `{\"title\", \"price\"}` nesnesi, yoksa boş dizi `[]`.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Sipariş Detayı",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/orders/detail?order_id=414",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                "detail"
              ],
              "query": [
                {
                  "key": "order_id",
                  "value": "414",
                  "description": "Sipariş ID; order_id veya order_no'dan biri zorunlu"
                },
                {
                  "key": "order_no",
                  "value": "",
                  "description": "Sipariş numarası; order_id veya order_no'dan biri zorunlu",
                  "disabled": true
                }
              ]
            },
            "description": "> `order_id` veya `order_no` parametrelerinden biri zorunludur.\n\n> Detay yanıtı; liste yanıtına ek olarak `products[]`, `history[]`, `cargo_history[]` ve `contracts{}` alanlarını içerir.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| order_id | integer | Sipariş ID; `order_id` veya `order_no`'dan biri zorunlu |\n| order_no | string | Sipariş numarası; `order_id` veya `order_no`'dan biri zorunlu |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"order_id\": 414,\n        \"customer_id\": 38,\n        \"order_no\": \"3292609\",\n        \"order_status\": \"pending_approval\",\n        \"payment_type\": \"Havale/EFT\",\n        \"bank_definition\": \"5\",\n        \"payment_status\": \"pending_approval\",\n        \"name\": \"Ahmet\",\n        \"surname\": \"Yılmaz\",\n        \"email\": \"ahmet@ornek.com\",\n        \"phone\": \"+905001234567\",\n        \"shipping\": {\n            \"cargo\": \"Borusan Lojistik\",\n            \"country\": \"Türkiye\",\n            \"city\": \"İstanbul\",\n            \"district\": \"Bahçelievler\",\n            \"address\": \"Şirinevler Mah.\",\n            \"delivery_type\": \"address\",\n            \"pickup_point\": \"\",\n            \"pickup_code\": \"\"\n        },\n        \"invoice\": {\n            \"type\": \"individual\",\n            \"name\": \"Ahmet Yılmaz\",\n            \"country\": \"Türkiye\",\n            \"city\": \"İstanbul\",\n            \"district\": \"Bahçelievler\",\n            \"adres\": \"Şirinevler Mah.\",\n            \"phone\": \"+905001234567\",\n            \"tc\": \"11111111111\",\n            \"company\": \"\",\n            \"tax_number\": \"\",\n            \"tax_office\": \"\",\n            \"invoice_url\": \"\"\n        },\n        \"total_amount\": 4161.805,\n        \"cargo_price\": 70.0,\n        \"extra_pay\": {\n            \"title\": \"Kapıda Ödeme Bedeli\",\n            \"price\": 15\n        },\n        \"discounts\": [\n            { \"title\": \"Kupon: YAZ25\", \"value\": 50.0 }\n        ],\n        \"card_type\": \"-\",\n        \"currency\": \"TL\",\n        \"exchange_rate\": 1.0,\n        \"pos_info\": {\n            \"bank_name\": \"\",\n            \"card_family\": \"-\",\n            \"card_installment\": \"\"\n        },\n        \"customer_note\": \"Kapıda zil çalınmasın.\",\n        \"admin_note\": \"\",\n        \"pos_result\": \"\",\n        \"user_device\": \"Bilgisayar\",\n        \"mobile_device\": \"\",\n        \"ads_campaign\": \"\",\n        \"error_message\": \"\",\n        \"contracts\": {\n            \"mesafeli_satis\": \"https://example.com/uploads/contracts/sozlesme.pdf\",\n            \"iptal_iade\": \"\",\n            \"kvkk\": \"\",\n            \"on_bilgilendirme\": \"\"\n        },\n        \"created_at\": 1765974430,\n        \"created_at_local\": \"17.06.2025 15:27:10\",\n        \"products\": [\n            {\n                \"product_id\": 12,\n                \"name\": \"Kahve Çekirdeği 250g\",\n                \"image\": \"https://example.com/uploads/urunler/kahve.jpg\",\n                \"qty\": 2,\n                \"sub_total\": 150.0,\n                \"total\": 300.0,\n                \"product_code\": \"KHV-250\",\n                \"product_barcode\": \"8690000000001\",\n                \"tax\": 10,\n                \"options\": [\n                    { \"name\": \"Öğütme\", \"value\": \"Espresso\" }\n                ],\n                \"customizations\": [\n                    { \"name\": \"Kişiye Özel Mesaj\", \"value\": \"İyi ki doğdun!\" }\n                ]\n            }\n        ],\n        \"history\": [\n            {\n                \"action_type_label\": \"Hazırlanıyor\",\n                \"action_text\": \"Sipariş hazırlanmaya başlandı.\",\n                \"created_at\": 1765974800,\n                \"created_at_local\": \"17.06.2025 15:33:20\"\n            }\n        ],\n        \"cargo_history\": [\n            {\n                \"cargo_company\": \"Borusan Lojistik\",\n                \"cargo_takipno\": \"1234567890\",\n                \"created_at\": 1765975200,\n                \"created_at_local\": \"17.06.2025 15:40:00\"\n            }\n        ]\n    }\n}\n\n ```\n\n- `shipping.delivery_type`: `address` (adrese teslim) / `pickup_point` (Gel Al noktasından teslim). Gel al siparişinde `shipping.pickup_point` noktanın adını, `shipping.pickup_code` müşterinin teslimde göstereceği kodu taşır; diğer siparişlerde ikisi boş döner.\n- `extra_pay`: ödeme türüne bağlı ek ücret (ör. kapıda ödeme bedeli) varsa `{\"title\", \"price\"}` nesnesi, yoksa boş dizi `[]`.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Sipariş Güncelle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"order_status\": \"preparing\",\n    \"payment_status\": \"approved\",\n    \"admin_note\": \"Müşteri arandı, onay alındı.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/orders?order_id=414",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders"
              ],
              "query": [
                {
                  "key": "order_id",
                  "value": "414",
                  "description": "Sipariş ID; order_id veya order_no'dan biri zorunlu"
                },
                {
                  "key": "order_no",
                  "value": "",
                  "description": "Sipariş numarası; order_id veya order_no'dan biri zorunlu",
                  "disabled": true
                }
              ]
            },
            "description": "> `order_id` veya `order_no` parametrelerinden biri zorunludur.\n\n> Yalnızca değiştirmek istediğiniz alanları gönderin.\n\n> **Otomatik durum geçişi:** `payment_status: approved` gönderildiğinde sipariş hâlâ `pending_approval` durumundaysa, sipariş durumu otomatik olarak `preparing` yapılır.\n\n> Bu endpoint yalnızca durum, ödeme durumu ve admin notunu günceller. Durum ya da ödeme durumu değiştiğinde sipariş geçmişine otomatik kayıt düşer; sipariş durumu değişikliğinde müşteriye mobil bildirim gider. Kendi açıklamanızla kayıt eklemek ya da SMS / e-posta göndermek için `POST /orders/actions` kullanın.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| order_id | integer | Sipariş ID; `order_id` veya `order_no`'dan biri zorunlu |\n| order_no | string | Sipariş numarası; `order_id` veya `order_no`'dan biri zorunlu |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| order_status | string | Sipariş durumu; Values: pending_approval / preparing / shipped / completed / on_hold / cancelled / sent_to_entegra / returned |\n| payment_status | string | Ödeme durumu; Values: pending_approval / approved / cancelled |\n| admin_note | string | Admin notu |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Order updated successfully.\",\n        \"order_id\": 414\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Sipariş Aksiyonu",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"history\": {\n        \"action_type\": 3,\n        \"action_text\": \"Sipariş kargoya verildi.\",\n        \"notifications\": [\"sms\", \"mail\"]\n    },\n    \"cargo\": {\n        \"company_id\": 4,\n        \"tracking_no\": \"1234567890\",\n        \"notifications\": [\"sms\", \"mail\"]\n    }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/orders/actions?order_id=414",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "orders",
                "actions"
              ],
              "query": [
                {
                  "key": "order_id",
                  "value": "414",
                  "description": "Sipariş ID; order_id veya order_no'dan biri zorunlu"
                },
                {
                  "key": "order_no",
                  "value": "",
                  "description": "Sipariş numarası; order_id veya order_no'dan biri zorunlu",
                  "disabled": true
                }
              ]
            },
            "description": "> `order_id` veya `order_no` parametrelerinden biri zorunludur.\n\n> `history` ve `cargo` alanlarından en az biri zorunludur; ikisi de aynı istekte gönderilebilir.\n\n> **Idempotency-Key (önerilir):** İsteğe `Idempotency-Key` başlığı eklenebilir (16–128 karakter; harf, rakam, `-`, `_`). Aynı anahtarla aynı sipariş için 24 saat içinde gelen tekrar istek yeniden işlenmez; ilk başarılı yanıt `\"idempotent\": true` alanıyla döner, geçmiş kaydı ve bildirimler tekrarlanmaz.\n\n> **`history`:** `ny_order_action` tablosuna kayıt ekler, `or_durum` günceller ve otomasyon motoru tetiklenir. Bildirim gönderilmesi için `notifications` dizisine `sms`, `mail` ve/veya `push` eklenebilir.\n\n> **`cargo`:** `ny_order_cargo` tablosuna kargo takip kaydı ekler, sipariş durumunu otomatik olarak `shipped (3)` yapar ve otomasyon motoru tetiklenir.\n\n#### action_type değerleri\n\n| Değer | Açıklama |\n| --- | --- |\n| 1 | Onay Bekliyor |\n| 2 | Hazırlanıyor |\n| 3 | Kargolandı |\n| 4 | Tamamlandı |\n| 5 | Beklemede |\n| 6 | İptal Edildi |\n| 7 | Entegraya Düştü |\n| 8 | İade |\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| order_id | integer | Sipariş ID; `order_id` veya `order_no`'dan biri zorunlu |\n| order_no | string | Sipariş numarası; `order_id` veya `order_no`'dan biri zorunlu |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| history | object | Durum geçmişi kaydı; `history` veya `cargo`'dan en az biri zorunlu |\n| history.action_type | integer - required | Aksiyon tipi; Values: 1–8 |\n| history.action_text | string | Aksiyon açıklaması |\n| history.notifications | array | Bildirim kanalları; Values: sms / mail / push |\n| cargo | object | Kargo hareketi kaydı; sipariş durumunu otomatik `shipped` yapar |\n| cargo.company_id | integer - required | Kargo firma ID |\n| cargo.tracking_no | string - required | Kargo takip numarası |\n| cargo.notifications | array | Bildirim kanalları; Values: sms / mail / push |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Actions processed successfully.\",\n        \"order_id\": 414\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        }
      ]
    },
    {
      "name": "İadeler",
      "description": "Müşteri iade taleplerini listeleyin, detaylarını görüntüleyin ve ürün bazlı onay/ret işlemi yapın. İade nedenlerini yönetin.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "İade Listesi",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/returns",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "returns"
              ],
              "query": [
                {
                  "key": "user_id",
                  "value": "",
                  "description": "Müşteri ID'sine göre filtrele"
                },
                {
                  "key": "order_no",
                  "value": "",
                  "description": "Sipariş numarasına göre filtrele (LIKE arama)"
                },
                {
                  "key": "start_date",
                  "value": "",
                  "description": "Başlangıç tarihi (YYYY-MM-DD)"
                },
                {
                  "key": "end_date",
                  "value": "",
                  "description": "Bitiş tarihi (YYYY-MM-DD)"
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID (varsayılan: 1 = TR)"
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralama alanı: id | date"
                },
                {
                  "key": "order",
                  "value": "desc",
                  "description": "Sıralama yönü: asc | desc"
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa numarası (varsayılan: 1)"
                },
                {
                  "key": "limit",
                  "value": "50",
                  "description": "Sayfa başına kayıt (1–500, varsayılan: 50)"
                }
              ]
            },
            "description": "İade taleplerini sayfalı olarak listeler. Her kayıt o iadedeki ürün sayısı ve onay/red durumunu özet olarak içerir.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/returns",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "returns"
                  ],
                  "query": [
                    {
                      "key": "user_id",
                      "value": "",
                      "description": "Müşteri ID'sine göre filtrele"
                    },
                    {
                      "key": "order_no",
                      "value": "",
                      "description": "Sipariş numarasına göre filtrele (LIKE arama)"
                    },
                    {
                      "key": "start_date",
                      "value": "",
                      "description": "Başlangıç tarihi (YYYY-MM-DD)"
                    },
                    {
                      "key": "end_date",
                      "value": "",
                      "description": "Bitiş tarihi (YYYY-MM-DD)"
                    },
                    {
                      "key": "lang_id",
                      "value": "1",
                      "description": "Dil ID (varsayılan: 1 = TR)"
                    },
                    {
                      "key": "sort",
                      "value": "id",
                      "description": "Sıralama alanı: id | date"
                    },
                    {
                      "key": "order",
                      "value": "desc",
                      "description": "Sıralama yönü: asc | desc"
                    },
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Sayfa numarası (varsayılan: 1)"
                    },
                    {
                      "key": "limit",
                      "value": "50",
                      "description": "Sayfa başına kayıt (1–500, varsayılan: 50)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"total\": 24,\n    \"page\": 1,\n    \"limit\": 50,\n    \"items\": [\n      {\n        \"iade_id\": 12,\n        \"order_id\": 305,\n        \"user_id\": 88,\n        \"return_id\": 3,\n        \"order_no\": \"SP-2026-0305\",\n        \"customer_name\": \"Ahmet Yılmaz\",\n        \"return_explanation\": \"Ürün hasarlı geldi.\",\n        \"return_name\": \"Hasarlı Ürün\",\n        \"total\": 2,\n        \"approved\": 1,\n        \"cancelled\": 0,\n        \"created_at\": 1747296000,\n        \"created_at_local\": \"15.05.2026 - 10:00\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "İade Detayı",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/returns/detail",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "returns",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "12",
                  "description": "İade ID (zorunlu)"
                },
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID (varsayılan: 1 = TR)"
                }
              ]
            },
            "description": "Belirtilen iadenin tüm detaylarını ve iade edilen ürünlerin satır bazlı onay/red durumlarını döner.\n\n- `status`: 0 = açık talep, 2 = müşteri talebi geri çekti.\n- Her ürün satırı kendi iade nedenini (`reason_id`, `reason`) taşır.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/returns/detail",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "returns",
                    "detail"
                  ],
                  "query": [
                    {
                      "key": "id",
                      "value": "12",
                      "description": "İade ID (zorunlu)"
                    },
                    {
                      "key": "lang_id",
                      "value": "1",
                      "description": "Dil ID (varsayılan: 1 = TR)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"iade_id\": 12,\n    \"order_id\": 305,\n    \"user_id\": 88,\n    \"return_id\": 3,\n    \"order_no\": \"SP-2026-0305\",\n    \"customer_name\": \"Ahmet Yılmaz\",\n    \"return_explanation\": \"Ürün hasarlı geldi.\",\n    \"status\": 0,\n    \"return_reason\": \"Hasarlı Ürün\",\n    \"products\": [\n      {\n        \"row_id\": \"abc123def456\",\n        \"id\": 42,\n        \"name\": \"Örnek Ürün\",\n        \"image\": \"https://example.com/uploads/urunler/example.jpg\",\n        \"code\": \"PRD-001\",\n        \"link\": \"https://example.com/ornek-urun\",\n        \"unit_price\": 299.9,\n        \"total_price\": 299.9,\n        \"qty\": 1,\n        \"options\": null,\n        \"reason_id\": 3,\n        \"reason\": \"Hasarlı Ürün\",\n        \"confirm_status\": false,\n        \"confirm_message\": \"\",\n        \"cancel_status\": false,\n        \"cancel_message\": \"\"\n      }\n    ],\n    \"created_at\": 1747296000,\n    \"created_at_local\": \"15.05.2026 - 10:00\"\n  }\n}"
            },
            {
              "name": "Hata — İade Bulunamadı",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/returns/detail",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "returns",
                    "detail"
                  ],
                  "query": [
                    {
                      "key": "id",
                      "value": "12",
                      "description": "İade ID (zorunlu)"
                    },
                    {
                      "key": "lang_id",
                      "value": "1",
                      "description": "Dil ID (varsayılan: 1 = TR)"
                    }
                  ]
                }
              },
              "status": "Not Found",
              "code": 404,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": false,\n  \"error\": \"not_found\",\n  \"message\": \"Return not found.\"\n}"
            }
          ]
        },
        {
          "name": "İade Aksiyon (Onayla / Reddet)",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"action\": \"approve\",\n  \"message\": \"İade talebiniz onaylandı.\",\n  \"restore_stock\": \"true\",\n  \"update_cari\": \"false\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/returns?return_id=12&product_row_id=abc123def456",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "returns"
              ],
              "query": [
                {
                  "key": "return_id",
                  "value": "12",
                  "description": "İade ID (zorunlu)"
                },
                {
                  "key": "product_row_id",
                  "value": "abc123def456",
                  "description": "Ürün satır ID'si — İade Detayı yanıtındaki `products[].row_id` değeri (zorunlu)"
                }
              ]
            },
            "description": "Bir iade içindeki tek bir ürün satırını onaylar veya reddeder. Her ürün satırı bağımsız olarak işlenir.\n\n**Parametre notu:** `return_id` ve `product_row_id` **query string**'de gönderilir; diğer alanlar JSON body'de.\n\n**`action` değerleri:**\n- `approve` — ürünü onaylar; `restore_stock: \"true\"` ise stok geri eklenir; `update_cari: \"true\"` ise cari güncellenir (yalnız cari ödemeli siparişlerde); sipariş durumu otomatik olarak `8 (İade Edildi)` yapılır\n- `reject` — ürünü reddeder\n\n**`restore_stock` / `update_cari`:** `\"true\"` veya `\"false\"` string olarak gönderilmeli (integer `0/1` kabul edilmez).\n\n**Müşteri bildirimi:** Talepteki son bekleyen ürün satırı da karara bağlandığında müşteriye sonuç e-postası ve SMS gönderilir (SMS panel ayarına bağlıdır).\n\n**Çift işlem koruması:** Daha önce onaylanmış veya reddedilmiş ürün satırı için `409` döner.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt — Onay",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"action\": \"approve\",\n  \"message\": \"İade talebiniz onaylandı.\",\n  \"restore_stock\": \"true\",\n  \"update_cari\": \"false\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/returns?return_id=12&product_row_id=abc123def456",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "returns"
                  ],
                  "query": [
                    {
                      "key": "return_id",
                      "value": "12",
                      "description": "İade ID (zorunlu)"
                    },
                    {
                      "key": "product_row_id",
                      "value": "abc123def456",
                      "description": "Ürün satır ID'si — İade Detayı yanıtındaki `products[].row_id` değeri (zorunlu)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"message\": \"Product return approved successfully.\",\n    \"return_id\": 12,\n    \"action\": \"approve\",\n    \"stock_restored\": 1\n  }\n}"
            },
            {
              "name": "Hata — Zaten İşlenmiş",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"action\": \"approve\",\n  \"message\": \"İade talebiniz onaylandı.\",\n  \"restore_stock\": \"true\",\n  \"update_cari\": \"false\"\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/returns?return_id=12&product_row_id=abc123def456",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "returns"
                  ],
                  "query": [
                    {
                      "key": "return_id",
                      "value": "12",
                      "description": "İade ID (zorunlu)"
                    },
                    {
                      "key": "product_row_id",
                      "value": "abc123def456",
                      "description": "Ürün satır ID'si — İade Detayı yanıtındaki `products[].row_id` değeri (zorunlu)"
                    }
                  ]
                }
              },
              "status": "Conflict",
              "code": 409,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": false,\n  \"error\": \"already_processed\",\n  \"message\": \"This product return has already been approved.\"\n}"
            }
          ]
        },
        {
          "name": "İade Nedenleri Listesi",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/returns/reasons",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "returns",
                "reasons"
              ],
              "query": [
                {
                  "key": "lang_id",
                  "value": "1",
                  "description": "Dil ID (varsayılan: 1 = TR)"
                },
                {
                  "key": "status",
                  "value": "",
                  "description": "Durum filtresi: active | inactive"
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralama alanı: id | sort"
                },
                {
                  "key": "order",
                  "value": "asc",
                  "description": "Sıralama yönü: asc | desc"
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa numarası (varsayılan: 1)"
                },
                {
                  "key": "limit",
                  "value": "100",
                  "description": "Sayfa başına kayıt (1–500, varsayılan: 100)"
                }
              ]
            },
            "description": "Tanımlı iade nedenlerini sayfalı olarak listeler.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/returns/reasons",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "returns",
                    "reasons"
                  ],
                  "query": [
                    {
                      "key": "lang_id",
                      "value": "1",
                      "description": "Dil ID (varsayılan: 1 = TR)"
                    },
                    {
                      "key": "status",
                      "value": "",
                      "description": "Durum filtresi: active | inactive"
                    },
                    {
                      "key": "sort",
                      "value": "id",
                      "description": "Sıralama alanı: id | sort"
                    },
                    {
                      "key": "order",
                      "value": "asc",
                      "description": "Sıralama yönü: asc | desc"
                    },
                    {
                      "key": "page",
                      "value": "1",
                      "description": "Sayfa numarası (varsayılan: 1)"
                    },
                    {
                      "key": "limit",
                      "value": "100",
                      "description": "Sayfa başına kayıt (1–500, varsayılan: 100)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"total\": 8,\n    \"page\": 1,\n    \"limit\": 100,\n    \"items\": [\n      {\n        \"id\": 1,\n        \"status\": \"active\",\n        \"sort\": 0,\n        \"return_name\": \"Hasarlı Ürün\",\n        \"created_at\": 1700000000,\n        \"created_at_local\": \"14.11.2023 - 23:13\",\n        \"updated_at\": 1747296000,\n        \"updated_at_local\": \"15.05.2026 - 10:00\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "İade Nedeni Ekle",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Hasarlı Ürün\"\n    },\n    {\n      \"lang_id\": 2,\n      \"name\": \"Damaged Product\"\n    },\n    {\n      \"lang_id\": 3,\n      \"name\": \"منتج تالف\"\n    },\n    {\n      \"lang_id\": 4,\n      \"name\": \"Beschädigtes Produkt\"\n    },\n    {\n      \"lang_id\": 5,\n      \"name\": \"Produit endommagé\"\n    },\n    {\n      \"lang_id\": 6,\n      \"name\": \"Поврежденный товар\"\n    },\n    {\n      \"lang_id\": 7,\n      \"name\": \"Zədələnmiş məhsul\"\n    }\n  ],\n  \"status\": \"active\",\n  \"sort\": 0\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/returns/reasons",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "returns",
                "reasons"
              ]
            },
            "description": "Yeni iade nedeni oluşturur.\n\n`languages[]` tüm aktif diller için gönderilmelidir (allActiveLangs zorunlu). `status` varsayılan: `active`.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Hasarlı Ürün\"\n    },\n    {\n      \"lang_id\": 2,\n      \"name\": \"Damaged Product\"\n    },\n    {\n      \"lang_id\": 3,\n      \"name\": \"منتج تالف\"\n    },\n    {\n      \"lang_id\": 4,\n      \"name\": \"Beschädigtes Produkt\"\n    },\n    {\n      \"lang_id\": 5,\n      \"name\": \"Produit endommagé\"\n    },\n    {\n      \"lang_id\": 6,\n      \"name\": \"Поврежденный товар\"\n    },\n    {\n      \"lang_id\": 7,\n      \"name\": \"Zədələnmiş məhsul\"\n    }\n  ],\n  \"status\": \"active\",\n  \"sort\": 0\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/returns/reasons",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "returns",
                    "reasons"
                  ]
                }
              },
              "status": "Created",
              "code": 201,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"message\": \"Return reason created successfully.\",\n    \"return_reason_id\": 9\n  }\n}"
            }
          ]
        },
        {
          "name": "İade Nedeni Güncelle",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Hasarlı / Ayıplı Ürün\"\n    },\n    {\n      \"lang_id\": 2,\n      \"name\": \"Damaged / Defective Product\"\n    }\n  ],\n  \"status\": \"inactive\",\n  \"sort\": 5\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/returns/reasons?id=9",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "returns",
                "reasons"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "9",
                  "description": "Güncellenecek iade nedeni ID (zorunlu)"
                }
              ]
            },
            "description": "Mevcut iade nedenini günceller. Sadece gönderilen alanlar güncellenir.\n\n`languages[]` zorunludur ve mağazanın tüm aktif dillerini içermelidir; gönderilen adlar mevcut adların yerine yazılır.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"languages\": [\n    {\n      \"lang_id\": 1,\n      \"name\": \"Hasarlı / Ayıplı Ürün\"\n    },\n    {\n      \"lang_id\": 2,\n      \"name\": \"Damaged / Defective Product\"\n    }\n  ],\n  \"status\": \"inactive\",\n  \"sort\": 5\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/returns/reasons?id=9",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "returns",
                    "reasons"
                  ],
                  "query": [
                    {
                      "key": "id",
                      "value": "9",
                      "description": "Güncellenecek iade nedeni ID (zorunlu)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"message\": \"Return reason updated successfully.\",\n    \"return_reason_id\": 9\n  }\n}"
            }
          ]
        },
        {
          "name": "İade Nedeni Sil",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{base_url}}/returns/reasons?ids=2,3",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "returns",
                "reasons"
              ],
              "query": [
                {
                  "key": "ids",
                  "value": "2,3",
                  "description": "Silinecek iade nedeni ID'leri, virgülle ayrılmış (zorunlu)"
                }
              ]
            },
            "description": "Belirtilen iade nedenlerini siler.\n\n**Not:** `id=1` olan varsayılan iade nedeni silinemez; bu ID dahil edilirse `403` döner.\n\n**Toplu silme limiti:** Tek istekte en fazla 50 ID gönderilebilir.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/returns/reasons?ids=2,3",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "returns",
                    "reasons"
                  ],
                  "query": [
                    {
                      "key": "ids",
                      "value": "2,3",
                      "description": "Silinecek iade nedeni ID'leri, virgülle ayrılmış (zorunlu)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"message\": \"Return reasons deleted successfully.\",\n    \"deleted_ids\": [\n      2,\n      3\n    ],\n    \"count\": 2\n  }\n}"
            },
            {
              "name": "Hata — Varsayılan Neden Silinemez",
              "originalRequest": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/returns/reasons?ids=2,3",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "returns",
                    "reasons"
                  ],
                  "query": [
                    {
                      "key": "ids",
                      "value": "2,3",
                      "description": "Silinecek iade nedeni ID'leri, virgülle ayrılmış (zorunlu)"
                    }
                  ]
                }
              },
              "status": "Forbidden",
              "code": 403,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": false,\n  \"error\": \"forbidden\",\n  \"message\": \"The default return reason (id=1) cannot be deleted.\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Hızlı Sepet",
      "description": "> Tutar bazlı hızlı sepet (fast cart) işlemleri. Belirli bir müşteri için fiyat, taksit, kargo ve tarih aralığı tanımlı özel ödeme linki oluşturur.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Hızlı Sepet Listesi",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/fast-carts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "fast-carts"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "yaz kampanyası",
                  "description": "Sepet adında arama; Max 100 karakter",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "active",
                  "description": "Durum filtresi; Values: active / inactive",
                  "disabled": true
                },
                {
                  "key": "new_order_status",
                  "value": "0",
                  "description": "Sipariş durumu filtresi; Values: 0 (sipariş verilmedi) / 1 (sipariş verildi)",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "id",
                  "description": "Sıralanacak alan; Values: id / cart_name / cart_total / start_date / end_date / cart_status",
                  "disabled": true
                },
                {
                  "key": "order",
                  "value": "desc",
                  "description": "Sıralama yönü; Values: asc / desc",
                  "disabled": true
                },
                {
                  "key": "page",
                  "value": "1",
                  "description": "Sayfa numarası; Min: 1",
                  "disabled": true
                },
                {
                  "key": "limit",
                  "value": "50",
                  "description": "Sayfa limiti; Min: 1 Max: 500",
                  "disabled": true
                }
              ]
            },
            "description": "### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| search | string | Sepet adında arama; Max 100 karakter |\n| status | string | Durum filtresi; Values: active / inactive |\n| new_order_status | integer | Sipariş durumu; 0 = sipariş verilmedi, 1 = sipariş verildi |\n| sort | string | Sıralanacak alan; Values: id / cart_name / cart_total / start_date / end_date / cart_status |\n| order | string | Sıralama yönü; Values: asc / desc |\n| page | integer | Sayfa numarası; Min: 1 |\n| limit | integer | Sayfa limiti; Min: 1 Max: 500 |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"items\": [\n            {\n                \"id\": 1,\n                \"cart_name\": \"Yaz Kampanyası\",\n                \"cart_url\": \"https://www.example.com/sepet/checkout?fast=XXXXX\",\n                \"status\": \"active\",\n                \"product_type\": 1,\n                \"cart_type\": 0,\n                \"cart_total\": 1500.00,\n                \"start_date\": 1714500000,\n                \"end_date\": 1717178400,\n                \"start_date_local\": \"30.04.2024\",\n                \"end_date_local\": \"31.05.2024\",\n                \"created_at\": 1714500000,\n                \"updated_at\": 1714500000,\n                \"created_at_local\": \"30.04.2024 12:00:00\",\n                \"updated_at_local\": \"30.04.2024 12:00:00\"\n            }\n        ],\n        \"pager\": {\n            \"currentPage\": 1,\n            \"totalPages\": 1,\n            \"totalRecords\": 1\n        }\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Hızlı Sepet Detayı",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/fast-carts/detail?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "fast-carts",
                "detail"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Hızlı Sepet ID",
                  "disabled": false
                }
              ]
            },
            "description": "> `id` parametresi zorunludur.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Hızlı Sepet ID |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"id\": 1,\n        \"cart_name\": \"Yaz Kampanyası\",\n        \"cart_url\": \"https://www.example.com/sepet/checkout?fast=XXXXX\",\n        \"status\": \"active\",\n        \"campaign_status\": \"inactive\",\n        \"cargo_status\": \"inactive\",\n        \"cargo_type\": 0,\n        \"free_cargo\": [],\n        \"product_type\": 1,\n        \"cart_type\": 0,\n        \"cart_installment\": 1,\n        \"cart_limit\": 0,\n        \"customer_limit\": 0,\n        \"customers\": [\n            { \"id\": 12, \"name\": \"Ahmet Yılmaz (ahmet@example.com)\" }\n        ],\n        \"region_info\": { \"id\": 215, \"name\": \"Türkiye\" },\n        \"cart_total\": 1500.00,\n        \"amount\": {\n            \"name\": \"Danışmanlık Hizmeti\",\n            \"price\": \"1500.00\",\n            \"tax\": 20\n        },\n        \"customer_usage\": [\n            {\n                \"custome_id\": 12,\n                \"or_no\": \"ORD-20240501-001\",\n                \"or_id\": 55,\n                \"created_at\": 1714600000,\n                \"created_at_local\": \"01.05.2024 16:26:40\"\n            }\n        ],\n        \"start_date\": 1714500000,\n        \"end_date\": 1717178400,\n        \"start_date_local\": \"30.04.2024 12:00\",\n        \"end_date_local\": \"31.05.2024 12:00\",\n        \"created_at\": 1714500000,\n        \"updated_at\": 1714500000,\n        \"created_at_local\": \"30.04.2024 12:00:00\",\n        \"updated_at_local\": \"30.04.2024 12:00:00\"\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Hızlı Sepet Ekle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"cart_name\": \"Yaz Kampanyası\",\n    \"amount\": {\n        \"name\": \"Danışmanlık Hizmeti\",\n        \"price\": 1500.00,\n        \"tax_rate\": 20\n    },\n    \"status\": \"active\",\n    \"cart_type\": 0,\n    \"cart_campaign\": 0,\n    \"cart_installment\": 1,\n    \"cart_limit\": 100,\n    \"customer_limit\": 1,\n    \"cart_customer\": [12, 45],\n    \"cargo_status\": 0,\n    \"cargo_type\": 0,\n    \"free_cargo\": [],\n    \"region_info\": 215,\n    \"start_date\": 1714500000,\n    \"end_date\": 1717178400\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/fast-carts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "fast-carts"
              ]
            },
            "description": "> `cart_name`, `amount`, `amount.name`, `amount.price`, `start_date` ve `end_date` alanları zorunludur.\n\n> `end_date` değeri `start_date` değerinden büyük olmalıdır.\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| cart_name | string - required | Sepet adı; Max 255 karakter |\n| amount | object - required | Tutar bilgileri |\n| amount.name | string - required | Ürün/hizmet adı; Max 255 karakter |\n| amount.price | decimal - required | Tutar; 0'dan büyük, Max 99999999 |\n| amount.tax_rate | integer | KDV oranı; Min 0 (varsayılan: 20) |\n| status | string | Durum; Values: active / inactive (varsayılan: active) |\n| cart_type | integer | Sepet tipi; 0 = herkes kullanabilir, 1 = yalnız üye girişi yapmış müşteriler |\n| cart_campaign | integer | Mağaza kampanyaları (promosyonlar, havale ve mağazadan teslim indirimleri) bu sepette de uygulansın mı; 0 = hayır, 1 = evet |\n| cart_installment | integer | Taksit sayısı; Min 1 Max 12 (varsayılan: 1) |\n| cart_limit | integer | Toplam kullanım limiti; en az 1 olmalı, 0 gönderilirse sepet kullanılamaz |\n| customer_limit | integer | Müşteri başına kullanım limiti; en az 1 olmalı, 0 gönderilirse sepet kullanılamaz |\n| cart_customer | array | Sepetin atandığı müşteri ID listesi; her değer kayıtlı bir müşteri olmalı. Ödeme adımında erişim kısıtı olarak kullanılmaz; sepeti yalnız üyelere açmak için `cart_type: 1` kullanın |\n| cargo_status | integer | Ücretsiz kargo; 0 = kapalı, 1 = açık |\n| cargo_type | integer | Ücretsiz kargonun kapsamı (`cargo_status` = 1 iken); 0 = tüm kargo firmaları, 1 = yalnız `free_cargo` listesindeki firmalar |\n| free_cargo | array | Ücretsiz kargo firması ID listesi; her değer ny_kargo_firma.id'de bulunmalı |\n| region_info | integer | Ülke ID; ny_country.country_id'de bulunmalı (varsayılan: 215 = Türkiye) |\n| start_date | integer - required | Başlangıç tarihi (Unix timestamp) |\n| end_date | integer - required | Bitiş tarihi (Unix timestamp); start_date'den büyük olmalı |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Fast cart created successfully.\",\n        \"id\": 1,\n        \"cart_url\": \"https://www.example.com/sepet/checkout?fast=XXXXX\"\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Hızlı Sepet Düzenle",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"cart_name\": \"Güncellendi Yaz Kampanyası\",\n    \"amount\": {\n        \"name\": \"Danışmanlık Hizmeti\",\n        \"price\": 1800.00,\n        \"tax_rate\": 20\n    },\n    \"status\": \"active\",\n    \"end_date\": 1719856800\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/fast-carts?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "fast-carts"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Hızlı Sepet ID",
                  "disabled": false
                }
              ]
            },
            "description": "> `id` query parametresi zorunludur. Body'de yalnızca güncellenmek istenen alanlar gönderilir.\n\n> `amount.price` gönderilirse `cart_total` da güncellenir.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | integer - required | Hızlı Sepet ID |\n\n### Body (JSON)\n\n| Field | Type | Rules |\n| --- | --- | --- |\n| cart_name | string | Sepet adı; Max 255 karakter |\n| amount | object | Tutar bilgileri |\n| amount.name | string | Ürün/hizmet adı; Max 255 karakter |\n| amount.price | decimal | Tutar; 0'dan büyük, Max 99999999 |\n| amount.tax_rate | integer | KDV oranı; Min 0 |\n| status | string | Durum; Values: active / inactive |\n| cart_type | integer | Sepet tipi; 0 = herkes kullanabilir, 1 = yalnız üye girişi yapmış müşteriler |\n| cart_campaign | integer | Mağaza kampanyaları (promosyonlar, havale ve mağazadan teslim indirimleri) bu sepette de uygulansın mı; 0 = hayır, 1 = evet |\n| cart_installment | integer | Taksit sayısı; Min 1 Max 12 |\n| cart_limit | integer | Toplam kullanım limiti; en az 1 olmalı, 0 gönderilirse sepet kullanılamaz |\n| customer_limit | integer | Müşteri başına kullanım limiti; en az 1 olmalı, 0 gönderilirse sepet kullanılamaz |\n| cart_customer | array | Sepetin atandığı müşteri ID listesi; ödeme adımında erişim kısıtı olarak kullanılmaz |\n| cargo_status | integer | Ücretsiz kargo; 0 = kapalı, 1 = açık |\n| cargo_type | integer | Ücretsiz kargonun kapsamı (`cargo_status` = 1 iken); 0 = tüm kargo firmaları, 1 = yalnız `free_cargo` listesindeki firmalar |\n| free_cargo | array | Ücretsiz kargo firması ID listesi |\n| region_info | integer | Ülke ID |\n| start_date | integer | Başlangıç tarihi (Unix timestamp) |\n| end_date | integer | Bitiş tarihi (Unix timestamp) |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Fast cart updated successfully.\",\n        \"id\": 1,\n        \"cart_url\": \"https://www.example.com/sepet/checkout?fast=XXXXX\"\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        },
        {
          "name": "Hızlı Sepet Sil",
          "request": {
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{token}}",
                  "type": "string"
                }
              ]
            },
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "Accept",
                "value": "application/json",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{base_url}}/fast-carts?id=1",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "fast-carts"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "1",
                  "description": "Tek ID: ?id=1 | Çoklu ID: ?id=1,2,3 (Max 50)",
                  "disabled": false
                }
              ]
            },
            "description": "> `id` parametresi zorunludur. Tek veya virgülle ayrılmış çoklu ID gönderilebilir. Bir seferde maksimum 50 ID silinebilir.\n\n### Query Parameters\n\n| Field | Type | Description |\n| --- | --- | --- |\n| id | string - required | Silinecek ID(ler); tekil: `1` veya virgüllü: `1,2,3`; Max 50 adet |\n\n### Response (200 OK)\n\n``` json\n{\n    \"status\": true,\n    \"data\": {\n        \"message\": \"Fast cart deleted successfully.\",\n        \"id\": \"1\"\n    }\n}\n\n ```\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Raporlar",
      "description": "Satış, sipariş, ürün, stok, müşteri, iade, kupon ve terk edilmiş sepet raporları. Tüm dönem parametreleri: `today`, `7d`, `30d`, `this_month`, `last_month`, `this_year`, `custom`. `custom` seçildiğinde `start_date` ve `end_date` (YYYY-MM-DD) zorunludur.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Satış Özeti",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/reports/sales",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "reports",
                "sales"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "30d",
                  "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                },
                {
                  "key": "start_date",
                  "value": "",
                  "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "end_date",
                  "value": "",
                  "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "breakdown",
                  "value": "",
                  "description": "Zaman dağılımı: daily | hourly (isteğe bağlı)"
                }
              ]
            },
            "description": "Belirtilen dönem için finansal satış özetini döner. `breakdown` parametresi eklenirse günlük veya saatlik sipariş dağılımı da eklenir.\n\n**Rate limit:** 60 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/reports/sales",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "reports",
                    "sales"
                  ],
                  "query": [
                    {
                      "key": "period",
                      "value": "30d",
                      "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                    },
                    {
                      "key": "start_date",
                      "value": "",
                      "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "end_date",
                      "value": "",
                      "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "breakdown",
                      "value": "",
                      "description": "Zaman dağılımı: daily | hourly (isteğe bağlı)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"period\": {\n      \"label\": \"Son 30 Gün\",\n      \"start_date\": \"15.04.2026\",\n      \"end_date\": \"15.05.2026\"\n    },\n    \"summary\": {\n      \"order_total\": 125430.5,\n      \"order_total_format\": \"₺125.430,50\",\n      \"order_qty\": 312,\n      \"product_amount\": 118200.0,\n      \"product_amount_format\": \"₺118.200,00\",\n      \"total_product\": 87,\n      \"total_product_qty\": 540,\n      \"cargo_total\": 4320.0,\n      \"cargo_total_format\": \"₺4.320,00\",\n      \"cargo_qty\": 280,\n      \"maturity_total\": 1200.0,\n      \"maturity_total_format\": \"₺1.200,00\",\n      \"maturity_qty\": 15,\n      \"extra_total\": 0.0,\n      \"extra_total_format\": \"₺0,00\",\n      \"extra_qty\": 0,\n      \"discount_total\": 3250.0,\n      \"discount_total_format\": \"₺3.250,00\",\n      \"discount_qty\": 42,\n      \"average_order_value\": 401.99,\n      \"average_order_value_format\": \"₺401,99\"\n    },\n    \"breakdown\": [\n      {\n        \"period\": \"2026-05-14\",\n        \"order_qty\": 18,\n        \"order_total\": 7230.5,\n        \"order_total_format\": \"₺7.230,50\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Sipariş İstatistikleri",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/reports/orders",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "reports",
                "orders"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "30d",
                  "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                },
                {
                  "key": "start_date",
                  "value": "",
                  "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "end_date",
                  "value": "",
                  "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "city_limit",
                  "value": "10",
                  "description": "Şehir dağılımında gösterilecek maksimum şehir sayısı (1–50, varsayılan: 10)"
                }
              ]
            },
            "description": "Sipariş durumu, ödeme yöntemi, kargo firması ve şehir bazlı dağılımları döner.\n\n**Rate limit:** 60 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/reports/orders",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "reports",
                    "orders"
                  ],
                  "query": [
                    {
                      "key": "period",
                      "value": "30d",
                      "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                    },
                    {
                      "key": "start_date",
                      "value": "",
                      "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "end_date",
                      "value": "",
                      "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "city_limit",
                      "value": "10",
                      "description": "Şehir dağılımında gösterilecek maksimum şehir sayısı (1–50, varsayılan: 10)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"period\": {\n      \"label\": \"Son 30 Gün\",\n      \"start_date\": \"15.04.2026\",\n      \"end_date\": \"15.05.2026\"\n    },\n    \"summary\": {\n      \"total_orders\": 312,\n      \"total_revenue\": 125430.5,\n      \"total_revenue_format\": \"₺125.430,50\",\n      \"average_order_value\": 401.99,\n      \"average_order_value_format\": \"₺401,99\"\n    },\n    \"status_breakdown\": [\n      {\n        \"status\": \"completed\",\n        \"label\": \"Tamamlandı\",\n        \"order_qty\": 210,\n        \"order_total\": 95000.0,\n        \"order_total_format\": \"₺95.000,00\"\n      },\n      {\n        \"status\": \"preparing\",\n        \"label\": \"Hazırlanıyor\",\n        \"order_qty\": 45,\n        \"order_total\": 18200.0,\n        \"order_total_format\": \"₺18.200,00\"\n      },\n      {\n        \"status\": \"shipped\",\n        \"label\": \"Kargolandı\",\n        \"order_qty\": 30,\n        \"order_total\": 12000.0,\n        \"order_total_format\": \"₺12.000,00\"\n      },\n      {\n        \"status\": \"pending_approval\",\n        \"label\": \"Onay Bekliyor\",\n        \"order_qty\": 12,\n        \"order_total\": 4800.0,\n        \"order_total_format\": \"₺4.800,00\"\n      },\n      {\n        \"status\": \"cancelled\",\n        \"label\": \"İptal Edildi\",\n        \"order_qty\": 10,\n        \"order_total\": 0.0,\n        \"order_total_format\": \"₺0,00\"\n      },\n      {\n        \"status\": \"on_hold\",\n        \"label\": \"Beklemede\",\n        \"order_qty\": 5,\n        \"order_total\": 430.5,\n        \"order_total_format\": \"₺430,50\"\n      }\n    ],\n    \"payment_breakdown\": [\n      {\n        \"payment_type\": \"Kredi Kartı\",\n        \"payment_type_id\": 1,\n        \"order_qty\": 250,\n        \"order_total\": 102000.0,\n        \"order_total_format\": \"₺102.000,00\"\n      },\n      {\n        \"payment_type\": \"Havale/EFT\",\n        \"payment_type_id\": 2,\n        \"order_qty\": 62,\n        \"order_total\": 23430.5,\n        \"order_total_format\": \"₺23.430,50\"\n      }\n    ],\n    \"cargo_breakdown\": [\n      {\n        \"cargo_company\": \"Yurtiçi Kargo\",\n        \"order_qty\": 180,\n        \"cargo_total\": 2700.0,\n        \"cargo_total_format\": \"₺2.700,00\"\n      },\n      {\n        \"cargo_company\": \"MNG Kargo\",\n        \"order_qty\": 132,\n        \"cargo_total\": 1620.0,\n        \"cargo_total_format\": \"₺1.620,00\"\n      }\n    ],\n    \"city_breakdown\": [\n      {\n        \"city\": \"İstanbul\",\n        \"order_qty\": 120,\n        \"order_total\": 48000.0,\n        \"order_total_format\": \"₺48.000,00\"\n      },\n      {\n        \"city\": \"Ankara\",\n        \"order_qty\": 65,\n        \"order_total\": 26000.0,\n        \"order_total_format\": \"₺26.000,00\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "En Çok Satan Ürünler",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/reports/products/top-sellers",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "reports",
                "products",
                "top-sellers"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "30d",
                  "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                },
                {
                  "key": "start_date",
                  "value": "",
                  "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "end_date",
                  "value": "",
                  "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "sort",
                  "value": "quantity",
                  "description": "Sıralama: quantity | revenue (varsayılan: quantity)"
                },
                {
                  "key": "limit",
                  "value": "10",
                  "description": "Gösterilecek ürün sayısı (1–50, varsayılan: 10)"
                }
              ]
            },
            "description": "Belirtilen dönemde en çok satılan ürünleri ödemesi onaylanmış siparişler baz alınarak listeler.\n\n**Rate limit:** 60 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/reports/products/top-sellers",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "reports",
                    "products",
                    "top-sellers"
                  ],
                  "query": [
                    {
                      "key": "period",
                      "value": "30d",
                      "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                    },
                    {
                      "key": "start_date",
                      "value": "",
                      "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "end_date",
                      "value": "",
                      "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "sort",
                      "value": "quantity",
                      "description": "Sıralama: quantity | revenue (varsayılan: quantity)"
                    },
                    {
                      "key": "limit",
                      "value": "10",
                      "description": "Gösterilecek ürün sayısı (1–50, varsayılan: 10)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"period\": {\n      \"label\": \"Son 30 Gün\",\n      \"start_date\": \"15.04.2026\",\n      \"end_date\": \"15.05.2026\"\n    },\n    \"sort\": \"quantity\",\n    \"limit\": 10,\n    \"products\": [\n      {\n        \"id\": 42,\n        \"code\": \"PRD-001\",\n        \"name\": \"Örnek Ürün\",\n        \"total_qty\": 85,\n        \"total_revenue\": 25415.0,\n        \"total_revenue_format\": \"₺25.415,00\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Stok Durumu",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/reports/stock",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "reports",
                "stock"
              ],
              "query": [
                {
                  "key": "threshold",
                  "value": "5",
                  "description": "Kritik stok eşiği (1–1000, varsayılan: 5) — bu değer ve altındaki ürünler `low_stock_products` listesine girer"
                },
                {
                  "key": "limit",
                  "value": "50",
                  "description": "Listede döndürülecek maksimum ürün sayısı (1–200, varsayılan: 50)"
                }
              ]
            },
            "description": "Genel stok özeti ve kritik stok altındaki ürünleri döner. Bu endpoint dönem filtresi almaz — anlık stok verisi döner.\n\n**Rate limit:** 60 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/reports/stock",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "reports",
                    "stock"
                  ],
                  "query": [
                    {
                      "key": "threshold",
                      "value": "5",
                      "description": "Kritik stok eşiği (1–1000, varsayılan: 5) — bu değer ve altındaki ürünler `low_stock_products` listesine girer"
                    },
                    {
                      "key": "limit",
                      "value": "50",
                      "description": "Listede döndürülecek maksimum ürün sayısı (1–200, varsayılan: 50)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"threshold\": 5,\n    \"summary\": {\n      \"total_products\": 320,\n      \"stock_off\": 12,\n      \"out_of_stock\": 8,\n      \"low_stock\": 25,\n      \"total_stock_value\": 485200.0,\n      \"total_stock_value_format\": \"₺485.200,00\"\n    },\n    \"low_stock_products\": [\n      {\n        \"id\": 17,\n        \"code\": \"PRD-017\",\n        \"name\": \"Az Stoklu Ürün\",\n        \"stock_total\": 2,\n        \"price\": 199.9,\n        \"price_format\": \"₺199,90\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Müşteri İstatistikleri",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/reports/customers",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "reports",
                "customers"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "30d",
                  "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                },
                {
                  "key": "start_date",
                  "value": "",
                  "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "end_date",
                  "value": "",
                  "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "city_limit",
                  "value": "10",
                  "description": "Şehir dağılımında gösterilecek maksimum şehir sayısı (1–50, varsayılan: 10)"
                }
              ]
            },
            "description": "Aktif müşteri sayısını, dönem içindeki yeni kayıt sayısını, tekrar alıcı sayısını ve sipariş bazlı şehir dağılımını döner. `repeat_buyers` dönemden bağımsızdır: ödemesi onaylı en az 2 siparişi olan üyeleri sayar.\n\n**Rate limit:** 60 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/reports/customers",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "reports",
                    "customers"
                  ],
                  "query": [
                    {
                      "key": "period",
                      "value": "30d",
                      "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                    },
                    {
                      "key": "start_date",
                      "value": "",
                      "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "end_date",
                      "value": "",
                      "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "city_limit",
                      "value": "10",
                      "description": "Şehir dağılımında gösterilecek maksimum şehir sayısı (1–50, varsayılan: 10)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"period\": {\n      \"label\": \"Son 30 Gün\",\n      \"start_date\": \"15.04.2026\",\n      \"end_date\": \"15.05.2026\"\n    },\n    \"summary\": {\n      \"total_active_customers\": 1540,\n      \"new_customers_in_period\": 87,\n      \"repeat_buyers\": 320\n    },\n    \"top_cities\": [\n      {\n        \"city\": \"İstanbul\",\n        \"order_qty\": 120,\n        \"order_total\": 48000.0,\n        \"order_total_format\": \"₺48.000,00\"\n      },\n      {\n        \"city\": \"Ankara\",\n        \"order_qty\": 65,\n        \"order_total\": 26000.0,\n        \"order_total_format\": \"₺26.000,00\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "İade İstatistikleri",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/reports/returns",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "reports",
                "returns"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "30d",
                  "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                },
                {
                  "key": "start_date",
                  "value": "",
                  "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "end_date",
                  "value": "",
                  "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                }
              ]
            },
            "description": "İade sayısı, iade oranı, durum dağılımı ve en çok görülen iade nedenlerini döner. İade oranı aynı dönemdeki toplam sipariş sayısına göre hesaplanır.\n\n- `status_breakdown` her zaman beş durum döner: `pending`, `approved`, `rejected`, `partial` (kısmen onaylandı), `withdrawn` (müşteri geri çekti).\n- `top_reasons` en fazla 5 nedeni iade edilen ürün adedine göre listeler; `return_total` ürün adedidir. Müşterinin geri çektiği talepler hariçtir.\n\n**Rate limit:** 60 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/reports/returns",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "reports",
                    "returns"
                  ],
                  "query": [
                    {
                      "key": "period",
                      "value": "30d",
                      "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                    },
                    {
                      "key": "start_date",
                      "value": "",
                      "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "end_date",
                      "value": "",
                      "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"period\": {\n      \"label\": \"Son 30 Gün\",\n      \"start_date\": \"15.04.2026\",\n      \"end_date\": \"15.05.2026\"\n    },\n    \"summary\": {\n      \"total_returns\": 18,\n      \"total_orders\": 312,\n      \"return_rate\": 5.77\n    },\n    \"status_breakdown\": [\n      {\n        \"status\": \"pending\",\n        \"label\": \"Beklemede\",\n        \"return_qty\": 8\n      },\n      {\n        \"status\": \"approved\",\n        \"label\": \"Onaylandı\",\n        \"return_qty\": 7\n      },\n      {\n        \"status\": \"rejected\",\n        \"label\": \"Reddedildi\",\n        \"return_qty\": 3\n      },\n      {\n        \"status\": \"partial\",\n        \"label\": \"Kısmen Onaylandı\",\n        \"return_qty\": 0\n      },\n      {\n        \"status\": \"withdrawn\",\n        \"label\": \"Müşteri Geri Çekti\",\n        \"return_qty\": 0\n      }\n    ],\n    \"top_reasons\": [\n      {\n        \"return_name\": \"Ürün hasarlı geldi\",\n        \"return_total\": 7\n      },\n      {\n        \"return_name\": \"Yanlış ürün gönderildi\",\n        \"return_total\": 5\n      },\n      {\n        \"return_name\": \"Ürün beğenilmedi\",\n        \"return_total\": 4\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Kupon İstatistikleri",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/reports/coupons",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "reports",
                "coupons"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "30d",
                  "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                },
                {
                  "key": "start_date",
                  "value": "",
                  "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "end_date",
                  "value": "",
                  "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                }
              ]
            },
            "description": "Aktif kupon sayısı, dönemdeki kupon kullanım istatistikleri ve en çok kullanılan 10 kuponu döner.\n\n**Rate limit:** 60 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/reports/coupons",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "reports",
                    "coupons"
                  ],
                  "query": [
                    {
                      "key": "period",
                      "value": "30d",
                      "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                    },
                    {
                      "key": "start_date",
                      "value": "",
                      "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "end_date",
                      "value": "",
                      "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"period\": {\n      \"label\": \"Son 30 Gün\",\n      \"start_date\": \"15.04.2026\",\n      \"end_date\": \"15.05.2026\"\n    },\n    \"summary\": {\n      \"active_coupons\": 14,\n      \"total_usage\": 42,\n      \"order_total\": 18500.0,\n      \"order_total_format\": \"₺18.500,00\",\n      \"total_discount\": 3250.0,\n      \"total_discount_format\": \"₺3.250,00\"\n    },\n    \"top_coupons\": [\n      {\n        \"coupon_id\": 3,\n        \"code\": \"YAZ20\",\n        \"usage_count\": 18,\n        \"order_total\": 7200.0,\n        \"order_total_format\": \"₺7.200,00\",\n        \"total_discount\": 1440.0,\n        \"total_discount_format\": \"₺1.440,00\"\n      }\n    ]\n  }\n}"
            }
          ]
        },
        {
          "name": "Terk Edilmiş Sepet",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/reports/abandoned-carts",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "reports",
                "abandoned-carts"
              ],
              "query": [
                {
                  "key": "period",
                  "value": "30d",
                  "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                },
                {
                  "key": "start_date",
                  "value": "",
                  "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "end_date",
                  "value": "",
                  "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                  "disabled": true
                },
                {
                  "key": "breakdown",
                  "value": "",
                  "description": "Günlük dağılım: daily (isteğe bağlı, tek geçerli değer)"
                }
              ]
            },
            "description": "Üye kullanıcıların terk ettiği sepetlerin özet istatistiklerini döner. `breakdown=daily` parametresi eklenirse günlük dağılım da eklenir.\n\n**Rate limit:** 60 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/reports/abandoned-carts",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "reports",
                    "abandoned-carts"
                  ],
                  "query": [
                    {
                      "key": "period",
                      "value": "30d",
                      "description": "Dönem: today | 7d | 30d | this_month | last_month | this_year | custom"
                    },
                    {
                      "key": "start_date",
                      "value": "",
                      "description": "Başlangıç tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "end_date",
                      "value": "",
                      "description": "Bitiş tarihi (YYYY-MM-DD) — sadece period=custom için zorunlu",
                      "disabled": true
                    },
                    {
                      "key": "breakdown",
                      "value": "",
                      "description": "Günlük dağılım: daily (isteğe bağlı, tek geçerli değer)"
                    }
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"period\": {\n      \"label\": \"Son 30 Gün\",\n      \"start_date\": \"15.04.2026\",\n      \"end_date\": \"15.05.2026\"\n    },\n    \"summary\": {\n      \"cart_qty\": 145,\n      \"total_value\": 28750.0,\n      \"total_value_format\": \"₺28.750,00\",\n      \"total_items\": 412\n    },\n    \"breakdown\": [\n      {\n        \"period\": \"2026-05-14\",\n        \"cart_qty\": 7,\n        \"total_value\": 1380.0,\n        \"total_value_format\": \"₺1.380,00\"\n      }\n    ]\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Ayarlar",
      "description": "Mağaza firma bilgilerini güncellemek için kullanılan endpoint'ler.",
      "auth": {
        "type": "bearer",
        "bearer": [
          {
            "key": "token",
            "value": "{{token}}",
            "type": "string"
          }
        ]
      },
      "item": [
        {
          "name": "Firma Bilgileri Görüntüle",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/settings/company",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "settings",
                "company"
              ]
            },
            "description": "Mevcut firma bilgilerini döner. Hassas ve dahili alanlar (`logo`, `settings`, `ip`, `domain`, `theme` vb.) yanıta dahil edilmez.\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{base_url}}/settings/company",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "settings",
                    "company"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"company_name\": \"Örnek Mağaza\",\n    \"full_company_name\": \"Örnek Mağaza Ticaret A.Ş.\",\n    \"company_about\": \"Hakkımızda kısa açıklama.\",\n    \"company_address\": \"İstanbul, Türkiye\",\n    \"company_tel1\": \"+90 212 000 00 00\",\n    \"company_tel2\": \"+90 532 000 00 00\",\n    \"company_mail1\": \"info@example.com\",\n    \"company_mail2\": \"destek@example.com\",\n    \"company_description\": \"<p>Uzun açıklama metni.</p>\",\n    \"working_hours\": \"Hft içi 09:00 - 18:00\",\n    \"company_location\": \"<iframe src=\\\"https://maps.google.com/...\\\"></iframe>\",\n    \"facebook\": \"https://facebook.com/ornekmagaza\",\n    \"twitter\": \"https://twitter.com/ornekmagaza\",\n    \"instagram\": \"https://instagram.com/ornekmagaza\",\n    \"google\": \"https://g.page/ornekmagaza\",\n    \"linkedin\": \"https://linkedin.com/company/ornekmagaza\",\n    \"tiktok\": \"https://tiktok.com/@ornekmagaza\",\n    \"pinterest\": \"https://pinterest.com/ornekmagaza\",\n    \"footer_icon_type\": 0,\n    \"header_icon_type\": 1\n  }\n}"
            }
          ]
        },
        {
          "name": "Firma Bilgileri Güncelle",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"company_name\": \"Örnek Mağaza\",\n  \"full_company_name\": \"Örnek Mağaza Ticaret A.Ş.\",\n  \"company_about\": \"Hakkımızda kısa açıklama.\",\n  \"company_address\": \"İstanbul, Türkiye\",\n  \"company_tel1\": \"+90 212 000 00 00\",\n  \"company_tel2\": \"+90 532 000 00 00\",\n  \"company_mail1\": \"info@example.com\",\n  \"company_mail2\": \"destek@example.com\",\n  \"company_description\": \"<p>Uzun açıklama / hakkımızda metni. HTML kabul edilir.</p>\",\n  \"working_hours\": \"Hft içi 09:00 - 18:00\",\n  \"company_location\": \"<iframe src=\\\"https://maps.google.com/...\\\"></iframe>\",\n  \"facebook\": \"https://facebook.com/ornekmagaza\",\n  \"twitter\": \"https://twitter.com/ornekmagaza\",\n  \"instagram\": \"https://instagram.com/ornekmagaza\",\n  \"google\": \"https://g.page/ornekmagaza\",\n  \"linkedin\": \"https://linkedin.com/company/ornekmagaza\",\n  \"tiktok\": \"https://tiktok.com/@ornekmagaza\",\n  \"pinterest\": \"https://pinterest.com/ornekmagaza\",\n  \"footer_icon_type\": 0,\n  \"header_icon_type\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/settings/company",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "settings",
                "company"
              ]
            },
            "description": "Firma bilgilerini günceller. Tüm alanlar isteğe bağlıdır; en az bir tanınmış alan gönderilmelidir.\n\n**Alanlar:**\n\n| Alan | Kural | Açıklama |\n|---|---|---|\n| `company_name` | Max 255 karakter | Kısa ticari unvan |\n| `full_company_name` | Max 500 karakter | Tam yasal unvan |\n| `company_about` | Max 5000 karakter | Kısa hakkımızda metni |\n| `company_address` | Max 500 karakter | Açık adres |\n| `company_tel1` | Max 30 karakter | Birincil telefon |\n| `company_tel2` | Max 30 karakter | İkincil telefon |\n| `company_mail1` | Geçerli e-posta; Max 255 karakter | Birincil e-posta |\n| `company_mail2` | Geçerli e-posta; Max 255 karakter | İkincil e-posta |\n| `company_description` | Max 100000 karakter; HTML kabul edilir | Uzun açıklama / hakkımızda |\n| `lang_id` | integer; pozitif tam sayı (varsayılan: 1) | `company_description`'ın kaydedileceği dil |\n| `working_hours` | Max 500 karakter | Çalışma saatleri |\n| `company_location` | Max 10000 karakter; **yalnızca Google Maps iframe** kabul edilir, diğer kaynaklar otomatik temizlenir | Harita embed kodu |\n| `facebook` | Geçerli https/http URL; Max 500 karakter | Facebook profil URL'i |\n| `twitter` | Geçerli https/http URL; Max 500 karakter | Twitter/X profil URL'i |\n| `instagram` | Geçerli https/http URL; Max 500 karakter | Instagram profil URL'i |\n| `google` | Geçerli https/http URL; Max 500 karakter | Google Business URL'i |\n| `linkedin` | Geçerli https/http URL; Max 500 karakter | LinkedIn profil URL'i |\n| `tiktok` | Geçerli https/http URL; Max 500 karakter | TikTok profil URL'i |\n| `pinterest` | Geçerli https/http URL; Max 500 karakter | Pinterest profil URL'i |\n| `footer_icon_type` | integer; `0` veya `1` | Footer sosyal ikon tipi |\n| `header_icon_type` | integer; `0` veya `1` | Header sosyal ikon tipi |\n\n**Rate limit:** 120 istek/dakika"
          },
          "response": [
            {
              "name": "Başarılı Yanıt",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"company_name\": \"Örnek Mağaza\",\n  \"full_company_name\": \"Örnek Mağaza Ticaret A.Ş.\",\n  \"company_about\": \"Hakkımızda kısa açıklama.\",\n  \"company_address\": \"İstanbul, Türkiye\",\n  \"company_tel1\": \"+90 212 000 00 00\",\n  \"company_tel2\": \"+90 532 000 00 00\",\n  \"company_mail1\": \"info@example.com\",\n  \"company_mail2\": \"destek@example.com\",\n  \"company_description\": \"<p>Uzun açıklama / hakkımızda metni. HTML kabul edilir.</p>\",\n  \"working_hours\": \"Hft içi 09:00 - 18:00\",\n  \"company_location\": \"<iframe src=\\\"https://maps.google.com/...\\\"></iframe>\",\n  \"facebook\": \"https://facebook.com/ornekmagaza\",\n  \"twitter\": \"https://twitter.com/ornekmagaza\",\n  \"instagram\": \"https://instagram.com/ornekmagaza\",\n  \"google\": \"https://g.page/ornekmagaza\",\n  \"linkedin\": \"https://linkedin.com/company/ornekmagaza\",\n  \"tiktok\": \"https://tiktok.com/@ornekmagaza\",\n  \"pinterest\": \"https://pinterest.com/ornekmagaza\",\n  \"footer_icon_type\": 0,\n  \"header_icon_type\": 1\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/settings/company",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "settings",
                    "company"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": true,\n  \"data\": {\n    \"updated_fields\": [\n      \"company_name\",\n      \"company_mail1\",\n      \"instagram\"\n    ],\n    \"description_lang_id\": 1\n  }\n}"
            },
            {
              "name": "Hata — Tanınan Alan Yok",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"company_name\": \"Örnek Mağaza\",\n  \"full_company_name\": \"Örnek Mağaza Ticaret A.Ş.\",\n  \"company_about\": \"Hakkımızda kısa açıklama.\",\n  \"company_address\": \"İstanbul, Türkiye\",\n  \"company_tel1\": \"+90 212 000 00 00\",\n  \"company_tel2\": \"+90 532 000 00 00\",\n  \"company_mail1\": \"info@example.com\",\n  \"company_mail2\": \"destek@example.com\",\n  \"company_description\": \"<p>Uzun açıklama / hakkımızda metni. HTML kabul edilir.</p>\",\n  \"working_hours\": \"Hft içi 09:00 - 18:00\",\n  \"company_location\": \"<iframe src=\\\"https://maps.google.com/...\\\"></iframe>\",\n  \"facebook\": \"https://facebook.com/ornekmagaza\",\n  \"twitter\": \"https://twitter.com/ornekmagaza\",\n  \"instagram\": \"https://instagram.com/ornekmagaza\",\n  \"google\": \"https://g.page/ornekmagaza\",\n  \"linkedin\": \"https://linkedin.com/company/ornekmagaza\",\n  \"tiktok\": \"https://tiktok.com/@ornekmagaza\",\n  \"pinterest\": \"https://pinterest.com/ornekmagaza\",\n  \"footer_icon_type\": 0,\n  \"header_icon_type\": 1\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/settings/company",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "settings",
                    "company"
                  ]
                }
              },
              "status": "Bad Request",
              "code": 400,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": false,\n  \"error\": \"no_fields\",\n  \"message\": \"Güncellenecek en az bir geçerli alan gönderilmelidir.\"\n}"
            },
            {
              "name": "Hata — Validasyon",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"company_name\": \"Örnek Mağaza\",\n  \"full_company_name\": \"Örnek Mağaza Ticaret A.Ş.\",\n  \"company_about\": \"Hakkımızda kısa açıklama.\",\n  \"company_address\": \"İstanbul, Türkiye\",\n  \"company_tel1\": \"+90 212 000 00 00\",\n  \"company_tel2\": \"+90 532 000 00 00\",\n  \"company_mail1\": \"info@example.com\",\n  \"company_mail2\": \"destek@example.com\",\n  \"company_description\": \"<p>Uzun açıklama / hakkımızda metni. HTML kabul edilir.</p>\",\n  \"working_hours\": \"Hft içi 09:00 - 18:00\",\n  \"company_location\": \"<iframe src=\\\"https://maps.google.com/...\\\"></iframe>\",\n  \"facebook\": \"https://facebook.com/ornekmagaza\",\n  \"twitter\": \"https://twitter.com/ornekmagaza\",\n  \"instagram\": \"https://instagram.com/ornekmagaza\",\n  \"google\": \"https://g.page/ornekmagaza\",\n  \"linkedin\": \"https://linkedin.com/company/ornekmagaza\",\n  \"tiktok\": \"https://tiktok.com/@ornekmagaza\",\n  \"pinterest\": \"https://pinterest.com/ornekmagaza\",\n  \"footer_icon_type\": 0,\n  \"header_icon_type\": 1\n}",
                  "options": {
                    "raw": {
                      "language": "json"
                    }
                  }
                },
                "url": {
                  "raw": "{{base_url}}/settings/company",
                  "host": [
                    "{{base_url}}"
                  ],
                  "path": [
                    "settings",
                    "company"
                  ]
                }
              },
              "status": "Unprocessable Entity",
              "code": 422,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"status\": false,\n  \"error\": \"validation_error\",\n  \"message\": {\n    \"company_mail1\": \"company_mail1 alanı geçerli bir e-posta adresi olmalıdır.\"\n  }\n}"
            }
          ]
        }
      ]
    }
  ],
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "packages": {},
        "requests": {},
        "exec": [
          ""
        ]
      }
    },
    {
      "listen": "test",
      "script": {
        "type": "text/javascript",
        "packages": {},
        "requests": {},
        "exec": [
          ""
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "base_url",
      "value": "https://www.example.com/api/ecommerce/v1",
      "type": "string",
      "description": "API base URL — kendi domain'inizle değiştirin. Örnek: https://www.example.com/api/ecommerce/v1"
    },
    {
      "key": "token",
      "value": "",
      "type": "string",
      "description": "JWT access token (1 saat geçerli). Login/Refresh Token isteğinden sonra test script tarafından otomatik doldurulur — manuel düzenleme gerekmez."
    },
    {
      "key": "refresh_token",
      "value": "",
      "type": "string",
      "description": "Refresh token (1 ay geçerli). Login/Refresh Token isteğinden sonra test script tarafından otomatik doldurulur — manuel düzenleme gerekmez."
    }
  ]
}