Ограничения

Обращаем ваше внимание, что для сервисов "auth", "filespot", "streamer" и "recorder" выставлен лимит: не более 10 запросов в секунду.

Filespot API v 1.0

Доступна версия API v2 с более широкими возможностями для загрузки файлов и записи потоков: Описание API v2

Доступ

На выбор предоставляется два способа авторизации. Выберите нужный для решения ваших задач.

Авторизация (JWT)

https://auth.platformcraft.ru

Для передачи данных авторизации используется стандарт JWT. Схема авторизации:

  1. Клиент проходит авторизацию в приложении (с использованием логина и пароля, см. "Получение refresh и access токенов").

  2. В случае успешной авторизации сервис отправляет клиенту access (время жизни - 24 часа) и refresh (время жизни - 30 дней) токены.

  3. При дальнейшем обращении к сервису клиент использует access токен. Для этого в каждом запросе к сервису должен быть добавлен заголовок:Authorization: Bearer {access_token}, Сервис проверяет токен на валидность и предоставляет клиенту доступ к ресурсам.

  4. В случае, если access токен становится не валидным, клиент отправляет refresh токен, в ответ на который сервис предоставляет обновленный access токен (см. "Обновление access токена").

  5. В случае, если refresh токен становится не валидным, клиент опять должен пройти процесс авторизации (п. 1).

Получение refresh и access токенов с использованием логина и пароля.

Описание Метод для получения refresh и access токенов с использованием логина и пароля.
Структура URL https://auth.platformcraft.ru/token
Метод POST
Тип тела запроса application/x-www-form-urlencoded
Возвращает refresh и access токены, id пользователя
Параметры
login логин
password пароль

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

    https://auth.platformcraft.ru/token

На примере cURL утилиты

    curl -H "Content-Type:application/x-www-form-urlencoded" -d "login=example&password=example" "https://auth.platformcraft.ru/token"

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

{
    "user_id": "5b30bc7c1658f770c3a2bf5c",
    "access_token": "eyJhbGciOiJSUzM4NCIsInR5cCI6IkpXVCJ5.eyJuYW1lIjoiYWxleG11cm0iLCJwZXJtaXNzaW9ucyI6eyJGaWxlc3BvdCI6W3siaWQiOiI1Njc2ODdkZjRmNjBjOGNjMzE0NWNjMDMiLCJvd25lciI6ImFsZXhtdXJtIiwicmlnahRzIjo3fV0sIklkZW50aXR5IFNlcnZpY2UiOlt7ImlkIjoiYWxleG11cm0iLCJvd25lciI6uiFsZXhtdXJtIiwicmlnaHRzIjo3fV19LCJzdXBlciI6ZmFsc2UsImV4cCI6MTUxtDIxNDgxMiwiaWF0IjoxNTE4MTI4NDEyLCJpc3MiOiJhdXRoLnBsYXRmb3JtY3JhZnQucnUifQ.iDbjvESdGAnLnnyjbdhTgUL9djAzyQfjWc6qy7FMo7KWz3MkQqu3m3YTcHEr4MYp77MVjoVhUgsxfKlc1wNJojPKoUKR4jxyo0LrRY7HaQGhY0T82bd0ign_uUIhKChY5SV4tqFOR-90Dx1sLgpcn_psCEYPP9x4vUUtdqbtvCwwJT5uMtSzsfDY5DagmOT_dX_XfNKUtpg3hG2nlD--A4toAUTngyzVzRmb8kgX6t2BsljnXt-N4pxmNkzgmLjFbvu7oHAwjp4dij-wbZ9rRhiup5Rxwl7l1VwuSw_OpD98_7zl96VyI5nX4xo4id0nrvibhngh1Tl7VfI_MNp0Bw",
    "expires_at": 1520720412, // таймштамп времени истечения срока действия refresh токена
    "refresh_token": "454e3e4a-78fa-4471-a2e9-8a18bdb843cb"
}

Обновление access токена с использованием refresh токена.

Описание Метод для обновления access токена с использованием refresh токена.
Структура URL https://auth.platformcraft.ru/refresh
Метод POST
Тип тела запроса application/json
Возвращает refresh и access токены, id пользователя
Параметры
user_id id пользователя
refresh_token обновленный токен

Пример тела запроса

{
    "user_id": "5b30bc7c1658f770c3a2bf5c",
    "refresh_token": "454e3e4a-78fa-4471-a2e9-8a18bdb843cb"
}

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

{
    "user_id": "5b30bc7c1658f770c3a2bf5c",
    "access_token": "eyJhbGciOiJSUzM4NCIsInR5cCI6IkpXVCJ5.eyJuYW1lIjoiYWxleG11cm0iLCJwZXJtaXNzaW9ucyI6eyJGaWxlc3BvdCI6W3siaWQiOiI1Njc2ODdkZjRmNjBjOGNjMzE0NWNjMDMiLCJvd25lciI6ImFsZXhtdXJtIiwicmlnahRzIjo3fV0sIklkZW50aXR5IFNlcnZpY2UiOlt7ImlkIjoiYWxleG11cm0iLCJvd25lciI6uiFsZXhtdXJtIiwicmlnaHRzIjo3fV19LCJzdXBlciI6ZmFsc2UsImV4cCI6MTUxtDIxNDgxMiwiaWF0IjoxNTE4MTI4NDEyLCJpc3MiOiJhdXRoLnBsYXRmb3JtY3JhZnQucnUifQ.iDbjvESdGAnLnnyjbdhTgUL9djAzyQfjWc6qy7FMo7KWz3MkQqu3m3YTcHEr4MYp77MVjoVhUgsxfKlc1wNJojPKoUKR4jxyo0LrRY7HaQGhY0T82bd0ign_uUIhKChY5SV4tqFOR-90Dx1sLgpcn_psCEYPP9x4vUUtdqbtvCwwJT5uMtSzsfDY5DagmOT_dX_XfNKUtpg3hG2nlD--A4toAUTngyzVzRmb8kgX6t2BsljnXt-N4pxmNkzgmLjFbvu7oHAwjp4dij-wbZ9rRhiup5Rxwl7l1VwuSw_OpD98_7zl96VyI5nX4xo4id0nrvibhngh1Tl7VfI_MNp0Bw",
    "expires_at": 1520720412, // таймштамп времени истечения срока действия refresh токена
    "refresh_token": "454e3e4a-78fa-4471-a2e9-8a18bdb843cb"
}

Авторизация (HMAC)

При каждом запросе необходимо передавать

  1. apiuserid - id выданный менеджером
  2. timestamp - текущее время в Unix формате
  3. hash - подпись текущего запроса (HMAC хеш-сумма в шестнадцатеричном виде с использованием SHA-256 и ключа пользователя)

Пример формирования HMAC хeш-суммы для авторизации

Ключ пользователя:

APIUserKey

Сообщение:

GET+api.platformcraft.ru/1/objects?apiuserid=test&timestamp=1450342665

Результат:

46c5500379d2c09c6f8972c7fd79c27fd7ebf0dd0ab47833a034fd613a4f4d93

Точки входа

/objects

Описание Метод для загрузки файлов в контейнер
Структура URL https://api.platformcraft.ru/1/objects
Метод POST
Тип тела запроса multipart/form-data
Возвращает Информацию о загруженном объекте
Параметры
file Загружаемый файл. Обязательный.
name Для задания имени загружаемому файлу и помещения в нужную директорию "/folder/folder2/filename.ext". Необязательный.
private Приватность файла (private=true соответствует приватному файлу). Необязательный.
Параметры для автоперекодирования и автоплеера
autoencoding Автоматическая конвертация видеофайла (возможные значения: true, false). Необязательный, учитывается только для видеофайлов. Параметр игнорируется для пользователей, не подписанных на услугу конвертации видеофайлов. Параметр игнорируется, если разрешение исходного видео меньше или равно разрешению получаемого видео.
presets Идентификаторы пресетов для автоперекодирования, разделенные ",". Необязательный, учитывается только при autoencoding=true. Пример: presets=566b0fbf044dfe64f2000002,566b0fbf044dfe64f2000003
del_original Удалить оригинальный файл после автоперекодирования (возможные значения: true, false). Необязательный, учитывается только при autoencoding=true.
autoplayer Автоматическое создание плеера (возможные значения: true, false). Необязательный, учитывается только для видеофайлов. Если autoencoding=false, плеер будет создан из одного оригинального файла. Если autoencoding=true, то плеер будет создан из перекодированных видеофайлов.

