curl --request POST \
--url https://toapis.com/v1/uploads/images \
--header 'Authorization: Bearer <token>' \
--form 'file=@/path/to/your/image.jpg'
import requests
# Загрузка изображения
with open('image.jpg', 'rb') as f:
response = requests.post(
"https://toapis.com/v1/uploads/images",
headers={
"Authorization": "Bearer your-ToAPIs-key"
},
files={
"file": f
}
)
result = response.json()
image_url = result['data']['url']
print(f"URL изображения: {image_url}")
# Использование загруженного изображения для генерации
response = requests.post(
"https://toapis.com/v1/images/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json"
},
json={
"model": "gemini-3-pro-image-preview",
"prompt": "Создать вариацию на основе этого изображения",
"image_urls": [{"url": image_url}]
}
)
(async () => {
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = 'image/*';
fileInput.click();
await new Promise(resolve => fileInput.onchange = resolve);
// 上传图片(已验证成功)
const formData = new FormData();
formData.append('file', fileInput.files[0]);
const uploadResponse = await fetch('https://toapis.com/v1/uploads/images', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key' // 替换为你的实际API密钥
},
body: formData
});
const uploadResult = await uploadResponse.json();
const imageUrl = uploadResult.data.url;
console.log(`图片 URL: ${imageUrl}`);
// 使用上传的图片进行生成(仅修改image_urls格式,解决400)
const genResponse = await fetch('https://toapis.com/v1/images/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key', // 替换为你的实际API密钥
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'gemini-3-pro-image-preview',
prompt: '基于这张图片创作变体',
image_urls: [imageUrl]
})
});
const genResult = await genResponse.json();
console.log('生成结果:', genResult);
})();
{
"success": true,
"message": "",
"data": {
"id": "upload_abc12345",
"url": "https://files.toapis.com/uploads/123/1737568800_abc12345.jpg",
"mime_type": "image/jpeg",
"size": 89234
}
}
{
"success": false,
"message": "Unsupported image type. Allowed: JPEG, PNG, WebP, GIF"
}
{
"success": false,
"message": "Image too large. Maximum size is 10MB"
}
Загрузка файлов
Загрузка изображения
Загрузите изображения для получения URL, используемых в API генерации изображений/видео
POST
/
v1
/
uploads
/
images
curl --request POST \
--url https://toapis.com/v1/uploads/images \
--header 'Authorization: Bearer <token>' \
--form 'file=@/path/to/your/image.jpg'
import requests
# Загрузка изображения
with open('image.jpg', 'rb') as f:
response = requests.post(
"https://toapis.com/v1/uploads/images",
headers={
"Authorization": "Bearer your-ToAPIs-key"
},
files={
"file": f
}
)
result = response.json()
image_url = result['data']['url']
print(f"URL изображения: {image_url}")
# Использование загруженного изображения для генерации
response = requests.post(
"https://toapis.com/v1/images/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json"
},
json={
"model": "gemini-3-pro-image-preview",
"prompt": "Создать вариацию на основе этого изображения",
"image_urls": [{"url": image_url}]
}
)
(async () => {
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = 'image/*';
fileInput.click();
await new Promise(resolve => fileInput.onchange = resolve);
// 上传图片(已验证成功)
const formData = new FormData();
formData.append('file', fileInput.files[0]);
const uploadResponse = await fetch('https://toapis.com/v1/uploads/images', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key' // 替换为你的实际API密钥
},
body: formData
});
const uploadResult = await uploadResponse.json();
const imageUrl = uploadResult.data.url;
console.log(`图片 URL: ${imageUrl}`);
// 使用上传的图片进行生成(仅修改image_urls格式,解决400)
const genResponse = await fetch('https://toapis.com/v1/images/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key', // 替换为你的实际API密钥
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'gemini-3-pro-image-preview',
prompt: '基于这张图片创作变体',
image_urls: [imageUrl]
})
});
const genResult = await genResponse.json();
console.log('生成结果:', genResult);
})();
{
"success": true,
"message": "",
"data": {
"id": "upload_abc12345",
"url": "https://files.toapis.com/uploads/123/1737568800_abc12345.jpg",
"mime_type": "image/jpeg",
"size": 89234
}
}
{
"success": false,
"message": "Unsupported image type. Allowed: JPEG, PNG, WebP, GIF"
}
{
"success": false,
"message": "Image too large. Maximum size is 10MB"
}
Playground документации не поддерживает загрузку файлов: Пожалуйста, используйте примеры кода cURL, Python или JavaScript ниже для тестирования.
Важное изменение: Для повышения производительности и контроля затрат мы больше не поддерживаем передачу данных изображений в формате base64 напрямую в API генерации. Пожалуйста, используйте этот эндпоинт для загрузки изображений, а затем используйте полученный URL в запросах генерации.
Зачем сначала загружать?
- Производительность - Кодирование base64 увеличивает данные на 33%, предварительная загрузка значительно уменьшает размер запроса
- Многократное использование - Загрузите один раз, используйте URL многократно без повторной передачи
Рабочий процесс
Авторизация
string
обязательно
Используйте Bearer Token для аутентификацииПолучите API Key: Посетите Управление API Key
Authorization: Bearer YOUR_API_KEY
Body
file
обязательно
Файл изображенияПоддерживаемые форматы:
- JPEG (.jpg, .jpeg)
- PNG (.png)
- WebP (.webp)
- GIF (.gif)
- Максимальный размер файла: 10MB
string
Цель загрузки (опционально)По умолчанию:
generationResponse
boolean
Успешность запроса
object
curl --request POST \
--url https://toapis.com/v1/uploads/images \
--header 'Authorization: Bearer <token>' \
--form 'file=@/path/to/your/image.jpg'
import requests
# Загрузка изображения
with open('image.jpg', 'rb') as f:
response = requests.post(
"https://toapis.com/v1/uploads/images",
headers={
"Authorization": "Bearer your-ToAPIs-key"
},
files={
"file": f
}
)
result = response.json()
image_url = result['data']['url']
print(f"URL изображения: {image_url}")
# Использование загруженного изображения для генерации
response = requests.post(
"https://toapis.com/v1/images/generations",
headers={
"Authorization": "Bearer your-ToAPIs-key",
"Content-Type": "application/json"
},
json={
"model": "gemini-3-pro-image-preview",
"prompt": "Создать вариацию на основе этого изображения",
"image_urls": [{"url": image_url}]
}
)
(async () => {
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = 'image/*';
fileInput.click();
await new Promise(resolve => fileInput.onchange = resolve);
// 上传图片(已验证成功)
const formData = new FormData();
formData.append('file', fileInput.files[0]);
const uploadResponse = await fetch('https://toapis.com/v1/uploads/images', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key' // 替换为你的实际API密钥
},
body: formData
});
const uploadResult = await uploadResponse.json();
const imageUrl = uploadResult.data.url;
console.log(`图片 URL: ${imageUrl}`);
// 使用上传的图片进行生成(仅修改image_urls格式,解决400)
const genResponse = await fetch('https://toapis.com/v1/images/generations', {
method: 'POST',
headers: {
'Authorization': 'Bearer your-ToAPIs-key', // 替换为你的实际API密钥
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'gemini-3-pro-image-preview',
prompt: '基于这张图片创作变体',
image_urls: [imageUrl]
})
});
const genResult = await genResponse.json();
console.log('生成结果:', genResult);
})();
{
"success": true,
"message": "",
"data": {
"id": "upload_abc12345",
"url": "https://files.toapis.com/uploads/123/1737568800_abc12345.jpg",
"mime_type": "image/jpeg",
"size": 89234
}
}
{
"success": false,
"message": "Unsupported image type. Allowed: JPEG, PNG, WebP, GIF"
}
{
"success": false,
"message": "Image too large. Maximum size is 10MB"
}
Полный пример: Рабочий процесс image-to-image
Вот полный пример рабочего процесса image-to-image:Python Полный пример
import requests
import time
import os
API_KEY = os.getenv(
"TOAPIS_API_KEY", "your-ToAPIs-key"
)
BASE_URL = "https://toapis.com"
def _raise_api_error(resp: requests.Response, payload: dict) -> None:
if resp.ok:
return
msg = payload.get("message") or payload.get("error")
if isinstance(msg, dict):
msg = msg.get("message") or str(msg)
raise RuntimeError(f"HTTP {resp.status_code}: {msg or payload}")
def _require_api_key() -> None:
if not API_KEY:
raise RuntimeError("缺少 TOAPIS_API_KEY 环境变量")
def upload_image(file_path: str) -> str:
_require_api_key()
with open(file_path, "rb") as f:
resp = requests.post(
f"{BASE_URL}/v1/uploads/images",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
)
body = resp.json()
_raise_api_error(resp, body)
if not body.get("success"):
raise RuntimeError(body.get("message") or str(body))
return body["data"]["url"]
def create_generation(image_url: str, prompt: str) -> str:
_require_api_key()
resp = requests.post(
f"{BASE_URL}/v1/images/generations",
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json={
"model": "gemini-3-pro-image-preview",
"prompt": prompt,
"image_urls": [image_url],
"size": "16:9",
},
)
body = resp.json()
_raise_api_error(resp, body)
task_id = body.get("id") or body.get("task_id")
if not task_id:
raise RuntimeError(f"创建任务响应缺少 id: {body}")
return task_id
def wait_for_result(task_id: str) -> str:
_require_api_key()
while True:
resp = requests.get(
f"{BASE_URL}/v1/images/generations/{task_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
result = resp.json()
_raise_api_error(resp, result)
status = result.get("status")
if status == "completed":
r = result.get("result") or {}
items = r.get("data") or []
if not items or not items[0].get("url"):
raise RuntimeError(f"completed 但无 URL: {result}")
return items[0]["url"]
if status == "failed":
err = result.get("error") or {}
raise RuntimeError(
f"生成失败: {err.get('message') or result.get('fail_reason') or result}"
)
time.sleep(2)
if __name__ == "__main__":
image_url = upload_image("reference.jpg")
print(f"✅ 图片已上传: {image_url}")
task_id = create_generation(image_url, "将这张照片转换为赛博朋克风格")
print(f"✅ 任务已创建: {task_id}")
result_url = wait_for_result(task_id)
print(f"✅ 生成完成: {result_url}")
⌘I