Начало работы с CrocoTime Web API: авторизация
Обычный запрос
| app_version | версия приложения, для которой сформирован запрос. Серверная часть, которая будет его обрабатывать, использует app_version для поддержания совместимости. | 
| revalidate_hash | только для браузерного клиента. Необходим для проверки на устарение версии клиента, которая сейчас загружена в браузер, по отношению к той версии, которую отдает сервер. | 
| server_token | (только для сервера Crocotime) токен для выполнения запросов к api без авторизации. Используется вместо сессии. Предназначен, в основном, для интеграций. Формируется через специальный раздел настроек в интерфейсе системы. | 
| subsystem | перечисление подсистем, которые должны будут обработать этот запрос. Для каждой подсистемы указывается app_version | 
{
 "server_token": "...",
 "controller": "...",
 "action": "...",
 "query":
 {
 ...
 },
 "revalidate_hash": "...", --readed from .hash
 "app_version": "8.6.8",
 "subsystems":
 [
 {
 "uuid": "com.infomaximum.crocotime",
 "app_version": "1.6.3"
 },
 {
 "uuid": "com.infomaximum.fsm",
 "app_version": "1.6.3"
 }
 ]
 }
Запрос на изменение
Для crocotime контроллер всегда WorkspaceActionController и для определения, в какой группе записей будут изменения, используется поле domain. Т.е определяющая пара - domain/action.
Для остальных серверов пара controller/action определяющая. Поле domain не используется и не передается.
| filter | фильтр, определяющий какие записи будут изменены. Может быть любое поле из таблицы | 
| record | поля с значениями для изменениями | 
| domain | таблица в БД crocotime | 
{
 "server_token": ...,
 "revalidate_hash": ...,
 "app_version": ...,
 "subsystems": ...,
 "controller": "Tasks",
 "action": "insert",
 "query":
 {
 "domain": "tasks",
 "filter": 
 {
 "task_id": [1]
 },
 "record":
 {
 "name": "task1"
 }
 }
 }
Batch-запрос
Каждый вложенный в batch запрос обрабатывается независимо, т.е. из 3 вложенных в запросов один может выполниться, а два - не выполнятся и вернут ошибки. Порядок выполнения запросов не гарантирован, если они будут обработаны разными подсистемами. В целом не стоит рассчитывать на то, что порядок выполнения совпадет с порядком запросов в параметрах.
{
 "controller": "BatchProcessing",
 "version": "5.2.0",
 "query":
 {
 "items":
 [
 {
 "name": "gh",
 "controller": "package_info",
 "params": {}
 "subsystem":
 [
 {
 "uuid:" "com.infomaximum.crocotime",
 "app_version": "1.6.3"
 },
 {
 "uuid:" "com.infomaximum.fsm",
 "app_version": "1.6.3"
 }
 ]
 },
 {
 "name": "Preferences",
 "controller": "schedule_and_permission_users",
 "params":
 {
 "name_filter":
 {
 "name": "",
 "always_coming_items": [],
 "always_coming_groups": [9]
 },
 "always_coming_items": [9],
 "always_coming_groups": [9],
 "subsystem":
 [
 {
 "uuid:" "com.infomaximum.crocotime",
 "app_version": "1.6.3"
 },
 {
 "uuid:" "com.infomaximum.fsm",
 "app_version": "1.6.3"
 }
 ]
 }
 },
 {
 "name": "ActiveTrack",
 "controller": "active_track",
 "params": {}
 "subsystem":
 [
 {
 "uuid:" "com.infomaximum.crocotime",
 "app_version": "1.6.3"
 },
 {
 "uuid:" "com.infomaximum.fsm",
 "app_version": "2.6.3"
 }
 ]
 }
 ]
 },
 "revalidate_hash": "...", --readed from <md5>.hash
 "app_version": "8.6.8" -- frontend
 }
Ответ
Если запрос успешен, то возвращается только result, который всегда содержит минимум
{
 "result": {}
 }
Если запрос не успешен, то возвращается только error. На основе наличия error нужно проверять успешность запроса.
{
 "error": 
 {
 "code": "some_code",
 "message": "",
 "params": []
 }
 }