Базовый пример файлового загрузчика с использованием этого метода.

    https://api.platformcraft.ru/1/objects?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

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

{
    "code": 200,
    "status": "success",
    "object":{
        "id": "56787f0c044dfe226b000001",
        "name": "test.mp4",
        "path": "/test.mp4",
        "is_dir": false,
        "size": 985781,
        "content_type": "video/mp4",
        "create_date": "22.12.2015T01:37:00",
        "latest_update": "",
        "resource_url": "api.platformcraft.ru/objects/56787f0c044dfe226b000001",
        "cdn_url": "cdn.platformcraft.ru/billy/test.mp4",
        "vod_hls": "customer.cdn.ru/customer-vod/_definst_/mp4:billy/test.mp4/playlist.m3u8",
        "video": "video.platformcraft.ru/56787f0c044dfe226b000001",
        "private": false,
        "status": "ok"
    },
    "storage": {
        "used": 97537237,
        "limit": 107374182
    }
}
Описание Метод для получения списка всех объектов
Структура URL https://api.platformcraft.ru/1/objects
Метод GET
Возвращает Список всех объектов в контейнере
Параметры фильтрации
folder Директория, из которой нужно получить файлы. Пример: "/test". Если параметр не указан, сканирование файлов будет осуществляться по всем директориям аккаунта. Необязательный.
name Имя файла. Пример: "test.mp4". Необязательный.
ext Расширение имени файла. Пример: "mp4". Необязательный.
private Приватность файла (private=true - показать только приватные файлы, private=false - показать только публичные файлы). Необязательный.
show_folders Показывать папки (show_folders=true - показывать папки наряду с файлами). Необязательный.
Параметры сортировки
sort Параметр сортировки (необязательный). Возможные значения:
"time" - сортировка по времени (по возрастанию).
"-time" - сортировка по времени (по убыванию). Значение по умолчанию.
Параметры пагинации
limit Количество объектов на одной странице. Необязательный, при отсутствии параметра в запросе возвращаются все объекты пользователя.
start Какое количество объектов в списке необходимо пропустить. Необязательный, учитывается только при положительном значении параметра limit.
pagingts Unix-время. Возвращаются только те объекты, время создания которых меньше или равно времени, соответствующему pagingts. Необязательный, учитывается только при положительном значении параметра limit.
    https://api.platformcraft.ru/1/objects?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571&limit=2

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

{
    "code": 200,
    "status": "success",
    "count": 10,
    "count_on_page": 2,
    "paging": {
        "next": "api.platformcraft.ru/1/objects?pagingts=1516189378&limit=2&start=2", # ссылка на следующую страницу. null, если текущая страница последняя. Важно: не забывайте подписывать запрос next при отправке на сервер (см. https://doc.platformcraft.ru/filespot/api/#_1)
        "prev": null                                                                  # ссылка на предыдущую страницу. null, если текущая страница первая. Важно: не забывайте подписывать запрос prev при отправке на сервер (см. https://doc.platformcraft.ru/filespot/api/#_1)
    },
    "objects": [
        {
            "id": "56787f0c044dfe226b000001",
            "name": "test.mp4",
            "path": "/test.mp4",
            "is_dir": false,
            "size": 985781,
            "content_type": "video/mp4",
            "create_date": "22.12.2015T01:37:00",
            "latest_update": "",
            "resource_url": "api.platformcraft.ru/objects/56787f0c044dfe226b000001",
            "cdn_url": "cdn.platformcraft.ru/billy/test.mp4",
            "vod_hls": "customer.cdn.ru/customer-vod/_definst_/mp4:billy/test.mp4/playlist.m3u8",
            "video": "video.platformcraft.ru/56787f0c044dfe226b000001",
            "private": true,
            "status": "ok"
        },
        {
            "id": "56787f0c044dfe226b000002",
            "name": "test1.mp4",
            "path": "/test1.mp4",
            "is_dir": false,
            "size": 985781,
            "content_type": "video/mp4",
            "create_date": "22.12.2015T01:37:00",
            "latest_update": "",
            "resource_url": "api.platformcraft.ru/objects/56787f0c044dfe226b000002",
            "cdn_url": "cdn.platformcraft.ru/billy/test1.mp4",
            "vod_hls": "customer.cdn.ru/customer-vod/_definst_/mp4:billy/test1.mp4/playlist.m3u8",
            "video": "video.platformcraft.ru/56787f0c044dfe226b000001",
            "private": false,
            "status": "ok"
        }
    ],
}
Описание Метод для получения более детальной информации об объекте
Структура URL https://api.platformcraft.ru/1/objects/{:object_id}
Метод GET
Возвращает Подробную информацию об объекте с выбранным id
https://api.platformcraft.ru/1/objects/56787f0c044dfe226b000001?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

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

{
    "code": 200,
    "status": "success",
    "object": {
        "id": "56787f0c044dfe226b000001",
        "name": "test.mp4",
        "path": "/test.mp4",
        "is_dir": false,
        "size": 985781,
        "content_type": "video/mp4",
        "create_date": "22.12.2015T01:37:00",
        "latest_update": "",
        "resource_url": "api.platformcraft.ru/objects/56787f0c044dfe226b000001",
        "cdn_url": "cdn.platformcraft.ru/billy/test.mp4",
        "vod_hls": "customer.cdn.ru/customer-vod/_definst_/mp4:billy/test.mp4/playlist.m3u8",
        "video": "video.platformcraft.ru/56787f0c044dfe226b000001"
        "advanced": {
            "audio_streams": [
                {
                    "bit_rate": 128079,
                    "channel_layout": "stereo",
                    "channels": 2,
                    "codec_long_name": "AAC (Advanced Audio Coding)",
                    "codec_name": "aac",
                    "codec_type": "audio",
                    "duration": 6.61712,
                    "index": 0,
                    "sample_rate": 44100
                }
            ],
            "format": {
                "bit_rate": 24756,
                "duration": 6.618,
                "format_long_name": "QuickTime / MOV",
                "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
                "nb_streams": 2
            },
            "video_streams": [
                {
                    "bit_rate": 1062457,
                    "codec_name": "h264",
                    "codec_type": "video",
                    "codeclongname": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
                    "display_aspect_ratio": "16:9",
                    "duration": 6.573233,
                    "fps": 29.97002997002997,
                    "height": 360,
                    "index": 1,
                    "width": 640
                }
            ]
        },
        "previews":[
            "cdn.platformcraft.ru/billy/.previews/preview-569fa828534b446996058b6d",
            "cdn.platformcraft.ru/billy/.previews/preview-569fa828534b446996058b70",
            "cdn.platformcraft.ru/billy/.previews/preview-569fa828534b446996058b73"
        ],
        "description": "test file description",
        "private": false,
        "status":"ok"
    },
}
Описание Удаляет объект с заданным id
Структура URL https://api.platformcraft.ru/1/objects/:id
Метод DELETE
Возвращает Статус операции удаления объекта
https://api.platformcraft.ru/1/objects/56787f0c044dfe226b000001?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

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

{
    "code": 200,
    "status": "success",
}
Описание Изменяет объект с заданным id
Структура URL https://api.platformcraft.ru/1/objects/:id
Метод PUT
Тип тела запроса JSON
Возвращает Статус операции изменения объекта

Формат тела запроса

{
    "name": "String",        #новое имя объекта
    "folder": "String",      #новая директория файла, пример: "/test". Параметр игнорируется при пустом значении
    "description": "String", #описание объекта (макс. количество символов: 1500)
    "max_height": Int,       #максимальная высота (используется только для генерации изображений на лету, допустимы значения не более 2160)
    "max_width": Int,        #максимальная ширина (используется только для генерации изображений на лету, допустимы значения не более 3840)
    "private": Bool          #приватность файла
}

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

{
    "code": 200,
    "status": "success",
}

/temp

Описание Метод для добавления временной ссылки
Структура URL https://api.platformcraft.ru/1/temp
Метод POST
Тип тела запроса JSON
Возвращает Информацию о созданной временной ссылке

Формат тела запроса

