Пинг

Просто проверка. Параметров нет.

POST /api/v3/ping

Пустой POST-запрос.

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

{}

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

{
    "_time": "2.2 ms",
    "ok": true,
    "result": "pong"
}

GET /api/v3/ping

Пустой GET-запрос.

Если задать параметр delay_sec, вернёт ответ не сразу, а через указанное количество секунд. Полезно для отладки проверки пингов.

Параметр error вернёт ошибку сервера. Полезно для отладки обработки ошибок сервера

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

{
    "_time": "1.8 ms",
    "ok": true,
    "result": "pong"
}

Время

Время сервера.

GET /api/v3/time

Пустой GET-запрос.

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

{
    "_time": "1.6 ms",
    "ok": true,
    "result": "2019-09-27T00:59:50.898951Z"
}

Страны и коды

Список стран и кодов городов.

Внимание! У одной из стран есть флаг default = True!

GET /api/v3/countries

Пустой GET-запрос.

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

{
    "_time": "3.5 ms",
    "ok": true,
    "result": [
        {
            "code": "+998",
            "name": "Узбекистан"
        },
        {
            "code": "+996",
            "name": "Кыргистан"
        },
        {
            "code": "+995",
            "name": "Грузия"
        },
        {
            "code": "+994",
            "name": "Азербайджан"
        },
        {
            "code": "+993",
            "name": "Туркменистан"
        },
        {
            "code": "+992",
            "name": "Таджикистан"
        },
        {
            "code": "+977",
            "name": "Непал"
        },
        {
            "code": "+976",
            "name": "Монголия"
        },
        {
            "code": "+975",
            "name": "Бутан"
        },
        {
            "code": "+974",
            "name": "Катар"
        },
        {
            "code": "+973",
            "name": "Бахрейн"
        },
        {
            "code": "+972",
            "name": "Израиль"
        },
        {
            "code": "+971",
            "name": "ОАЭ"
        },
        {
            "code": "+970",
            "name": "Сектор Газа"
        },
        {
            "code": "+970",
            "name": "Палестина"
        },
        {
            "code": "+968",
            "name": "Оман"
        },
        {
            "code": "+967",
            "name": "Йемен"
        },
        {
            "code": "+966",
            "name": "Саудовская Аравия"
        },
        {
            "code": "+965",
            "name": "Кувейт"
        },
        {
            "code": "+964",
            "name": "Ирак"
        },
        {
            "code": "+963",
            "name": "Сирия"
        },
        {
            "code": "+962",
            "name": "Иордания"
        },
        {
            "code": "+961",
            "name": "Ливан"
        },
        {
            "code": "+960",
            "name": "Мальдивы"
        },
        {
            "code": "+886",
            "name": "Тайвань"
        },
        {
            "code": "+880",
            "name": "Бангладеш"
        },
        {
            "code": "+870",
            "name": "Острова Питкэрн"
        },
        {
            "code": "+856",
            "name": "Лаос"
        },
        {
            "code": "+855",
            "name": "Камбоджа"
        },
        {
            "code": "+853",
            "name": "Макао"
        },
        {
            "code": "+852",
            "name": "Гонконг"
        },
        {
            "code": "+850",
            "name": "Северная Корея"
        },
        {
            "code": "+692",
            "name": "Маршалловы Острова"
        },
        {
            "code": "+691",
            "name": "Микронезия"
        },
        {
            "code": "+690",
            "name": "Токелау"
        },
        {
            "code": "+689",
            "name": "Французская Полинезия"
        },
        {
            "code": "+688",
            "name": "Тувалу"
        },
        {
            "code": "+687",
            "name": "Новая Каледония"
        },
        {
            "code": "+686",
            "name": "Кирибати"
        },
        {
            "code": "+685",
            "name": "Самоа"
        },
        {
            "code": "+683",
            "name": "Ниуэ"
        },
        {
            "code": "+682",
            "name": "Острова Кука"
        },
        {
            "code": "+681",
            "name": "Уоллис и Футуна"
        },
        {
            "code": "+680",
            "name": "Палау"
        },
        {
            "code": "+679",
            "name": "Фиджи"
        },
        {
            "code": "+678",
            "name": "Вануату"
        },
        {
            "code": "+677",
            "name": "Соломоновы Острова"
        },
        {
            "code": "+676",
            "name": "Тонга"
        },
        {
            "code": "+675",
            "name": "Папуа Новая Гвинея"
        },
        {
            "code": "+674",
            "name": "Науру"
        },
        {
            "code": "+673",
            "name": "Бруней"
        },
        {
            "code": "+672",
            "name": "Антарктика"
        },
        {
            "code": "+672",
            "name": "Остров Норфолк"
        },
        {
            "code": "+670",
            "name": "Восточный Тимор"
        },
        {
            "code": "+599",
            "name": "Нидерландские Антильские острова"
        },
        {
            "code": "+598",
            "name": "Уругвай"
        },
        {
            "code": "+597",
            "name": "Суринам"
        },
        {
            "code": "+595",
            "name": "Парагвай"
        },
        {
            "code": "+593",
            "name": "Эквадор"
        },
        {
            "code": "+592",
            "name": "Гайана"
        },
        {
            "code": "+591",
            "name": "Боливия"
        },
        {
            "code": "+590",
            "name": "Сен-Бартелеми (Карибы)"
        },
        {
            "code": "+509",
            "name": "Гаити"
        },
        {
            "code": "+508",
            "name": "Сен-Пьер и Микелон"
        },
        {
            "code": "+507",
            "name": "Панама"
        },
        {
            "code": "+506",
            "name": "Коста-Рика"
        },
        {
            "code": "+505",
            "name": "Никарагуа"
        },
        {
            "code": "+504",
            "name": "Гондурас"
        },
        {
            "code": "+503",
            "name": "Сальвадор"
        },
        {
            "code": "+502",
            "name": "Гватемала"
        },
        {
            "code": "+501",
            "name": "Белиз"
        },
        {
            "code": "+500",
            "name": "Фолклендские острова"
        },
        {
            "code": "+423",
            "name": "Лихтенштейн"
        },
        {
            "code": "+421",
            "name": "Словакия"
        },
        {
            "code": "+420",
            "name": "Чехия"
        },
        {
            "code": "+389",
            "name": "Македония"
        },
        {
            "code": "+387",
            "name": "Босния и Герцеговина"
        },
        {
            "code": "+386",
            "name": "Словения"
        },
        {
            "code": "+385",
            "name": "Хорватия"
        },
        {
            "code": "+382",
            "name": "Черногория"
        },
        {
            "code": "+381",
            "name": "Косово"
        },
        {
            "code": "+381",
            "name": "Сербия"
        },
        {
            "code": "+380",
            "name": "Украина"
        },
        {
            "code": "+378",
            "name": "Сан-Марино"
        },
        {
            "code": "+377",
            "name": "Монако"
        },
        {
            "code": "+376",
            "name": "Андорра"
        },
        {
            "code": "+375",
            "name": "Белоруссия"
        },
        {
            "code": "+374",
            "name": "Армения"
        },
        {
            "code": "+373",
            "name": "Молдавия"
        },
        {
            "code": "+372",
            "name": "Эстония"
        },
        {
            "code": "+371",
            "name": "Латвия"
        },
        {
            "code": "+370",
            "name": "Литва"
        },
        {
            "code": "+359",
            "name": "Болгария"
        },
        {
            "code": "+358",
            "name": "Финляндия"
        },
        {
            "code": "+357",
            "name": "Кипр"
        },
        {
            "code": "+356",
            "name": "Мальта"
        },
        {
            "code": "+355",
            "name": "Албания"
        },
        {
            "code": "+354",
            "name": "Исландия"
        },
        {
            "code": "+353",
            "name": "Ирландия"
        },
        {
            "code": "+352",
            "name": "Люксенбург"
        },
        {
            "code": "+351",
            "name": "Португалия"
        },
        {
            "code": "+350",
            "name": "Гибралтар"
        },
        {
            "code": "+299",
            "name": "Гренландия"
        },
        {
            "code": "+298",
            "name": "Фарерские острова"
        },
        {
            "code": "+297",
            "name": "Аруба"
        },
        {
            "code": "+291",
            "name": "Эритрея"
        },
        {
            "code": "+290",
            "name": "Остров Святой Елены"
        },
        {
            "code": "+269",
            "name": "Коморы"
        },
        {
            "code": "+268",
            "name": "Эсватини"
        },
        {
            "code": "+267",
            "name": "Ботсвана"
        },
        {
            "code": "+266",
            "name": "Лесото"
        },
        {
            "code": "+265",
            "name": "Малави"
        },
        {
            "code": "+264",
            "name": "Намибия"
        },
        {
            "code": "+263",
            "name": "Зимбабве"
        },
        {
            "code": "+262",
            "name": "Майотта"
        },
        {
            "code": "+261",
            "name": "Мадагаскар"
        },
        {
            "code": "+260",
            "name": "Замбия"
        },
        {
            "code": "+258",
            "name": "Мозамбик"
        },
        {
            "code": "+257",
            "name": "Бурунди"
        },
        {
            "code": "+256",
            "name": "Уганда"
        },
        {
            "code": "+255",
            "name": "Tanzania"
        },
        {
            "code": "+254",
            "name": "Кения"
        },
        {
            "code": "+253",
            "name": "Джибути"
        },
        {
            "code": "+252",
            "name": "Сомали"
        },
        {
            "code": "+251",
            "name": "Эфиопия"
        },
        {
            "code": "+250",
            "name": "Руанда"
        },
        {
            "code": "+249",
            "name": "Судан"
        },
        {
            "code": "+248",
            "name": "Сейшельские Острова"
        },
        {
            "code": "+245",
            "name": "Гвинея-Бисау"
        },
        {
            "code": "+244",
            "name": "Ангола"
        },
        {
            "code": "+243",
            "name": "Демократическая Республика Конго"
        },
        {
            "code": "+242",
            "name": "Республика Конго"
        },
        {
            "code": "+241",
            "name": "Габон"
        },
        {
            "code": "+240",
            "name": "Экваториальная Гвинея"
        },
        {
            "code": "+239",
            "name": "Сан-Томе и Принсипи"
        },
        {
            "code": "+238",
            "name": "Кабо-Верде"
        },
        {
            "code": "+237",
            "name": "Камерун"
        },
        {
            "code": "+236",
            "name": "Центральноафриканская Республика"
        },
        {
            "code": "+235",
            "name": "Чад"
        },
        {
            "code": "+234",
            "name": "Нигерия"
        },
        {
            "code": "+233",
            "name": "Гана"
        },
        {
            "code": "+232",
            "name": "Сьерра-Леоне"
        },
        {
            "code": "+231",
            "name": "Либерия"
        },
        {
            "code": "+230",
            "name": "Маврикий"
        },
        {
            "code": "+229",
            "name": "Бенин"
        },
        {
            "code": "+228",
            "name": "Того"
        },
        {
            "code": "+227",
            "name": "Нигер"
        },
        {
            "code": "+226",
            "name": "Буркина-Фасо"
        },
        {
            "code": "+225",
            "name": "Кот-д’Ивуар"
        },
        {
            "code": "+224",
            "name": "Гвинея"
        },
        {
            "code": "+223",
            "name": "Мали"
        },
        {
            "code": "+222",
            "name": "Мавритания"
        },
        {
            "code": "+221",
            "name": "Сенегал"
        },
        {
            "code": "+220",
            "name": "Гамбия"
        },
        {
            "code": "+218",
            "name": "Ливия"
        },
        {
            "code": "+216",
            "name": "Тунис"
        },
        {
            "code": "+213",
            "name": "Алжир"
        },
        {
            "code": "+212",
            "name": "Марокко"
        },
        {
            "code": "+98",
            "name": "Иран"
        },
        {
            "code": "+95",
            "name": "Бирма (Мьянма)"
        },
        {
            "code": "+94",
            "name": "Шри-Ланка"
        },
        {
            "code": "+93",
            "name": "Афганистан"
        },
        {
            "code": "+92",
            "name": "Пакистан"
        },
        {
            "code": "+91",
            "name": "Индия"
        },
        {
            "code": "+90",
            "name": "Турция"
        },
        {
            "code": "+86",
            "name": "Китай"
        },
        {
            "code": "+84",
            "name": "Вьетнам"
        },
        {
            "code": "+82",
            "name": "Южная Корея"
        },
        {
            "code": "+81",
            "name": "Япония"
        },
        {
            "code": "+66",
            "name": "Таиланд"
        },
        {
            "code": "+65",
            "name": "Сингапур"
        },
        {
            "code": "+64",
            "name": "Новая Зеландия"
        },
        {
            "code": "+63",
            "name": "Филиппины"
        },
        {
            "code": "+62",
            "name": "Индонезия"
        },
        {
            "code": "+61",
            "name": "Австралия"
        },
        {
            "code": "+61",
            "name": "Остров Рождества (Австралия)"
        },
        {
            "code": "+61",
            "name": "Кокосовые острова"
        },
        {
            "code": "+60",
            "name": "Малайзия"
        },
        {
            "code": "+58",
            "name": "Венесуэла"
        },
        {
            "code": "+57",
            "name": "Колумбия"
        },
        {
            "code": "+56",
            "name": "Чили"
        },
        {
            "code": "+55",
            "name": "Бразилия"
        },
        {
            "code": "+54",
            "name": "Аргентина"
        },
        {
            "code": "+53",
            "name": "Куба"
        },
        {
            "code": "+52",
            "name": "Мексика"
        },
        {
            "code": "+51",
            "name": "Перу"
        },
        {
            "code": "+49",
            "name": "Германия"
        },
        {
            "code": "+48",
            "name": "Польша"
        },
        {
            "code": "+47",
            "name": "Норвегия"
        },
        {
            "code": "+46",
            "name": "Швеция"
        },
        {
            "code": "+45",
            "name": "Дания"
        },
        {
            "code": "+44",
            "name": "Остров Мэн"
        },
        {
            "code": "+44",
            "name": "Великобритания"
        },
        {
            "code": "+43",
            "name": "Австрия"
        },
        {
            "code": "+41",
            "name": "Швейцария"
        },
        {
            "code": "+40",
            "name": "Румыния"
        },
        {
            "code": "+39",
            "name": "Италия"
        },
        {
            "code": "+39",
            "name": "Ватикан"
        },
        {
            "code": "+36",
            "name": "Венгрия"
        },
        {
            "code": "+34",
            "name": "Испания"
        },
        {
            "code": "+33",
            "name": "Франция"
        },
        {
            "code": "+32",
            "name": "Бельгия"
        },
        {
            "code": "+31",
            "name": "Нидерланды"
        },
        {
            "code": "+30",
            "name": "Греция"
        },
        {
            "code": "+27",
            "name": "ЮАР"
        },
        {
            "code": "+20",
            "name": "Египет"
        },
        {
            "code": "+7",
            "name": "Казахстан"
        },
        {
            "code": "+7",
            "default": true,
            "name": "Россия"
        },
        {
            "code": "+1",
            "name": "Пуэрто-Рико"
        },
        {
            "code": "+1",
            "name": "США"
        },
        {
            "code": "+1",
            "name": "Канада"
        },
        {
            "code": "+1684",
            "name": "Американское Самоа"
        },
        {
            "code": "+1264",
            "name": "Ангилья"
        },
        {
            "code": "+1268",
            "name": "Антигуа и Барбуда"
        },
        {
            "code": "+1242",
            "name": "Багамы"
        },
        {
            "code": "+1246",
            "name": "Барбадос"
        },
        {
            "code": "+1441",
            "name": "Бермудские Острова"
        },
        {
            "code": "+1284",
            "name": "Виргинские Острова (Великобритания)"
        },
        {
            "code": "+1345",
            "name": "Каймановы острова"
        },
        {
            "code": "+1767",
            "name": "Доминикана"
        },
        {
            "code": "+1809",
            "name": "Доминиканская Республика"
        },
        {
            "code": "+1473",
            "name": "Гренада"
        },
        {
            "code": "+1671",
            "name": "Гуам"
        },
        {
            "code": "+1876",
            "name": "Ямайка"
        },
        {
            "code": "+1664",
            "name": "Монтсеррат"
        },
        {
            "code": "+1670",
            "name": "Северные Марианские Острова"
        },
        {
            "code": "+1869",
            "name": "Сент-Китс и Невис"
        },
        {
            "code": "+1758",
            "name": "Сент-Люсия"
        },
        {
            "code": "+1599",
            "name": "Сен-Мартен"
        },
        {
            "code": "+1784",
            "name": "Сент-Винсент и Гренадины"
        },
        {
            "code": "+1868",
            "name": "Тринидада и Тобаго"
        },
        {
            "code": "+1649",
            "name": "Теркс и Кайкос"
        },
        {
            "code": "+1340",
            "name": "Виргинские Острова (США)"
        }
    ]
}

