---
title: "Sipariş İptali API (cancel-order)"
description: "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."
slug: /docs/api/cancel-order
locale: tr
audience: developer
last_updated: 2026-04-30
endpoint:
  method: POST
  path: /v1/cancel-order/json
  base_url: https://api.iletimerkezi.com
auth: api-key-and-hash
related: [send-sms, get-report, authentication, error-codes]
alternates:
  tr: https://www.iletimerkezi.com/docs/api/cancel-order
  en: https://www.iletimerkezi.com/en/docs/api/cancel-order
  toplusmsapi: https://toplusmsapi.com/sms/iptal/json
  a2psmsapi: https://a2psmsapi.com/en/sms/iptal/json
---

# Sipariş İptali API (cancel-order)

`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.

## Önemli ön koşul: Panel'de API erişimi

> Bu endpoint'i çağırmadan önce panelinizde **API kullanımına izin ver** seçeneğinin aktif olması gerekir.
>
> Ayar yeri: `panel.iletimerkezi.com` → **Ayarlar → Güvenlik → Erişim İzinleri**
>
> Aktif değilse istek `401 — Üyelik bilgileri hatalı` ile döner. Detay: [authentication.md](./authentication.md)

## Endpoint

| Alan | Değer |
|---|---|
| Method | `POST` |
| URL | `https://api.iletimerkezi.com/v1/cancel-order/json` |
| Content-Type | `application/json` |
| Auth | API Key + Hash (`request.authentication`) |

## Request

### Şema

```
request
├─ authentication
│  ├─ key (string, zorunlu)
│  └─ hash (string, zorunlu)
└─ order
   └─ id (string|integer, zorunlu) — send-sms yanıtından dönen orderId
```

### Tam örnek

```json
{
  "request": {
    "authentication": {
      "key": "API_KEY",
      "hash": "API_HASH"
    },
    "order": {
      "id": "312891245"
    }
  }
}
```

## Response

### Başarılı (200)

```json
{
  "response": {
    "status": {
      "code": 200,
      "message": "İşlem başarılı"
    }
  }
}
```

İptal başarılı olduğunda gövdede yalnızca `status` döner; sipariş bilgisi tekrar yansıtılmaz. Aynı `order.id` için sonradan [`get-report`](./get-report.md) çağırırsanız sipariş `status: 115` (gönderilemedi) durumunda olabilir veya `455 — Sipariş bulunamadı` döner.

### Hata yanıtları

#### 401 — Üyelik bilgileri hatalı

API Anahtar/Hash doğrulanamadı veya panel toggle kapalı. Detay: [authentication.md](./authentication.md).

#### 455 — Sipariş bulunamadı

Üç olası neden:
1. Verilen `order.id` bu hesaba ait değil veya silinmiş.
2. Sipariş zaten gönderim akışına girmiş (operatör kuyruğunda) — bu durumda iptal edilemez.
3. Sipariş çoktan tamamlanmış.

İptal etmeden önce siparişin durumunu [`get-report`](./get-report.md) ile kontrol edin: `order.status: 113` (devam ediyor) veya `114` (tamamlandı) ise iptal pencereniz kapanmış demektir.

#### Diğer hata kodları

`400, 404` için tablo: [error-codes.md](./error-codes.md).

## Kod örnekleri

### cURL

```bash
curl -X POST 'https://api.iletimerkezi.com/v1/cancel-order/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "request": {
      "authentication": {
        "key": "'"$ILETIMERKEZI_API_KEY"'",
        "hash": "'"$ILETIMERKEZI_API_HASH"'"
      },
      "order": { "id": "312891245" }
    }
  }'
```


## Common Pitfalls

- **İptal penceresi dar.** `sendDateTime` ile ileri tarihli planlanmış sipariş, planlanan tarihe yaklaştıkça operatör kuyruğuna alınır. Operatöre verildikten sonra geri alınamaz; iptal isteği `455` döner.
- **`455` her zaman "yok" demek değildir.** "Bulunamadı" mesajı hem geçersiz ID hem de "geçerli ama artık iptal edilemez" durumunu kapsar. Belirsizlikten kaçınmak için iptal denemesinden önce [`get-report`](./get-report.md) çağırıp `order.status`'u kontrol edin: `113` veya `114` ise iptal mümkün değil.
- **Yanıt minimaldir.** Başarılı iptalde `response.order` döndürülmez; yalnızca `response.status` gelir. Tekrar doğrulama gerekiyorsa `get-report` ile sipariş durumunu yeniden çekin.
- **Idempotent değil.** Aynı `order.id` için iki kez iptal çağrısı atılırsa ikincisi `455` ile döner. İstemci kodunda iptal başarısını local state'e yazıp tekrar denemeyi engelleyin.
- **Anlık (immediate) gönderim iptali yok.** `sendDateTime` parametresi olmadan gönderilmiş bir sipariş zaten kuyruğa hemen düşer; pratik olarak iptal penceresi yoktur. Bu endpoint sadece ileri tarihli siparişler için anlamlıdır.


## Related

- [SMS gönderme (send-sms)](./send-sms.md) — sipariş oluştur, `sendDateTime` ile planla
- [Sipariş raporu (get-report)](./get-report.md) — iptal öncesi sipariş durum kontrolü
- [Kimlik doğrulama (authentication)](./authentication.md)
- [Hata kodları tablosu](./error-codes.md)