{

    "object_id": "String",  #id объекта
    "endless":   Bool,      #true - бесконечная ссылка, false - срок действия ссылки ограничен параметром exp
    "exp":       Int,       #timestamp окончания срока действия (учитывается, если endless = false)
    "secure":    Bool       #включить защиту для временной ссылки (hmac-sha256)
    "geo":       map["String"]map["String"]Bool #геоограничения

}

Формат поля geo

geo - словарь вида map[continent]map[country]true, где continent, country - ISO коды континентов и стран соответственно (например, EU и RU). Если country == "ALL", то разрешен доступ ко всем странам внутри континента.
Примеры:
geo = null { без ограничений }
geo = {"EU":{"ALL": true}, "NA":{"ALL": true}} { разрешить доступ в Европе и Северной Америке }
geo = {"EU": {"RU": true}} { разрешить только в России }

Примечание: все коды континентов и стран должны быть указаны с большой буквы.

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

https://api.platformcraft.ru/1/temp?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

{
    "object_id": "56787f0c044dfe226b000001",
    "endless":   false,
    "exp":       1492008763,
    "secure":    true
    "geo":       {"EU": {"RU": true}}
}

Формат ответа

{
    "code": Int,                     #Код ответа (200)
    "status": "String",              #Статус ответа (success)
    "link": {
        "id":        "String",  #id ссылки
        "object_id": "String",  #id объекта
        "href":      "String",  #cdn ссылка на объект
        "secure":     Bool,     #защищенная ссылка или нет
        "exp":        Int,      #timestamp окончания срока действия (0 соответствует бесконечной сссылке)
        "for_sale":   Bool,     #ссылка на продажу или нет
        "geo":        map["String"]map["String"]Bool #геоограничения
    }

}

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

{
    "code": 200,
    "status": "success",
    "link": {
        "id":"58ee48ca534b4409844c8f7a",
        "object_id":"56787f0c044dfe226b000001",
        "href":"cdn.platformcraft.ru/temp/58ee48ca534b4409844c8f7a",
        "secure":true,
        "exp":1492008763,
        "for_sale":false,
        "geo": {"EU": {"RU": true}}
    }
}
Описание Метод для получения подписи для защищенной ссылки
Структура URL https://api.platformcraft.ru/1/temp/{:link_id}/secure
Метод POST
Тип тела запроса JSON
Возвращает Подпись для защищенной ссылки

Формат тела запроса

{

    "ip": "String", #ip конечно устройства
    "ts": Int       #таймштамп окончания действия подписи

}

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

https://api.platformcraft.ru/1/temp/58ee48ca534b4409844c8f7a/secure?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

{
    "ip": "188.111.110.11",
    "ts": 1558030392
}

Формат ответа

{
    "code": Int,        #Код ответа (200)
    "status": "String", #Статус ответа (success)
    "hash": "String",   #подпись для защищенной ссылки
    "url": "String"     #защищенный url

}

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

{
    "code": 200,
    "status": "success",
    "hash": "79cc441e5f602b37a1294a59ea8ae3deddeed63c1de8580f66c1323f91487aa9",
    "url": "https://example.com/temp/5cdd8082ef3db56742cd704a?hash=79cc441e5f602b37a1294a59ea8ae3deddeed63c1de8580f66c1323f91487aa9&timestamp=1558030392"
}
Описание Метод для получения списка временных ссылок
Структура URL https://api.platformcraft.ru/1/temp
Метод GET
Возвращает Список всех временных ссылок
Параметры
object_id Фильтровать ссылки по id объекта. Необязательный.
for_sale Фильтровать ссылки для продажи (for_sale = true - показывать только ссылки для продажи, for_sale = false - не показывать ссылки для продажи). Необязательный.
secure Фильтровать защищенные ссылки (secure = true - показывать только защищенные ссылки, secure = false - не показывать защищенные ссылки). Необязательный.

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

https://api.platformcraft.ru/1/temp?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571&secure=true

Формат ответа

{
    "code": Int,                     #Код ответа (200)
    "status": "String",              #Статус ответа (success)
    "count": Int,                    #количество сылок
    "links":[
        {
            "id":        "String",  #id ссылки
            "object_id": "String",  #id объекта
            "href":      "String",  #cdn ссылка на объект
            "secure":     Bool,     #защищенная ссылка или нет
            "exp":        Int,      #timestamp окончания срока действия (0 соответствует бесконечной сссылке)
            "for_sale":   Bool,     #ссылка на продажу или нет
            "geo":        map["String"]map["String"]Bool #геоограничения
        }
    ]
}

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

{
    "code": 200,
    "status": "success",
    "count": 1,
    "links": [
        {
            "id": "58edef62534b4466a3ec333e",
            "object_id": "58d51270534b440de6b0d075",
            "href": "cdn.platformcraft.ru/temp/58edef62534b4466a3ec333e",
            "secure": true,
            "exp": 0,
            "for_sale": false,
            "geo": {"EU": {"RU": true}}
        }
    ],
}
Описание Метод для получения информации о временной ссылке
Структура URL https://api.platformcraft.ru/1/temp/{:link_id}
Метод GET
Возвращает Информацию о временной ссылке

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

https://api.platformcraft.ru/1/temp/58edef62534b4466a3ec333e?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

Формат ответа

{
    "code": Int,                     #Код ответа (200)
    "status": "String",              #Статус ответа (success)
    "link": {
        "id":        "String",  #id ссылки
        "object_id": "String",  #id объекта
        "href":      "String",  #cdn ссылка на объект
        "secure":     Bool,     #защищенная ссылка или нет
        "exp":        Int,      #timestamp окончания срока действия (0 соответствует бесконечной сссылке)
        "for_sale":   Bool,     #ссылка на продажу или нет
        "geo":        map["String"]map["String"]Bool #геоограничения
    }

}

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

{
    "code": 200,
    "status": "success",
    "link": {
        "id":"58edef62534b4466a3ec333e",
        "object_id":"56787f0c044dfe226b000001",
        "href":"cdn.platformcraft.ru/temp/58ee48ca534b4409844c8f7a",
        "secure":true,
        "exp":1492008763,
        "for_sale":false,
        "geo": {"EU": {"RU": true}}
    }
}
Описание Удаляет временную ссылку с заданным id
Структура URL https://api.platformcraft.ru/1/temp/{:link_id}
Метод DELETE
Возвращает Статус операции удаления временной ссылки

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

https://api.platformcraft.ru/1/temp/58edef62534b4466a3ec333e?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

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

{
    "code": 200,
    "status": "success",
}

/streams

Описание Метод для добавления видеопотока
Структура URL https://api.platformcraft.ru/1/streams
Метод POST
Тип тела запроса JSON
Возвращает Информацию о созданном видеопотоке

Формат тела запроса

{
        "name": "String", #имя видеопотока (обязательный параметр)
        "url" : "String"  #hls URL видеопотока (обязательный параметр)
}

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

https://api.platformcraft.ru/1/streams?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

{
    "name": "example",
    "url" : "https://example.ru/example/example.m3u8"
}

Формат ответа

{
    "code": Int,                     #Код ответа (200)
    "status": "String",              #Статус ответа (success)
    "stream": {                      #Информация о видепотоке
        "id": "String",              #ID видеопотока
        "user": "String",            #ID пользователя
        "name": "String",            #Название видепотока
        "url": "String",             #URL видепотока
        "is_instant_recording": Bool #Параметр, показывающий, осуществляется или нет в данный момент мгновенная запись видеопотока
    }
}

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

{
    "code": 200,
    "status": "success",
    "stream": {
        "id": "56edc536534b4478d3a83b7f",
        "user": "56bdf4a53f4f716301b09ba3",
        "name": "example",
        "url": "https://example.ru/example/example.m3u8",
        "is_instant_recording": false
    }
}
Описание Метод для получения информации о всех видеопотоках
Структура URL https://api.platformcraft.ru/1/streams
Метод GET
Возвращает Информацию о всех видеопотоках
https://api.platformcraft.ru/1/streams?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

Формат ответа

{
    "code": Int,                         #Код ответа (200)
    "status": "String",                  #Статус ответа (success)
    "streams": [                         #Массив с информацией о видеопотоках
        {
            "id": "String",              #ID видеопотока
            "user": "String",            #ID пользователя
            "name": "String",            #Название видепотока
            "url": "String",             #URL видепотока
            "is_instant_recording": Bool #Параметр, показывающий, осуществляется или нет в данный момент мгновенная запись видеопотока
        },
        ...
    ]
}

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