Авторизация

POST /api/v3/sms-login

Вход по SMS, часть первая: высылаем код.

  • phone — телефон в любом формате. Сервер уберёт пробелы, скобки, дефисы, угадает код страны, допишет плюсик и приведёт всё к виду +72348763434. Если не удалось, то выдаст ошибку. Но обычно удаётся.

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

{
    "phone": "+7 (916) 6660002"
}

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

{
    "_time": "58 ms",
    "ok": true,
    "result": {
        "code_length": 4,
        "code_valid_until": "2019-09-27T01:00:50.960036Z",
        "phone": "+79166660002"
    }
}

POST /api/v3/sms-auth

Вход по SMS, часть вторая: вводим код.

  • phone — телефон
  • code — код из SMS
  • type - тип устройства (ios, android)
  • device_id - id устройства
  • name - название устройства

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

{
    "code": "5555",
    "device_id": "a6a6d308730f27ce32d1",
    "name": "ойпад",
    "phone": "+7 (916) 6660002",
    "type": "ios"
}

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

{
    "_time": "446 ms",
    "ok": true,
    "result": {
        "me": {
            "alt_send": false,
            "default_lang": null,
            "devices": [
                {
                    "allowed_notifications": true,
                    "data_pushes": false,
                    "device_id": "a6a6d308730f27ce32d1",
                    "name": "ойпад",
                    "notification_token": "",
                    "type": "ios",
                    "voip_notification_token": ""
                }
            ],
            "email": null,
            "phone": "+79166660002",
            "teams": [],
            "unread_first": false
        },
        "token": "WoqtDSoWibETHyZcFJvixHGbp9AdYeg0"
    }
}

