{
  "schema_version": "1",
  "generated_at": "2026-05-11T13:26:36.635Z",
  "source": "iletimerkezi-website (frontmatter + api-endpoint-meta.js)",
  "base_url": "https://api.iletimerkezi.com",
  "authentication": {
    "type": "api-key-and-hash",
    "location": "request.authentication.{key,hash}",
    "panel_prerequisite": "Settings → Security → Access Permissions → Allow API usage",
    "panel_url": "panel.iletimerkezi.com/settings/security/access"
  },
  "endpoints": [
    {
      "slug": "send-sms",
      "method": "POST",
      "base_url": "https://api.iletimerkezi.com",
      "path": "/v1/send-sms/json",
      "full_url": "https://api.iletimerkezi.com/v1/send-sms/json",
      "auth": "api-key-and-hash",
      "request_shape": "request.{authentication:{key,hash}, order:{sender, sendDateTime?, iys, iysList?, message:{text, receipents:{number[]}}}}",
      "response_success_shape": "response.{status:{code,message}, order:{id}}",
      "error_codes": [
        200,
        400,
        401,
        402,
        450,
        451,
        452,
        453,
        454,
        457,
        468,
        469,
        470
      ],
      "notes": "iys zorunlu. 6563 sayılı Elektronik Ticaretin Düzenlenmesi Hakkında Kanun ve İYS uygulama kuralları çerçevesinde transactional iletiler (süregelen abonelik / OTP / borç hatırlatma / bilgi güncelleme / teslimat bildirimi) ticari elektronik ileti kapsamı dışındadır; iys=\"0\" gönderilir, önceden onay aranmaz (iys.org.tr/sss). KVKK kapsamındaki kişisel veri yükümlülükleri ayrı bir mevzuattır ve her durumda devam eder. Ticari iletilerde iys=\"1\" + iysList. APITEST sender pre-approval test içindir; APITEST kullanıldığında iys her zaman \"0\", mesaj metni sabit doğrulama metniyle değiştirilir. Hız sınırları (geçerlilik 2026-05-05, ürün spec): anlık (transactional) gönderimde hesap bazında saniyede 100 SMS (sınır toplam alıcı sayısıdır, istek sayısı değil; 5 alıcılı 1 istek 5 SMS sayılır); toplu (bulk) gönderimde tek istekte 50.000 alıcıya kadar (receipents.number dizisi). Daha yüksek transactional throughput için destek@emarka.com.tr; 50.000 üstü alıcı için istemcide chunkSize=50000 parçalama.",
      "summary": {
        "tr": "`send-sms` endpoint'i tek bir istekle bir veya birden çok cep telefonuna SMS gönderir. İstek bir **sipariş (order)** olarak kabul edilir; başarılı yanıtta dönen `orderId` ile teslimat raporlarını takip edebilir, ileri tarihli siparişleri iptal edebilirsiniz. İstek başına yalnızca bir sipariş, sipariş başına bir sender (başlık) gönderilir.",
        "en": "The `send-sms` endpoint delivers an SMS to one or many mobile numbers in a single request. Each request is treated as an **order**; the response returns an `orderId` you can use to retrieve delivery reports or cancel scheduled orders. One order per request, one sender (header) per order."
      },
      "title": {
        "tr": "SMS Gönderme API (send-sms)",
        "en": "Send SMS API (send-sms)"
      },
      "description": {
        "tr": "send-sms endpoint'i ile tek seferde tek veya çoklu numaraya SMS gönderirsiniz. Sender ID, İYS bayrağı, mesaj metni ve alıcı listesi ile çalışır.",
        "en": "Use the send-sms endpoint to deliver an SMS to one or many mobile numbers in a single request. Sender ID, IYS flag, message text, and recipient list."
      },
      "last_updated": "2026-05-05",
      "doc_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/send-sms",
        "en": "https://www.iletimerkezi.com/en/docs/api/send-sms"
      },
      "md_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/send-sms.md",
        "en": "https://www.iletimerkezi.com/en/docs/api/send-sms.md"
      },
      "mcp_tool": "send_sms",
      "mcp_description": {
        "tr": "Tek istekte bir veya birden çok yurt içi/uluslararası cep numarasına SMS gönderir. Yanıttaki orderId teslimat raporları (get_report) ve ileri tarihli sipariş iptali (cancel_order) için kullanılır.\n\nGeri alınamaz ve para harcayan bir işlemdir: gerçek SMS gönderilir, ücretli kontör düşülür, mesaj operatör kuyruğuna girdikten sonra geri çağrılamaz. Onay öncesi test için \"APITEST\" sender kullanılır; iys=\"0\" zorlanır, mesaj metni sabit doğrulama metniyle değiştirilir. Hesapta gerçek bir sender onaylandıktan sonra \"APITEST\" 450 hatası döner.\n\nKimlik doğrulama: API key + hash. Panel ayarındaki \"API kullanımına izin ver\" (Ayarlar > Güvenlik > Erişim İzinleri) açık olmalıdır; aksi halde her çağrı 401 döner. IP allowlist tanımlandıysa o da uygulanır.\n\nKoşullu alanlar: order.sender panelde onaylı, en fazla 11 karakter alfanumerik bir başlık olmalıdır. order.iys zorunludur ve mevzuat kanalını belirler. Transactional (OTP, parola sıfırlama, sipariş/teslimat/ödeme bildirimi, randevu hatırlatma, mevzuat bildirimi) iletilerde \"0\" kullanılır; bunlar 6563 sayılı Kanun ve İYS kuralları kapsamında ticari ileti onayı dışındadır. Ticari iletilerde (kampanya, promosyon, indirim, pazarlama) \"1\" kullanılır; iys=\"1\" iken order.iysList de zorunludur ve \"BIREYSEL\" veya \"TACIR\" değerlerinden biri olmalıdır. KVKK kapsamındaki kişisel veri yükümlülükleri ayrıdır ve her durumda geçerlidir.\n\nAlan adı tuzağı: alıcı listesi order.message.receipents olarak (sic.) yazılır; bu API geri uyumluluğu için bir typo'dur ve \"recipients\" yazımı 452 hatası döner.\n\nHız sınırları: hesap başına saniyede 100 SMS (anlık gönderim), sınır istek sayısı değil alıcı sayısı üzerinden işler, yani 5 numaralı tek istek 5 SMS sayılır. Toplu gönderimde tek istekte 50.000 alıcıya kadar; daha büyük listeler istemci tarafında 50.000'lik parçalara bölünür.\n\nİleri tarihli gönderim: order.sendDateTime (\"dd/MM/yyyy HH:mm\", Türkiye yerel saati, saniyesiz) gelecekteki bir gönderim planlar. Mesaj kuyruğa girmeden önce cancel_order ile orderId üzerinden iptal edilebilir.",
        "en": "Send an SMS to one or many Turkish or international mobile numbers in a single request. Returns an orderId used for delivery reports (get_report) and scheduled-order cancellation (cancel_order).\n\nDestructive and irreversible: dispatches a real SMS, deducts paid credit, and cannot be recalled once the message enters the carrier queue. For pre-approval testing use sender \"APITEST\"; this forces iys=\"0\" and replaces the message text with a fixed verification string. Once a real sender is approved on the account, \"APITEST\" returns code 450.\n\nAuth: API key + hash. The panel toggle \"Allow API access\" (Settings > Security > Access Permissions) must be ON or every call returns 401. IP allowlist applies when configured.\n\nConditional fields: order.sender must be a panel-approved alphanumeric header, max 11 chars. order.iys is required and chooses the regulatory channel. Use \"0\" for transactional messages (OTP, password reset, order/delivery/payment notification, appointment reminder, regulatory notice); these are out of scope of commercial-message consent under Turkish Law No. 6563 and IYS rules. Use \"1\" for commercial messages (campaign, promotion, discount, marketing); with iys=\"1\", order.iysList is also required and must be \"BIREYSEL\" (individuals) or \"TACIR\" (businesses). KVKK personal-data obligations remain separate and always apply.\n\nField naming caveat: the recipient container is order.message.receipents (sic.); this is a backward-compatibility typo and \"recipients\" returns error 452.\n\nRate limits: 100 SMS per second per account for transactional sends, counted by recipient count rather than request count, so one request to five numbers consumes five SMS units. Bulk sends accept up to 50,000 recipients per request; chunk larger lists client-side at 50,000.\n\nScheduling: order.sendDateTime (\"dd/MM/yyyy HH:mm\", Turkey local time, no seconds) schedules a future dispatch. Cancel before the message leaves the queue via cancel_order with the returned orderId."
      },
      "input_schema": {
        "type": "object",
        "properties": {
          "order": {
            "type": "object",
            "properties": {
              "sender": {
                "type": "string",
                "maxLength": 11,
                "description": "Approved sender ID (header) from get-sender. Use \"APITEST\" for pre-approval testing only while the account has no approved sender yet — once a sender is approved, APITEST is rejected with 450 and you must use the approved value. With APITEST the message text is replaced by a fixed verification string and iys must be \"0\"."
              },
              "sendDateTime": {
                "type": "string",
                "description": "Optional scheduled send time, format: dd/MM/yyyy HH:mm (Turkey local time, no seconds — providing seconds causes the backend to ignore sendDateTime and dispatch immediately)."
              },
              "iys": {
                "type": "string",
                "enum": [
                  "0",
                  "1"
                ],
                "description": "\"0\" = transactional (OTP, login code, password reset, order/delivery/payment notification, appointment reminder, account update, regulatory notice) — out of scope of commercial-message consent under Law No. 6563 (Turkish E-Commerce Law) and İYS rules; no prior consent required. KVKK obligations on personal data still apply separately. Always \"0\" when sender is \"APITEST\". \"1\" = commercial (campaign, promotion, discount, greeting, marketing) — iysList becomes required. Required."
              },
              "iysList": {
                "type": "string",
                "enum": [
                  "BIREYSEL",
                  "TACIR"
                ],
                "description": "Recipient list type, required when iys=\"1\": BIREYSEL (individuals) or TACIR (businesses)."
              },
              "message": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "Message body. B186 operator code is appended automatically. Limits: 155/153 GSM-7, 150/148 Turkish, 65/63 Unicode (first/subsequent parts). Max 7 parts ≈ 1071 chars."
                  },
                  "receipents": {
                    "type": "object",
                    "description": "Recipient container. IMPORTANT: the field name is intentionally \"receipents\" (sic.) for API backward compatibility — do NOT auto-correct to \"recipients\". Lives under order.message, not under order.",
                    "properties": {
                      "number": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "minItems": 1,
                        "description": "Recipient phone numbers. Accepted formats: 905XXXXXXXXX, +905XXXXXXXXX, 5XXXXXXXXX."
                      }
                    },
                    "required": [
                      "number"
                    ]
                  }
                },
                "required": [
                  "text",
                  "receipents"
                ]
              }
            },
            "required": [
              "sender",
              "iys",
              "message"
            ],
            "allOf": [
              {
                "if": {
                  "properties": {
                    "iys": {
                      "const": "1"
                    }
                  },
                  "required": [
                    "iys"
                  ]
                },
                "then": {
                  "required": [
                    "iysList"
                  ]
                }
              },
              {
                "if": {
                  "properties": {
                    "sender": {
                      "const": "APITEST"
                    }
                  },
                  "required": [
                    "sender"
                  ]
                },
                "then": {
                  "properties": {
                    "iys": {
                      "const": "0"
                    }
                  }
                }
              }
            ]
          }
        },
        "required": [
          "order"
        ]
      }
    },
    {
      "slug": "cancel-order",
      "method": "POST",
      "base_url": "https://api.iletimerkezi.com",
      "path": "/v1/cancel-order/json",
      "full_url": "https://api.iletimerkezi.com/v1/cancel-order/json",
      "auth": "api-key-and-hash",
      "request_shape": "request.{authentication, order:{id}}",
      "response_success_shape": "response.{status:{code:200, message}}",
      "error_codes": [
        200,
        400,
        401,
        404,
        455
      ],
      "notes": "Yalnızca ileri tarihli, henüz operatöre verilmemiş siparişler iptal edilir; gönderim akışına girmiş sipariş 455 döner. Idempotent değil — ikinci çağrı 455.",
      "summary": {
        "tr": "`cancel-order` endpoint'i, [`send-sms`](./send-sms.md) ile `sendDateTime` parametresi kullanılarak ileri bir tarihe planlanmış siparişi, operatöre teslim edilmeden önce iptal eder. Yalnızca **henüz gönderim akışına girmemiş** siparişler iptal edilebilir; gönderimi başlamış sipariş iptal edilmez ve `455` döner.",
        "en": "The `cancel-order` endpoint cancels an order created via [`send-sms`](./send-sms.md) with a `sendDateTime` in the future, **before** it is dispatched to the carrier. Only orders that **have not started sending** can be cancelled; once the order enters the send pipeline, the cancel window has closed and the request returns `455`."
      },
      "title": {
        "tr": "Sipariş İptali API (cancel-order)",
        "en": "Cancel Order API (cancel-order)"
      },
      "description": {
        "tr": "send-sms ile oluşturulmuş ileri tarihli bir siparişi, operatöre iletilmeden önce iptal edin. Yalnızca planlanmış (henüz başlamamış) siparişler iptal edilebilir.",
        "en": "Cancel a future-scheduled send-sms order before it is dispatched to the carrier. Only orders that have not started sending can be cancelled."
      },
      "last_updated": "2026-04-30",
      "doc_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/cancel-order",
        "en": "https://www.iletimerkezi.com/en/docs/api/cancel-order"
      },
      "md_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/cancel-order.md",
        "en": "https://www.iletimerkezi.com/en/docs/api/cancel-order.md"
      },
      "mcp_tool": "cancel_order",
      "input_schema": {
        "type": "object",
        "properties": {
          "order": {
            "type": "object",
            "properties": {
              "id": {
                "type": [
                  "string",
                  "integer"
                ],
                "description": "Order id returned from a previous send-sms call. Only future-scheduled orders that have not entered the carrier queue can be cancelled."
              }
            },
            "required": [
              "id"
            ]
          }
        },
        "required": [
          "order"
        ]
      }
    },
    {
      "slug": "get-report",
      "method": "POST",
      "base_url": "https://api.iletimerkezi.com",
      "path": "/v1/get-report/json",
      "full_url": "https://api.iletimerkezi.com/v1/get-report/json",
      "auth": "api-key-and-hash",
      "request_shape": "request.{authentication, order:{id, page?, rowCount?}}",
      "response_success_shape": "response.{status, order:{id, status, total, delivered, undelivered, waiting, submitAt, sendAt, sender, price, message:[{number, status}]}}",
      "error_codes": [
        200,
        400,
        401,
        404,
        455,
        456
      ],
      "notes": "order.status kodları send-sms yaşam döngüsündedir; message[].status numerik (110/111/112). Bilinmeyen orderId 455, ileri tarihli ve henüz tetiklenmemiş sipariş 456 döner.",
      "summary": {
        "tr": "`get-report` endpoint'i, [`send-sms`](./send-sms.md) ile oluşturulan bir siparişin teslimat raporunu döner. Sipariş genel durumu, sayaçlar (toplam / teslim edilen / edilemeyen / bekleyen), zaman damgaları, sipariş bedeli ve her bir mesajın alıcı bazında durumu tek yanıtta gelir. Büyük siparişler `page` + `rowCount` ile sayfalanır.",
        "en": "The `get-report` endpoint returns the delivery report for an order created via [`send-sms`](./send-sms.md). One response carries the overall order status, summary counters (total / delivered / undelivered / waiting), timestamps, sender, order price, and per-recipient delivery status. Large orders paginate via `page` + `rowCount`."
      },
      "title": {
        "tr": "Sipariş Raporu API (get-report)",
        "en": "Order Report API (get-report)"
      },
      "description": {
        "tr": "send-sms ile oluşturulan siparişin teslimat raporunu sorgulayın. Sipariş özeti, mesaj başına teslim durumu, sayfalama.",
        "en": "Fetch the delivery report for a send-sms order. Order summary, per-recipient delivery status, pagination."
      },
      "last_updated": "2026-04-29",
      "doc_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/get-report",
        "en": "https://www.iletimerkezi.com/en/docs/api/get-report"
      },
      "md_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/get-report.md",
        "en": "https://www.iletimerkezi.com/en/docs/api/get-report.md"
      },
      "mcp_tool": "get_report",
      "input_schema": {
        "type": "object",
        "properties": {
          "order": {
            "type": "object",
            "properties": {
              "id": {
                "type": [
                  "string",
                  "integer"
                ],
                "description": "Order id returned from a previous send-sms call."
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "description": "Page number for paginated per-recipient results."
              },
              "rowCount": {
                "type": "integer",
                "minimum": 1,
                "description": "Number of recipient rows per page."
              }
            },
            "required": [
              "id"
            ]
          }
        },
        "required": [
          "order"
        ]
      }
    },
    {
      "slug": "get-reports",
      "method": "POST",
      "base_url": "https://api.iletimerkezi.com",
      "path": "/v1/get-reports/json",
      "full_url": "https://api.iletimerkezi.com/v1/get-reports/json",
      "auth": "api-key-and-hash",
      "request_shape": "request.{authentication, filter:{start, end, page?}}",
      "response_success_shape": "response.{status, count, orders:[{id, status, total, delivered, undelivered, waiting, submitAt, sendAt, sender}]}",
      "error_codes": [
        200,
        400,
        401,
        404,
        458
      ],
      "notes": "Tarih aralığı maks 10 gün; aşılırsa 458. Tarih formatı Y-m-d. Yanıt agrega — mesaj-bazında alıcı kırılımı yok (onun için get-report). count alanı mevcut sayfadaki sipariş sayısıdır, toplam değildir; sayfalama page ile yürür.",
      "summary": {
        "tr": "`get-reports` endpoint'i, verilen tarih aralığında oluşturulmuş tüm SMS siparişlerinin **agrega özet listesini** döner. Her sipariş için sayaçlar (toplam / teslim edilen / edilemeyen / bekleyen), zaman damgaları ve sender bilgisi tek yanıtta gelir; mesaj-bazında alıcı kırılımı **bu yanıtta yoktur**, onun için sipariş başına [`get-report`](./get-report.md) kullanılır.\n\nBu endpoint, panelin **Raporlar > Toplu SMS Geçmişi** ekranının arkasındaki listeleme sorgusudur. Tipik kullanım: dashboard, dönemsel analitik, \"son hafta gönderimlerini listele\" gibi sorular.",
        "en": "The `get-reports` endpoint returns the **aggregate summary list** of all SMS orders created within a given date range. For each order the response carries counters (total / delivered / undelivered / waiting), timestamps, and sender; per-recipient breakdown is **not included**. For recipient-level details, call [`get-report`](./get-report.md) for the specific order.\n\nThis endpoint backs the **Reports > Bulk SMS History** screen in the panel. Typical use cases: dashboards, periodic analytics, queries like \"list orders from the last week\"."
      },
      "title": {
        "tr": "Sipariş Listesi API (get-reports)",
        "en": "Order List API (get-reports)"
      },
      "description": {
        "tr": "Belirli bir tarih aralığındaki SMS siparişlerinin agrega özet listesini çekin. Sipariş bazında toplam, teslim edilen, edilemeyen, bekleyen sayaçları + sender ve zaman damgaları.",
        "en": "List all SMS orders within a date range with aggregate counters. Per-order summary (total / delivered / undelivered / waiting) plus sender and timestamps, no per-recipient breakdown."
      },
      "last_updated": "2026-04-30",
      "doc_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/get-reports",
        "en": "https://www.iletimerkezi.com/en/docs/api/get-reports"
      },
      "md_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/get-reports.md",
        "en": "https://www.iletimerkezi.com/en/docs/api/get-reports.md"
      },
      "mcp_tool": "get_reports",
      "input_schema": {
        "type": "object",
        "properties": {
          "filter": {
            "type": "object",
            "properties": {
              "start": {
                "type": "string",
                "description": "Range start date, format Y-m-d (e.g. 2026-04-01)."
              },
              "end": {
                "type": "string",
                "description": "Range end date, format Y-m-d. The gap between start and end must not exceed 10 days; otherwise 458 is returned."
              },
              "page": {
                "type": "integer",
                "minimum": 1,
                "description": "Page number for paginated results, default 1. Page size is fixed server-side."
              }
            },
            "required": [
              "start",
              "end"
            ]
          }
        },
        "required": [
          "filter"
        ]
      }
    },
    {
      "slug": "get-balance",
      "method": "POST",
      "base_url": "https://api.iletimerkezi.com",
      "path": "/v1/get-balance/json",
      "full_url": "https://api.iletimerkezi.com/v1/get-balance/json",
      "auth": "api-key-and-hash",
      "request_shape": "request.{authentication}",
      "response_success_shape": "response.{status, balance:{amount:number, sms:integer}}",
      "error_codes": [
        200,
        401
      ],
      "notes": "amount float (TL), sms integer. Yan etkisiz, kontör harcamaz.",
      "summary": {
        "tr": "`get-balance` endpoint'i, hesabınızda kalan TL bakiyesini ve bu bakiye ile gönderebileceğiniz SMS adedini döner. Yan etkisi yoktur, kontör harcamaz; auth doğrulaması ve kalan bütçe kontrolü için ideal başlangıç çağrısıdır.",
        "en": "The `get-balance` endpoint returns the TL balance remaining on your account and the number of standard SMS messages that balance can fund. It has no side effects and consumes no credits, making it the safest call for verifying authentication and checking remaining budget before a campaign."
      },
      "title": {
        "tr": "Bakiye Sorgulama API (get-balance)",
        "en": "Get Balance API (get-balance)"
      },
      "description": {
        "tr": "Hesabınızdaki TL bakiyesini ve gönderilebilir SMS adedini tek istekle alın. Yan etkisiz, kontör harcamaz.",
        "en": "Retrieve the remaining TL balance and SMS quota on your account in one call. No side effects, no credit consumed."
      },
      "last_updated": "2026-04-29",
      "doc_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/get-balance",
        "en": "https://www.iletimerkezi.com/en/docs/api/get-balance"
      },
      "md_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/get-balance.md",
        "en": "https://www.iletimerkezi.com/en/docs/api/get-balance.md"
      },
      "mcp_tool": "get_balance",
      "input_schema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "slug": "get-sender",
      "method": "POST",
      "base_url": "https://api.iletimerkezi.com",
      "path": "/v1/get-sender/json",
      "full_url": "https://api.iletimerkezi.com/v1/get-sender/json",
      "auth": "api-key-and-hash",
      "request_shape": "request.{authentication}",
      "response_success_shape": "response.{status, senders:{sender:[string]}}",
      "error_codes": [
        200,
        401
      ],
      "notes": "send-sms order.sender alanı yalnızca bu listedeki onaylı başlıkları kabul eder.",
      "summary": {
        "tr": "`get-sender` endpoint'i, hesabınızda tanımlanmış ve iletiMerkezi tarafından onaylanmış **sender ID (başlık)** listesini döner. `send-sms` çağrılarında `order.sender` alanına sadece bu listedeki başlıklardan biri yazılabilir; aksi halde mesaj gönderilemez. Yan etkisi yoktur, kontör harcamaz.",
        "en": "The `get-sender` endpoint returns the list of **sender IDs (headers)** registered and approved on your account. The `order.sender` field of [`send-sms`](./send-sms.md) only accepts values from this list; using anything else is rejected. The call has no side effects and consumes no credits."
      },
      "title": {
        "tr": "Onaylı Başlık Listesi API (get-sender)",
        "en": "Approved Sender IDs API (get-sender)"
      },
      "description": {
        "tr": "Hesabınızda tanımlanmış ve iletiMerkezi tarafından onaylanmış sender ID (başlık) listesini alın. send-sms öncesi başlık doğrulaması için ideal.",
        "en": "Retrieve the list of sender IDs (headers) approved on your account. Use it to validate the sender before send-sms calls."
      },
      "last_updated": "2026-04-29",
      "doc_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/get-sender",
        "en": "https://www.iletimerkezi.com/en/docs/api/get-sender"
      },
      "md_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/get-sender.md",
        "en": "https://www.iletimerkezi.com/en/docs/api/get-sender.md"
      },
      "mcp_tool": "get_sender",
      "input_schema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "slug": "get-blacklist",
      "method": "POST",
      "base_url": "https://api.iletimerkezi.com",
      "path": "/v1/get-blacklist/json",
      "full_url": "https://api.iletimerkezi.com/v1/get-blacklist/json",
      "auth": "api-key-and-hash",
      "request_shape": "request.{authentication, blacklist?:{filter?:{start,end}, page?, rowCount?}}",
      "response_success_shape": "response.{status, blacklist:{count, number:[string]}}",
      "error_codes": [
        200,
        400,
        401,
        404
      ],
      "notes": "Sayfalı: filter, page ve rowCount blacklist nesnesi altındadır (top-level değil). rowCount varsayılan 1000, max 1000. filter.start/end \"Y-m-d H:i:s\" formatında. Yanıttaki count toplam engellenen numara sayısı; number array sayfa içeriği.",
      "summary": {
        "tr": "`get-blacklist` endpoint'i, hesabınızdaki kara listeye eklenmiş numaraları döner. Mesaj göndermek istemediğiniz numaralar bu listeye eklenir; `send-sms` çağrılarında bu listedeki numaralara mesaj iletimi atlanır. Yan etkisiz, kontör harcamaz.",
        "en": "The `get-blacklist` endpoint returns the list of phone numbers that you have blocked on your account. Numbers on this list are skipped during `send-sms` delivery. The call has no side effects and consumes no credits."
      },
      "title": {
        "tr": "Engellenmiş Numara Listesi API (get-blacklist)",
        "en": "Get Blacklist API (get-blacklist)"
      },
      "description": {
        "tr": "Hesabınızdaki engellenmiş (kara liste) numaraları sayfalı şekilde alın. Tarih aralığı filtresi, 1000'lik sayfalama.",
        "en": "Retrieve the list of blocked phone numbers on your account, with date filter and pagination."
      },
      "last_updated": "2026-04-29",
      "doc_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/get-blacklist",
        "en": "https://www.iletimerkezi.com/en/docs/api/get-blacklist"
      },
      "md_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/get-blacklist.md",
        "en": "https://www.iletimerkezi.com/en/docs/api/get-blacklist.md"
      },
      "mcp_tool": "get_blacklist",
      "input_schema": {
        "type": "object",
        "properties": {
          "blacklist": {
            "type": "object",
            "properties": {
              "filter": {
                "type": "object",
                "properties": {
                  "start": {
                    "type": "string",
                    "description": "Filter start datetime, format \"YYYY-MM-DD HH:MM:SS\" (Turkey local time)."
                  },
                  "end": {
                    "type": "string",
                    "description": "Filter end datetime, format \"YYYY-MM-DD HH:MM:SS\" (Turkey local time)."
                  }
                }
              },
              "page": {
                "type": "string",
                "description": "Page number for paginated results (default \"1\")."
              },
              "rowCount": {
                "type": "string",
                "description": "Number of numbers per page (default \"1000\", max \"1000\")."
              }
            }
          }
        }
      }
    },
    {
      "slug": "add-blacklist",
      "method": "POST",
      "base_url": "https://api.iletimerkezi.com",
      "path": "/v1/add-blacklist/json",
      "full_url": "https://api.iletimerkezi.com/v1/add-blacklist/json",
      "auth": "api-key-and-hash",
      "request_shape": "request.{authentication, blacklist:{number:string}}",
      "response_success_shape": "response.{status:{code:200, message}}",
      "error_codes": [
        200,
        400,
        401,
        404,
        466
      ],
      "notes": "Idempotent: aynı numara ikinci kez eklenirse 200 döner. İstek başına bir numara. Geçersiz numara formatı 466.",
      "summary": {
        "tr": "`add-blacklist` endpoint'i, SMS gönderilmesini istemediğiniz bir cep telefonu numarasını hesabınızın kara listesine ekler. Bu listedeki numaralara `send-sms` çağrılarında mesaj iletilmez. **Idempotent**: aynı numarayı ikinci kez eklemek hata değil, 200 döndürür. İstek başına yalnızca **bir** numara eklenir.",
        "en": "The `add-blacklist` endpoint adds one phone number to your account's blacklist so it is skipped by `send-sms`. **Idempotent**: re-adding the same number returns 200 instead of an error. One number per request."
      },
      "title": {
        "tr": "Numara Engelle API (add-blacklist)",
        "en": "Add Blacklist API (add-blacklist)"
      },
      "description": {
        "tr": "SMS gönderilmesini istemediğiniz bir cep numarasını kara listeye ekleyin. Idempotent: aynı numara tekrar eklenirse 200 döner.",
        "en": "Add a phone number to your blacklist so send-sms skips delivery to it. Idempotent: re-adding returns 200, not an error."
      },
      "last_updated": "2026-04-29",
      "doc_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/add-blacklist",
        "en": "https://www.iletimerkezi.com/en/docs/api/add-blacklist"
      },
      "md_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/add-blacklist.md",
        "en": "https://www.iletimerkezi.com/en/docs/api/add-blacklist.md"
      },
      "mcp_tool": "add_blacklist",
      "input_schema": {
        "type": "object",
        "properties": {
          "blacklist": {
            "type": "object",
            "properties": {
              "number": {
                "type": "string",
                "description": "Phone number to block. Accepted formats: 905XXXXXXXXX, +905XXXXXXXXX, 5XXXXXXXXX."
              }
            },
            "required": [
              "number"
            ]
          }
        },
        "required": [
          "blacklist"
        ]
      }
    },
    {
      "slug": "delete-blacklist",
      "method": "POST",
      "base_url": "https://api.iletimerkezi.com",
      "path": "/v1/delete-blacklist/json",
      "full_url": "https://api.iletimerkezi.com/v1/delete-blacklist/json",
      "auth": "api-key-and-hash",
      "request_shape": "request.{authentication, blacklist:{number:string}}",
      "response_success_shape": "response.{status:{code:200, message}}",
      "error_codes": [
        200,
        400,
        401,
        404,
        466,
        474
      ],
      "notes": "Idempotent değil: numara listede yoksa 474 döner (canlı API spec drift, otoriter dokümanda listelenmemiş). Geçersiz numara formatı 466. İstek başına bir numara.",
      "summary": {
        "tr": "`delete-blacklist` endpoint'i, kara listeye eklenmiş bir cep telefonu numarasını listeden çıkarır. Çıkarılan numaraya `send-sms` çağrıları artık iletilebilir hale gelir. İstek başına yalnızca **bir** numara işlenir; numara listede yoksa hata döner (idempotent değil).",
        "en": "The `delete-blacklist` endpoint removes a phone number from your account's blacklist. After removal, `send-sms` can deliver to that number again. One number per request; **not idempotent**, removing a number that is not on the list returns an error."
      },
      "title": {
        "tr": "Engelleme Kaldır API (delete-blacklist)",
        "en": "Delete Blacklist API (delete-blacklist)"
      },
      "description": {
        "tr": "Kara listeye eklenmiş bir cep numarasını listeden çıkarın. İstek başına tek numara.",
        "en": "Remove a previously blocked phone number from your blacklist. One number per request, not idempotent."
      },
      "last_updated": "2026-04-29",
      "doc_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/delete-blacklist",
        "en": "https://www.iletimerkezi.com/en/docs/api/delete-blacklist"
      },
      "md_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/delete-blacklist.md",
        "en": "https://www.iletimerkezi.com/en/docs/api/delete-blacklist.md"
      },
      "mcp_tool": "delete_blacklist",
      "input_schema": {
        "type": "object",
        "properties": {
          "blacklist": {
            "type": "object",
            "properties": {
              "number": {
                "type": "string",
                "description": "Phone number to remove from blacklist. Accepted formats: 905XXXXXXXXX, +905XXXXXXXXX, 5XXXXXXXXX."
              }
            },
            "required": [
              "number"
            ]
          }
        },
        "required": [
          "blacklist"
        ]
      }
    },
    {
      "slug": "iys-register",
      "method": "POST",
      "base_url": "https://api.iletimerkezi.com",
      "path": "/v1/consent/create/json",
      "full_url": "https://api.iletimerkezi.com/v1/consent/create/json",
      "auth": "api-key-and-hash",
      "request_shape": "request.{authentication, consent:{brandCode, list:[{recipient, recipientType, type, status, source, consentDate}]}}",
      "response_success_shape": "response.{status:{code:200, message}}",
      "error_codes": [
        200,
        400,
        401,
        403,
        404,
        405,
        422,
        475
      ],
      "notes": "Türkiye İYS izin kaydı. Tek istekte 1-5000 kayıt; batch atomic — bir kayıt 422'ye düşerse tüm istek düşer ve hiçbir kayıt persist olmaz. consentDate Türkiye yerel saati, 3 günden eski olamaz. brandCode string ya da integer kabul edilir (canlı API testi 2026-04-30); source enum (HS_WEB, HS_MOBIL, HS_KARAR vb.).",
      "summary": {
        "tr": "`iys-register` endpoint'i, Türkiye'de ticari elektronik ileti gönderimi için yasal zorunluluk olan **İYS (İleti Yönetim Sistemi)** izin kayıtlarını oluşturur. Web formu, ıslak imzalı sözleşme, çağrı merkezi onayı vb. yollarla aldığınız izinleri (veya retleri) bu endpoint ile iletiMerkezi üzerinden ulusal İYS sistemine işleyebilirsiniz. Tek istekte **en fazla 5000 alıcı** kaydedilir.",
        "en": "The `iys-register` endpoint creates **İYS (İleti Yönetim Sistemi)** consent records, the legally required Turkish national registry for commercial electronic messaging. Consents (or rejections) collected via web forms, signed contracts, call-center confirmations, etc. are submitted to iletiMerkezi through this endpoint and forwarded to the national İYS registry. Up to **5000 recipients per request**.\n\nİYS registration is mandatory for any commercial SMS sent in Turkey. Without a valid consent record, the corresponding `send-sms` call with `iys: \"1\"` is rejected with code `468 / 469 / 470`."
      },
      "title": {
        "tr": "İYS İzin Kaydı API (iys-register)",
        "en": "İYS Consent Register API (iys-register)"
      },
      "description": {
        "tr": "Ticari mesaj göndereceğiniz alıcılar için İYS (İleti Yönetim Sistemi) izin kayıtlarını tek istekte oluşturun. Tek istekte 5000 alıcıya kadar batch.",
        "en": "Register İYS (Turkish messaging consent registry) records for the recipients you intend to send commercial messages to. Up to 5000 recipients per request."
      },
      "last_updated": "2026-04-30",
      "doc_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/iys-register",
        "en": "https://www.iletimerkezi.com/en/docs/api/iys-register"
      },
      "md_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/iys-register.md",
        "en": "https://www.iletimerkezi.com/en/docs/api/iys-register.md"
      },
      "mcp_tool": "iys_register",
      "input_schema": {
        "type": "object",
        "properties": {
          "consent": {
            "type": "object",
            "properties": {
              "brandCode": {
                "type": [
                  "integer",
                  "string"
                ],
                "description": "Active İYS brand code provisioned for your account."
              },
              "list": {
                "type": "array",
                "minItems": 1,
                "maxItems": 5000,
                "description": "Up to 5000 consent records per request. Batch is atomic — one bad record fails the whole request (422), no records persist.",
                "items": {
                  "type": "object",
                  "properties": {
                    "recipient": {
                      "type": "string",
                      "description": "Phone number (905XXXXXXXXX / +905XXXXXXXXX / 5XXXXXXXXX) or email address."
                    },
                    "recipientType": {
                      "type": "string",
                      "enum": [
                        "BIREYSEL",
                        "TACIR"
                      ],
                      "description": "BIREYSEL (individual) or TACIR (business)."
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "MESAJ",
                        "EPOSTA",
                        "ARAMA"
                      ],
                      "description": "Communication channel: MESAJ (SMS), EPOSTA (email), ARAMA (voice call)."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "ONAY",
                        "RET"
                      ],
                      "description": "ONAY (consent given) or RET (consent rejected / opted out)."
                    },
                    "source": {
                      "type": "string",
                      "enum": [
                        "HS_KARAR",
                        "HS_FIZIKSEL_ORTAM",
                        "HS_ISLAK_IMZA",
                        "HS_ETKINLIK",
                        "HS_ATM",
                        "HS_EORTAM",
                        "HS_WEB",
                        "HS_MOBIL",
                        "HS_MESAJ",
                        "HS_EPOSTA",
                        "HS_CAGRI_MERKEZI",
                        "HS_SOSYAL_MEDYA"
                      ],
                      "description": "Channel through which consent was obtained."
                    },
                    "consentDate": {
                      "type": "string",
                      "description": "When consent was obtained, format YYYY-MM-DD HH:MM:SS, Turkey local time. Cannot be older than 3 days."
                    }
                  },
                  "required": [
                    "recipient",
                    "recipientType",
                    "type",
                    "status",
                    "source",
                    "consentDate"
                  ]
                }
              }
            },
            "required": [
              "brandCode",
              "list"
            ]
          }
        },
        "required": [
          "consent"
        ]
      }
    },
    {
      "slug": "iys-check",
      "method": "POST",
      "base_url": "https://api.iletimerkezi.com",
      "path": "/v1/consent/show/json",
      "full_url": "https://api.iletimerkezi.com/v1/consent/show/json",
      "auth": "api-key-and-hash",
      "request_shape": "request.{authentication, consent:{brandCode, recipient, recipientType, type}}",
      "response_success_shape": "response.{status, consent:{brandCode, recipient, recipientType, type, status, source, consentDate}}",
      "error_codes": [
        200,
        400,
        401,
        403,
        404,
        422
      ],
      "notes": "Tek alıcılı sorgu. Aynı recipient+recipientType+type için en son kayıt döner; ONAY sonrası RET geldiyse RET bağlayıcıdır. Kayıtlı alıcı için yanıt response.consent objesi olarak döner; aynı brand altında o recipientType/type kombinasyonunda hiç kayıt yoksa response.consent boş array ([]) gelir; alıcı İYS sisteminde hiç tanınmıyorsa 422 döner. Yan etkisiz, kontör harcamaz. brandCode hesaba ait olmalı; aksi halde boş yanıt gelir (validation drift, tracker apidocs-website).",
      "summary": {
        "tr": "`iys-check` endpoint'i, belirli bir alıcı için **İYS (İleti Yönetim Sistemi)** kaydındaki güncel izin durumunu döner. `iys-register` ile yüklediğiniz kaydın işlendiğini doğrulamak, ticari gönderim öncesi alıcının ONAY/RET durumunu kontrol etmek veya audit raporu üretmek için kullanılır. Yan etkisiz, kontör harcamaz.",
        "en": "The `iys-check` endpoint returns the current İYS (İleti Yönetim Sistemi) consent status for a given recipient. Use it to verify a record submitted via `iys-register` has been processed, to check `ONAY` (consent) / `RET` (rejection) before a commercial send, or to produce audit reports. The call has no side effects and consumes no credits."
      },
      "title": {
        "tr": "İYS İzin Sorgulama API (iys-check)",
        "en": "İYS Consent Query API (iys-check)"
      },
      "description": {
        "tr": "Tek bir alıcı için İYS izin durumunu sorgulayın. Kayıtlı izin var mı, ONAY mı RET mi, hangi tarihte ve hangi kanaldan alındı?",
        "en": "Look up the current İYS consent status for a single recipient: is consent on file, ONAY or RET, when and through which channel was it obtained."
      },
      "last_updated": "2026-05-01",
      "doc_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/iys-check",
        "en": "https://www.iletimerkezi.com/en/docs/api/iys-check"
      },
      "md_url": {
        "tr": "https://www.iletimerkezi.com/docs/api/iys-check.md",
        "en": "https://www.iletimerkezi.com/en/docs/api/iys-check.md"
      },
      "mcp_tool": "iys_check",
      "input_schema": {
        "type": "object",
        "properties": {
          "consent": {
            "type": "object",
            "properties": {
              "brandCode": {
                "type": [
                  "integer",
                  "string"
                ],
                "description": "Active İYS brand code provisioned for your account (string or integer accepted)."
              },
              "recipient": {
                "type": "string",
                "description": "Phone number (905XXXXXXXXX / +905XXXXXXXXX / 5XXXXXXXXX) or email address to look up."
              },
              "recipientType": {
                "type": "string",
                "enum": [
                  "BIREYSEL",
                  "TACIR"
                ],
                "description": "BIREYSEL (individual) or TACIR (business)."
              },
              "type": {
                "type": "string",
                "enum": [
                  "MESAJ",
                  "EPOSTA",
                  "ARAMA"
                ],
                "description": "Communication channel: MESAJ (SMS), EPOSTA (email), ARAMA (voice call)."
              }
            },
            "required": [
              "brandCode",
              "recipient",
              "recipientType",
              "type"
            ]
          }
        },
        "required": [
          "consent"
        ]
      }
    }
  ],
  "webhook": {
    "type": "configuration",
    "config_url": "panel.iletimerkezi.com/settings/api/webhooks",
    "delivery": {
      "method": "POST",
      "content_type": "application/json",
      "payload_shape": "{report:{id, packet_id, status, to, body}}",
      "status_values": [
        "accepted",
        "delivered",
        "undelivered"
      ]
    },
    "security": {
      "signature": false,
      "recommended_pattern": "url-token",
      "recommended_pattern_example": "POST https://yourapp/webhook?token=SECRET"
    },
    "multi_app_filtering": "All SMS for the account land on a single webhook URL. Filter by report.body marker (e.g., short link domain) for multi-app accounts.",
    "idempotency": {
      "key": "report.id + report.status",
      "pattern": "first callback writes delivery_received_at; subsequent callbacks only update status"
    },
    "doc_url": {
      "tr": "https://www.iletimerkezi.com/docs/api/webhooks",
      "en": "https://www.iletimerkezi.com/en/docs/api/webhooks"
    }
  },
  "llm_resources": {
    "overview_doc": "https://www.iletimerkezi.com/docs/api/overview",
    "error_codes_doc": "https://www.iletimerkezi.com/docs/api/error-codes",
    "sitemap_llm": "https://www.iletimerkezi.com/sitemap-llm.xml",
    "raw_md_pattern": "https://www.iletimerkezi.com/{tr|en}/docs/api/<slug>.md"
  }
}