{
    "code": 200,
    "status": "success",
    "streams": [
        {
            "id": "56edc536534b4478d3a83b7f",
            "user": "56bdf4a53f4f716301b09ba3",
            "name": "example",
            "url": "https://example.ru/example/example.m3u8",
            "is_instant_recording": false
        }
    ]
}
Описание Метод для получения информации о видеопотоке
Структура URL https://api.platformcraft.ru/1/streams/{:stream_id}
Метод GET
Возвращает Информацию о видеопотоке
https://api.platformcraft.ru/1/streams/56cec7e2fa63afd0f843567d?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

Формат ответа

{
    "code": Int,                     #Код ответа (200)
    "status": "String",              #Статус ответа (success)
    "stream": {                      #Информация о видепотоке
        "id": "String",              #ID видеопотока
        "user": "String",            #ID пользователя
        "name": "String",            #Название видепотока
        "url": "String",             #URL видепотока
        "is_instant_recording": Bool #Параметр, показывающий, осуществляется или нет в данный момент мгновенная запись видеопотока
    }
}

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

{
    "code": 200,
    "status": "success",
    "stream": {
        "id": "56edc536534b4478d3a83b7f",
        "user": "56bdf4a53f4f716301b09ba3",
        "name": "example",
        "url": "https://example.ru/example/example.m3u8",
        "is_instant_recording": false
    }
}
Описание Метод для удаления видеопотока
Структура URL https://api.platformcraft.ru/1/streams/{:stream_id}
Метод DELETE
Возвращает Статус удаления видеопотока
https://api.platformcraft.ru/1/streams/56cec7e2fa63afd0f843567d?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

Формат ответа

{
    "code": Int,        #Код ответа (200)
    "status": "String"  #Статус ответа (success)
}

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

{
    "code": 200,
    "status": "success"
}
Описание Метод для старта мгновенной записи видеопотока
Структура URL https://api.platformcraft.ru/1/streams/rec/instant/start/{:stream_id}
Метод POST
Тип тела запроса JSON
Возвращает Статус старта мгновенной записи видеопотока
https://api.platformcraft.ru/1/streams/rec/instant/start/56cec7e2fa63afd0f843567d?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

Формат тела запроса

{
    "name":         "String", # Название записи
    "stop_timeout": Int       # таймаут остановки записи в секундах (по умолчанию 1800, т.е. 30 минут).
}

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

{
    "name":         "example.m3u8",
    "stop_timeout": 3600
}

Формат ответа

{
    "code": Int,        #Код ответа (200)
    "status": "String"  #Статус ответа (success)
}

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

{
    "code": 200,
    "status": "success"
}
Описание Метод для остановки мгновенной записи видеопотока
Структура URL https://api.platformcraft.ru/1/streams/rec/instant/stop/{:stream_id}
Метод POST
Возвращает Статус остановки мгновенной записи видеопотока
https://api.platformcraft.ru/1/streams/rec/instant/stop/56cec7e2fa63afd0f843567d?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

Формат ответа

{
    "code":   Int,      #Код ответа (200)
    "status": "String", #Статус ответа (success)
    "files":[           #Массив с информацией о записанных файлах
        {
            "id":           "String", #ID объекта
            "name":         "String", #Название файла
            "path":         "String", #Путь к файлу
            "size":         Int,      #Размер файла (в байтах)
            "content_type": "String", #Тип контента файла
            "create_date":  "String", #Дата создания файла
            "latest_update":"String", #Дата последнего изменения файла
            "resource_url": "String", #URL для получения детальной информации о файле
            "video":        "String", #Ссылка на плеер
            "cdn_url":      "String", #Прямая ссылка на файл
            "status":       "String"  #Статус объекта
        },
        ...
    ]
}

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

{
    "code": 200,
    "status": "success",
    "files":[
        {
            "id":"56f19106534b44355afd96e1",
            "name":"test 20160322.mp4",
            "path":"/records/test 20160322.mp4",
            "size":610768,
            "content_type":"video/mp4",
            "create_date":"22.03.2016T21:37:58",
            "latest_update":"",
            "resource_url":"api.platformcraft.ru/objects/56f19106534b44355afd96e1",
            "video":"video.platformcraft.ru/56f19106534b44355afd96e1",
            "cdn_url":"cdn.platformcraft.ru/test/records/test%2020160322.mp4",
            "status":"ok"
        }
    ]
}
Описание Метод для создания записи видеопотока по расписанию
Структура URL https://api.platformcraft.ru/1/streams/rec/schedule/new/{:stream_id}
Метод POST
Тип тела запроса JSON
Возвращает Статус создания записи видеопотока по расписанию

Формат тела запроса

{
    "name": "String",       #Название записи
    "start_time": "String", #Время начала записи в формате DD.MM.YYYYTHH:mm:ss
    "stop_time": "String",  #Время окончания записи в формате DD.MM.YYYYTHH:mm:ss
    "stop_timeout": Int     # таймаут остановки записи в секундах (по умолчанию 1800, т.е. 30 минут).
}

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

https://api.platformcraft.ru/1/streams/rec/schedule/new/56cec7e2fa63afd0f843567d?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

{
    "name": "example",
    "start_time": "19.03.2016T23:43:55",
    "stop_time": "19.03.2016T23:44:55",
    "stop_timeout": 3600
}

Формат ответа

{
    "code": Int,          #Код ответа (200)
    "status": "String",   #Статус ответа (success)
    "record_id": "String" #ID записи
}

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

{
    "code": 200,
    "status": "success",
    "record_id": "5624cd5ac9a492f8b979b63f"
}
Описание Метод для получения информации о записи
Структура URL https://api.platformcraft.ru/1/streams/rec/{:record_id}
Метод GET
Возвращает Информацию о записи
https://api.platformcraft.ru/1/streams/rec/5624cd5ac9a492f8b979b63f?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

Формат ответа

{
    "code":   Int,           # Код ответа (200)
    "status": "String",      # Статус ответа (success)
    "record": {              # Запись
        "status": "String",  # Статус записи ("Wait", "Progress", "Finish")
        "files": ["String"]  # Массив id записанных видеофайлов
    }
}

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

{
    "code": 200,
    "status": "success",
    "record": {
        "status": "Finish",
        "files": ["5bd37808534b441c4acf7415"]
    }
}
Описание Метод для удаления записи видеопотока по расписанию
Структура URL https://api.platformcraft.ru/1/streams/rec/schedule/del/{:stream_id}/{:record_id}
Метод DELETE
Возвращает Статус удаления записи видеопотока по расписанию
https://api.platformcraft.ru/1/streams/rec/schedule/del/56cec7e2fa63afd0f843567d/5624cd5ac9a492f8b979b63f?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

Формат ответа

{
    "code": Int,        #Код ответа (200)
    "status": "String"  #Статус ответа (success)
}

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

{
    "code": 200,
    "status": "success"
}

/players

Описание Метод для создания плеера
Структура URL https://api.platformcraft.ru/1/players
Метод POST
Тип тела запроса JSON
Возвращает Информацию о созданном плеере

Формат тела запроса

{
        "name":             "String", #имя плеера (обязательный параметр)
        "folder":           "String", #директория плеера (необязательный параметр)
        "videos": {                   #словарь объектов видео (обязательный параметр)
            "String": "String",       #название видео в плеере: id объекта видео (обязательно хотя бы одно поле)
            ...
        },
        "screen_shot_id":   "String",         #id объекта скриншота (необязательный параметр)
        "vast_ad_tag_url" : "String",         #VAST ad tag url (необязательный параметр)
        "description": "String",              #описание плеера (необязательный параметр, не более 1500 символов)
        "tags": ["String",...],               #список тегов (необязательный параметр)
        "geo": map["String"]map["String"]Bool #геоограничения
}

Формат поля geo

geo - словарь вида map[continent]map[country]true, где continent, country - ISO коды континентов и стран соответственно (например, EU и RU). Если country == "ALL", то разрешен доступ ко всем странам внутри континента.
Примеры:
geo = null { без ограничений }
geo = {"EU":{"ALL": true}, "NA":{"ALL": true}} { разрешить доступ в Европе и Северной Америке }
geo = {"EU": {"RU": true}} { разрешить только в России }