POST /api/v3/sms-login

Вход по SMS, часть первая: высылаем код.

  • phone — телефон в любом формате. Сервер уберёт пробелы, скобки, дефисы, угадает код страны, допишет плюсик и приведёт всё к виду +72348763434. Если не удалось, то выдаст ошибку. Но обычно удаётся.

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

{
    "phone": "+7 (916) 6660002"
}

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

{
    "_time": "19 ms",
    "ok": true,
    "result": {
        "code_length": 4,
        "code_valid_until": "2019-09-27T01:00:51.505004Z",
        "phone": "+79166660002"
    }
}

POST /api/v3/sms-cookieauth

Вход по SMS, часть вторая: вводим код.

  • phone — телефон
  • code — код из SMS

Отличие от просто sms-auth/: не требуется указывать устройство, не выдаётся токен, а просто выставляется кука, с которой можно ходить с запросами к API и коннектиться по ws.

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

{
    "code": "5555",
    "phone": "+7 (916) 6660002"
}

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

{
    "_time": "337 ms",
    "ok": true,
    "result": {
        "me": {
            "alt_send": false,
            "default_lang": null,
            "devices": [
                {
                    "allowed_notifications": true,
                    "data_pushes": false,
                    "device_id": "a6a6d308730f27ce32d1",
                    "name": "ойпад",
                    "notification_token": "",
                    "type": "ios",
                    "voip_notification_token": ""
                }
            ],
            "email": null,
            "phone": "+79166660002",
            "teams": [],
            "unread_first": false
        }
    }
}

Авторизация через QR-код

GET /api/v3/qr-login.png?debug=True

Вход по QR-коду. Если открыт один клиент, например.

Возвращает картинку со значением: otv://{server}/{temp_token}

Приятная мелочь: ?value=str сгенерирует qr-код с определённым токеном. Для тестов.

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

{
    "_time": "47 ms",
    "ok": true,
    "result": {
        "lifetime_sec": 60,
        "url": "otv://qr-login/127.0.0.1%3A8000/Sqt9O7toIgw-ud-G"
    }
}

POST /api/v3/qr-auth

Вход по qr-коду (/api/v3/qr-login.png).

  • temp_token — значение временного токена из qr-кода
  • type - тип устройства (ios, android)
  • device_id - id устройства
  • name - название устройства

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

{
    "device_id": "a6a6d308730f27ce32d1-2",
    "name": "ондроед",
    "temp_token": "Sqt9O7toIgw-ud-G",
    "type": "android"
}

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

{
    "_time": "117 ms",
    "ok": true,
    "result": {
        "me": {
            "alt_send": false,
            "default_lang": null,
            "devices": [
                {
                    "allowed_notifications": true,
                    "data_pushes": false,
                    "device_id": "a6a6d308730f27ce32d1",
                    "name": "ойпад",
                    "notification_token": "",
                    "type": "ios",
                    "voip_notification_token": ""
                },
                {
                    "allowed_notifications": true,
                    "data_pushes": false,
                    "device_id": "a6a6d308730f27ce32d1-2",
                    "name": "ондроед",
                    "notification_token": "",
                    "type": "android",
                    "voip_notification_token": ""
                }
            ],
            "email": null,
            "phone": "+79166660002",
            "teams": [],
            "unread_first": false
        },
        "token": "a0DD8hK-wkm4i2b4BP9eIRClCLpR68dV"
    }
}

Выход

Выход для sms-cookieauth/

POST /api/v3/cookieauth-logout

Можно выйти, послав POST.

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

{}

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

{
    "_time": "0.024 ms",
    "ok": true,
    "result": {
        "location": "/"
    }
}

GET /api/v3/cookieauth-logout

Можно выйти, послав GET.

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

{
    "_time": "0.095 ms",
    "ok": true,
    "result": {
        "location": "/"
    }
}

Информация о себе

GET /api/v3/me

Информация о текущем пользователе. То, что возвращает вызов sms-auth (см. выше), только без токена.

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

{
    "_time": "112 ms",
    "ok": true,
    "result": {
        "alt_send": false,
        "default_lang": null,
        "devices": [
            {
                "allowed_notifications": true,
                "data_pushes": false,
                "device_id": "a6a6d308730f27ce32d1",
                "name": "ойпад",
                "notification_token": "",
                "type": "ios",
                "voip_notification_token": ""
            },
            {
                "allowed_notifications": true,
                "data_pushes": false,
                "device_id": "a6a6d308730f27ce32d1-2",
                "name": "ондроед",
                "notification_token": "",
                "type": "android",
                "voip_notification_token": ""
            }
        ],
        "email": null,
        "phone": "+79166660002",
        "teams": [],
        "unread_first": false
    }
}

Настройки

Настройки в свободной форме. Просто словарь, куда клиент может сохранять нужные ему данные. Например, текущий чат, состояние открытости/скрытости панелек и т.п. 16кб на эти цели должно хватить каждому.

Важно: это настройки пользователя вообще, без привязки к отдельной команде. Если нужна привязка, можно делать префиксы с uid команд или вложенные структуры.

GET /api/v3/ui-settings

Получить ui настройки текущего пользователя.

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

{
    "_time": "30 ms",
    "ok": true,
    "result": {
        "current_team": "54b9580b-9fd8-4771-98bd-e9ca3d920017",
        "zzzz": [
            1,
            2,
            3
        ]
    }
}

PUT /api/v3/ui-settings

Записать ui настройки текущего пользователя. Не более 16000 байт.

Рассылает события:

  • server.uisettings

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

{
    "current_team": "21639e8e-5425-4ba3-b48b-b1c82af90d10",
    "zzzz": [
        1,
        2,
        3
    ]
}

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

{
    "_time": "50 ms",
    "ok": true,
    "result": {
        "current_team": "21639e8e-5425-4ba3-b48b-b1c82af90d10",
        "zzzz": [
            1,
            2,
            3
        ]
    }
}

Устройства

Список активных устройств.

  • type — строка "android", "ios", "web" (все браузеры, кроме Safari) или "safari".
  • device_id — id устройства. Не обязательно UUID, поэтому поле называется не uid, как у остальных моделей.
  • name — необязательное название устройства.
  • notification_token — токен для отправки через APNs или Firebase.
  • voip_notification_token — токен для отправки VOIP-пушей через APNs
  • allowed_notifications — включены ли пуш-уведомления. Для веб-клиента (пока) смысла не имеет.
  • data_pushes — если true, то пуши отправляются «тихими», только с данными. Пока работает только для андроида. По умолчанию false.

POST /api/v3/devices

Cоздание устройства. Если device_id уже есть, то не создаст новое устройство, а изменит существующее. Кроме того, в этом вызове нельзя поменать что-то одно в устройстве (например, только name). Для изменения требуется каждый раз посылать все поля.

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

