Байты файла по подписанной ссылке

GEThttps://api.souz.ai/v1/files/{id}/{filename}

Ссылка из url файла; ключ не нужен — подпись и есть авторизация. Работают HEAD, Range, If-None-Match; ?download=1 отдаёт как вложение. Хост — media.souz.ai, CORS *: файл можно встраивать на любые страницы.

Параметры пути

idstringобязательно

Id файла.

Шаблон: ^file_
Пример: "file_9f8e7d6c5b4a"
filenamestringобязательно

Параметры запроса

expinteger · int64обязательно

До какого момента (unix-секунды) действует ссылка.

sigstringобязательно

Подпись ссылки.

downloadstring

1 — отдать как вложение (Content-Disposition: attachment).

Значения: 1

Заголовки

Rangestring

Часть файла, bytes=начало-конец — ответ 206.

Ответы

200Байты файла; тип — тот, что в `content_type` файла.
application/json
application/octet-stream
audio/mpeg
audio/wav
image/jpeg
image/png
image/webp
video/mp4
video/quicktime
206Запрошенный `Range`.
application/json
application/octet-stream
audio/mpeg
audio/wav
image/jpeg
image/png
image/webp
video/mp4
video/quicktime
304Не изменилось с прошлого раза: `If-None-Match` совпал с `ETag`.
400Запрос отклонён; `error.detail[]` называет поля и допустимые значения.
application/json
403Нельзя: у ключа не тот вид (модели запускает API-ключ, аккаунт — ключ управления), у роли

Нельзя: у ключа не тот вид (модели запускает API-ключ, аккаунт — ключ управления), у роли участника нет права или подпись ссылки на файл не сходится. detail[].reason говорит, что именно: requires_api_key, requires_management_key, cabinet_only (только в кабинете), insufficient_role (в allowed — роли, которым можно), not_key_author (секрет ключа открывает только тот, кто его создал).

application/json
404Нет такого объекта у этого аккаунта.
application/json
410Срок жизни файла вышел, байты удалены.
application/json