Book design is the art of incorporating the content, style, format, design, and sequence of the various components of a book into a coherent whole. In the words of Jan Tschichold, "methods and rules upon which it is impossible to improve, have been developed over centuries. To produce perfect books, these rules have to be brought back to life and applied."
Front matter, or preliminaries, is the first section of a book, and is usually the smallest section in terms of the number of pages. Each page is counted, but no folio or page number is expressed, or printed, on either display pages or blank pages.
Описание BI API
Рекомендации к формированию запросов:
  • ограничивать все запросы по датам: рекомендуется выставлять интервал размером не более 2-х недель
  • не делать одинаковые запросы чаще 1 раза в 15 минут: данные обновляются с интервалом в 1 час
  • в запросе за данными указывать только необходимые поля
  • не производить одновременно несколько запросов
1. Login

POST https://bi.upravel.com/API/REST/login					
Request body:						
{
 "Username":"<имя пользователя>",
 "Password":"<пароль>"
}
Response (Success):						
{
 "UserName":"<имя пользователя>",
 "Token":"<token для доступа к API>"
}
Response (Fail):						
{
 "Type":"access",
 "Message": "Bad username or password, please validate or try using another realm"
}  
2. Logout

GET https://bi.upravel.com/API/REST/<token>/logout
Response:						
{
 "Message":"Session successfully logged out"
}	
3. Получение списка доступных полей

GET https://bi.upravel.com/API/REST/person/<token>/fields?platformName=<platform>
Необязательный параметр platformName стоит заполнять, если пользователю доступны несколько платформ.

GET https://bi.upravel.com/API/REST/person/<token>/fields?platformName=<platform>				
Необязательный параметр platformName стоит заполнять, если пользователю доступны несколько платформ.	
Response:						
{
 "Dimensions": ["daily_table", "advertiser_id", "creative_id", "publisher_id"], // поля для группировки
 "Kpis": ["requests", "bids", "imps", "clicks", "ctr"]  // аггрегаты
}
4. Получение данных

POST https://bi.upravel.com/API/REST/person/<token>/reports/<report_id>/data/<page>/<count>
report_id - Параметр не используется. Сохранён для совместимости. Передаём "Traffic".
page - номер страницы paging'а. Страницы нумеруются с 0.
count - количество записей на странице.

Все даты в формате "yyyy-MM-dd".

Для получения данных без постраничной навигации нужно использовать адрес https://bi.upravel.com/API/REST/person/<token>/reports/<report_id>/data

Request body:					
{
 "GroupBy":["<поле группировки1>, <поле группировки2>", ...], // обязательно
 "StartDate":"<начало периода (yyyy-MM-dd)>", // обязательно
 "EndDate":"<конец периода (yyyy-MM-dd)>", // обязательно
 "OrderBy":[
   {"field": "<поле сортировки>", "order":"<направление сортировки (asc/desc)>"},
   ...
 ],
 "Filter": [ //фильтры
   {
     "Field":"<поле фильтрации>",
     "Values":["<значение1>", "<значение2>", ...], // между значениями одного поля используется логическое ИЛИ
     "Op":"<операция (=, <>, >, <, >=, <=, like)>"
   }, // между фильтрами по разным полям используется логическое И
   ...
 ],
 "DataFields":["<поле1>", "<поле2>", ...], // обязательно. Список запрашиваемых полей.
 "Timezone":180, // Опционально. Таймзона, в которой требуется получить данные (в минутах относительно UTC. 180 - UTC+3). Работает только в специальных платформах.
 "PlaformName":"<имя_платформы>" // Опционально. Заполняется, если пользователю доступны несколько платформ.
}												
Response (Success):					
{
 "Total":{
   "DataCount": [
     {
       "Field":"<имя поля>",
       "Value":"<значение поля>"
     },
     ...
   ],
   "RecCount":<общее количество различных значений поля, указанного в GroupBy>
 },
 "Data": [
   {
     "DataFields": [
       {"Field":"<имя поля>", "Value":"<значение поля>"    },
       ...
     ],
     "GroupingFields": [
       {"Field":"<поле группировки1>","Value":"<значение>"},
       {"Field":"<поле группировки2>","Value":"<значение>"},
       …
     ]
   },
   ...
 ]
}

Response (в случае незаполнения обязательных полей или использования несуществующих полей данных):
{
 "Type": "exception",
 "Message": "<сообщение, поясняющее, в чём ошибка>"
}

Response (в случае неверного token'а):
{
 "Type": "access",
 "Message": "Token invalid"
}
Пример запроса:						
{
 "GroupBy": ["placement_id"],
 "StartDate": "2014-01-01",
 "EndDate": "2014-01-07",
 "DataFields": ["bids", "imps", "clicks", "adv_payout", "pub_payout"],
 "Filter": [{
   "Field": "publisher_id", "Values": [41], "Match": "equals"
 }]
}
						
Пример ответа: 
{
 "Total": {
   "DataCount": [
     {"Field": "bids", "Value": "12345678"},
     {"Field": "imps", "Value": "1365872" },
     {"Field": "clicks", "Value": "21621"},
     {"Field": "adv_payout", "Value": "30733.028700000148"},
     {"Field": "pub_payout", "Value": "0.0"}
   ],
   "RecCount": 1
 },
 "Data": [
   {
     "DataFields":
     [
       {"Field": "bids", "Value": "12345678"},
       {"Field": "imps", "Value": "1365872" },
       {"Field": "clicks", "Value": "21621"},
       {"Field": "adv_payout", "Value": "30733.028700000148"},
       {"Field": "pub_payout", "Value": "0.0"}
     ],
     "GroupingFields":
     [
       {"Field":"placement_id","Value":"1519"}
     ]
   }
 ]
}
5. Получение данных о платформе

GET https://bi.upravel.com/API/REST/person/<token>/platform?platformName=<platform>
platform - имя платформы, о которой нужна информация. Если параметр не передать, возвращается первая из доступных.

Response (Success):
{
 "Dimensions": [ // доступные поля группировки
   {
     "field": "campaign_id", // "техническое" имя поля
     "group_id": 1, // идентификатора группы полей
     "editable": false, // можно ли редактировать значение поля
     "filter_only": false, // применимо ли поле только для фильтрации, но не для группировки
     "names": { // человекочитаемые имена поля на разных языках платформы
       "ru": "Id кампании",
       "en": "Campaign Id"
     }
   }, ...
 ],
 "Kpis": [
   // аналогично Dimensions
 ],
 "Groups": [1], // идентификаторы групп полей
 "Widgets": [ // UI-виджеты доступные для платформы.
   "table",
   "chart",
   "offline_reports"
 ],
 "Languages": [ // языки, поддерживаемые платформой
   "ru",
   "en"
 ],
 "Timezones": [], // Таймзоны, в которых доступны полноценные данные платформы. Не поддерживается большинством платформ.
 "Editable": false, // возможно ли редактирование данных платформы
 "Names": { // человекочитаемые имена платформы на разных языках платформы
   "ru": "DSP",
   "en": "DSP"
 }
}