{
    "allowed_notifications": true,
    "device_id": "ABA-f923727d4093",
    "name": "ХромЪ",
    "notification_token": "2ed7b2746ffe563f5ac8658a09e02c4dfe258a6ea683ddb9638fcef89b0d703e",
    "type": "web"
}

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

{
    "_time": "82 ms",
    "ok": true,
    "result": {
        "allowed_notifications": true,
        "data_pushes": false,
        "device_id": "ABA-f923727d4093",
        "name": "ХромЪ",
        "notification_token": "2ed7b2746ffe563f5ac8658a09e02c4dfe258a6ea683ddb9638fcef89b0d703e",
        "type": "web",
        "voip_notification_token": ""
    }
}

GET /api/v3/devices

Cписок устройств без разбивки по страницам. То же, что и в вызове /api/v3/me/, только отдельно.

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

{
    "_time": "37 ms",
    "ok": true,
    "result": [
        {
            "allowed_notifications": true,
            "data_pushes": false,
            "device_id": "a6a6d308730f27ce32d1",
            "name": "ойпад",
            "notification_token": "",
            "type": "ios",
            "voip_notification_token": ""
        },
        {
            "allowed_notifications": true,
            "data_pushes": false,
            "device_id": "a6a6d308730f27ce32d1-2",
            "name": "ондроед",
            "notification_token": "",
            "type": "android",
            "voip_notification_token": ""
        },
        {
            "allowed_notifications": true,
            "data_pushes": false,
            "device_id": "ABA-f923727d4093",
            "name": "ХромЪ",
            "notification_token": "2ed7b2746ffe563f5ac8658a09e02c4dfe258a6ea683ddb9638fcef89b0d703e",
            "type": "web",
            "voip_notification_token": ""
        }
    ]
}

Информация об устройстве. Список устройств можно получить через запрос /api/v3/me/, создание устройства происходит в момент логина.

GET /api/v3/devices/{device_id}

Информация об устройстве с указанным device_id

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

{
    "_time": "20 ms",
    "ok": true,
    "result": {
        "allowed_notifications": true,
        "data_pushes": false,
        "device_id": "ABA-f923727d4093",
        "name": "ХромЪ",
        "notification_token": "2ed7b2746ffe563f5ac8658a09e02c4dfe258a6ea683ddb9638fcef89b0d703e",
        "type": "web",
        "voip_notification_token": ""
    }
}

PUT /api/v3/devices/{device_id}

Изменение устройства с указанным device_id


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

{
    "name": "ойпадище",
    "notification_token": "47aba2b4b58a302ee4577ddb4183404d6367751cd427e47ecf04695227f2d92f",
    "voip_notification_token": "183ec558d682f1c72cea069c1e727c5039656f54a471c8605edf46088bcdc326"
}

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

{
    "_time": "60 ms",
    "ok": true,
    "result": {
        "allowed_notifications": true,
        "data_pushes": false,
        "device_id": "ABA-f923727d4093",
        "name": "ойпадище",
        "notification_token": "47aba2b4b58a302ee4577ddb4183404d6367751cd427e47ecf04695227f2d92f",
        "type": "web",
        "voip_notification_token": "183ec558d682f1c72cea069c1e727c5039656f54a471c8605edf46088bcdc326"
    }
}

DELETE /api/v3/devices/{device_id}

Удаление устройства с указанным device_id

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

{
    "_time": "76 ms",
    "ok": true,
    "result": null
}

Адресная книга устройства

GET /api/v3/devices/{device_id}/address-book

Контакты адресной книги данного устройства.

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

{
    "_time": "52 ms",
    "ok": true,
    "result": []
}

PUT /api/v3/devices/{device_id}/address-book

Сохраняет контакты адресной книги.

  • contacts — список контактов. Если у контакта будет поле phones, и если один из телефонов будет принадлежать пользователю системы, то в такой контакт добавится поле account

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

{
    "contacts": [
        {
            "phones": [
                "+79162255059"
            ]
        }
    ]
}

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

{
    "_time": "80 ms",
    "ok": true,
    "result": {
        "contacts": [
            {
                "account": {
                    "family_name": "dfgdfg",
                    "given_name": "dfg",
                    "phone": "+79162255059"
                },
                "phones": [
                    "+79162255059"
                ]
            }
        ]
    }
}

Команды

POST /api/v3/teams

Создание команды (внутри contacts обязательно только одно поле — phone). В ответе среди полей команды будет поле contacts — чтобы убедиться, что все переданные контакты добавились

Рассылает события:

  • server.contact.updated
  • server.team.updated
  • server.section.updated

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

{
    "contacts": [
        {
            "phone": "+7 999 233-11-22"
        },
        {
            "given_name": "Петя-админ",
            "phone": "+7 999 233-11-44",
            "role": "главный по катапультам",
            "status": "admin"
        },
        {
            "given_name": "Вася",
            "phone": "+7 999 233-11-33"
        }
    ],
    "name": "третий отдельный особый конный полк Чапаевской дивизии"
}

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

{
    "_time": "3.9 s",
    "ok": true,
    "result": {
        "bad_profile": true,
        "can_add_to_team": true,
        "can_manage_integrations": true,
        "can_manage_sections": true,
        "changeable_statuses": [
            "guest",
            "member",
            "admin",
            "owner"
        ],
        "contacts": [
            {
                "can_add_to_group": true,
                "can_call": true,
                "can_create_task": true,
                "can_delete": true,
                "can_send_message": true,
                "changeable_fields": [
                    "add_to_team_rights",
                    "contact_email",
                    "contact_phone",
                    "role",
                    "section",
                    "sections",
                    "status"
                ],
                "contact_email": "",
                "contact_phone": "+79992331133",
                "display_name": "Вася",
                "icons": {
                    "stub": "http://127.0.0.1:8000/u/578e3c/%D0%92/256.png"
                },
                "jid": "d-7d09fba1-414e-47ab-ad05-6cf7fee2e081",
                "last_activity": null,
                "role": "",
                "sections": [],
                "status": "member"
            },
            {
                "can_add_to_group": true,
                "can_call": true,
                "can_create_task": true,
                "can_delete": true,
                "can_send_message": true,
                "changeable_fields": [
                    "add_to_team_rights",
                    "contact_email",
                    "contact_phone",
                    "role",
                    "section",
                    "sections",
                    "status"
                ],
                "contact_email": "",
                "contact_phone": "+79992331144",
                "display_name": "Петя-админ",
                "icons": {
                    "stub": "http://127.0.0.1:8000/u/f08c50/%D0%9F/256.png"
                },
                "jid": "d-aae1ccb0-cfd0-4d12-bb0c-3ee844f28820",
                "last_activity": null,
                "role": "главный по катапультам",
                "sections": [],
                "status": "admin"
            },
            {
                "can_add_to_group": true,
                "can_call": true,
                "can_create_task": true,
                "can_delete": true,
                "can_send_message": true,
                "changeable_fields": [
                    "add_to_team_rights",
                    "contact_email",
                    "contact_phone",
                    "role",
                    "section",
                    "sections",
                    "status"
                ],
                "contact_email": "",
                "contact_phone": "+79992331122",
                "display_name": "+7 (999) 233-1122",
                "icons": {
                    "stub": "http://127.0.0.1:8000/u/f0769a/22/256.png"
                },
                "jid": "d-9b67cf45-dbdc-4660-84d0-22ce0d2d223c",
                "last_activity": null,
                "role": "",
                "sections": [],
                "status": "member"
            },
            {
                "alt_send": false,
                "can_add_to_group": true,
                "can_create_task": true,
                "can_delete": true,
                "changeable_fields": [
                    "add_to_team_rights",
                    "alt_send",
                    "contact_email",
                    "contact_mshort_view",
                    "contact_phone",
                    "contact_short_view",
                    "contact_show_archived",
                    "debug_show_activity",
                    "default_lang",
                    "family_name",
                    "given_name",
                    "group_mshort_view",
                    "group_notifications_enabled",
                    "group_short_view",
                    "icons",
                    "phone",
                    "role",
                    "section",
                    "sections",
                    "status",
                    "task_mshort_view",
                    "task_notifications_enabled",
                    "task_short_view",
                    "unread_first"
                ],
                "contact_email": "",
                "contact_mshort_view": false,
                "contact_phone": "+79166660002",
                "contact_short_view": false,
                "contact_show_archived": false,
                "debug_show_activity": false,
                "default_lang": null,
                "display_name": "+7 (916) 666-0002",
                "family_name": "",
                "given_name": "",
                "group_mshort_view": false,
                "group_notifications_enabled": true,
                "group_short_view": false,
                "icons": {
                    "stub": "http://127.0.0.1:8000/u/e36659/02/256.png"
                },
                "jid": "d-b7d905b3-c011-4e1d-b85a-37d822a96100",
                "last_activity": null,
                "role": "",
                "sections": [],
                "status": "owner",
                "task_mshort_view": false,
                "task_notifications_enabled": true,
                "task_short_view": false,
                "unread_first": false
            }
        ],
        "default_task_deadline": "18:00:00",
        "icons": {
            "stub": "http://127.0.0.1:8000/u/578e3c/%D1%82%D0%BE/256.png"
        },
        "last_active": false,
        "max_message_update_age": 86400,
        "me": {
            "alt_send": false,
            "can_add_to_group": true,
            "can_create_task": true,
            "can_delete": true,
            "changeable_fields": [
                "add_to_team_rights",
                "alt_send",
                "contact_email",
                "contact_mshort_view",
                "contact_phone",
                "contact_short_view",
                "contact_show_archived",
                "debug_show_activity",
                "default_lang",
                "family_name",
                "given_name",
                "group_mshort_view",
                "group_notifications_enabled",
                "group_short_view",
                "icons",
                "phone",
                "role",
                "section",
                "sections",
                "status",
                "task_mshort_view",
                "task_notifications_enabled",
                "task_short_view",
                "unread_first"
            ],
            "contact_email": "",
            "contact_mshort_view": false,
            "contact_phone": "+79166660002",
            "contact_short_view": false,
            "contact_show_archived": false,
            "debug_show_activity": false,
            "default_lang": null,
            "display_name": "+7 (916) 666-0002",
            "family_name": "",
            "given_name": "",
            "group_mshort_view": false,
            "group_notifications_enabled": true,
            "group_short_view": false,
            "icons": {
                "stub": "http://127.0.0.1:8000/u/e36659/02/256.png"
            },
            "jid": "d-b7d905b3-c011-4e1d-b85a-37d822a96100",
            "last_activity": null,
            "role": "",
            "sections": [],
            "status": "owner",
            "task_mshort_view": false,
            "task_notifications_enabled": true,
            "task_short_view": false,
            "unread_first": false
        },
        "name": "третий отдельный особый конный полк Чапаевской дивизии",
        "need_confirmation": false,
        "uid": "3525d76d-cfe0-469f-b46e-cbb79ae5491e",
        "unread": {
            "direct": {
                "chats": 0,
                "messages": 0
            },
            "group": {
                "chats": 0,
                "messages": 0
            },
            "task": {
                "chats": 0,
                "messages": 0
            }
        },
        "uploads_size": 0,
        "uploads_size_limit": 1073741824
    }
}