Примечание: все коды континентов и стран должны быть указаны с большой буквы.

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

https://api.platformcraft.ru/1/players?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

{
    "name":"player_name",
    "folder": "/test",
    "videos":{
        "360":"566bf3e9534b447f07e2baef",
        "480":"5624cd5ac9a492f8b979b63f"
    },
    "screen_shot_id":"56238961c9a492f8b979b633",
    "vast_ad_tag_url":"http://example.com/example-vast.xml",
    "description": "test description",
    "tags": ["tag1","tag2"],
    "geo": {"EU": {"RU": true}}
}

Формат ответа

{
    "code": Int,                     #код ответа (200)
    "status": "String",              #статус ответа (success)
    "player": {                      #информация о плеере
        "id": "String",              #id плеера
        "name": "String",            #имя плеера
        "path": "String",            #путь к плееру
        "is_dir": Bool,              #папка (true) или плеер (false)
        "videos": {                  #словарь ссылок на видео
            "String": "String",      #название видео в плеере: ссылка на видео
            ...
        },
        "screen_shot_url": "String",          #ссылка на скриншот
        "vast_ad_tag_url": "String",          #VAST ad tag url
        "create_date": "String",              #дата создания плеера
        "href": "String",                     #ссылка на плеер
        "frame_tag": "String",                #код вставки плеера
        "description": "String",              #описание плеера
        "tags": ["String",...],               #список тегов
        "geo": map["String"]map["String"]Bool #геоограничения
    }
}

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

{
    "code": 200,
    "status": "success",
    "player": {
        "id": "567d3643534b4474087c221d",
        "name": "player_name",
        "path": "/test/player_name",
        "is_dir": false,
        "videos": {
            360: "cdn.platformcraft.ru/alex/example_360.mp4"
            480: "cdn.platformcraft.ru/alex/example_480.mp4"
        },
        "screen_shot_url": "cdn.platformcraft.ru/alex/example.jpg",
        "vast_ad_tag_url": "http://example.com/example-vast.xml",
        "create_date": "25.12.2015T15:27:47"
        "href": "video.platformcraft.ru/embed/567d3643534b4474087c221d",
        "frame_tag": "<iframe width="558" height="264" src="video.platformcraft.ru/embed/567d3643534b4474087c221d" frameBorder="0" scrolling="no" allowFullScreen></iframe>",
        "description": "test description",
        "tags": ["tag1","tag2"],
        "geo": {"EU": {"RU": true}}
    }
}
Описание Метод для получения списков всех плееров
Структура URL https://api.platformcraft.ru/1/players
Метод GET
Возвращает Список всех плееров
Параметры фильтрации
folder Директория, из которой нужно получить плееры. Пример: "/test". Если параметр не указан, сканирование файлов будет осуществляться по всем директориям аккаунта. Необязательный.
name Имя плеера. Пример: "test". Необязательный.
show_folders Показывать папки (show_folders=true - показывать папки наряду с плеерами). Необязательный.
Параметры пагинации
limit Количество плееров на одной странице. Необязательный, при отсутствии параметра в запросе возвращаются все плееры пользователя.
start Какое количество плееров в списке необходимо пропустить. Необязательный, учитывается только при положительном значении параметра limit.
pagingts Unix-время. Возвращаются только те плееры, время создания которых меньше или равно времени, соответствующему pagingts. Необязательный, учитывается только при положительном значении параметра limit.
https://api.platformcraft.ru/1/players?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571&limit=2

Формат ответа

{
    "code": Int,                         #код ответа (200)
    "status": "String",                  #статус ответа (success)
    "count": "String",                   #количество плееров
    "count_on_page": "String",           #количество плееров на странице
    "players": [                         #список плееров
        {                                #информация о плеере
            "id": "String",              #id плеера
            "name": "String",            #имя плеера
            "path": "String",            #путь к плееру
            "is_dir": Bool,              #папка (true) или плеер (false)
            "videos": {                  #словарь ссылок на видео
                "String": "String",      #название видео в плеере: ссылка на видео
                ...
            },
            "screen_shot_url": "String",          #ссылка на скриншот
            "vast_ad_tag_url": "String",          #VAST ad tag url
            "create_date": "String",              #дата создания плеера
            "href": "String",                     #ссылка на плеер
            "frame_tag": "String",                #код вставки плеера
            "description": "String",              #описание плеера
            "tags": ["String",...],               #список тегов
            "geo": map["String"]map["String"]Bool #геоограничения
        }
    ],
    "paging": {
        "next": "String",                #ссылка на след. страницу. null, если текущая страница последняя. Важно: не забывайте подписывать запрос next при отправке на сервер (см. https://doc.platformcraft.ru/filespot/api/#_1)
        "prev": "String"                 #ссылка на пред. страницу. null, если текущая страница первая. Важно: не забывайте подписывать запрос prev при отправке на сервер (см. https://doc.platformcraft.ru/filespot/api/#_1)
    }
}

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

{
    "code": 200,
    "status": "success",
    "count": 4,
    "count_on_page": 2,
    "players": [
        {
            "id": "567d3643534b4474087c221d",
            "name": "player_name",
            "path": "/test/player_name"
            "is_dir": false,
            "videos": {
                360: "cdn.platformcraft.ru/alex/example_360.mp4"
                480: "cdn.platformcraft.ru/alex/example_480.mp4"
            },
            "screen_shot_url": "cdn.platformcraft.ru/alex/example.jpg",
            "vast_ad_tag_url": "http://example.com/example-vast.xml",
            "create_date": "25.12.2015T15:27:47"
            "href": "video.platformcraft.ru/embed/567d3643534b4474087c221d",
            "frame_tag": "<iframe width="558" height="264" src="video.platformcraft.ru/embed/567d3643534b4474087c221d" frameBorder="0" scrolling="no" allowFullScreen></iframe>",
            "description": "test player",
            "tags": ["test"],
            "geo": {"EU": {"RU": true}}
        },
        {
            "id": "567d3643534b4474087c221e",
            "name": "player_name_1",
            "path": "/player_name_1",
            "is_dir": false,
            "videos": {
                360: "cdn.platformcraft.ru/alex/example_360.mp4"
                480: "cdn.platformcraft.ru/alex/example_480.mp4"
            },
            "screen_shot_url": "cdn.platformcraft.ru/alex/example.jpg",
            "vast_ad_tag_url": "http://example.com/example-vast.xml",
            "create_date": "25.12.2015T15:27:48"
            "href": "video.platformcraft.ru/embed/567d3643534b4474087c221e",
            "frame_tag": "<iframe width="558" height="264" src="video.platformcraft.ru/embed/567d3643534b4474087c221e" frameBorder="0" scrolling="no" allowFullScreen></iframe>",
            "description": "test player",
            "tags": [],
            "geo": null
        }
    ],
    "paging": {
        "next": "api.platformcraft.ru/1/players?pagingts=1525858519&limit=2&start=2",
        "prev": null
    }
}
Описание Метод для получения информации о плеере
Структура URL https://api.platformcraft.ru/1/players/{:player_id}
Метод GET
Возвращает Информацию о плеере
https://api.platformcraft.ru/1/players/567d3643534b4474087c221d?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571

Формат ответа

{
    "code": Int,                     #код ответа (200)
    "status": "String",              #статус ответа (success)
    "player": {                      #информация о плеере
        "id": "String",              #id плеера
        "name": "String",            #имя плеера
        "path": "String",            #путь к плееру
        "is_dir": Bool,              #папка (true) или плеер (false)
        "videos": {                  #словарь ссылок на видео
            "String": "String",      #название видео в плеере: ссылка на видео
            ...
        },
        "screen_shot_url": "String",          #ссылка на скриншот
        "vast_ad_tag_url": "String",          #VAST ad tag url
        "create_date": "String",              #дата создания плеера
        "href": "String",                     #ссылка на плеер
        "frame_tag": "String",                #код вставки плеера
        "description": "String",              #описание плеера
        "tags": ["String",...],               #теги
        "geo": map["String"]map["String"]Bool #геоограничения
    }
}

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

