Быстрый старт: первый ролик за 5 минут
Три вызова — и у тебя в кармане готовый вертикальный ролик. Понадобятся только ключ 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; в режиме режиссёра
бывает awaiting_review — см. FAQ). Обычно это 2–15 минут,
ориентир — eta_seconds из ответа на создание.
Когда придёт status: "done", в ответе появятся result_url —
подписанная ссылка на mp4 (живёт 7 дней, ключ для скачивания не нужен) —
и metadata с постинг-паком (заголовок, описание, хэштеги):
curl -L -o out.mp4 "<result_url>"
Не хочешь поллить — подпишись на события: Вебхуки.
ИИ-агентам (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 не трогает.
Куда дальше
- Коды ошибок — конверт
{error: {code, message}}и что делать с каждым кодом. - Вебхуки —
video.doneпрямо на твой URL, с подписью. - FAQ — дублоны, лимиты, триал, режиссёр.