GET /api/v3/teams

Список команд. Без разбивки по страницам. То же, что отдаётся внутри вызова /api/v3/me/, только отдельно.

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

{
    "_time": "46 ms",
    "ok": true,
    "result": [
        {
            "bad_profile": true,
            "can_add_to_team": true,
            "can_manage_integrations": true,
            "can_manage_sections": true,
            "changeable_statuses": [
                "guest",
                "member",
                "admin",
                "owner"
            ],
            "default_task_deadline": "18:00:00",
            "icons": {
                "stub": "http://127.0.0.1:8000/u/578e3c/%D1%82%D0%BE/256.png"
            },
            "last_active": false,
            "max_message_update_age": 86400,
            "me": {
                "alt_send": false,
                "can_add_to_group": true,
                "can_create_task": true,
                "can_delete": true,
                "changeable_fields": [
                    "add_to_team_rights",
                    "alt_send",
                    "contact_email",
                    "contact_mshort_view",
                    "contact_phone",
                    "contact_short_view",
                    "contact_show_archived",
                    "debug_show_activity",
                    "default_lang",
                    "family_name",
                    "given_name",
                    "group_mshort_view",
                    "group_notifications_enabled",
                    "group_short_view",
                    "icons",
                    "phone",
                    "role",
                    "section",
                    "sections",
                    "status",
                    "task_mshort_view",
                    "task_notifications_enabled",
                    "task_short_view",
                    "unread_first"
                ],
                "contact_email": "",
                "contact_mshort_view": false,
                "contact_phone": "+79166660002",
                "contact_short_view": false,
                "contact_show_archived": false,
                "debug_show_activity": false,
                "default_lang": null,
                "display_name": "+7 (916) 666-0002",
                "family_name": "",
                "given_name": "",
                "group_mshort_view": false,
                "group_notifications_enabled": true,
                "group_short_view": false,
                "icons": {
                    "stub": "http://127.0.0.1:8000/u/e36659/02/256.png"
                },
                "jid": "d-b7d905b3-c011-4e1d-b85a-37d822a96100",
                "last_activity": null,
                "role": "",
                "sections": [],
                "status": "owner",
                "task_mshort_view": false,
                "task_notifications_enabled": true,
                "task_short_view": false,
                "unread_first": false
            },
            "name": "третий отдельный особый конный полк Чапаевской дивизии",
            "need_confirmation": false,
            "uid": "3525d76d-cfe0-469f-b46e-cbb79ae5491e",
            "unread": {
                "direct": {
                    "chats": 0,
                    "messages": 0
                },
                "group": {
                    "chats": 0,
                    "messages": 0
                },
                "task": {
                    "chats": 0,
                    "messages": 0
                }
            },
            "uploads_size": 0,
            "uploads_size_limit": 1073741824
        }
    ]
}

Интеграции

Интеграции

POST /api/v3/teams/{team_uid}/integrations

Новая интеграция.

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

{
    "comment": "Новая API-интеграция",
    "enabled": true,
    "group": "g-edb35028-b3ff-48ef-afc4-6fcd4c86b5ad",
    "kind": "raw"
}

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

{
    "_time": "52 ms",
    "ok": true,
    "result": {
        "comment": "Новая API-интеграция",
        "created": "2019-09-27T00:59:57.099755Z",
        "enabled": true,
        "form": {
            "api_key": {
                "label": "Ключ API",
                "readonly": true,
                "value": "BWDydgHkSQ_2JSOiBDeEoR9KILo"
            },
            "webhook_url": {
                "label": "Webhook URL",
                "readonly": false,
                "value": ""
            }
        },
        "group": "g-edb35028-b3ff-48ef-afc4-6fcd4c86b5ad",
        "help": "<p>Для отправки сообщения надо сделать POST-запрос на адрес <code>http://127.0.0.1:8000/api/message</code> с параметрами:</p>\n<ul>\n    <li>\n        <code>key</code> API-ключ. Для этой команды и этой группы: <strong class=\"nowrap\">BWDydgHkSQ_2JSOiBDeEoR9KILo</strong>\n    </li>\n    <li>\n        <code>message</code> само сообщение\n    </li>\n</ul>\n\n<h2>Пример для командной строки</h2>\n<pre>curl http://127.0.0.1:8000/api/message \\\n    -F key='BWDydgHkSQ_2JSOiBDeEoR9KILo' \\\n    -F message='Ваше сообщение'</pre>\n\n<h2>Ответ</h2>\n<p>Если всё хорошо, сервер возвращает <code>{\"ok\": true}</code>. Если случается\nошибка, то <code>{\"ok\": false, \"error\": \"Описание ошибки\"}</code>.</p>\n\n<h2>Получение сообщений из чата</h2>\n<p>Если задан Webhook URL, на него при каждом новом сообщении будет отправаться POST-запрос с параметрами:\n<code>\"chat\"</code>,<code>\"chat_display_name\"</code>, <code>\"created\"</code>, <code>\"sender\"</code>,\n<code>\"sender_display_name\"</code> и, самое главное: <code>\"text\"</code>. Кроме этого,\nв запросе будет http-заголовок <code>\"key\"</code>, равный API-ключу этой группы\n(<code>BWDydgHkSQ_2JSOiBDeEoR9KILo)</code>), чтобы вы могли убедиться, что запрос\nименно от нас. Если сервер ответит кодом, отличным от 200, запрос повторится\nещё 8 раз с нарастающим интервалом.</p>",
        "kind": "raw",
        "uid": "59917ec7-7c7d-4906-8f06-332ae9957eb3"
    }
}

GET /api/v3/teams/{team_uid}/integrations

Информация о интеграциях.

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

