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

Навык агента

Скопируйте инструкции ниже и передайте их своему ИИ-агенту (Claude, GPT, Cursor и т. д.), чтобы он мог использовать API DeepManim от вашего имени.

SKILL.md
# Навык API DeepManim

Используйте API DeepManim, чтобы создавать, улучшать и озвучивать анимированные объясняющие видео из текстовых запросов.

## Базовый URL

```
https://api.deepmanim.com/api/v1
```

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

Для всех запросов нужен ключ API в заголовке Authorization:

```
Authorization: Bearer dm_k_YOUR_API_KEY
```

## Рабочий процесс

Обычно процесс выглядит так:

1. **Создайте** видео из текстового запроса через `POST /generate`
2. **Проверяйте** полученное задание через `GET /jobs/{job_id}`, пока `status` не станет `"completed"`
3. **Улучшайте** видео дополнительными инструкциями через `POST /improve` (необязательно, можно повторять)
4. **Добавьте** озвучку через `POST /audio`, когда результат вас устраивает
5. **Улучшите озвучку** через `POST /improve-narration`, если это необходимо

Генерация и улучшение стоят от 1,5 кредитов и зависят от предустановки. Запросы audio и improve-narration стоят 1 кредит. Чтение данных бесплатно.

## Конечные точки

### POST /generate
Создать новое видео по текстовому запросу. Озвучка включена по умолчанию.

Тело запроса:
```json
{
  "message": "Объясни гравитацию",
  "session_id": null,
  "preferred_locale": "ru"
}
```
- `message` (required): Запрос с описанием того, что нужно анимировать.
- `session_id` (optional): Передайте существующий ID сессии, чтобы продолжить разговор.

Ответ:
```json
{
  "job_id": "abc-123",
  "session_id": "def-456",
  "status": "pending"
}
```

### POST /improve
Улучшить или изменить существующее видео. Аудио НЕ включается — добавьте его через /audio после всех изменений.

Тело запроса:
```json
{
  "session_id": "def-456",
  "message": "Добавь больше цветов и замедли анимацию",
  "preferred_locale": "ru"
}
```

Ответ:
```json
{
  "job_id": "ghi-789",
  "session_id": "def-456",
  "status": "pending"
}
```

### POST /audio
Добавить озвучку к существующему видео.

Тело запроса:
```json
{
  "session_id": "def-456",
  "message_id": "msg-123",
  "high_quality": false,
  "preferred_locale": "ru"
}
```

### POST /improve-narration
Улучшить существующую озвучку видео.

Тело запроса:
```json
{
  "session_id": "def-456",
  "message_id": "msg-123",
  "high_quality": true,
  "mode": "better_narration",
  "instruction": "Сделай объяснение более понятным для начинающих.",
  "preferred_locale": "ru"
}
```

### GET /jobs/{job_id}
Проверять состояние задания. Поле `phase` показывает прогресс: `brainstorming` → `crafting_vision` → `assembling_pieces` → `polishing` → `done`

Ответ после завершения:

Ответ после завершения:
```json
{
  "job_id": "abc-123",
  "status": "completed",
  "phase": "done",
  "estimated_time_remaining_seconds": 0,
  "result": {
    "video_url": "https://...",
    "description": "Объясни гравитацию",
    "session_id": "def-456",
    "message_id": "msg-789",
    "duration_seconds": 24.6,
    "has_audio": true,
    "follow_up": "Сделай объяснение более понятным для начинающих."
  }
}
```

Возможные значения `status`: `pending`, `running`, `completed`, `failed`.

### POST /jobs/{job_id}/cancel — Отменить выполняющееся или ожидающее задание.

### GET /sessions — Показать все ваши сессии.

### GET /sessions/{session_id} — Получить сессию с полной историей сообщений.

### DELETE /sessions/{session_id} — Удалить сессию и все её сообщения.

### GET /sessions/{session_id}/jobs
Показать задания сессии. Необязательный параметр запроса: `?status=completed`

### GET /messages/{message_id} — Получить сообщение по ID.

### GET /credits
Получить баланс: `balance`, `total_used`, `total_purchased`, `plan`.

### GET /me
Получить сведения о пользователе: `id`, `email`, `display_name`.

## Коды ошибок

- `401` — отсутствует или недействителен ключ API
- `402` — недостаточно кредитов
- `404` — ресурс не найден
- `400` — недействительный запрос

## Стратегия опроса

Задания обычно выполняются 60–120 секунд. Опросите `GET /jobs/{job_id}` каждые 3–5 секунд. Используйте `estimated_time_remaining_seconds`, чтобы менять частоту. Остановитесь, когда `status` станет `completed` или `failed`.

## Пример: полный процесс

```python
import requests, time

API_KEY = "dm_k_YOUR_KEY"
BASE = "https://api.deepmanim.com/api/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}

# 1. Создать
r = requests.post(f"{BASE}/generate", headers=headers, json={
    "message": "Объясни гравитацию",
    "preferred_locale": "ru"
})
job_id = r.json()["job_id"]
session_id = r.json()["session_id"]

# 2. Опросить до завершения
while True:
    job = requests.get(f"{BASE}/jobs/{job_id}", headers=headers).json()
    if job["status"] in ("completed", "failed"):
        break
    time.sleep(4)

# 3. Получить результат
video_url = job["result"]["video_url"]
message_id = job["result"]["message_id"]

# 4. При необходимости улучшить
r = requests.post(f"{BASE}/improve", headers=headers, json={
    "session_id": session_id,
    "message": "Добавь больше цветов и замедли анимацию",
    "preferred_locale": "ru"
})
# Опросите новый job_id тем же способом…

# 5. Добавить аудио после улучшений
r = requests.post(f"{BASE}/audio", headers=headers, json={
    "session_id": session_id,
    "message_id": message_id,
    "high_quality": False,
    "preferred_locale": "ru"
})
# Опросить новый job_id…

# 6. При необходимости улучшить педагогику озвучки
r = requests.post(f"{BASE}/improve-narration", headers=headers, json={
  "session_id": session_id,
  "message_id": message_id,
  "high_quality": True,
  "mode": "better_narration",
  "instruction": "Сделай объяснение более понятным для начинающих.",
  "preferred_locale": "ru"
})
# Опросить новый job_id…
```
Навык агента | DeepManim