К содержимому

Загрузка файлов

Одним запросом — для скриншотов и коротких видео; по частям — для больших файлов и нестабильной сети. Ссылка на файл есть сразу после загрузки.

Одним запросом

POST /api/v1/uploads принимает multipart/form-data с полем file и необязательными title, tags, visibility, ttl, password и oneTime.

curl -X POST "https://lac.pics/api/v1/uploads" \
  -H "Authorization: Bearer lac_api_YOUR_KEY" \
  -H "Idempotency-Key: capture-2026-09-27-a7f3c1" \
  -F "file=@capture.png" \
  -F "visibility=unlisted"

Изображения: PNG, JPEG, WebP и AVIF. Видео: MP4 и WebM. Тип определяется по первым байтам файла, а не по имени; HEIC не принимается. Размеры и число одновременных загрузок — в разделе Лимиты.

Повтор без дублей

Чтобы безопасно повторять загрузку после сетевой ошибки, передавай Idempotency-Key: случайную строку из 16–128 латинских букв, цифр, _ и - — одну на файл и его параметры.

  • Не меньше 24 часов повтор с тем же ключом вернёт тот же файл (201) и не продлит его срок.
  • 409 с Retry-After — прошлая попытка ещё идёт; подожди и повтори с тем же ключом.
  • 409 без Retry-After — с этим ключом загружали другой файл или другие параметры.
  • 410 — файл этой загрузки уже удалён или истёк.

Обработка видео

Видео сначала получает статус PROCESSING. Проверяй mediaStatus пакетным методом media-status: после READY доступны воспроизведение и постер. FAILED приходит с причиной в mediaError; обработку можно повторить.

Сервер не пережимает видео: принимает до 30 минут и до 3840×2160 в любой ориентации, H.264 + AAC в MP4 или VP9/AV1 + Opus в WebM, с потолком битрейта (limits.video в профиле аккаунта); остальное — 415 VIDEO_NOT_SUITABLE, такое сжимают приложение lacuna или сайт до отправки. Хранится одна версия: её показывают и скачивают. До READY загруженный файл скачивает только владелец — с ?download=1.

По частям

Для больших файлов и нестабильной сети файл делится на части по 2 МБ (не больше 50). Каждая часть отправляется отдельно, а оборванная загрузка продолжается с того места, где остановилась.

  1. Посчитай SHA-256 каждой части и отпечаток файла.
  2. Начни загрузку: POST /uploads/resumable с Idempotency-Key.
  3. Отправь части: PUT …/parts/{index}, до 3 одновременно.
  4. Заверши: POST …/complete с completeKey и настройками ссылки — ответ вернёт готовый файл.

Если ответ на завершение потерялся, прочитай состояние: в content будет файл. Незавершённых загрузок у аккаунта может быть до 10, каждая живёт 24 часа.

Субтитры видео

К готовому видео можно приложить субтитры SRT или WebVTT либо расшифровку текстом — одна дорожка на видео. Её видят все, кому доступно само видео. Распознавания речи нет: текст готовишь ты.

Из своей программы или скрипта

Подойдёт любая программа или скрипт, который умеет отправлять файл HTTP-запросом с заголовком: программа для скриншотов с «пользовательским загрузчиком», скрипт по расписанию, свой сервер.

  1. Создай ключ с пресетом «Только загрузка» в кабинете: API. Ему хватит права content:write.
  2. Укажи в программе адрес, заголовок и поле файла из таблицы ниже.
  3. Ссылку на файл программа берёт из ответа: поле content.url.
НастройкаЗначение
МетодPOST
Адресhttps://lac.pics/api/v1/uploads
ЗаголовокAuthorization: Bearer lac_api_… — подробнее
Телоmultipart/form-data, файл — в поле file
Ссылка из ответаcontent.url (JSON)

Ключ даёт доступ к аккаунту — храни его как пароль и не вставляй в адрес запроса. Кто откроет файл, решает поле visibility: unlisted — все, у кого есть ссылка, private — только ты; без него действует настройка аккаунта.

Методы

Загрузка файлов · API lacuna