Быстрый старт: первый ролик за 5 минут
PiratePress — контент-завод вирусных роликов: генерация роликов с нуля и нарезка длинных видео. Три вызова — и у тебя в кармане готовый вертикальный ролик. Понадобятся только ключ API и пять минут.
Базовый URL всех вызовов:
https://api.piratepress.fun/public/v1
Интерактивный референс (OpenAPI, можно пощёлкать прямо в браузере): https://api.piratepress.fun/public/v1/docs (Scalar).
Шаг 1. Добыть ключ
Ключи выдаёт бот: @PiratePressBot → команда
/apikey. Ключ выглядит как pp_… и показывается один раз — сохрани
его сразу. Один активный ключ на пользователя: при перевыпуске прежний
отзывается автоматически.
Каждый запрос подписывается заголовком:
X-API-Key: pp_...
Без ключа или с отозванным ключом любой вызов ответит 401.
Шаг 2. Заказать ролик одной строкой
POST /videos:quick — мастер-промпт одной строкой: LLM сама раскладывает
его по параметрам заказа (как команда /go в боте):
- curl
- Python
- JavaScript
curl -X POST https://api.piratepress.fun/public/v1/videos:quick \
-H "X-API-Key: pp_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: my-first-video-0001" \
-d '{"prompt": "мультяшный ролик секунд на 30 про коллегу, который съел мой обед, с лёгкой музыкой"}'
import requests
resp = requests.post(
"https://api.piratepress.fun/public/v1/videos:quick",
headers={
"X-API-Key": "pp_...",
"Idempotency-Key": "my-first-video-0001",
},
json={
"prompt": "мультяшный ролик секунд на 30 про коллегу, "
"который съел мой обед, с лёгкой музыкой"
},
)
resp.raise_for_status()
job = resp.json() # {id, status, cost, eta_seconds}
print(job["id"], job["status"], job["cost"], job["eta_seconds"])
const resp = await fetch(
"https://api.piratepress.fun/public/v1/videos:quick",
{
method: "POST",
headers: {
"X-API-Key": "pp_...",
"Content-Type": "application/json",
"Idempotency-Key": "my-first-video-0001",
},
body: JSON.stringify({
prompt:
"мультяшный ролик секунд на 30 про коллегу, который съел мой обед, с лёгкой музыкой",
}),
},
);
if (!resp.ok) throw new Error(`API ${resp.status}: ${await resp.text()}`);
const job = await resp.json(); // {id, status, cost, eta_seconds}
console.log(job.id, job.status, job.cost, job.eta_seconds);
Ответ 201:
{
"id": "gen_a1b2c3",
"status": "queued",
"cost": 100,
"eta_seconds": 420
}
Дублоны списываются синхронно при создании (cost — сколько списали).
Заголовок Idempotency-Key (хранится 24 часа) страхует от двойного
списания при ретраях: повтор с тем же ключом вернёт исходную задачу со
статусом 200 вместо 201, деньги не спишутся второй раз.
Хочешь ручной контроль — плейсмент, CTA, субтитры, музыку, клон голоса,
ревью сценария? Используй POST /videos с явными параметрами, полный
список полей — в референсе.
Шаг 3. Забрать результат
Поллим статус GET /videos/{id}:
- curl
- Python
- JavaScript
curl https://api.piratepress.fun/public/v1/videos/gen_a1b2c3 \
-H "X-API-Key: pp_..."
import requests
resp = requests.get(
"https://api.piratepress.fun/public/v1/videos/gen_a1b2c3",
headers={"X-API-Key": "pp_..."},
)
resp.raise_for_status()
video = resp.json() # {status, result_url, metadata, ...}
print(video["status"], video.get("result_url"))
const resp = await fetch(
"https://api.piratepress.fun/public/v1/videos/gen_a1b2c3",
{ headers: { "X-API-Key": "pp_..." } },
);
if (!resp.ok) throw new Error(`API ${resp.status}: ${await resp.text()}`);
const video = await resp.json(); // {status, result_url, metadata, ...}
console.log(video.status, video.result_url);
Статусы: queued → running → done (или error / refunded — сбой
без списания и сбой с авто-возвратом дублонов; в режиме режиссёра
бывает awaiting_review — см. FAQ). Обычно это 2–15 минут,
ориентир — eta_seconds из ответа на создание.
Когда придёт status: "done", в ответе появятся result_url —
подписанная ссылка на mp4 (живёт 7 дней, ключ для скачивания не нужен) —
и metadata с постинг-паком (заголовок, описание, хэштеги).
У пакета (count > 1) все ролики лежат в result_urls
(output.mp4, output_2.mp4, …) — result_url дублирует первый.
curl -L -o out.mp4 "<result_url>"
Не хочешь поллить — подпишись на события: Вебхуки.
Все эндпоинты
Полный актуальный состав неймспейса /public/v1 (детали — в
интерактивном референсе /public/v1/docs):
Videos — POST /videos, POST /videos:quick, GET /videos
(история, limit/offset), GET /videos/{id}, POST /videos/{id}/retry,
POST /videos/{id}/review (approve/edit/regen), POST /estimate
(превью цены без списания).
Clips — нарезка длинных видео на клипы:
POST /clips/probe, POST /clips (Idempotency-Key обязателен),
GET /clips, GET /clips/{id}, POST /clips/banner,
GET /clips/banner/{job_id}, GET /clips/files/{token} (без авторизации).
Channels — каналы и автопилот: POST /channels,
GET /channels, GET /channels/{id}, PATCH /channels/{id},
DELETE /channels/{id}, POST /channels/suggest, POST /channels/{id}/roll.
Assets — GET /assets, POST /assets (multipart-загрузка),
DELETE /assets/{id}, GET /bg-presets.
Account — GET /me, PATCH /me (язык ru|en), GET /balance.
Subscriptions — GET /subscriptions/current (покупка — в боте).
Promo — POST /promo-codes/activate.
Referral — GET /referral.
Webhooks — POST /webhooks, GET /webhooks, DELETE /webhooks/{id}.
Файлы и доки (без авторизации) — GET /files/{token} (скачивание
результата ролика по подписанной ссылке), GET /docs, GET /openapi.json.
ИИ-агентам (MCP + скилл)
Если ролики будет заказывать ИИ-агент (Claude Code, Kimi Code, Claude Desktop) — установи ему MCP-сервер и скилл одной строкой:
curl -fsSL https://piratepress.fun/install.sh | PIRATEPRESS_API_KEY=pp_... bash
Установщик раскладывает MCP-сервер в ~/.piratepress/mcp/, скилл —
в ~/.agents/skills/ (и ~/.claude/skills/, если есть), и сам
регистрирует сервер в Claude Code. Ничего вне $HOME не трогает.
Инструменты, статусы и поведение натренированного агента — на странице ИИ-агенты: MCP и скилл.
Куда дальше
- Коды ошибок — конверт
{error: {code, message}}и что делать с каждым кодом. - Вебхуки —
video.doneиclip.doneпрямо на твой URL, с подписью. - FAQ — дублоны, лимиты, триал, режиссёр.
- Нарезка (clips) — длинное видео → вертикальные клипы: probe цены, заказ, zip-пак, AI-баннер.
- Каналы — пресет + ниша, LLM-концепции, ролик по каналу, расписание автовыпуска.