{
    "_time": "52 ms",
    "ok": true,
    "result": {
        "integrations": [
            {
                "comment": "Новая API-интеграция",
                "created": "2019-09-27T00:59:57.099755Z",
                "enabled": true,
                "form": {
                    "api_key": {
                        "label": "Ключ API",
                        "readonly": true,
                        "value": "BWDydgHkSQ_2JSOiBDeEoR9KILo"
                    },
                    "webhook_url": {
                        "label": "Webhook URL",
                        "readonly": false,
                        "value": ""
                    }
                },
                "group": "g-edb35028-b3ff-48ef-afc4-6fcd4c86b5ad",
                "help": "<p>Для отправки сообщения надо сделать POST-запрос на адрес <code>http://127.0.0.1:8000/api/message</code> с параметрами:</p>\n<ul>\n    <li>\n        <code>key</code> API-ключ. Для этой команды и этой группы: <strong class=\"nowrap\">BWDydgHkSQ_2JSOiBDeEoR9KILo</strong>\n    </li>\n    <li>\n        <code>message</code> само сообщение\n    </li>\n</ul>\n\n<h2>Пример для командной строки</h2>\n<pre>curl http://127.0.0.1:8000/api/message \\\n    -F key='BWDydgHkSQ_2JSOiBDeEoR9KILo' \\\n    -F message='Ваше сообщение'</pre>\n\n<h2>Ответ</h2>\n<p>Если всё хорошо, сервер возвращает <code>{\"ok\": true}</code>. Если случается\nошибка, то <code>{\"ok\": false, \"error\": \"Описание ошибки\"}</code>.</p>\n\n<h2>Получение сообщений из чата</h2>\n<p>Если задан Webhook URL, на него при каждом новом сообщении будет отправаться POST-запрос с параметрами:\n<code>\"chat\"</code>,<code>\"chat_display_name\"</code>, <code>\"created\"</code>, <code>\"sender\"</code>,\n<code>\"sender_display_name\"</code> и, самое главное: <code>\"text\"</code>. Кроме этого,\nв запросе будет http-заголовок <code>\"key\"</code>, равный API-ключу этой группы\n(<code>BWDydgHkSQ_2JSOiBDeEoR9KILo)</code>), чтобы вы могли убедиться, что запрос\nименно от нас. Если сервер ответит кодом, отличным от 200, запрос повторится\nещё 8 раз с нарастающим интервалом.</p>",
                "kind": "raw",
                "uid": "59917ec7-7c7d-4906-8f06-332ae9957eb3"
            }
        ],
        "kinds": [
            {
                "kind": "sentry",
                "template": {
                    "comment": "Новая интеграция",
                    "enabled": true,
                    "form": {},
                    "kind": "sentry"
                },
                "title": "Sentry"
            },
            {
                "kind": "bitbucket",
                "template": {
                    "comment": "Новая интеграция",
                    "enabled": true,
                    "form": {},
                    "kind": "bitbucket"
                },
                "title": "Bitbucket"
            },
            {
                "kind": "raw",
                "template": {
                    "comment": "Новая интеграция",
                    "enabled": true,
                    "form": {
                        "webhook_url": {
                            "label": "Webhook URL",
                            "readonly": false,
                            "value": ""
                        }
                    },
                    "kind": "raw"
                },
                "title": "API/Webhook"
            }
        ]
    }
}

GET /api/v3/teams/{team_uid}/integrations/{integration_uid}

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

{
    "_time": "109 ms",
    "ok": true,
    "result": {
        "comment": "Новая API-интеграция",
        "created": "2019-09-27T00:59:57.099755Z",
        "enabled": true,
        "form": {
            "api_key": {
                "label": "Ключ API",
                "readonly": true,
                "value": "BWDydgHkSQ_2JSOiBDeEoR9KILo"
            },
            "webhook_url": {
                "label": "Webhook URL",
                "readonly": false,
                "value": ""
            }
        },
        "group": "g-edb35028-b3ff-48ef-afc4-6fcd4c86b5ad",
        "help": "<p>Для отправки сообщения надо сделать POST-запрос на адрес <code>http://127.0.0.1:8000/api/message</code> с параметрами:</p>\n<ul>\n    <li>\n        <code>key</code> API-ключ. Для этой команды и этой группы: <strong class=\"nowrap\">BWDydgHkSQ_2JSOiBDeEoR9KILo</strong>\n    </li>\n    <li>\n        <code>message</code> само сообщение\n    </li>\n</ul>\n\n<h2>Пример для командной строки</h2>\n<pre>curl http://127.0.0.1:8000/api/message \\\n    -F key='BWDydgHkSQ_2JSOiBDeEoR9KILo' \\\n    -F message='Ваше сообщение'</pre>\n\n<h2>Ответ</h2>\n<p>Если всё хорошо, сервер возвращает <code>{\"ok\": true}</code>. Если случается\nошибка, то <code>{\"ok\": false, \"error\": \"Описание ошибки\"}</code>.</p>\n\n<h2>Получение сообщений из чата</h2>\n<p>Если задан Webhook URL, на него при каждом новом сообщении будет отправаться POST-запрос с параметрами:\n<code>\"chat\"</code>,<code>\"chat_display_name\"</code>, <code>\"created\"</code>, <code>\"sender\"</code>,\n<code>\"sender_display_name\"</code> и, самое главное: <code>\"text\"</code>. Кроме этого,\nв запросе будет http-заголовок <code>\"key\"</code>, равный API-ключу этой группы\n(<code>BWDydgHkSQ_2JSOiBDeEoR9KILo)</code>), чтобы вы могли убедиться, что запрос\nименно от нас. Если сервер ответит кодом, отличным от 200, запрос повторится\nещё 8 раз с нарастающим интервалом.</p>",
        "kind": "raw",
        "uid": "59917ec7-7c7d-4906-8f06-332ae9957eb3"
    }
}

PUT /api/v3/teams/{team_uid}/integrations/{integration_uid}

Изменение интеграции.


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

{
    "comment": "Тест 123",
    "group": "g-1b4c1070-2dfb-470e-84a4-f0017d49f1fc",
    "webhook_url": "https://web.tada.team/api/webhook-test"
}

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

{
    "_time": "268 ms",
    "ok": true,
    "result": {
        "comment": "Тест 123",
        "created": "2019-09-27T00:59:57.714882Z",
        "enabled": true,
        "form": {
            "api_key": {
                "label": "Ключ API",
                "readonly": true,
                "value": "BWDydgHkSQ_2JSOiBDeEoR9KILo"
            },
            "webhook_url": {
                "label": "Webhook URL",
                "readonly": false,
                "value": "https://web.tada.team/api/webhook-test"
            }
        },
        "group": "g-1b4c1070-2dfb-470e-84a4-f0017d49f1fc",
        "help": "<p>Для отправки сообщения надо сделать POST-запрос на адрес <code>http://127.0.0.1:8000/api/message</code> с параметрами:</p>\n<ul>\n    <li>\n        <code>key</code> API-ключ. Для этой команды и этой группы: <strong class=\"nowrap\">BWDydgHkSQ_2JSOiBDeEoR9KILo</strong>\n    </li>\n    <li>\n        <code>message</code> само сообщение\n    </li>\n</ul>\n\n<h2>Пример для командной строки</h2>\n<pre>curl http://127.0.0.1:8000/api/message \\\n    -F key='BWDydgHkSQ_2JSOiBDeEoR9KILo' \\\n    -F message='Ваше сообщение'</pre>\n\n<h2>Ответ</h2>\n<p>Если всё хорошо, сервер возвращает <code>{\"ok\": true}</code>. Если случается\nошибка, то <code>{\"ok\": false, \"error\": \"Описание ошибки\"}</code>.</p>\n\n<h2>Получение сообщений из чата</h2>\n<p>Если задан Webhook URL, на него при каждом новом сообщении будет отправаться POST-запрос с параметрами:\n<code>\"chat\"</code>,<code>\"chat_display_name\"</code>, <code>\"created\"</code>, <code>\"sender\"</code>,\n<code>\"sender_display_name\"</code> и, самое главное: <code>\"text\"</code>. Кроме этого,\nв запросе будет http-заголовок <code>\"key\"</code>, равный API-ключу этой группы\n(<code>BWDydgHkSQ_2JSOiBDeEoR9KILo)</code>), чтобы вы могли убедиться, что запрос\nименно от нас. Если сервер ответит кодом, отличным от 200, запрос повторится\nещё 8 раз с нарастающим интервалом.</p>",
        "kind": "raw",
        "uid": "59917ec7-7c7d-4906-8f06-332ae9957eb3"
    }
}