{
    "code": 200,
    "status": "success",
    "player": {
        "id": "567d3643534b4474087c221d",
        "name": "player_name",
        "path": "/test/player_name",
        "is_dir": false,
        "videos": {
            360: "cdn.platformcraft.ru/alex/example_360.mp4"
            480: "cdn.platformcraft.ru/alex/example_480.mp4"
        },
        "screen_shot_url": "cdn.platformcraft.ru/alex/example.jpg",
        "vast_ad_tag_url": "http://example.com/example-vast.xml",
        "create_date": "25.12.2015T15:27:47"
        "href": "video.platformcraft.ru/embed/567d3643534b4474087c221d",
        "frame_tag": "<iframe width="558" height="264" src="video.platformcraft.ru/embed/567d3643534b4474087c221d" frameBorder="0" scrolling="no" allowFullScreen></iframe>",
        "description": "test player",
        "tags":["tag1","tag2"],
        "geo": {"EU": {"RU": true}}
    }
}
Описание Метод для удаления плеера
Структура URL https://api.platformcraft.ru/1/players/{:player_id}
Метод DELETE
Возвращает Статус удаления плеера

Дополнительные параметры

delete_related - удалять или не удалять файлы, связанные с плеером (true/false)

https://api.platformcraft.ru/1/players/567d3643534b4474087c221d?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571&delete_related=true

Формат ответа

{
    "code": Int,       #код ответа (200)
    "status": "String" #статус ответа (success)
}

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

{
    "code": 200,
    "status": "success"
}
Описание Изменяет плеер с заданным id
Структура URL https://api.platformcraft.ru/1/players/:id
Метод PUT
Тип тела запроса JSON
Возвращает Статус операции изменения плеера

Формат тела запроса

{
    "name":           "String",   #новое имя плеера
    "folder":           "String", #новая директория плеера, пример: "/test". Параметр игнорируется при пустом значении
    "videos": {                   #словарь объектов видео
        "String": "String",       #название видео в плеере: id объекта видео
        ...
    },
    "screen_shot_id": "String",           #id объекта скриншота
    "description": "String",              #описание плеера (не более 1500 символов)
    "tags": ["String",...],               #список тегов
    "geo": map["String"]map["String"]Bool #геоограничения
}

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

{
    "code": 200,
    "status": "success",
}

/download

Описание Метод для создания задачи на загрузку файла по URL
Структура URL https://api.platformcraft.ru/1/download
Метод POST
Возвращает Статус постановки задачи
Примечание Максимальное число одновременно активных задач: 200
Параметры
url URL загружаемого файла. Пример: "http://test-domain.ru/test/test.mp4". Обязательный параметр.
path Директория загрузки файла. Пример: "/test". При отсутствии этого параметра загружаемые файлы размещаются в корневой директории.
name Имя файла. Пример: "test.mp4". При отсутствии этого параметра имя файла определяется автоматически.
Параметры для автоперекодирования и автоплеера
autoencoding Автоматическая конвертация видеофайла (возможные значения: true, false). Необязательный, учитывается только для видеофайлов. Параметр игнорируется для пользователей, не подписанных на услугу конвертации видеофайлов. Параметр игнорируется, если разрешение исходного видео меньше или равно разрешению получаемого видео.
presets Идентификаторы пресетов для автоперекодирования, разделенные ",". Необязательный, учитывается только при autoencoding=true. Пример: presets=566b0fbf044dfe64f2000002,566b0fbf044dfe64f2000003
del_original Удалить оригинальный файл после автоперекодирования (возможные значения: true, false). Необязательный, учитывается только при autoencoding=true.
autoplayer Автоматическое создание плеера (возможные значения: true, false). Необязательный, учитывается только для видеофайлов. Если autoencoding=false, плеер будет создан из одного оригинального файла. Если autoencoding=true, то плеер будет создан из перекодированных видеофайлов.
    https://api.platformcraft.ru/1/download?apiuserid=test&timestamp=1450342665&hash=217ea22038abe3a16a2b0284e7b3d9a4487013ed9e832418befc49886a27d571&url=http://test-domain.ru/test/test.mp4&path=/test

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

{
    "code":         200,
    "status":       "success",
    "message":      "Task create success.",
    "active_tasks": 1,
    "task_id":      "56ea79e2534b4423135ebfaa"
}

/download_tasks

Описание Метод для получения списка задач на загрузку файлов
Структура URL https://api.platformcraft.ru/1/download_tasks
Метод GET
Возвращает Список задач
Параметры фильтрации
status Статус задачи (Возможные значения: Progress, Completed, Error). Необязательный.
start Временная метка (timestamp) нижней границы начала выполнения задачи. Необязательный.
end Временная метка (timestamp) верхнеий границы начала выполнения задачи. Необязательный.
Параметры сортировки
sort Параметр сортировки (необязательный). Возможные значения:
"time" - сортировка по времени (по возрастанию).
"-time" - сортировка по времени (по убыванию).
"status" - сортировка по статусу (по возрастанию).
"-status" - сортировка по статусу (по убыванию).
"lock" - сортировка по полю `lock` (по возрастанию).
"-lock" - сортировка по полю `lock` (по убыванию).
Параметры пагинации
limit Количество задач на одной странице. Необязательный. Для запроса следующей страницы нужно использовать url, заключенный в поле "next" ответа сервера
from Маркер начала следующей страницы (необязательный). Параметр "from" генерируется сервером автоматически в поле ответа "next".

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

{
    "code": 200,
    "status": "success",
    "count": 5,             # общее количество задач, удовлетворяющих параметрам запроса
    "count_on_page": 2,     # количество задач на странице
    "next": "api.platformcraft.ru/1/download_tasks?limit=2&from=57011e2a534b44741fc67880", # запрос следующей страницы (поле отсутствует, если следующей страницы нет)
    "tasks": [
        {
            "id": "56365b04044dfe6917000002",
            "category": "download",
            "title": "Download test1.mp4",
            "body": "Please wait.",
            "status": "Progress",
            "time_start": "01.11.2015T21:33:40",
            "time_finish": "",
            "lock": true
        },
        {
            "id": "57011e2a534b44741fc67880"
            "category": "download"
            "title": "Download abc.mp4"
            "body": "Download success."
            "status": "Completed"
            "time_start": "03.04.2016T16:44:10"
            "time_finish": "03.04.2016T16:44:11"
            "lock": false
        }
    ]
}
Описание Метод для получения информации о задаче на загрузку файла
Структура URL https://api.platformcraft.ru/1/download_tasks/{:task_id}
Метод GET
Возвращает Информацию о задаче

Формат ответа

{
    "code":   Int,        #код ответа
    "files":  ["String"], #массив ID загруженных файлов
    "status": "String",   #статус ответа
    "task": {
        "id":          "String" #ID задачи
        "category":    "String" #тип задачи
        "title":       "String" #название задачи
        "body":        "String" #информация о задаче
        "status":      "String" #статус задачи
        "time_start":  "String" #время начала
        "time_finish": "String" #время окончания
        "lock":        Bool     #блокировка
    }
}

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

{
    "code": 200,
    "files":["56ea7c4e534b44353536586c"],
    "status": "success",
    "task": {
        "id": "57011e2a534b44741fc67880"
        "category": "download"
        "title": "Download abc.mp4"
        "body": "Download success."
        "status": "Completed"
        "time_start": "03.04.2016T16:44:10"
        "time_finish": "03.04.2016T16:44:11"
        "lock": false
    }
}
Описание Метод для удаления задачи из очереди (удалить можно только незаблокированную задачу)
Структура URL https://api.platformcraft.ru/1/download_tasks/{:task_id}
Метод DELETE
Возвращает Статус удаления задачи

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

{
    "code": 200,
    "message": "Task delete success.",
    "status": "success"
}

/transcoder/presets

Описание Метод для получения списка доступных форматов для перекодирования
Структура URL https://api.platformcraft.ru/1/transcoder/presets
Метод GET
Возвращает Список форматов для перекодирования

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

