Cara Menggunakan API Vidiome untuk Mengotomatiskan Pembuatan Artikel dari Video

    ·8 menit membaca·Oleh Vidiome Team
    Vidiome APIArticle AutomationDeveloper TutorialContent Automation

    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 saya

    Tanpa 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:

    • sections tersusun sesuai urutan baca: pendahuluan, bagian isi, lalu kesimpulan. title adalah judul H2 bagian tersebut. content berisi teks dengan baris ### untuk subjudul H3, baris kosong di antara paragraf, teks **tebal**, dan butir daftar - .
    • startTime / endTime dalam satuan detik dan menunjukkan bagian video asal setiap bagian artikel. Berguna untuk menyematkan video tepat di momen yang sesuai.
    • images selalu 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 429 dengan header Retry-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 creditsUsed dan creditsRemaining. 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

    Vidiome

    Turn your videos into SEO traffic machines

    Hasilkan artikel pertama saya

    Tanpa kartu kredit · 120 kredit gratis