DELETE /api/v3/teams/{team_uid}/integrations/{integration_uid}

Удаление интеграции.

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

{
    "_time": "30 ms",
    "ok": true,
    "result": null
}

Приглашение в команду

Приглашения в команду

POST /api/v3/teams/{team_uid}/invitations

Создаёт новое приглашение.

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

{}

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

{
    "_time": "28 ms",
    "ok": true,
    "result": {
        "created": "2019-09-27T00:59:57.803560Z",
        "qr": "http://127.0.0.1:8000/api/v3/teams/3525d76d-cfe0-469f-b46e-cbb79ae5491e/invitations/_GPHfNsbkxiCR3jKq3CyESw8MMw.png",
        "token": "_GPHfNsbkxiCR3jKq3CyESw8MMw",
        "uid": "2d940647-ee41-4baa-9817-47b1a1d80ebe"
    }
}

GET /api/v3/teams/{team_uid}/invitations

Информация о приглашениях.

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

{
    "_time": "214 ms",
    "ok": true,
    "result": [
        {
            "created": "2019-09-27T00:59:57.803560Z",
            "qr": "http://127.0.0.1:8000/api/v3/teams/3525d76d-cfe0-469f-b46e-cbb79ae5491e/invitations/_GPHfNsbkxiCR3jKq3CyESw8MMw.png",
            "token": "_GPHfNsbkxiCR3jKq3CyESw8MMw",
            "uid": "2d940647-ee41-4baa-9817-47b1a1d80ebe"
        }
    ]
}

Приглашения в команду

GET /api/v3/teams/{team_uid}/invitations/{invitaion_uid}

Информация о приглашении.

QR-код — otv://qr-join/{host}/{token}

Токен надо отправить на {host}/api/v3/teams/join Если {host} не совпадает с текущим, пока выдавать ошибку.

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

{
    "_time": "46 ms",
    "ok": true,
    "result": {
        "created": "2019-09-27T00:59:57.803560Z",
        "qr": "http://127.0.0.1:8000/api/v3/teams/3525d76d-cfe0-469f-b46e-cbb79ae5491e/invitations/_GPHfNsbkxiCR3jKq3CyESw8MMw.png",
        "token": "_GPHfNsbkxiCR3jKq3CyESw8MMw",
        "uid": "2d940647-ee41-4baa-9817-47b1a1d80ebe"
    }
}

DELETE /api/v3/teams/{team_uid}/invitations/{invitaion_uid}

Удаляет приглашение.

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

{
    "_time": "31 ms",
    "ok": true,
    "result": null
}

Присоединение по приглашению

POST /api/v3/teams/join

Присоединение к команде по приглашению. Принмает token из приглашения.

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

{
    "token": "_GPHfNsbkxiCR3jKq3CyESw8MMw"
}

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

{
    "_time": "1.6 s",
    "ok": true,
    "result": {
        "can_manage_sections": true,
        "default_task_deadline": "18:00:00",
        "icons": {
            "stub": "http://127.0.0.1:8000/u/578e3c/%D1%82%D0%BE/256.png"
        },
        "last_active": false,
        "max_message_update_age": 86400,
        "me": {
            "alt_send": false,
            "can_add_to_group": true,
            "can_create_task": true,
            "can_delete": true,
            "changeable_fields": [
                "alt_send",
                "contact_email",
                "contact_mshort_view",
                "contact_phone",
                "contact_short_view",
                "contact_show_archived",
                "debug_show_activity",
                "default_lang",
                "family_name",
                "given_name",
                "group_mshort_view",
                "group_notifications_enabled",
                "group_short_view",
                "icons",
                "phone",
                "role",
                "task_mshort_view",
                "task_notifications_enabled",
                "task_short_view",
                "unread_first"
            ],
            "contact_email": "",
            "contact_mshort_view": false,
            "contact_phone": "+75550000001",
            "contact_short_view": false,
            "contact_show_archived": false,
            "debug_show_activity": false,
            "default_lang": null,
            "display_name": "Контакт №2",
            "family_name": "№2",
            "given_name": "Контакт",
            "group_mshort_view": false,
            "group_notifications_enabled": true,
            "group_short_view": false,
            "icons": {
                "stub": "http://127.0.0.1:8000/u/63bed3/%D0%9A%E2%84%96/256.png"
            },
            "jid": "d-e44a7419-1b44-4361-b994-170a37cb3325",
            "last_activity": null,
            "role": "",
            "sections": [],
            "status": "member",
            "task_mshort_view": false,
            "task_notifications_enabled": true,
            "task_short_view": false,
            "unread_first": false
        },
        "name": "третий отдельный особый конный полк Чапаевской дивизии",
        "need_confirmation": true,
        "uid": "3525d76d-cfe0-469f-b46e-cbb79ae5491e",
        "unread": {
            "direct": {
                "chats": 0,
                "messages": 0
            },
            "group": {
                "chats": 0,
                "messages": 0
            },
            "task": {
                "chats": 0,
                "messages": 0
            }
        }
    }
}

Картинка команды.

POST /api/v3/teams/{team_uid}/icons

загрузка или замена картинки. Картинка автоматически уменьшится до нужных размеров.

Внимание! Здесь в теле запроса должен быть не json, а данные, переданные в multipart/form-data в поле file. Аналог для html:

<form method="post" enctype="multipart/form-data">
    <input type="file" name="file">
</form>

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

{}

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

{
    "_time": "2.4 s",
    "ok": true,
    "result": {
        "lg": {
            "height": 1024,
            "url": "http://127.0.0.1:8000/u/65216b4f81bf470bbdf728ad971e2fd2/p/1x.jpg",
            "width": 1736
        },
        "sm": {
            "height": 256,
            "url": "http://127.0.0.1:8000/u/65216b4f81bf470bbdf728ad971e2fd2/p/256.jpg",
            "width": 256
        }
    }
}

DELETE /api/v3/teams/{team_uid}/icons

Удаление картинки, если есть

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

{
    "_time": "732 ms",
    "ok": true,
    "result": {
        "stub": "http://127.0.0.1:8000/u/578e3c/%D1%82%D0%BE/256.png"
    }
}
  • name — название команды, ничего неожиданного

GET /api/v3/teams/{team_uid}

Информация о команде.

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

{
    "_time": "59 ms",
    "ok": true,
    "result": {
        "bad_profile": true,
        "can_add_to_team": true,
        "can_manage_integrations": true,
        "can_manage_sections": true,
        "changeable_statuses": [
            "guest",
            "member",
            "admin",
            "owner"
        ],
        "default_task_deadline": "18:00:00",
        "icons": {
            "stub": "http://127.0.0.1:8000/u/578e3c/%D1%82%D0%BE/256.png"
        },
        "last_active": false,
        "max_message_update_age": 86400,
        "me": {
            "alt_send": false,
            "can_add_to_group": true,
            "can_create_task": true,
            "can_delete": true,
            "changeable_fields": [
                "add_to_team_rights",
                "alt_send",
                "contact_email",
                "contact_mshort_view",
                "contact_phone",
                "contact_short_view",
                "contact_show_archived",
                "debug_show_activity",
                "default_lang",
                "family_name",
                "given_name",
                "group_mshort_view",
                "group_notifications_enabled",
                "group_short_view",
                "icons",
                "phone",
                "role",
                "section",
                "sections",
                "status",
                "task_mshort_view",
                "task_notifications_enabled",
                "task_short_view",
                "unread_first"
            ],
            "contact_email": "",
            "contact_mshort_view": false,
            "contact_phone": "+79166660002",
            "contact_short_view": false,
            "contact_show_archived": false,
            "debug_show_activity": false,
            "default_lang": null,
            "display_name": "+7 (916) 666-0002",
            "family_name": "",
            "given_name": "",
            "group_mshort_view": false,
            "group_notifications_enabled": true,
            "group_short_view": false,
            "icons": {
                "stub": "http://127.0.0.1:8000/u/e36659/02/256.png"
            },
            "jid": "d-b7d905b3-c011-4e1d-b85a-37d822a96100",
            "last_activity": null,
            "role": "",
            "sections": [],
            "status": "owner",
            "task_mshort_view": false,
            "task_notifications_enabled": true,
            "task_short_view": false,
            "unread_first": false
        },
        "name": "третий отдельный особый конный полк Чапаевской дивизии",
        "need_confirmation": false,
        "uid": "3525d76d-cfe0-469f-b46e-cbb79ae5491e",
        "unread": {
            "direct": {
                "chats": 0,
                "messages": 0
            },
            "group": {
                "chats": 0,
                "messages": 0
            },
            "task": {
                "chats": 0,
                "messages": 0
            }
        },
        "uploads_size": 0,
        "uploads_size_limit": 1073741824
    }
}