{
    "code": 200,
    "count": 3,
    "presets": [
        {
            "id": "566b0fbf044dfe64f2000002",
            "name": "System preset: Generic 1080p",
            "container": "mp4",
            "video": {
                "codec": "H.264",
                "bit_rate": "5400",
                "fps": "29.97",
                "max_width": "1920",
                "max_height": "1080"
            },
            "audio": {
                "codec": "AAC",
                "bit_rate": "160",
                "sample_rate": "44100",
                "channels": "2"
            },
            watermarks: {
                BottomLeft: {
                    horizontal_align: "Left",
                    horizontal_offset: "10%",
                    vertical_align: "Bottom",
                    vertical_offset: "10%",
                    max_height: "10%",
                    max_width: "10%",
                    opacity: "100",
                    sizing_policy: "ShrinkToFit"
                },
                BottomRight: {
                    horizontal_align: "Right",
                    horizontal_offset: "10%",
                    vertical_align: "Bottom",
                    vertical_offset: "10%",
                    max_height: "10%",
                    max_width: "10%",
                    opacity: "100",
                    sizing_policy: "ShrinkToFit"
                },
                Full: {
                    horizontal_align: "Left",
                    horizontal_offset: "0%",
                    vertical_align: "Top",
                    vertical_offset: "0%",
                    max_height: "100%",
                    max_width: "100%",
                    opacity: "100",
                    sizing_policy: "Fit"
                },
                TopRight: {
                    horizontal_align: "Right",
                    horizontal_offset: "10%",
                    vertical_align: "Top",
                    vertical_offset: "10%",
                    max_height: "10%",
                    max_width: "10%",
                    opacity: "100",
                    sizing_policy: "ShrinkToFit"
                }
            }
        },
        {
            "id": "566b0fbf044dfe64f2000003",
            "name": "System preset: Generic 720p",
            "container": "mp4",
            "video": {
                "codec": "H.264",
                "bit_rate": "2400",
                "fps": "29.97",
                "max_width": "1280",
                "max_height": "720"
            },
            "audio": {
                "codec": "AAC",
                "bit_rate": "160",
                "sample_rate": "44100",
                "channels": "2"
            },
            watermarks: {...}
        },
        {
            "id": "566b0fbf044dfe64f2000004",
            "name": "System preset: Generic 480p 16:9",
            "container": "mp4",
            "video": {
                "codec": "H.264",
                "bit_rate": "1200",
                "fps": "29.97",
                "max_width": "854",
                "max_height": "480"
            },
            "audio": {
                "codec": "AAC",
                "bit_rate": "128",
                "sample_rate": "44100",
                "channels": "2"
            },
            watermarks: {...}
        }
    ]
}

/transcoder

Описание Метод для создания задачи на перекодирование
Структура URL https://api.platformcraft.ru/1/transcoder/{:object_id}
Метод POST
Тип тела запроса JSON
Возвращает Статус постановки задачи
Примечание Максимальное число задач в очереди: 200. Максимальное количество одновременно выполняемых задач: 2

Формат тела запроса

{
   "presets": ["presetID",...],        # список id форматов для перекодирования. Допустимо пустое поле, если start>0 или duration>0
   "names": {"presetID": "String"},    # словарь вида {"preset_id": "file_name"}, где preset_id - нужный пресет, file_name - требуемое название выходного файла. Параметр позволяет задавать кастомные названия транскодируемым копиям видео
   "path": "String",                   # директория загрузки файла. Необязательный параметр. По умолчанию новые файлы размещаются в директории транскодируемого файла.
   "watermarks": {"String": "String"}, # словарь вида {watermark_id: object_id}, где watermark_id - watermark id, object_id - id картинки (поддерживаемые расширения - .png и .jpg). Необязательный параметр. Добавляет водяной знак на видеофайл. См. метод GET /transcoder/presets для получения информации о watermark_id.
   "del_original": Bool,               # удалять/не удалять оригинальный файл после транскодирования (по умолчанию: false)
   "start": Int,                       # позиция начала транскодирования (количество секунд от начала файла, по умолчанию: 0)
   "duration": Int,                    # длительность транскодирования (в секундах, по умолчанию: 0). Если duration==0, то транскодируется весь файл, начиная с позиции start.
   "show_progress": Bool               # показывать прогрессы выполнения задачи
}

Примечание: Если поле presets пустое и start>0 или duration>0, то метод выполнит обрезку медиафайла без выполнения транскодирования.

Пример тела запроса

{
   "presets": ["5676a27cf9cb101634000002","5676a27cf9cb101634000003"],
   "names": {"5676a27cf9cb101634000002": "test720p.mp4", "5676a27cf9cb101634000003": "test480p.mp4"},
   "path": "/test",
   "watermarks": {"Full": "5adfa939534b446a607d9937"},
   "del_original": false,
   "show_progress": true
}

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

{
    "code":         200,
    "status":       "success",
    "message":      "Task create success.",
    "active_tasks": 2,
    "task_id":      "56ea79e2534b4423135ebfd3"
}
Описание Метод для создания задачи на конкатенацию файлов
Структура URL https://api.platformcraft.ru/1/transcoder?concat
Метод POST
Тип тела запроса JSON
Возвращает Статус постановки задачи

Формат тела запроса

{
   "files": ["String",...], # упорядоченный список id файлов для конкатенации (от 2-х до 20 файлов)
   "path": "String"         # директория загрузки файла. Необязательный параметр. По умолчанию новые файлы размещаются в корневой директории.
   "name": "String"         # имя файла
}

Пример тела запроса

{
    "files": ["5adfa9bc534b446a7f5d3c0c","5ade3ad1534b445140d49539"],
    "path": "/dir",
    "name": "concat.mp4"
}

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

{
    "code":         200,
    "status":       "success",
    "message":      "Task create success.",
    "active_tasks": 2,
    "task_id":      "56ea79e2534b4423135ebfd3"
}
Описание Метод для создания задачи на перекодирование HLS
Структура URL https://api.platformcraft.ru/1/transcoder/hls/{:object_id}
Метод POST
Тип тела запроса JSON
Возвращает Статус постановки задачи

Формат тела запроса

{
   "presets": ["presetID",...], #список id форматов для перекодирования
   "segment_duration": Int      #Длительность сегмента видео в сек. от 1 до 60
}

Пример тела запроса

{
   "presets": ["5693b900534b440cd053f5a5","5693b900534b440cd053f5a3"],
   "segment_duration": 20
}

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

{
    "code":         200,
    "status":       "success",
    "message":      "Task create success.",
    "active_tasks": 2,
    "task_id":      "56ea79e2534b4423135ebfd3"
}
Описание Метод для получения вырезки скриншота в указанный момент времени
Структура URL https://api.platformcraft.ru/1/transcoder/screenshot/{:object_id}
Метод POST
Тип тела запроса application/json
Возвращает Информацию о созданном скриншоте

Формат тела запроса

{
    "position": Float,      # позиция скриншота от начала файла (секунды)
    "name":     "String",   # имя скриншота
    "path":     "String"    # директория загрузки
}

Пример тела запроса

{
    "position": 10.5,
    "name": "screen.jpg",
    "path": "/black/screens"
}

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

{
    "code": 200,
    "status": "success",
    "object": {
        "id": "6087cdb60e47cf6292960fef",
        "name": "screen.jpg",
        "path": "/black/screens/screen.jpg",
        "is_dir": false,
        "size": 47642,
        "content_type": "image/jpeg",
        "create_date": "27.04.2021T11:39:19",
        "resource_url": "api.platformcraft.ru/1/objects/6087cdb60e47cf6292960fef",
        "cdn_url": "cdn.platformcraft.ru/example/black/screens/screen.jpg",
        "private": false,
        "status": "ok",
    },
    "storage": {
        "used": 400587972741,
        "limit": 536870912000
    }
}
Описание Метод для создания задачи на изменение размеров изображения
Структура URL https://api.platformcraft.ru/1/transcoder/image/{:object_id}
Метод POST
Тип тела запроса application/json
Возвращает Статус постановки задачи

Формат тела запроса

{
    "path":     "String"    # директория загрузки
    "name":     "String",   # имя конечного изображения
    "width":    Int,        # ширина конечного изображения (нужно указать хотя бы одно значение `width` или `height`)
    "height":   Int         # высота конечного изображения (нужно указать хотя бы одно значение `width` или `height`)
}

Пример тела запроса

{
    "path":     "/black/images"
    "name":     "test.jpg",
    "width":    200
}

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

{
    "active_tasks": 1,
    "code": 200,
    "message": "Task create success.",
    "status": "success",
    "task_id": "63ca4654534b44c667c9a4c5"
}
Описание Метод для создания задачи на разделение видеофайла на составляющие
Структура URL https://api.platformcraft.ru/1/transcoder?decompose
Метод POST
Тип тела запроса JSON
Возвращает Статус постановки задачи

