Cara Menggunakan API Vidiome untuk Mengotomatiskan Pembuatan Artikel dari Video
Tutorial teknis untuk pengembang: gunakan titik akhir POST /api/v1/articles Vidiome untuk mengotomatiskan pembuatan video-ke-artikel dalam skala besar. Contoh Curl + Node.js disertakan.
REST API Vidiome mengubah video YouTube menjadi artikel blog yang terstruktur hanya dengan satu permintaan. Anda mengirim URL YouTube, Vidiome membaca transkrip video, menulis artikel dengan LLM, lalu mengembalikannya dalam format JSON: sebuah judul dan daftar bagian, masing-masing dengan judul H2, isi, dan stempel waktunya sendiri.
Tutorial ini membahas autentikasi, format permintaan dan respons, contoh curl dan Node.js, pemrosesan batch, publikasi ke WordPress, serta batasan yang perlu Anda perhitungkan.
Untuk Siapa Tutorial Ini
- Pengembang SaaS yang membangun fitur otomatisasi konten untuk klien atau alat internal
- Agensi konten yang memproses banyak video setiap minggu dan ingin melewati langkah-langkah manual
- Tim platform yang menghubungkan konversi video-ke-artikel ke CMS atau alur kerja konten yang sudah ada
Jika Anda kreator perorangan dan bukan pengembang, aplikasi web Vidiome adalah jalur yang lebih cepat. Aplikasi web juga mengambil tangkapan layar untuk setiap bagian, sesuatu yang tidak dilakukan API.
Vidiome
Turn your videos into SEO traffic machines
Hasilkan artikel pertama sayaTanpa kartu kredit · 120 kredit gratis
Prasyarat
- Akun Vidiome dengan paket berbayar (Starter, Pro, atau Business). Permintaan API dari akun gratis ditolak dengan
403. - Kunci API, dibuat di aplikasi melalui Profil → Kunci API. Kunci diawali dengan
vdm_live_. Rahasiakan kunci Anda: siapa pun yang memilikinya dapat menghabiskan kredit Anda. - Video YouTube yang memiliki transkrip (teks manual atau otomatis). API bekerja dari transkrip tersebut.
Akun baru mendapatkan 120 kredit gratis untuk mencoba aplikasi web sebelum memilih paket.
Endpoint: POST /api/v1/articles
Permintaan
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 juga bisa digunakan.
Isi permintaan
{
"youtubeUrl": "https://www.youtube.com/watch?v=XXXXXXXXXXX",
"language": "en"
}
| Kolom | Tipe | Wajib | Deskripsi |
|---|---|---|---|
youtubeUrl |
string | Ya | URL lengkap video YouTube |
language |
string | Tidak | Bahasa penulisan artikel: en, fr, es, pt, de, ru, hi, uk, id, atau tr. Tetapkan secara eksplisit: tanpanya, tidak ada bahasa yang dipaksakan |
Itulah seluruh permintaannya. Tidak ada parameter untuk unggah file, format keluaran, atau kata kunci.
Respons
Panggilan ini bersifat sinkron: koneksi tetap terbuka selama Vidiome membuat artikel, lalu hasil lengkapnya dikembalikan. Tergantung panjang video, prosesnya berkisar dari beberapa detik hingga beberapa menit.
{
"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"
}
Beberapa hal yang perlu diketahui tentang respons:
sectionstersusun sesuai urutan baca: pendahuluan, bagian isi, lalu kesimpulan.titleadalah judul H2 bagian tersebut.contentberisi teks dengan baris###untuk subjudul H3, baris kosong di antara paragraf, teks**tebal**, dan butir daftar-.startTime/endTimedalam satuan detik dan menunjukkan bagian video asal setiap bagian artikel. Berguna untuk menyematkan video tepat di momen yang sesuai.imagesselalu kosong melalui API. Tangkapan layar diambil di browser oleh aplikasi web. Untuk menambahkannya, buka artikel di Vidiome dan pilih di sana, atau gunakan gambar Anda sendiri.- Artikel disimpan di akun Anda (
id). Artikel muncul di dasbor Vidiome, tempat Anda dapat mengeditnya.
Contoh Kode
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 }),
// Pembuatan bisa memakan waktu beberapa menit: jangan biarkan klien menyerah lebih dulu.
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;
}
// Ubah bagian-bagian menjadi Markdown (atau kirim ke renderer Anda sendiri).
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}`);
Alur Kerja Otomatisasi
┌─────────────────────────────────────────────────────────┐
│ LAPISAN SUMBER VIDEO │
│ Playlist / channel YouTube / daftar URL │
└──────────────────────┬──────────────────────────────────┘
│ URL YouTube
▼
┌─────────────────────────────────────────────────────────┐
│ LAPISAN ORKESTRASI │
│ Cron job / n8n / Make.com / antrean Anda sendiri │
│ - Lewati URL yang sudah diproses │
│ - Tetap di bawah 10 permintaan per menit per kunci │
│ - Coba lagi saat 429 / 502 setelah jeda Retry-After │
└──────────────────────┬──────────────────────────────────┘
│ POST /api/v1/articles
▼
┌─────────────────────────────────────────────────────────┐
│ VIDIOME API │
│ 1. Ambil transkrip video YouTube │
│ 2. Tulis artikel dengan LLM │
│ 3. Simpan ke akun Anda, kembalikan judul + bagian │
└──────────────────────┬──────────────────────────────────┘
│ JSON artikel
▼
┌─────────────────────────────────────────────────────────┐
│ LAPISAN PASCA-PEMROSESAN │
│ - Ubah bagian menjadi HTML atau Markdown │
│ - Tinjauan manusia (disarankan) │
│ - Gambar, tautan internal, meta description, schema │
└──────────────────────┬──────────────────────────────────┘
│ Artikel siap terbit
▼
┌─────────────────────────────────────────────────────────┐
│ CMS / PLATFORM │
│ WordPress / Ghost / Webflow / Contentful / Sanity │
└─────────────────────────────────────────────────────────┘
Kasus Penggunaan
Memproses channel YouTube secara batch
Setiap kunci API dibatasi 10 permintaan per menit. Karena setiap permintaan tetap terbuka sampai artikelnya siap, sedikit permintaan paralel sudah lebih dari cukup:
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); // coba lagi nanti
} else {
results.push({ url, error: error.message });
}
}
}
}
await Promise.all(Array.from({ length: concurrency }, worker));
return results;
}
Hentikan batch saat Anda menerima 402: saldo kredit Anda tidak cukup untuk video berikutnya.
Menerbitkan ke WordPress
Vidiome mengembalikan bagian-bagian, bukan HTML, jadi ubah dulu. Pustaka Markdown seperti marked bisa melakukannya, atau Anda bisa membuat konversi seminimal mungkin:
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', // tinjau sebelum menerbitkan
}),
});
return response.json();
}
Satu video, beberapa bahasa
Kirim satu permintaan per bahasa. Masing-masing adalah pembuatan terpisah dan memakai kredit seperti pembuatan lainnya:
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;
}
Batasan dan Kredit
- Batas permintaan: 10 permintaan per menit per kunci API, di semua paket berbayar. Jika melebihinya, Anda akan menerima
429dengan headerRetry-After(dalam detik). - Durasi: setiap permintaan dapat berjalan hingga 5 menit di sisi Vidiome. Video yang sangat panjang mungkin tidak muat; pecah alur kerja Anda atau gunakan aplikasi web untuk video tersebut.
- Kredit: API dikenai biaya yang sama dengan aplikasi web, dengan tarif saat ini 4 kredit per menit video dan minimum 20 kredit (video 10 menit memakai 40 kredit, video 60 menit memakai 240). Setiap respons mencantumkan
creditsUseddancreditsRemaining. Lihat harga untuk paket dan paket kredit.
Penanganan Error
Error dikembalikan sebagai JSON dengan kolom error.
| Status | error |
Yang harus dilakukan |
|---|---|---|
400 |
Invalid request body atau invalid-youtube-url |
Periksa URL dan kode bahasa |
401 |
Missing API key / Invalid or revoked API key |
Periksa header x-api-key |
402 |
insufficient-credits (dengan required dan available) |
Isi ulang kredit atau tingkatkan paket Anda |
403 |
api_access_requires_paid_plan |
Beralih ke paket berbayar |
404 |
no-captions |
Video tidak memiliki transkrip; coba video lain |
429 |
batas permintaan, atau transcript_provider_rate_limited |
Tunggu Retry-After, lalu coba lagi |
500 |
article_generation_failed |
Coba lagi sekali; jika terus gagal, hubungi kami |
502 |
transcript_provider_unavailable / llm_provider_error |
Sementara: coba lagi setelah jeda |
Pertanyaan yang Sering Diajukan
Bisakah saya mengirim file video alih-alih URL YouTube?
Tidak. API hanya menerima URL YouTube, dan videonya harus memiliki transkrip. Untuk file MP4, MOV, atau WebM, gunakan aplikasi web: aplikasi ini mentranskripsikan audio dan juga mengambil tangkapan layar untuk setiap bagian.
Apakah ada webhook atau endpoint status?
Tidak. Permintaan bersifat sinkron dan mengembalikan artikel yang sudah jadi. Jika Anda memproses banyak video, masukkan panggilan ke antrean pekerjaan Anda sendiri (cron job, n8n, Make.com, worker) dan simpan hasilnya begitu diterima.
Ke mana artikel yang dibuat melalui API disimpan?
Artikel disimpan di akun Vidiome Anda, jadi Anda akan menemukannya di dasbor. Itulah cara termudah untuk menambahkan tangkapan layar, memperbaiki satu bagian dengan penulisan ulang AI, atau mengekspor artikel sebagai HTML atau Markdown.
Langkah Selanjutnya
Jelajahi solusi terkait
Temukan cara lain untuk mengubah video menjadi tulisan yang berperingkat tinggi.
Otomatiskan konversi video YouTube menjadi artikel dengan Vidiome API
Kirim URL YouTube ke Vidiome API dan terima artikel jadi dalam JSON: judul dan bagian-bagiannya. 10 bahasa, paket berbayar, 10 permintaan/menit.
Berikan artikel SEO klien dari video dalam skala agensi
Vidiome adalah platform AI video-ke-artikel untuk agensi. Hasilkan artikel blog SEO dari video klien dalam kurang dari 5 menit. 10 bahasa, ekspor HTML/Markdown.
Skalakan pemasaran konten SaaS dengan video — otomatis
Konversi demo, webinar, dan tutorial menjadi artikel blog SEO secara otomatis. Vidiome membantu tim SaaS menghasilkan ~100 artikel/bulan dan meraih kutipan LLM.
Vidiome
Turn your videos into SEO traffic machines
Hasilkan artikel pertama sayaTanpa kartu kredit · 120 kredit gratis