# Статистика приложения и подписчиков

## getAppStats

Получение статистики для определенного приложения за указанный период времени.

`POST` `https://api.pushwoosh.com/json/1.3/getAppStats`

##### Параметры тела запроса

| Имя <div style="width:150px"></div> | Обязательный | Тип | Описание |
|--------------|----------|--------|--------------------------------------------------------------------------------------------------|
| `auth` | Да | string | [Токен доступа API](/ru/developer/api-reference/api-access-token/) из Панели управления Pushwoosh. |
| `application`| Да | string | [Код приложения Pushwoosh](/ru/developer/api-reference/api-identifiers/#application-code) |
| `datefrom` | Да | string | Дата и время начала отчетного периода. Формат: `Y-m-d H:i:s`. |
| `dateto` | Да | string | Дата и время окончания отчетного периода. Формат: `Y-m-d H:i:s`. |

##### Пример запроса
```json
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H",    // required. API access token from Pushwoosh Control Panel
    "application": "XXXXX-XXXXX",      // required. Pushwoosh application code
    "datefrom": "2013-06-04 00:00:00", // required. Date and time, start of the reporting period
    "dateto": "2013-06-07 00:00:00"    // required. Date and time, end of the reporting period
  }
}
```



##### Пример ответа

```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "request_id": "c93a202f439235f9adaaa06d651548ab"
  }
}
```
### Расшифровка статистики

Статистика отображает зарегистрированные действия для приложения, устройства или сообщения за указанный промежуток времени.

Отчеты автоматически агрегируются по следующим правилам:
- **Ежегодно**: если период превышает один год.
- **Ежемесячно**: если период превышает один месяц.
- **Ежедневно**: если период превышает один день.
- **Ежечасно**: если период превышает три часа.
- **Ежеминутно**: во всех остальных случаях.

##### Типы действий

- **Уровень приложения**: `_open_`, `_install_`
- **Уровень устройства**: `_register_`, `_unregister_`
- **Уровень сообщения**: `_send_`, `_open_`

##### Формат ответа
Все объекты статистики имеют одинаковый формат:
| Поле <div style="width:150px"></div> | Тип | Описание |
|------------|--------|----------------------------------------------------|
| `formatter`| string | Масштаб отчета: ежегодно, ежемесячно, ежедневно, ежечасно, ежеминутно. |
| `rows` | list | Содержит данные отчета для каждого зарегистрированного действия. |

Каждая строка отчета содержит:

| Поле <div style="width:150px"></div> | Тип | Описание |
|-----------|--------|------------------------------------------|
| `count` | int | Количество зарегистрированных действий. |
| `action` | string | Тип зарегистрированного действия. |
| `datetime`| string | Отформатированная дата: `Y-m-d H:i:s`. |

### Получение результатов запланированного запроса

<Aside type="caution" title="Важно">
Как и любой другой запланированный запрос, `/getAppStats` требует дополнительного запроса [`/getResults`](/ru/developer/api-reference/scheduled-requests#getresults).
</Aside>

##### Тело ответа

| Поле <div style="width:150px"></div> | Тип | Описание |
|-------------|--------|----------------------------------------------------------------------------------------------------------|
| `request_id`| string | ID запланированного запроса. Для получения дополнительной информации см. [`/getResults`](/ru/developer/api-reference/scheduled-requests#getresults). |

##### Тело ответа запланированного запроса (/getResults)

| Поле <div style="width:150px"></div> | Тип | Описание |
|--------------|------------|-----------------------------------|
| `applications`| dictionary | Статистика по приложениям. |
| `devices` | dictionary | Статистика по устройствам. |
| `messages` | dictionary | Статистика по сообщениям. |

##### Пример
```json 
{
  "error": {
    "code": 0,
    "message": "OK"
  },
  "json_data": {
    "applications": {
      "formatter": "hourly",
      "rows": [{
        "count": 0,
        "action": "open",
        "datetime": "2013-06-06 00:00:00"
      }, {
        ...
      }]
    }
  }
}
```




## getApplicationSubscribersStats

Отображает список подписчиков приложения, сгруппированный по типам их устройств.

`POST` `https://api.pushwoosh.com/json/1.3/getApplicationSubscribersStats`

##### Тело запроса

| Имя <div style="width:150px"></div> | Обязательный | Тип | Описание |
|--------------|----------|--------|--------------------------------------------------------------------------------------------------|
| `auth` | Да | string | [Токен доступа API](/ru/developer/api-reference/api-access-token/) из Панели управления Pushwoosh. |
| `application`| Да | string | [Код приложения Pushwoosh](/ru/developer/api-reference/api-identifiers/#application-code) |

**Пример запроса**

```json
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel
    "application": "XXXXX-XXXXX"    // required. Pushwoosh application code
  }
}
```

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "IOS": 1,
    "ANDROID": 1,
    "OSX": 0,
    "WINDOWS": 0,
    "AMAZON": 0,
    "SAFARI": 0,
    "FIREFOX": 0
  }
}
```
</TabItem>
</Tabs>



## getSubscribersStatistics

Получает статистику подписчиков приложения за определенный период времени.

`POST` `https://api.pushwoosh.com/api/v2/statistics/application/getSubscribersStatistics`

##### Заголовки

| Имя <div style="width:150px"></div> | Обязательный | Описание |
|-----------------|----------|--------------------------------------------------------------------------------------------------------------|
| Authorization | Да | [Токен доступа API](/ru/developer/api-reference/api-access-token/) в формате: `Key PKX.......NHg`. |
| Content-Type | Да | Должен быть установлен на `application/json`. |

##### Параметры тела запроса

| Имя <div style="width:150px"></div> | Обязательный | Тип | Описание |
|------------------|----------|--------|--------------------------------------------------------------------------|
| application_code | Да | string | [Код приложения Pushwoosh](/ru/developer/api-reference/api-identifiers/#application-code) |
| timestamp_from | Да | string | Дата и время начала периода статистики (формат: `YYYY-MM-DD hh:mm:ss`, UTC+0). |
| timestamp_to | Да | string | Дата и время окончания периода статистики (формат: `YYYY-MM-DD hh:mm:ss`, UTC+0). |

**Пример запроса**
```shell
curl --location --request POST 'https://api.pushwoosh.com/api/v2/statistics/application/getSubscribersStatistics' \
--header 'Authorization: Key 3a2X......828JreCk48f' \
--header 'Content-Type: application/json' \
--data-raw '{
   "application_code": "12345-67890",        // Pushwoosh app code
   "timestamp_from": "2022-08-01 00:00:00",  // UTC+0
   "timestamp_to": "2022-09-01 00:00:00"     // UTC+0
}'
```

**Пример ответа**
```json
{
  "statistics": [{
    "timestamp": "YYYY-MM-DD hh:mm:ss", // UTC+0
    "platform": 1,
    "push_enabled": 100,
    "push_disabled": 100
  }]
}
```
**Коды ответа**
<Tabs>
  <TabItem label="200: OK">
    ```json
    {
      "statistics": [{
        "timestamp": "YYYY-MM-DD hh:mm:ss",
        "platform": 1,
        "push_enabled": 100,
        "push_disabled": 100
      }]
    }
    ```

    **Пояснение**: Запрос выполнен успешно, статистика возвращена.
  </TabItem>

  <TabItem label="400: Bad Request">
    ```json
    {
      // Response
    }
    ```

    **Пояснение**: Запрос имеет неверный синтаксис или параметры.
  </TabItem>

  <TabItem label="500: Internal Server Error">
    ```json
    {
      // Response
    }
    ```

    **Пояснение**: На сервере произошла ошибка. Повторите попытку позже.
  </TabItem>

  <TabItem label="401: Unauthorized">
    ```json
    {
      // Response
    }
    ```

    **Пояснение**: Ошибка аутентификации. Проверьте ваш API-ключ или токен.
  </TabItem>

  <TabItem label="403: Forbidden">
    ```json
    {
      // Response
    }
    ```

    **Пояснение**: Доступ для указанного кода приложения запрещен.
  </TabItem>

  <TabItem label="404: Not Found">
    ```json
    {
      // Response
    }
    ```

    **Пояснение**: Код приложения не найден или не существует.
  </TabItem>
</Tabs>

### Правила для интервалов временных меток

<Aside type="note">
Пожалуйста, примите во внимание, что интервалы между временными метками в ответе зависят от периода, который вы указываете в запросе, следующим образом:

* если вы запрашиваете статистику за период более одного года, интервал временных меток статистики будет равен году
* если период статистики равен одному году, интервал между временными метками в ответе будет равен месяцу
* для периодов более месяца, но менее года, будет возвращена статистика за каждый день
* для периодов менее месяца ответ будет включать статистику за каждый час
</Aside>

| Запрошенный период <div style="width:350px"></div> | Интервал в ответе <div style="width:350px"></div> |
|-------------------|--------------------|
| Более 1 года | 1 год |
| 1 год | 1 месяц |
| 1 месяц - 1 год | 1 день |
| Менее 1 месяца | 1 час |