API Документация

Полное руководство по использованию MaxMedia Photo API

🔐 Аутентификация

Все запросы к API должны содержать заголовок Authorization с вашим API ключом:

Authorization: Bearer YOUR_API_KEY

🌐 Базовый URL

https://maxmedia.uz/api/v1

📤 Отправка изображений на обработку

POST /process

Тело запроса (JSON)

{
  "images": [
    "https://example.com/image1.jpg",
    "https://example.com/image2.jpg"
  ],
  "prompt_id": 1,
  "output_format": "png",
  "image_size": "auto"
}

Параметры

Параметр Тип Обязательный Описание
images array ✅ Да Массив URL изображений (макс. 100)
prompt_id integer ⚡ Условно ID шаблона промпта
custom_prompt string ⚡ Условно Свой промпт (если нет prompt_id)
output_format string ❌ Нет png или jpeg (по умолч. png)
image_size string ❌ Нет 1:1, 16:9, auto и т.д.

Ответ

{
  "success": true,
  "task_id": "a1b2c3d4e5f6...",
  "message": "Task created successfully",
  "total_images": 2
}

🔍 Проверка статуса

GET /status/{task_id}

Ответ

{
  "task_id": "a1b2c3d4e5f6...",
  "status": "processing",
  "total_images": 2,
  "processed_images": 1,
  "failed_images": 0,
  "created_at": "2025-12-11T10:00:00Z",
  "completed_at": null
}

Возможные статусы

pending

В очереди

processing

Обработка

completed

Готово

failed

Ошибка

📥 Получение результата

GET /result/{task_id}

Ответ

{
  "task_id": "a1b2c3d4e5f6...",
  "status": "completed",
  "total_images": 2,
  "processed_images": 2,
  "failed_images": 0,
  "images": [
    {
      "original_url": "https://example.com/image1.jpg",
      "result_url": "https://maxmedia.uz/static/uploads/task123/abc.png",
      "status": "completed",
      "error": null
    },
    {
      "original_url": "https://example.com/image2.jpg",
      "result_url": "https://maxmedia.uz/static/uploads/task123/def.png",
      "status": "completed",
      "error": null
    }
  ],
  "expires_at": "2025-12-14T10:00:00Z"
}

⚠️ Важно: Результаты хранятся 3 дня, после чего автоматически удаляются. Скачайте изображения до даты expires_at.

📚 Каталог промптов (3 шага)

Структура: Категория → Подкатегория → Промпт
Например: МальчикСвитерУлучшение качества

1 Получить категории
GET /catalog/categories
[
  {"id": 1, "name": "Мальчик", "name_en": "boy"},
  {"id": 2, "name": "Девочка", "name_en": "girl"}
]
2 Получить подкатегории выбранной категории
GET /catalog/categories/{category_id}/subcategories
// GET /catalog/categories/1/subcategories
[
  {"id": 1, "category_id": 1, "name": "Свитер"},
  {"id": 2, "category_id": 1, "name": "Футболка"},
  {"id": 3, "category_id": 1, "name": "Куртка"}
]
3 Получить промпты подкатегории
GET /catalog/subcategories/{subcategory_id}/prompts
// GET /catalog/subcategories/1/prompts
[
  {
    "id": 1,
    "title": "Улучшение качества",
    "prompt": "Enhance this product photo...",
    "preview_image": "/static/uploads/previews/abc.png",
    "output_format": "png",
    "image_size": "auto",
    "is_default": true
  },
  {
    "id": 2,
    "title": "Удаление фона",
    "prompt": "Remove background...",
    ...
  }
]

✅ Использование prompt_id

После выбора промпта, используйте его id при отправке фото:

POST /process
{
  "images": ["https://example.com/photo.jpg"],
  "prompt_id": 1  // ← ID выбранного промпта
}

💻 Пример кода (Python)

import requests
import time

API_URL = "https://maxmedia.uz/api/v1"
API_KEY = "your_api_key_here"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# 1. Отправка изображений
response = requests.post(
    f"{API_URL}/process",
    headers=headers,
    json={
        "images": [
            "https://example.com/photo1.jpg",
            "https://example.com/photo2.jpg"
        ],
        "prompt_id": 1
    }
)

task_id = response.json()["task_id"]
print(f"Task created: {task_id}")

# 2. Ожидание результата
while True:
    status = requests.get(
        f"{API_URL}/status/{task_id}",
        headers=headers
    ).json()
    
    print(f"Status: {status['status']}, Progress: {status['processed_images']}/{status['total_images']}")
    
    if status["status"] in ["completed", "failed", "partial"]:
        break
    
    time.sleep(5)

# 3. Получение результата
result = requests.get(
    f"{API_URL}/result/{task_id}",
    headers=headers
).json()

for img in result["images"]:
    print(f"Original: {img['original_url']}")
    print(f"Result: {img['result_url']}")
    print("---")

❌ Коды ошибок

Код Описание
401 Неверный API ключ
404 Задача не найдена
429 Превышен лимит запросов
500 Внутренняя ошибка сервера