Открытый программный интерфейс (Open API v2.0)
На этой странице
Система спутникового мониторинга транспорта SKIF.PRO имеет открытое API для интеграции телематических данных и аналитики в любые сторонние корпоративные системы: 1С:Предприятие (УАТ, ERP), TMS/WMS логистические платформы, BI-системы и мобильные приложения.
Интерактивное описание API и документация доступны по адресу: https://api.skif.pro (Swagger UI: https://api.skif.pro/docs).
Для выполнения интеграционных запросов и работы фоновых служб рекомендуется явно использовать выделенный рабочий сервер: https://app1.skif.pro/api_v1.
Быстрые ссылки для разработчиков
| Ресурс | Описание | Ссылка |
|---|---|---|
| Портал API | Официальный портал открытого программного интерфейса | api.skif.pro |
| Swagger UI | Интерактивная веб-песочница с описанием методов и возможностью тестирования | api.skif.pro/docs |
| Рабочий сервер API | Рекомендуемый выделенный/резервный контур для интеграций и фоновых задач | https://app1.skif.pro/api_v1 |
| Postman-коллекция | Готовая коллекция эндпоинтов со схемой переменных и примерами запросов | Скачать коллекцию Postman v2.1 |
| OpenAPI 3.0 JSON | Машиночитаемая спецификация для генерации клиентских библиотек (SDK) | api.skif.pro/openapi.json |
Быстрый старт: первые данные за 3 шага
Для отправки запросов используется базовый адрес: https://app1.skif.pro/api_v1.
Шаг 1. Авторизация и получение токена
Аутентификация в API выполняется запросом POST /api_v1/login:
curl -i -X POST "https://app1.skif.pro/api_v1/login" \
-H "Content-Type: application/json" \
-d '{
"userProviderId": "your_login@company.ru",
"provider_key": "EMAIL",
"password": "your_password"
}'
Важно: При успешной авторизации (
HTTP 200) тело ответа пустое, а токен авторизации возвращается в HTTP-заголовке ответа:
Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9...
Шаг 2. Первый запрос: Список объектов компании
Для всех последующих запросов передавайте полученный токен в заголовке Authorization: Bearer <токен>. Использование сессионных cookies не требуется — API работает автономно по Bearer-токену.
curl -X POST "https://app1.skif.pro/api_v1/units/list" \
-H "Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"from": 0,
"count": 10
}'
Пример ответа сервера:
{
"max": 42,
"list": [
{
"id": "3efbec79-a0b2-41aa-a859-cacd80323d2f",
"name": "Газель Next А102ВВ",
"device_type": "Navtelecom SMART S-2420",
"imei": "866795031900671"
}
]
}
Шаг 3. Запрос телеметрии и текущего состояния ТС
Получение актуальных параметров объекта (координаты, скорость, зажигание, датчики уровня топлива):
curl -X GET "https://app1.skif.pro/api_v1/units?ids=3efbec79-a0b2-41aa-a859-cacd80323d2f" \
-H "Authorization: Bearer <токен>"
Постоянный API-ключ компании (Static API Key)
Если вашей интеграции (например, серверу 1С или регулярному фоновому скрипту) неудобно регулярно вызывать логин и хранить динамические JWT-токены, администратор компании может выпустить постоянный токен доступа.
-
Создание постоянного ключа (выполняет администратор через API или веб-кабинет):
bash POST https://app1.skif.pro/api_v1/users/:user_id/create_token { "valid_to": "2028-12-31 23:59:59" }В ответе возвращается ключ:{"user_company_api_key": "YOUR_COMPANY_API_KEY"}. -
Использование ключа:
Передавайте данный ключ в любом запросе в заголовкеuser_company_api_key:bash curl -X POST "https://app1.skif.pro/api_v1/units/list" \ -H "user_company_api_key: YOUR_COMPANY_API_KEY" \ -H "Content-Type: application/json" \ -d '{"from": 0, "count": 10}'
Основные функциональные модули API
| Модуль | Ключевые методы | Возможности и типовые задачи |
|---|---|---|
| Объекты и датчики | POST /units/listGET /units?ids=...GET /unit_sensors/:id |
Реестр транспортных средств компании, установленные терминалы, счетчики пробега/моточасов, тарировочные таблицы баков. |
| Пользователи и водители | POST /users/queryPOST /usersPOST /drivers/import_csvPOST /users/import_csvPATCH /users/roles/bulk |
Справочник пользователей и водителей компании: фильтр по признаку водителя и ролям, быстрое создание водителя по ФИО, пакетный импорт водителей и пользователей из CSV, массовая смена роли. Водители используются для автоназначения на объекты по коду (RFID). |
| Телеметрия и треки | POST /fasttracksPOST /fasttracks/bulkGET /box_tracks |
Получение детализированных треков за интервал дат, сглаживание выбросов GPS, чтение сырых пакетов телеметрии. |
| Поездки и стоянки | POST /report (Шаблон «Поездки»)POST /chronology_report |
Детектор движения: расчет поездок, пробега, остановок и стоянок с определением адресов стоянок. |
| Контроль топлива | POST /report (Шаблон «Топливо»)GET /units/fuel_level |
Расход топлива по ДУТ и CAN-шине, детекция сливов и заправок с точным объемом в литрах. |
| Геозоны и маршруты | GET /geozonesPOST /geozonesPOST /races/list |
Контроль входа/выхода из полигонов и окружностей, плановые маршруты и контроль соблюдения графика. |
| События и тревоги | POST /events/listPOST /notifications |
Тревоги по превышению скорости, кнопке SOS, эвакуации, отключению питания трекера. Доставка через Webhooks / Telegram. |
| Аналитические отчеты | POST /reportPOST /report_excel |
Сводные ведомости по парку за период, экспорт готовых отчетов в Excel (.xlsx) и PDF. |
| Интеграция с 1С | POST /units/listPOST /report |
Заполнение путевых листов 1С фактическим пробегом, расходом ГСМ и отработанными моточасами. |
| ## Стандарты взаимодействия, ограничения и производительность |
Выбор сервера
- Рабочий контур для интеграций (рекомендуется):
https://app1.skif.pro/api_v1.
Использование сервераapp1.skif.proобеспечивает прямое и стабильное обслуживание API-интеграций и фоновых задач без конкуренции за пул сетевых соединений основного клиентского интерфейса. - Интерактивная документация:
https://api.skif.pro(Swagger:https://api.skif.pro/docs). - Тестовый контур:
https://release.skif.pro/api_v1.
Лимиты частоты запросов (Rate Limits)
В сервисе авторизации платформы (skif_auth) действует автоматическая защита от перегрузки:
- Базовый лимит: 40 запросов в минуту на учетную запись (по скользящему окну 60 секунд на каждый шаблон маршрута).
- Лимит на метод
/login: до 40 запросов в минуту с одного IP-адреса. - Код ответа при превышении лимита: сервер возвращает
HTTP 429 Too Many Requestsсо структурой:json { "code": 4029, "field": "", "message": "Превышено количество отправленных запросов в минуту, подождите немного." }
Рекомендации по паузам между запросами (Throttling)
- Интервал 300–600 мс: После выполнения каждого запроса в цикле рекомендуется выдерживать паузу 300–600 мс перед отправкой следующего вызова (особенно для ресурсоемких операций: выгрузка треков
POST /fasttracks, расчет отчетовPOST /report, построение хронологииPOST /chronology_reportили опрос расширенных данных по ТС). Это предотвращает случайное исчерпание лимита в 40 запросов в минуту и исключает взаимные блокировки при параллельной обработке. - Пакетная обработка (
bulk): Вместо последовательного опроса каждого транспортного средства по отдельности используйте пакетные методы (например,POST /fasttracksподдерживает массив идентификаторовunits: [{"id": "..."}, ...]). - Обработка ошибки 429: При получении ответа
429скрипт интеграции должен сделать экспоненциальную паузу (backoff) на 2–5 секунд перед повтором запроса.
Примеры кода
Python: Получение списка ТС с обработкой пауз
import time
import requests
# Рекомендуемый сервер для API интеграций
BASE_URL = "https://app1.skif.pro/api_v1"
# 1. Авторизация
auth_resp = requests.post(
f"{BASE_URL}/login",
json={
"userProviderId": "your_login@company.ru",
"provider_key": "EMAIL",
"password": "your_password"
},
headers={"Content-Type": "application/json"}
)
auth_resp.raise_for_status()
# 2. Извлечение токена из заголовка ответа
token = auth_resp.headers.get("Authorization")
headers = {
"Authorization": token,
"Content-Type": "application/json",
"Accept": "application/json"
}
# 3. Запрос списка транспортных средств
resp = requests.post(
f"{BASE_URL}/units/list",
headers=headers,
json={"from": 0, "count": 20}
)
resp.raise_for_status()
data = resp.json()
print(f"Всего объектов в парке: {data.get('max')}")
for unit in data.get("list", []):
unit_id = unit["id"]
unit_name = unit["name"]
print(f"• ТС: {unit_name} (ID: {unit_id})")
# Пауза 400-500 мс перед следующим тяжелым запросом телеметрии
time.sleep(0.5)
telemetry_resp = requests.get(
f"{BASE_URL}/units?ids={unit_id}",
headers=headers
)
if telemetry_resp.status_code == 200:
telemetry = telemetry_resp.json()
print(" Данные получены успешно.")
elif telemetry_resp.status_code == 429:
print(" Внимание: сработал лимит частоты, пауза 3 сек...")
time.sleep(3)
Node.js / JavaScript (Fetch API с паузой)
// Рекомендуемый сервер для API интеграций
const BASE_URL = 'https://app1.skif.pro/api_v1';
// Функция задержки между вызовами (300-600 мс)
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
async function runIntegration() {
// 1. Авторизация
const loginRes = await fetch(`${BASE_URL}/login`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
userProviderId: 'your_login@company.ru',
provider_key: 'EMAIL',
password: 'your_password'
})
});
if (!loginRes.ok) throw new Error(`Login failed with status: ${loginRes.status}`);
// Токен передается в HTTP-заголовке Authorization
const token = loginRes.headers.get('authorization');
// 2. Получение списка ТС
const listRes = await fetch(`${BASE_URL}/units/list`, {
method: 'POST',
headers: {
'Authorization': token,
'Content-Type': 'application/json'
},
body: JSON.stringify({ from: 0, count: 10 })
});
const listData = await listRes.json();
console.log(`Всего объектов: ${listData.max}`);
for (const unit of listData.list) {
console.log(`Объект: ${unit.name} (ID: ${unit.id})`);
// Пауза 500 мс перед следующим запросом
await sleep(500);
const unitRes = await fetch(`${BASE_URL}/units?ids=${unit.id}`, {
headers: { 'Authorization': token }
});
if (unitRes.status === 429) {
console.warn('Превышен лимит запросов, пауза 3 сек...');
await sleep(3000);
}
}
}
runIntegration().catch(console.error);
Безопасность и лучшие практики
- Защита учетных данных: Не храните логин и пароль в открытом виде в исходном коде. Используйте переменные окружения или постоянный ключ
user_company_api_key. - Кэширование токена: Полученный JWT-токен действителен длительное время. Не вызывайте метод
/loginперед каждым отдельным запросом — сохраняйте полученный токен и обновляйте его только при ответе сервера401 Unauthorized. - Учет лимитов и таймаутов: При интеграции с 1С настраивайте таймаут ожидания HTTP-соединения не менее 30–60 секунд для тяжелых аналитических отчетов и используйте интервалы 300–600 мс между последовательными запросами.
Техническая поддержка интеграторов и обратная связь
Если вы обнаружили ошибку в работе методов, расхождение с документацией или у вас возник технический вопрос по интеграции:
- Форма обратной связи на портале API: Нажмите кнопку «Сообщить об ошибке» в шапке документации https://api.skif.pro. Заполните контур проблемы (боевой
app1.skif.proили стенд документацииapi.skif.pro), метод и ваш API-ключ компании. Обращение сразу поступит в очередь разработки. - Email техподдержки: support@skif.pro (обязательно укажите тему вида
[API Issue] {Метод} - {Компания}, вашcompany_idи cURL вызова). - Персональный менеджер: Обратитесь к вашему персональному менеджеру SKIF.PRO для согласования индивидуальных лимитов или выделенных вычислительных очередей.