Як використовувати 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 запитів/хв.
Постачайте клієнтські SEO-статті з відео у агентському масштабі
Vidiome — ШІ-платформа відео-у-статтю для агентств. SEO-статті з відео клієнтів менш ніж за 5 хвилин. 10 мов, експорт у HTML і Markdown, 120 кредитів.
Масштабуйте SaaS-контент-маркетинг із відео — автоматизовано
Vidiome конвертує демо, вебінари та навчальні матеріали в SEO-статті блогу автоматично. Команди SaaS випускають ~100 статей/місяць і отримують цитування LLM.
Vidiome
Turn your videos into SEO traffic machines
Згенерувати першу статтюБез банківської картки · 120 безкоштовних кредитів