Загрузка файлов
/v1/storage/upload используется только для подготовки файлов к последующим API-запросам. Endpoint возвращает публичный URL, а уже этот URL передается в параметры модели: imageUrls, imageUrl, audioUrl, videoUrl или другое поле, которое явно указано на странице конкретной модели.
Контракт
POST https://api.mashagpt.ru/v1/storage/uploadx-api-key. Session/Bearer тоже поддерживается приложением, но для внешних API-интеграций используйте именно x-api-key.multipart/form-data с одним полем file. За один запрос загружается один файл.{"url":"https://static.mashagpt.ru/..."}. Сохраните этот URL и передайте его в запрос модели.?preserveFormat=true. Используйте, когда downstream-модель требует исходный JPEG/PNG/MOV/MP4 формат. Без него небольшие изображения могут быть оптимизированы в WebP.Правильная загрузка
Отправляйте настоящий файл как multipart-part. Не выставляйте заголовок Content-Type вручную: HTTP-клиент сам добавит boundary для multipart-запроса.
curl -X POST "https://api.mashagpt.ru/v1/storage/upload" \
-H "x-api-key: YOUR_API_KEY" \
-F "file=@./reference.png"const input = document.querySelector('input[type="file"]');
const file = input.files[0];
const form = new FormData();
form.append("file", file, file.name);
const uploadResponse = await fetch("https://api.mashagpt.ru/v1/storage/upload", {
method: "POST",
headers: {
"x-api-key": apiKey,
},
body: form,
});
if (!uploadResponse.ok) {
throw new Error(await uploadResponse.text());
}
const { url } = await uploadResponse.json();File из input, а сгенерированный бинарный контент, оберните его в File с нормальным именем и MIME: например new File([bytes], "reference.png", { type: "image/png" }). Не отправляйте строку blob:..., data:... или base64 в JSON.Как использовать URL
После загрузки в JSON-запрос модели передается только URL из ответа storage. Название параметра зависит от модели и указано в её документации.
const taskResponse = await fetch("https://api.mashagpt.ru/v1/tasks/nano-banana-pro", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": apiKey,
},
body: JSON.stringify({
prompt: "Сделай продуктовый баннер в стиле референса",
imageUrls: [url],
resolution: "2K",
aspectRatio: "16:9",
}),
});blob:http://localhost/..., file:///Users/..., data:image/png;base64,... и сырые байты внутри JSON не являются публичными URL. Модель их не скачает. Сначала загрузите файл через /v1/storage/upload и используйте полученный https://static.mashagpt.ru/....Поддерживаемые типы
MIME определяется по загруженной части и имени файла. Если отправить файл без имени, без MIME или с неподдерживаемым типом, API вернет ошибку вроде Mimetype is required или Unsupported content type.