Как использовать API Vidiome для автоматизации создания статей из видео
Техническое руководство для разработчиков: используйте конечную точку POST /api/v1/articles Vidiome для автоматизации создания видео в статье в большом масштабе. Включены примеры Curl + Node.js.
REST API Vidiome превращает видео на YouTube в структурированную статью для блога одним запросом. Вы отправляете ссылку на YouTube, Vidiome читает расшифровку видео, пишет статью с помощью LLM и возвращает её в формате JSON: заголовок и список разделов, у каждого из которых есть свой заголовок H2, текст и временные метки.
В этом руководстве разобраны аутентификация, формат запроса и ответа, примеры на curl и Node.js, пакетная обработка, публикация в WordPress и ограничения, которые нужно учитывать.
Для кого это руководство
- Разработчики SaaS, которые создают функции автоматизации контента для клиентов или внутренних инструментов
- Контент-агентства, обрабатывающие много видео в неделю и желающие избавиться от ручных шагов
- Платформенные команды, встраивающие преобразование видео в статьи в существующую CMS или контентный процесс
Если вы автор контента, а не разработчик, веб-приложение Vidiome — более быстрый путь. Кроме того, оно делает скриншот для каждого раздела, чего API не делает.
Vidiome
Turn your videos into SEO traffic machines
Сгенерировать первую статьюКредитная карта не требуется · 120 бесплатных кредитов
Что понадобится
- Аккаунт Vidiome на платном тарифе (Starter, Pro или Business). Запросы к API с бесплатных аккаунтов отклоняются с кодом
403. - API-ключ, созданный в приложении в разделе Профиль → API-ключи. Ключи начинаются с
vdm_live_. Храните их в секрете: любой, у кого есть ключ, может тратить ваши кредиты. - Видео на YouTube с расшифровкой (ручными или автоматическими субтитрами). API работает именно с этой расшифровкой.
Новые аккаунты получают 120 бесплатных кредитов, чтобы попробовать веб-приложение до выбора тарифа.
Эндпоинт: POST /api/v1/articles
Запрос
POST https://www.vidiome.com/api/v1/articles
Content-Type: application/json
x-api-key: vdm_live_YOUR_KEY
Заголовок Authorization: Bearer vdm_live_YOUR_KEY тоже работает.
Тело запроса
{
"youtubeUrl": "https://www.youtube.com/watch?v=XXXXXXXXXXX",
"language": "en"
}
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
youtubeUrl |
string | Да | Полная ссылка на видео YouTube |
language |
string | Нет | Язык, на котором пишется статья: en, fr, es, pt, de, ru, hi, uk, id или tr. Указывайте его явно: без него язык не задаётся |
Это весь запрос. Параметров для загрузки файла, формата вывода или ключевого слова нет.
Ответ
Вызов синхронный: соединение остаётся открытым, пока Vidiome генерирует статью, после чего возвращается полный результат. В зависимости от длины видео это занимает от нескольких секунд до нескольких минут.
{
"id": "5b0c9c2e-6f1d-4d8a-9a57-2f1f3c1e8b21",
"title": "How to Repurpose One Video into a Month of Content",
"sections": [
{
"id": "a3f1…",
"title": "Introduction: one video, many formats",
"content": "Most creators publish a video and move on…\n\n### Why the transcript is only a starting point\n\n…",
"startTime": 0,
"endTime": 74,
"images": []
}
],
"videoUrl": "https://www.youtube.com/watch?v=XXXXXXXXXXX",
"videoId": "XXXXXXXXXXX",
"language": "en",
"creditsUsed": 40,
"creditsRemaining": 460,
"createdAt": "2026-09-26T10:23:41.000Z"
}
Что нужно знать об ответе:
sectionsидут в порядке чтения: введение, основные разделы, затем заключение.title— это заголовок H2 раздела.content— текст со строками###для подзаголовков H3, пустыми строками между абзацами,**жирным**текстом и пунктами списка-.startTime/endTimeуказаны в секундах и показывают, из какой части видео взят каждый раздел. Это удобно, чтобы встроить видео с нужного момента.imagesчерез API всегда пустой. Скриншоты делает веб-приложение прямо в браузере. Чтобы добавить их, откройте статью в Vidiome и выберите их там или используйте собственные изображения.- Статья сохраняется в вашем аккаунте (
id). Она появляется в панели управления Vidiome, где её можно отредактировать.
Примеры кода
curl
curl -X POST https://www.vidiome.com/api/v1/articles \
-H "Content-Type: application/json" \
-H "x-api-key: $VIDIOME_API_KEY" \
-d '{
"youtubeUrl": "https://www.youtube.com/watch?v=XXXXXXXXXXX",
"language": "en"
}'
Node.js (fetch)
const VIDIOME_API_KEY = process.env.VIDIOME_API_KEY;
async function generateArticle(youtubeUrl, language = 'en') {
const response = await fetch('https://www.vidiome.com/api/v1/articles', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': VIDIOME_API_KEY,
},
body: JSON.stringify({ youtubeUrl, language }),
// Генерация может занять несколько минут: не давайте клиенту сдаться раньше.
signal: AbortSignal.timeout(6 * 60 * 1000),
});
const data = await response.json();
if (!response.ok) {
const error = new Error(`Vidiome API ${response.status}: ${data.error}`);
error.status = response.status;
error.retryAfter = Number(response.headers.get('retry-after')) || null;
throw error;
}
return data;
}
// Превращаем разделы в Markdown (или передаём их своему рендереру).
function toMarkdown(article) {
const body = article.sections
.map((section) => `## ${section.title}\n\n${section.content}`)
.join('\n\n');
return `# ${article.title}\n\n${body}\n`;
}
const article = await generateArticle('https://www.youtube.com/watch?v=XXXXXXXXXXX');
console.log(toMarkdown(article));
console.log(`Credits used: ${article.creditsUsed}, left: ${article.creditsRemaining}`);
Процесс автоматизации
┌─────────────────────────────────────────────────────────┐
│ ИСТОЧНИК ВИДЕО │
│ Плейлист / канал YouTube / список ссылок │
└──────────────────────┬──────────────────────────────────┘
│ Ссылки YouTube
▼
┌─────────────────────────────────────────────────────────┐
│ ОРКЕСТРАЦИЯ │
│ Cron job / n8n / Make.com / ваша собственная очередь │
│ - Пропускать уже обработанные ссылки │
│ - Не больше 10 запросов в минуту на ключ │
│ - Повтор при 429 / 502 после задержки Retry-After │
└──────────────────────┬──────────────────────────────────┘
│ POST /api/v1/articles
▼
┌─────────────────────────────────────────────────────────┐
│ VIDIOME API │
│ 1. Получение расшифровки видео YouTube │
│ 2. Написание статьи с помощью LLM │
│ 3. Сохранение в аккаунте, возврат заголовка и разделов │
└──────────────────────┬──────────────────────────────────┘
│ JSON статьи
▼
┌─────────────────────────────────────────────────────────┐
│ ПОСТОБРАБОТКА │
│ - Преобразование разделов в HTML или Markdown │
│ - Проверка человеком (рекомендуется) │
│ - Изображения, внутренние ссылки, meta description, │
│ разметка schema │
└──────────────────────┬──────────────────────────────────┘
│ Статья, готовая к публикации
▼
┌─────────────────────────────────────────────────────────┐
│ CMS / ПЛАТФОРМА │
│ WordPress / Ghost / Webflow / Contentful / Sanity │
└─────────────────────────────────────────────────────────┘
Сценарии использования
Пакетная обработка YouTube-канала
Каждый API-ключ ограничен 10 запросами в минуту. Поскольку каждый запрос остаётся открытым, пока статья не будет готова, небольшого числа параллельных запросов вполне достаточно:
async function processVideos(urls, { language = 'en', concurrency = 2 } = {}) {
const results = [];
const queue = [...urls];
async function worker() {
while (queue.length > 0) {
const url = queue.shift();
try {
results.push({ url, article: await generateArticle(url, language) });
} catch (error) {
if (error.status === 429 && error.retryAfter) {
await new Promise((r) => setTimeout(r, error.retryAfter * 1000));
queue.push(url); // повторим позже
} else {
results.push({ url, error: error.message });
}
}
}
}
await Promise.all(Array.from({ length: concurrency }, worker));
return results;
}
Остановите пакет, если получили 402: на балансе недостаточно кредитов для следующего видео.
Публикация в WordPress
Vidiome возвращает разделы, а не HTML, поэтому сначала их нужно преобразовать. С этим справится Markdown-библиотека, например marked, или можно ограничиться минимальным преобразованием:
import { marked } from 'marked';
async function publishToWordPress(article, { siteUrl, username, appPassword }) {
const credentials = Buffer.from(`${username}:${appPassword}`).toString('base64');
const html = marked.parse(
article.sections.map((s) => `## ${s.title}\n\n${s.content}`).join('\n\n')
);
const response = await fetch(`${siteUrl}/wp-json/wp/v2/posts`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Basic ${credentials}`,
},
body: JSON.stringify({
title: article.title,
content: html,
status: 'draft', // проверьте перед публикацией
}),
});
return response.json();
}
Одно видео, несколько языков
Отправляйте по одному запросу на каждый язык. Каждый из них — отдельная генерация и расходует кредиты как любая другая:
const LANGUAGES = ['en', 'fr', 'es', 'de'];
async function generateInLanguages(youtubeUrl) {
const versions = {};
for (const language of LANGUAGES) {
versions[language] = await generateArticle(youtubeUrl, language);
}
return versions;
}
Ограничения и кредиты
- Лимит запросов: 10 запросов в минуту на API-ключ на любом платном тарифе. При превышении вы получите
429с заголовкомRetry-After(в секундах). - Длительность: каждый запрос может выполняться на стороне Vidiome до 5 минут. Очень длинные видео могут не уложиться в это время; разделите процесс или используйте для них веб-приложение.
- Кредиты: API тарифицируется так же, как веб-приложение, по текущей ставке 4 кредита за минуту видео и минимум 20 кредитов (10-минутное видео расходует 40 кредитов, 60-минутное — 240). В каждом ответе указаны
creditsUsedиcreditsRemaining. Тарифы и пакеты кредитов — на странице цен.
Обработка ошибок
Ошибки возвращаются в формате JSON с полем error.
| Статус | error |
Что делать |
|---|---|---|
400 |
Invalid request body или invalid-youtube-url |
Проверьте ссылку и код языка |
401 |
Missing API key / Invalid or revoked API key |
Проверьте заголовок x-api-key |
402 |
insufficient-credits (с required и available) |
Пополните кредиты или перейдите на более высокий тариф |
403 |
api_access_requires_paid_plan |
Перейдите на платный тариф |
404 |
no-captions |
У видео нет расшифровки; попробуйте другое видео |
429 |
лимит запросов или transcript_provider_rate_limited |
Дождитесь Retry-After и повторите |
500 |
article_generation_failed |
Повторите один раз; если ошибка не исчезает, свяжитесь с нами |
502 |
transcript_provider_unavailable / llm_provider_error |
Временная ошибка: повторите с задержкой |
Часто задаваемые вопросы
Можно ли отправить видеофайл вместо ссылки на YouTube?
Нет. API принимает только ссылки на YouTube, и у видео должна быть расшифровка. Для файлов MP4, MOV или WebM используйте веб-приложение: оно расшифровывает звук и к тому же делает скриншот для каждого раздела.
Есть ли вебхук или эндпоинт для проверки статуса?
Нет. Запрос синхронный и возвращает готовую статью. Если вы обрабатываете много видео, поместите вызовы в собственную очередь задач (cron job, n8n, Make.com, воркер) и сохраняйте результаты по мере их поступления.
Куда попадают статьи, созданные через API?
Они сохраняются в вашем аккаунте Vidiome, так что вы найдёте их в панели управления. Это самый простой способ добавить скриншоты, исправить фрагмент с помощью ИИ-переписывания или экспортировать статью в HTML или Markdown.
Следующие шаги
Изучите похожие решения
Узнайте о других способах превращать видео в хорошо ранжируемые тексты.
Автоматизируйте превращение видео YouTube в статьи с Vidiome API
Отправьте ссылку YouTube в Vidiome API и получите готовую статью в JSON: заголовок и разделы. 10 языков, платные планы, 10 запросов/мин.
Больше контента клиентам, быстрее
Vidiome — ИИ-платформа видео-в-статью уровня агентства. SEO-статьи из клиентских видео менее чем за 5 минут. 10 языков, экспорт в HTML и Markdown.
Масштабируйте SaaS-контент-маркетинг с видео — на автомате
Vidiome помогает SaaS-командам превращать демо, вебинары и уроки в SEO-статьи автоматически — ~100 статей/месяц и доминирование в LLM-цитированиях.
Vidiome
Turn your videos into SEO traffic machines
Сгенерировать первую статьюКредитная карта не требуется · 120 бесплатных кредитов