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

# Order List API (get-reports)

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 that, call [`get-report`](./get-report.md) for the specific order.

This 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".

## Prerequisite: enable API access in the panel

> Before calling this endpoint, the **Allow API access** toggle must be on in your iletiMerkezi panel.
>
> Location: `panel.iletimerkezi.com` → **Settings → Security → Access Permissions**
>
> If it is off, every request returns `401 — Üyelik bilgileri hatalı` ("Authentication failed"). See [authentication.md](./authentication.md).

## Endpoint

| Field | Value |
|---|---|
| Method | `POST` |
| URL | `https://api.iletimerkezi.com/v1/get-reports/json` |
| Content-Type | `application/json` |
| Auth | API Key + Hash (`request.authentication`) |

## Request

### Schema

```
request
├─ authentication
│  ├─ key (string, required)
│  └─ hash (string, required)
└─ filter
   ├─ start (string, required)  — range start, format Y-m-d (e.g. 2026-04-01)
   ├─ end (string, required)    — range end, format Y-m-d
   └─ page (integer, optional)  — default 1
```

> **Range limit:** the gap between `start` and `end` is **at most 10 days**. Longer periods require sequential calls (`2026-04-01..2026-04-10`, then `2026-04-11..2026-04-20`, etc.). If the limit is exceeded the request returns `458 — Tarih aralığı hatalı` ("Invalid date range").

### Full example

```json
{
  "request": {
    "authentication": {
      "key": "API_KEY",
      "hash": "API_HASH"
    },
    "filter": {
      "start": "2026-04-22",
      "end": "2026-04-29",
      "page": 1
    }
  }
}
```

## Response

### Success (200)

```json
{
  "response": {
    "status": {
      "code": 200,
      "message": "İşlem başarılı"
    },
    "count": 2,
    "orders": [
      {
        "id": 312988299,
        "status": 114,
        "total": 1,
        "delivered": 1,
        "undelivered": 0,
        "waiting": 0,
        "submitAt": "2026-04-29 21:49:42",
        "sendAt": "2026-04-29 21:49:42",
        "sender": "eMarka Test"
      },
      {
        "id": 313003818,
        "status": 114,
        "total": 1,
        "delivered": 1,
        "undelivered": 0,
        "waiting": 0,
        "submitAt": "2026-04-30 06:57:45",
        "sendAt": "2026-04-30 06:57:45",
        "sender": "eMarka Test"
      }
    ]
  }
}
```

`İşlem başarılı` means "Request successful" in Turkish.

**Fields:**

- `response.count` (integer): Number of orders in the **current page** of the response, not the total in the date range. Walk pages until empty to get the full picture.
- `response.orders[]` (array): List of orders. Each element:
  - `id` (integer): Order ID. Use it as input to [`get-report`](./get-report.md) for the detailed per-recipient view.
  - `status` (integer): Overall order status (113 / 114 / 115).
  - `total` (integer): Total number of messages in the order.
  - `delivered` (integer): Messages confirmed delivered.
  - `undelivered` (integer): Messages that could not be delivered.
  - `waiting` (integer): Messages still in the queue.
  - `submitAt` (string): Timestamp when the API received the order, format `YYYY-MM-DD HH:MM:SS`.
  - `sendAt` (string): Timestamp when the order was handed to the carrier. Equals `submitAt` unless the order was scheduled.
  - `sender` (string): Sender ID used for the order.

> The per-recipient breakdown (`message[]` array with `number` and per-message `status`) is **not present** in this response. If you need it, call [`get-report`](./get-report.md) per order; for multi-order dashboards this endpoint is more efficient (one request = N order summaries).

### Empty list (200)

When the date range contains no orders, or you have walked past the last page:

```json
{
  "response": {
    "status": { "code": 200, "message": "İşlem başarılı" },
    "count": 0,
    "orders": []
  }
}
```

`count: 0` plus an empty `orders` array is the natural terminator for the pagination loop.

### Order status codes (`order.status`)

| Code | Meaning |
|---|---|
| 113 | Order delivery in progress |
| 114 | Order delivery completed |
| 115 | Order could not be delivered |

### Error responses

#### 401 — Üyelik bilgileri hatalı ("Authentication failed")

See [authentication.md](./authentication.md).

#### 458 — Tarih aralığı hatalı ("Invalid date range")

Two possible causes:
1. `start` or `end` is not in `Y-m-d` format (e.g. `2026-04-22`).
2. The gap between `start` and `end` is longer than 10 days.

To cover a wider period, split the range into 10-day windows and loop.

#### Other error codes

For `400, 404`: see [error-codes.md](./error-codes.md).

## Code samples

### cURL

```bash
curl -X POST 'https://api.iletimerkezi.com/v1/get-reports/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "request": {
      "authentication": {
        "key": "'"$ILETIMERKEZI_API_KEY"'",
        "hash": "'"$ILETIMERKEZI_API_HASH"'"
      },
      "filter": { "start": "2026-04-22", "end": "2026-04-29", "page": 1 }
    }
  }'
```


## Common pitfalls

- **`get-reports` ≠ `get-report`.** One letter apart, very different behavior. `get-report` (singular) returns **per-recipient detail** for one order; `get-reports` (plural) returns **aggregate summaries for N orders** in a date range. Per-recipient data lives only in the singular endpoint.
- **10-day cap is non-negotiable.** Monthly or campaign-period reports require a loop. A 30-day single request returns `458`. Split the range client-side into 10-day windows and call sequentially.
- **Strict date format.** `Y-m-d` (e.g. `2026-04-22`) is required. Forms like `22/04/2026`, `22-04-2026`, or `2026/04/22` are rejected. In JavaScript, `date.toISOString().slice(0, 10)` is safe.
- **`count` is not "total".** `response.count` is the number of orders in the **current page**. To find the total in the range, increment `page` until the response is empty (`count: 0` or empty `orders`).
- **`waiting > 0` means the report is provisional.** Recently submitted orders may still be in the carrier queue. For final figures either re-poll later or rely on webhooks for delta updates.
- **`status: 114` does not mean "all delivered".** It only means "the send pipeline finished". Always check `delivered` and `undelivered` for the actual outcome — same semantic as [`get-report`](./get-report.md).
- **No recipient numbers, but sender is visible.** This endpoint omits recipient phone numbers (privacy and payload size); sender plus counters is what you get. For per-recipient audit, call `get-report` per order.


## Related

- [Single-order report (get-report)](./get-report.md) — per-recipient detail
- [Send SMS (send-sms)](./send-sms.md)
- [Webhook delivery reports (webhooks)](./webhooks.md) — push-based alternative
- [Authentication](./authentication.md)
- [Error code table](./error-codes.md)