PUT /api/v3/teams/{team_uid}

Изменение команды.

Рассылает события: * server.team.updated * server.contact.updated (если изменился режим иерархии) * server.group.updated (если изменился режим иерархии)


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

{
    "name": "иное название"
}

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

{
    "_time": "450 ms",
    "ok": true,
    "result": {
        "bad_profile": true,
        "can_add_to_team": true,
        "can_manage_integrations": true,
        "can_manage_sections": true,
        "changeable_statuses": [
            "guest",
            "member",
            "admin",
            "owner"
        ],
        "default_task_deadline": "18:00:00",
        "icons": {
            "stub": "http://127.0.0.1:8000/u/578e3c/%D0%B8%D0%BD/256.png"
        },
        "last_active": false,
        "max_message_update_age": 86400,
        "me": {
            "alt_send": false,
            "can_add_to_group": true,
            "can_create_task": true,
            "can_delete": true,
            "changeable_fields": [
                "add_to_team_rights",
                "alt_send",
                "contact_email",
                "contact_mshort_view",
                "contact_phone",
                "contact_short_view",
                "contact_show_archived",
                "debug_show_activity",
                "default_lang",
                "family_name",
                "given_name",
                "group_mshort_view",
                "group_notifications_enabled",
                "group_short_view",
                "icons",
                "phone",
                "role",
                "section",
                "sections",
                "status",
                "task_mshort_view",
                "task_notifications_enabled",
                "task_short_view",
                "unread_first"
            ],
            "contact_email": "",
            "contact_mshort_view": false,
            "contact_phone": "+79166660002",
            "contact_short_view": false,
            "contact_show_archived": false,
            "debug_show_activity": false,
            "default_lang": null,
            "display_name": "+7 (916) 666-0002",
            "family_name": "",
            "given_name": "",
            "group_mshort_view": false,
            "group_notifications_enabled": true,
            "group_short_view": false,
            "icons": {
                "stub": "http://127.0.0.1:8000/u/e36659/02/256.png"
            },
            "jid": "d-b7d905b3-c011-4e1d-b85a-37d822a96100",
            "last_activity": null,
            "role": "",
            "sections": [],
            "status": "owner",
            "task_mshort_view": false,
            "task_notifications_enabled": true,
            "task_short_view": false,
            "unread_first": false
        },
        "name": "иное название",
        "need_confirmation": false,
        "uid": "3525d76d-cfe0-469f-b46e-cbb79ae5491e",
        "unread": {
            "direct": {
                "chats": 0,
                "messages": 0
            },
            "group": {
                "chats": 0,
                "messages": 0
            },
            "task": {
                "chats": 0,
                "messages": 0
            }
        },
        "uploads_size": 0,
        "uploads_size_limit": 1073741824
    }
}

DELETE /api/v3/teams/{team_uid}

Удаление команды.

Рассылает события: * server.team.deleted

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

{
    "_time": "88 ms",
    "ok": true,
    "result": {
        "bad_profile": true,
        "can_add_to_team": true,
        "can_manage_integrations": true,
        "can_manage_sections": true,
        "changeable_statuses": [
            "guest",
            "member",
            "admin",
            "owner"
        ],
        "default_task_deadline": "18:00:00",
        "icons": {
            "stub": "http://127.0.0.1:8000/u/578e3c/%D0%B8%D0%BD/256.png"
        },
        "is_archive": true,
        "last_active": false,
        "max_message_update_age": 86400,
        "me": {
            "alt_send": false,
            "can_add_to_group": true,
            "can_create_task": true,
            "can_delete": true,
            "changeable_fields": [
                "add_to_team_rights",
                "alt_send",
                "contact_email",
                "contact_mshort_view",
                "contact_phone",
                "contact_short_view",
                "contact_show_archived",
                "debug_show_activity",
                "default_lang",
                "family_name",
                "given_name",
                "group_mshort_view",
                "group_notifications_enabled",
                "group_short_view",
                "icons",
                "phone",
                "role",
                "section",
                "sections",
                "status",
                "task_mshort_view",
                "task_notifications_enabled",
                "task_short_view",
                "unread_first"
            ],
            "contact_email": "",
            "contact_mshort_view": false,
            "contact_phone": "+79166660002",
            "contact_short_view": false,
            "contact_show_archived": false,
            "debug_show_activity": false,
            "default_lang": null,
            "display_name": "+7 (916) 666-0002",
            "family_name": "",
            "given_name": "",
            "group_mshort_view": false,
            "group_notifications_enabled": true,
            "group_short_view": false,
            "icons": {
                "stub": "http://127.0.0.1:8000/u/e36659/02/256.png"
            },
            "jid": "d-b7d905b3-c011-4e1d-b85a-37d822a96100",
            "last_activity": null,
            "role": "",
            "sections": [],
            "status": "owner",
            "task_mshort_view": false,
            "task_notifications_enabled": true,
            "task_short_view": false,
            "unread_first": false
        },
        "name": "иное название",
        "need_confirmation": false,
        "uid": "3525d76d-cfe0-469f-b46e-cbb79ae5491e",
        "unread": {
            "direct": {
                "chats": 0,
                "messages": 0
            },
            "group": {
                "chats": 0,
                "messages": 0
            },
            "task": {
                "chats": 0,
                "messages": 0
            }
        },
        "uploads_size": 0,
        "uploads_size_limit": 1073741824
    }
}

Место, используемое командой

Картинка команды.

GET /api/v3/teams/{team_uid}/usage

Информация о использовании места

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

{
    "_time": "17 ms",
    "ok": true,
    "result": {
        "by_months": [
            {
                "month": 10,
                "uploads_size": 0,
                "year": 2017
            },
            {
                "month": 11,
                "uploads_size": 0,
                "year": 2017
            },
            {
                "month": 12,
                "uploads_size": 798123,
                "year": 2017
            },
            {
                "month": 1,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 2,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 3,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 4,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 5,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 6,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 7,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 8,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 9,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 10,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 11,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 12,
                "uploads_size": 0,
                "year": 2018
            },
            {
                "month": 1,
                "uploads_size": 0,
                "year": 2019
            },
            {
                "month": 2,
                "uploads_size": 0,
                "year": 2019
            },
            {
                "month": 3,
                "uploads_size": 0,
                "year": 2019
            },
            {
                "month": 4,
                "uploads_size": 0,
                "year": 2019
            },
            {
                "month": 5,
                "uploads_size": 0,
                "year": 2019
            },
            {
                "month": 6,
                "uploads_size": 0,
                "year": 2019
            },
            {
                "month": 7,
                "uploads_size": 0,
                "year": 2019
            },
            {
                "month": 8,
                "uploads_size": 0,
                "year": 2019
            },
            {
                "month": 9,
                "uploads_size": 36025984,
                "year": 2019
            }
        ],
        "uploads_size": 36025984,
        "uploads_size_limit": 108077952
    }
}

ws через http

POST /api/v3/teams/{team_uid}/ws/{client_event_name}

Отправка ws-события через api. Ответ прилетит по ws.

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

{
    "content": {
        "text": "пыщ!",
        "type": "plain"
    },
    "to": "d-a2d94e8e-74aa-4b0b-b55d-0b4fc1ce07f4"
}

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

{
    "_time": "425 ms",
    "ok": true,
    "result": {
        "chat": "d-a2d94e8e-74aa-4b0b-b55d-0b4fc1ce07f4",
        "chat_type": "direct",
        "content": {
            "text": "пыщ!",
            "type": "plain"
        },
        "created": "2019-09-27T01:00:04.005231Z",
        "editable_until": "2019-09-27T01:00:04.005231Z",
        "from": "d-0b1b2362-fb69-4dd6-8bfb-90c89517168d",
        "gentime": 1569546004009720191,
        "message_id": "1c932181-aece-4f11-8d36-757bc478d86e",
        "prev": "0a78549a-ea3a-4fba-8fa7-a72c8261b9b8",
        "to": "d-a2d94e8e-74aa-4b0b-b55d-0b4fc1ce07f4"
    }
}