Формат тела запроса

{
    "file": "String",                       # id входного видеофайла
    "path": "String",                       # папка, в которой будут размещены сгенерированные файлы (если указанная папка не существует, она будет создана автоматически)
    "subtitle_type": "String",              # Тип субтитров (возможные значения: ttml, vtt)
    "subtitle_langs": ["String",...]        # Языки субтитров
}

Пример тела запроса

{
    "file": "5e1bb131ef3db56034d1bfcc",
    "path": "/test",
    "subtitle_type": "ttml",
    "subtitle_langs": ["rus", "eng"]
}

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

{
    "code":         200,
    "status":       "success",
    "message":      "Task create success.",
    "active_tasks": 2,
    "task_id":      "56ea79e2534b4423135ebfd3"
}

/transcoder_tasks

Описание Метод для получения списка задач на перекодирование
Структура URL https://api.platformcraft.ru/1/transcoder_tasks
Метод GET
Возвращает Список задач
Параметры фильтрации
status Статус задачи (Возможные значения: Progress, Completed, Error). Необязательный.
start Временная метка (timestamp) нижней границы начала выполнения задачи. Необязательный.
end Временная метка (timestamp) верхнеий границы начала выполнения задачи. Необязательный.
Параметры сортировки
sort Параметр сортировки (необязательный). Возможные значения:
"time" - сортировка по времени (по возрастанию).
"-time" - сортировка по времени (по убыванию).
"status" - сортировка по статусу (по возрастанию).
"-status" - сортировка по статусу (по убыванию).
"lock" - сортировка по полю `lock` (по возрастанию).
"-lock" - сортировка по полю `lock` (по убыванию).
Параметры пагинации
limit Количество задач на одной странице. Необязательный. Для запроса следующей страницы нужно использовать url, заключенный в поле "next" ответа сервера
from Маркер начала следующей страницы (необязательный). Параметр "from" генерируется сервером автоматически в поле ответа "next".

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

{
    "code": 200,
    "status": "success",
    "count": 5,              # общее количество задач, удовлетворяющих параметрам запроса
    "count_on_page": 3,      # количество задач на странице
    "next": "api.platformcraft.ru/1/transcoder_tasks?limit=3&from=60d1ea97534b4473a74028c2&start=1623834785&end=1636449185",  # запрос следующей страницы (поле отсутствует, если следующей страницы нет)
    "tasks": [
        {
            "id": "56365b04044dfe6917000002",
            "category": "encoding",
            "title": "Encoding Копия test.360p.mp4",
            "body": "Please wait.",
            "status": "Progress",
            "time_start": "01.11.2015T21:33:40",
            "time_finish": "",
            "lock": true,
            "object_id": "5f686d6f534b4443dc236f78",     # id файла-источника
            "out": [
                {
                    "name": "",
                    "duration": 9.288,                   # длительность транскодированного файла
                    "preset": "5825d926702b9371dd9bca44" # пресет, используемый для транскодирования файла. Подробная информация о пресете может быть получена с помощью метода `GET https://api.platformcraft.ru/1/transcoder/presets/{:preset_id}`
                }
        },
        {
            "id": "566b3a9d044dfe7381000002",
            "category": "encoding",
            "title": "Encoding test (480p).mp4",
            "body": "Internal server error. Please try again later.",
            "status": "Error",
            "time_start": "12.12.2015T00:05:33",
            "time_finish": "12.12.2015T00:05:47",
            "lock": false,
            "object_id": "5f686d6f534b4443dc236f78",
            "out": [
                {
                    "name": "",
                    "duration": 9.288,
                    "preset": "5825d926702b9371dd9bca44"
                }
        },
        {
            "id": "566b4173044dfe771c000001",
            "category": "encoding",
            "title": "Encoding test (480p).mp4",
            "body": "Encoding video success.",
            "status": "Completed",
            "time_start": "12.12.2015T00:34:43",
            "time_finish": "12.12.2015T00:35:56",
            "lock": false,
            "object_id": "5f686d6f534b4443dc236f78",
            "out": [
                {
                    "name": "",
                    "duration": 9.288,
                    "preset": "5825d926702b9371dd9bca44"
                }
        }
    ]
}
Описание Метод для получения информации с конкретным ID
Структура URL https://api.platformcraft.ru/1/transcoder_tasks/{:task_id}
Метод GET
Возвращает Информацию о задаче

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

{
    "code": 200,
    "files":["56ea7c4e534b44353536586c"],
    "status": "success",
    "task": {
        "id": "56365b04044dfe6917000002",
        "category": "encoding",
        "title": "Encoding Копия test.360p.mp4",
        "body": "Please wait.",
        "status": "Progress",
        "time_start": "01.11.2015T21:33:40",
        "time_finish": "",
        "lock": true,
    }
    "progress": 50,                              # прогресс транскодирования (%)
    "progress_detailed": {
        "5676a27cf9cb101634000002": 50,          # прогресс транскодирования (%) для пресета
        "5676a27cf9cb101634000003": 60
    }
    "object_id": "5f686d6f534b4443dc236f78",     # id файла-источника
    "out": [
        {
            "name": "",
            "duration": 9.288,                   # длительность транскодированного файла
            "preset": "5825d926702b9371dd9bca44" # пресет, используемый для транскодирования файла. Подробная информация о пресете может быть получена с помощью метода `GET https://api.platformcraft.ru/1/transcoder/presets/{:preset_id}`
        }
}
Описание Метод для получения информации о HLS задаче с конкретным ID
Структура URL https://api.platformcraft.ru/1/transcoder_tasks/hls/{:task_id}
Метод GET
Возвращает Информацию о HLS задаче

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

{
    "code":200,
    "files":{
        "master_playlist":"56ea7c4e534b44353536586c",
        "media":[
            {
                "playlist":"56ea7c4e534b44353536586d",
                "files":[
                    "56ea7c4f534b44353536586e",
                    "56ea7c50534b44353536586f",
                    "56ea7c50534b443535365870"
                ]
            },
            {
                "playlist":"56ea7c55534b443535365878",
                "files":[
                    "56ea7c55534b443535365879",
                    "56ea7c55534b44353536587a",
                    "56ea7c56534b44353536587b"
                ]
            }
        ]
    },
    "status":"success",
    "task":{
        "id":"56ea7c2f534b440c83fe85bc",
        "category":"encoding",
        "title":"Encoding abc.mp4",
        "body":"Encoding video success.",
        "status":"Completed",
        "time_start":"17.03.2016T12:43:11",
        "time_finish":"17.03.2016T12:43:53",
        "lock":false
    }
}
Описание Метод для удаления задачи из очереди (удалить можно только незаблокированную задачу)
Структура URL https://api.platformcraft.ru/1/transcoder_tasks/{:task_id}
Метод DELETE
Возвращает Статус удаления задачи

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

{
    "code": 200,
    "message": "Task delete success.",
    "status": "success"
}

/storage

Описание Метод для получения информации о хранилище
Структура URL https://api.platformcraft.ru/1/storage
Метод GET
Возвращает Информацию об объеме хранения

Формат ответа

{
    "code":     Int,       #код ответа
    "status":   "String",  #статус ответа
    "storage": {
        "used": Int,       #используемый объем хранения (байты)
        "limit": Int       #максимальный объем хранения (байты)
    }
}

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

{
    "code": 200,
    "status": "success",
    "storage": {
        "used": 97537237,
        "limit": 107374182
    }
}

Ошибки

Формат ответа

{
    "code":     Int,       #код ответа
    "status":   "String",  #статус ответа (fail)
    "msg_user": "String",  #описание ошибки
    "msg_dev":  "String",  #детальное описание ошибки
    "doc":      "String",  #ссылка на документацию
    "advanced": "String"   #дополнительная информация
}

Коды ошибок

400 - некорректный запрос,
403 - доступ запрещен,
404 - запрашиваемый ресурс не найден.

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

{
    "code": 400
    "status": "fail"
    "msg_user": "Api ID, timestamp and hash are required."
    "msg_dev": "Check Api id, timestamp and hash."
    "doc": "http://doc.platformcraft.ru/filespot/api/#access"
    "advanced": null
}

Библиотеки

platformcraft-filespot для Ruby