---
title: "Order Report API (get-report)"
description: "Fetch the delivery report for a send-sms order. Order summary, per-recipient delivery status, pagination."
slug: /en/docs/api/get-report
locale: en
audience: developer
last_updated: 2026-04-29
endpoint:
  method: POST
  path: /v1/get-report/json
  base_url: https://api.iletimerkezi.com
auth: api-key-and-hash
related: [send-sms, authentication, get-balance, error-codes]
alternates:
  tr: https://www.iletimerkezi.com/docs/api/get-report
  en: https://www.iletimerkezi.com/en/docs/api/get-report
  toplusmsapi: https://toplusmsapi.com/sms/rapor/liste/json
  a2psmsapi: https://a2psmsapi.com/en/sms/rapor/liste/json
---

# Order Report API (get-report)

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

## 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-report/json` |
| Content-Type | `application/json` |
| Auth | API Key + Hash (`request.authentication`) |

## Request

### Schema

```
request
├─ authentication
│  ├─ key (string, required)
│  └─ hash (string, required)
└─ order
   ├─ id (string, required)         — orderId returned by send-sms
   ├─ page (string, optional)       — default "1"
   └─ rowCount (string, optional)   — messages per page, default "1000", max "1000"
```

> For orders larger than 1000 messages, increment `page` and call again until you have walked the full report.

### Full example

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

## Response

### Success (200)

```json
{
  "response": {
    "status": {
      "code": 200,
      "message": "İşlem başarılı"
    },
    "order": {
      "id": "312891245",
      "status": 114,
      "total": 1,
      "delivered": 1,
      "undelivered": 0,
      "waiting": 0,
      "submitAt": "2026-04-29 04:32:24",
      "sendAt": "2026-04-29 04:32:24",
      "sender": "eMarka Test",
      "price": 1,
      "message": [
        {
          "number": "+905333128320",
          "status": 111
        }
      ]
    }
  }
}
```

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

**Fields:**

- `response.order.id` (string): Order ID.
- `response.order.status` (integer): Overall order status (see table below).
- `response.order.total` (integer): Total number of messages in the order.
- `response.order.delivered` (integer): Messages confirmed delivered to the recipient by the carrier.
- `response.order.undelivered` (integer): Messages that could not be delivered (blacklist, off network, invalid number, etc.).
- `response.order.waiting` (integer): Messages still in the queue.
- `response.order.submitAt` (string): When the API received the request, format `YYYY-MM-DD HH:MM:SS`.
- `response.order.sendAt` (string): When the order was handed to the carrier. Equals `submitAt` unless the order was scheduled for a future time.
- `response.order.sender` (string): Sender ID used for the order.
- `response.order.price` (integer): Total credits the order consumed. Per-message cost may exceed 1 (long messages, UCS-2, etc.).
- `response.order.message[]` (array): Per-recipient delivery status.
  - `number` (string): Recipient number, returned with `+90` prefix.
  - `status` (integer): Message status (see table below).

> The `total`, `delivered`, `undelivered`, `waiting`, `submitAt`, `sendAt`, `sender`, `price` fields are present in the live API and confirmed by live testing. Older versions of the apidocs-website spec may not list these fields; we treat the live API as ground truth (drift: [`apidocs-website#3`](https://github.com/iletimerkezi/apidocs-website/issues/3)).

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

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

### Message status codes (`message[].status`)

| Code | Meaning |
|---|---|
| 110 | Message being sent |
| 111 | Message sent (delivered) |
| 112 | Message could not be sent |

### Error responses

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

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

#### 455 — Sipariş bulunamadı ("Order not found")

The given `order.id` does not exist on this account or has been removed. Verify the ID against the response from `send-sms`.

#### Other error codes

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

## Code samples

### cURL

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


## Common pitfalls

- **Number format changes in the response.** You may submit `905XXXXXXXXX`, but the report returns `+905XXXXXXXXX`. If you compare numbers across systems, normalize both representations.
- **Don't poll right after sending.** If you call `get-report` immediately after `send-sms`, the order may still be `status: 113` (in progress) with `waiting > 0`. Carrier acks land within seconds; webhook-based reporting is more efficient than polling.
- **Pagination capped at 1000.** `rowCount` max is 1000. For orders with more than 1000 messages, increment `page` and call until exhausted.
- **The response is richer than older spec.** The live API also returns `total`, `delivered`, `undelivered`, `waiting`, `sender`, `price`, `submitAt`, `sendAt`. Use them for dashboards and analytics; SDKs built against the older spec may not expose these fields.
- **`order.status: 114` is not "everything delivered".** It only means the order's send pipeline finished. Always check `delivered` and `undelivered` for actual outcome.


## Related

- [Send SMS (send-sms)](./send-sms.md)
- [Authentication](./authentication.md)
- [Get balance](./get-balance.md)
- [Webhook delivery reports (webhooks)](./webhooks.md)
- [Error code table](./error-codes.md)
