<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Walse</title>
    <description>The latest articles on DEV Community by Walse (@walse).</description>
    <link>https://dev.to/walse</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2112661%2Fe62db7e6-764e-4e09-ade6-b75346d4aa5b.jpeg</url>
      <title>DEV Community: Walse</title>
      <link>https://dev.to/walse</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/walse"/>
    <language>en</language>
    <item>
      <title>Cara Menggunakan Seedance 2.0 API 2026</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Sat, 04 Apr 2026 13:04:51 +0000</pubDate>
      <link>https://dev.to/walse/cara-menggunakan-seedance-20-api-2026-4e1i</link>
      <guid>https://dev.to/walse/cara-menggunakan-seedance-20-api-2026-4e1i</guid>
      <description>&lt;h2&gt;
  
  
  Ringkasan
&lt;/h2&gt;

&lt;p&gt;API Seedance 2.0 resmi dirilis pada 2 April 2026 via Volcengine Ark. Workflow-nya: kirim tugas pembuatan video via POST, lalu polling endpoint GET sampai status &lt;code&gt;succeeded&lt;/code&gt;. Mendukung teks-ke-video, gambar-ke-video, kontrol bingkai awal/akhir, referensi multimodal, dan pembuatan audio asli. Video 1080p 5 detik sekitar $0.93. Download hasil dalam 24 jam sebelum link expired.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://hypereal.cloud" rel="noopener noreferrer"&gt;Hypereal AI&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://hypereal.cloud/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9no1b7kwev33vq2bcepw.png" alt="Seedance 2.0"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hypereal.cloud/" rel="noopener noreferrer"&gt;Coba Hypereal AI&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pendahuluan
&lt;/h2&gt;

&lt;p&gt;Pada 2 April 2026, Volcengine Ark (ByteDance) merilis API resmi Seedance 2.0. Sebelum itu, hanya bisa generate video via web console. Panduan ini langsung membahas penggunaan API untuk developer, bukan UI manual.&lt;/p&gt;

&lt;p&gt;💡API ini menerapkan pola tugas asinkron: POST buat tugas, terima ID, lalu polling GET sampai selesai. Uji pola ini sebelum produksi. Skenario Uji Apidog memudahkan chaining POST, ekstraksi ID, polling GET, serta validasi URL video. Lihat bagian Apidog untuk langkah detail pengujian.&lt;/p&gt;

&lt;p&gt;Artikel ini membahas tipe input yang didukung, perhitungan harga per token respons, serta error paling umum.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa itu Seedance 2.0?
&lt;/h2&gt;

&lt;p&gt;Seedance 2.0 adalah model video generator ByteDance di Volcengine Ark dengan ID &lt;code&gt;doubao-seedance-2-0-260128&lt;/code&gt; (standar) dan &lt;code&gt;doubao-seedance-2-0-fast-260128&lt;/code&gt; (lebih cepat, kualitas lebih rendah).&lt;/p&gt;

&lt;p&gt;Fitur utama vs versi 1.5:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kontrol bingkai awal-dan-akhir (dua gambar pembatas)&lt;/li&gt;
&lt;li&gt;Input multimodal: gambar, video, audio dalam satu request&lt;/li&gt;
&lt;li&gt;Pembuatan audio asli (dialog, SFX, ambien, musik)&lt;/li&gt;
&lt;li&gt;Lip sync lebih dari 8 bahasa&lt;/li&gt;
&lt;li&gt;Kontrol kamera via natural language (dolly, tracking, crane, dst)&lt;/li&gt;
&lt;li&gt;Output maksimal 15 detik, hingga 2K, 24fps, rasio 1:1–21:9&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Perubahan: panduan UI vs API resmi
&lt;/h2&gt;

&lt;p&gt;Panduan sebelumnya seperti &lt;a href="http://apidog.com/blog/how-to-use-seedance-2-0/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ini&lt;/a&gt; membahas web console. API resmi (rilis 2 April 2026) memungkinkan otomatisasi penuh dari bahasa pemrograman apa pun. Fokus artikel ini adalah implementasi melalui API untuk integrasi ke produk Anda.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prasyarat
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Daftar akun di &lt;a href="https://www.volcengine.com/" rel="noopener noreferrer"&gt;volcengine.com&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Akses Ark console:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://console.volcengine.com/ark/region:ark+cn-beijing/apikey
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Buat API key, lalu ekspor ke environment variable:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ARK_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-api-key-here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Setiap request butuh header:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authorization: Bearer YOUR_ARK_API_KEY
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Akun baru mendapatkan kredit trial gratis, cukup untuk ±8x generate full 15 detik 1080p.&lt;/p&gt;

&lt;h2&gt;
  
  
  Teks-ke-Video: Permintaan Pertama
&lt;/h2&gt;

&lt;p&gt;Endpoint dasar API Seedance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://ark.cn-beijing.volces.com/api/v3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kirim tugas T2V via POST ke &lt;code&gt;/v1/contents/generations/tasks&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh cURL
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s2"&gt;"https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$ARK_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "doubao-seedance-2-0-260128",
    "content": [
      {
        "type": "text",
        "text": "A golden retriever running through a sunlit wheat field, wide tracking shot, cinematic"
      }
    ],
    "resolution": "1080p",
    "ratio": "16:9",
    "duration": 5,
    "watermark": false
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Respons: ID tugas&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cgt-2025xxxxxxxx-xxxx"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Contoh Python (SDK Resmi)
&lt;/h3&gt;

&lt;p&gt;Instal SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;volcenginesdkarkruntime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kirim tugas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;volcenginesdkarkruntime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Ark&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Ark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ARK_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A golden retriever running through a sunlit wheat field, wide tracking shot, cinematic&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1080p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simpan ID tugas untuk polling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pola Tugas Asinkron: Kirim, Polling, Unduh
&lt;/h2&gt;

&lt;p&gt;Pembuatan video Seedance butuh waktu (5 detik = 1-2 menit). Workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;queued -&amp;gt; running -&amp;gt; succeeded
                  -&amp;gt; failed
                  -&amp;gt; expired
                  -&amp;gt; cancelled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Polling GET endpoint sampai status berubah dari queued/running.&lt;/p&gt;

&lt;h3&gt;
  
  
  Loop Polling Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;volcenginesdkarkruntime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Ark&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Ark&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ARK_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Step 1: Submit
&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Aerial shot of a mountain lake at sunrise, slow dolly forward&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1080p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task submitted: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Step 2: Poll dengan exponential backoff
&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;succeeded&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;video_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;expired&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cancelled&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Task ended with status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;

    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;wait&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Step 3: Download segera
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;succeeded&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;iter_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk_size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8192&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Downloaded: output.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penundaan eksponensial mencegah API overload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gambar-ke-Video (I2V): Animasi Gambar Diam
&lt;/h2&gt;

&lt;p&gt;Tambahkan object &lt;code&gt;image_url&lt;/code&gt; ke array &lt;code&gt;content&lt;/code&gt; untuk set gambar awal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The woman slowly turns her head and smiles at the camera&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/portrait.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;adaptive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set &lt;code&gt;ratio&lt;/code&gt; ke &lt;code&gt;"adaptive"&lt;/code&gt; agar mengikuti aspek gambar input. Maks 30MB/gambar, hingga 9 gambar/request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bingkai Awal dan Akhir: Kontrol Frame Pembatas
&lt;/h2&gt;

&lt;p&gt;Seedance 2.0 mendukung input dua gambar (awal–akhir) plus prompt teks. Model menghasilkan transisi di antaranya.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The flower blooms from bud to full open, macro lens, soft light&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/flower-bud.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/flower-open.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;adaptive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Urutan gambar: [pertama, terakhir]. Gunakan &lt;code&gt;return_last_frame: true&lt;/code&gt; jika ingin chaining klip berikutnya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referensi Multimodal: Gabung Gambar, Video, dan Audio
&lt;/h2&gt;

&lt;p&gt;Array &lt;code&gt;content&lt;/code&gt; bisa berisi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;{"type": "text", "text": "..."}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{"type": "image_url", "image_url": {"url": "..."}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{"type": "video_url", "video_url": {"url": "..."}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{"type": "audio_url", "audio_url": {"url": "..."}}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Batas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;9 gambar (max 30MB/pcs)&lt;/li&gt;
&lt;li&gt;3 video (2–15 detik, max 50MB/pcs)&lt;/li&gt;
&lt;li&gt;3 audio (MP3, max 15MB/pcs)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Match the visual style of the reference clip and add the provided background audio&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/style-reference.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/motion-reference.mp4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;audio_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;audio_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/background-music.mp3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika menyertakan referensi video, biaya per token lebih murah (V2V).&lt;/p&gt;

&lt;h2&gt;
  
  
  Pembuatan Audio Asli
&lt;/h2&gt;

&lt;p&gt;Aktifkan &lt;code&gt;generate_audio: true&lt;/code&gt; untuk auto generate audio sinkron dengan video.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content_generation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;doubao-seedance-2-0-260128&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A street musician plays guitar outside a cafe in Paris, crowds passing by, city sounds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1080p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;generate_audio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;watermark&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Audio: dialog, SFX, suara ambien, musik. Lip sync &amp;gt;8 bahasa. Biaya token sedikit naik dibanding video tanpa suara.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kontrol Resolusi, Rasio, Durasi
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;resolusi&lt;/strong&gt;: &lt;code&gt;"480p"&lt;/code&gt;, &lt;code&gt;"720p"&lt;/code&gt;, &lt;code&gt;"1080p"&lt;/code&gt;, &lt;code&gt;"2K"&lt;/code&gt; (default: 1080p)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rasio&lt;/strong&gt;: &lt;code&gt;"16:9"&lt;/code&gt;, &lt;code&gt;"9:16"&lt;/code&gt;, &lt;code&gt;"4:3"&lt;/code&gt;, &lt;code&gt;"3:4"&lt;/code&gt;, &lt;code&gt;"21:9"&lt;/code&gt;, &lt;code&gt;"1:1"&lt;/code&gt;, &lt;code&gt;"adaptive"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;durasi&lt;/strong&gt;: integer 4–15 detik (default: 5)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Model fast (&lt;code&gt;doubao-seedance-2-0-fast-260128&lt;/code&gt;) lebih cepat, kualitas lebih rendah. Gunakan fast untuk iterasi prompt, standar untuk produksi.&lt;/p&gt;

&lt;p&gt;Pilih Seedance 2.0 jika butuh audio-video asli, frame control, atau input multimodal. Untuk T2V sederhana, model fast 480p = opsi termurah.&lt;/p&gt;

&lt;h2&gt;
  
  
  Membaca Biaya dari Respons
&lt;/h2&gt;

&lt;p&gt;Respons sukses berisi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"completion_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;246840&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;246840&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Konsumsi token tergantung durasi dan resolusi. Estimasi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1080p 15 detik: ~308.880 token&lt;/li&gt;
&lt;li&gt;1080p 5 detik: ~102.960 token&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Harga:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;T2V/I2V 1080p: 46 yuan/1 juta token (~$6.40)&lt;/li&gt;
&lt;li&gt;V2V: 28 yuan/1 juta token (~$3.90)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1080p 5 detik ≈ 0.47 yuan ≈ $0.93&lt;/li&gt;
&lt;li&gt;1080p 10 detik ≈ 9.47 yuan ≈ $1.97&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bangun pelacakan biaya dengan membaca &lt;code&gt;completion_tokens&lt;/code&gt; × tarif per jenis tugas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Penting: Unduh Video dalam 24 Jam
&lt;/h2&gt;

&lt;p&gt;URL &lt;code&gt;video_url&lt;/code&gt; yang diberikan hanya valid 24 jam. Setelah itu, file hilang (403). Download segera setelah status &lt;code&gt;succeeded&lt;/code&gt;. Kolom &lt;code&gt;execution_expires_after&lt;/code&gt; memberi tahu window expire dalam detik (tugas bertahan max 7 hari, file video hanya 24 jam).&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Menguji API Seedance dengan Apidog
&lt;/h2&gt;

&lt;p&gt;Pola asinkron perlu dua request berantai. Apidog mendukung chaining dengan Skenario Uji.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7qpzpmtge0bkzzppks6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7qpzpmtge0bkzzppks6.png" alt="Apidog Seedance"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Langkah Implementasi:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Buat Skenario Uji&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modul Tests → New Scenario "Pembuatan video Seedance 2.0"&lt;/li&gt;
&lt;li&gt;Set env var &lt;code&gt;ARK_API_KEY&lt;/code&gt; di Environment Settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Tambah Request POST&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Endpoint: &lt;code&gt;https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Header: &lt;code&gt;Authorization: Bearer {{ARK_API_KEY}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Body: JSON tugas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Extract Variable&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extract dari body response dengan JSONPath &lt;code&gt;$.id&lt;/code&gt; → simpan ke var &lt;code&gt;TASK_ID&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Tambah Prosesor Tunggu&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delay 30 detik setelah submit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Polling Loop (For Max 20)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GET &lt;code&gt;https://ark.cn-beijing.volces.com/api/v3/contents/generations/tasks/{{TASK_ID}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Tunggu 10 detik tiap iterasi&lt;/li&gt;
&lt;li&gt;Break If: &lt;code&gt;$.status == "succeeded"&lt;/code&gt; atau &lt;code&gt;$.status == "failed"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Assertion&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$.status&lt;/code&gt; == &lt;code&gt;"succeeded"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$.content.video_url&lt;/code&gt; tidak kosong&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jalankan skenario, Apidog akan tunjukkan semua langkah, respons, dan hasil assertion. Anda juga bisa import endpoint Seedance dari cURL langsung.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rincian Harga: Biaya Video 10 Detik
&lt;/h2&gt;

&lt;p&gt;Harga token pay-as-you-go, tanpa biaya bulanan.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Jenis Tugas&lt;/th&gt;
&lt;th&gt;Tarif (per 1 Juta token)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;T2V / I2V pada 1080p&lt;/td&gt;
&lt;td&gt;46 yuan (~$6.40)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;V2V (input referensi video)&lt;/td&gt;
&lt;td&gt;28 yuan (~$3.90)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Estimasi biaya (1080p):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Durasi&lt;/th&gt;
&lt;th&gt;Estimasi Token&lt;/th&gt;
&lt;th&gt;Biaya (T2V/I2V)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;5 detik&lt;/td&gt;
&lt;td&gt;~103.000&lt;/td&gt;
&lt;td&gt;~0.66 yuan / ~$0.93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10 detik&lt;/td&gt;
&lt;td&gt;~206.000&lt;/td&gt;
&lt;td&gt;~9.48 yuan / ~$1.32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15 detik&lt;/td&gt;
&lt;td&gt;~309.000&lt;/td&gt;
&lt;td&gt;~14.21 yuan / ~$1.97&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Trial gratis cukup untuk ±8x generate 15 detik penuh. Untuk development, pakai 720p atau 480p, naikkan ke 1080p/2K hanya untuk produksi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesalahan Umum dan Solusi
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;429 Terlalu Banyak Permintaan&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Batas konkurensi tercapai (bukan rate limit RPM). Gunakan exponential backoff (tunggu 10 detik, gandakan tiap retry, max 60 detik).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;status: "failed"&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Model gagal generate video. Cek prompt (jangan mengandung konten terlarang), gambar rusak/terlalu besar, atau kombinasi parameter invalid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;status: "expired"&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tugas timeout (misal karena antrean saat traffic tinggi). Submit ulang, tidak bisa resume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;403 pada video_url&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
URL sudah expired (lewat 24 jam). Regenerasi dengan parameter dan seed sama (jika masih disimpan).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reproduksi dengan seed&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Simpan nilai &lt;code&gt;seed&lt;/code&gt; dari respons, kirim ulang pada request baru untuk mencoba replikasi output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;API Seedance 2.0 menawarkan kontrol terprogram penuh atas pembuatan video AI tingkat lanjut. Pola kerja: submit via POST → polling GET → download segera. Manfaatkan input multimodal, audio asli, frame control untuk workflow yang tidak bisa dilakukan via UI. Implementasikan pengujian dengan Apidog untuk memastikan reliability pipeline sebelum produksi.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;T: Apa beda doubao-seedance-2-0-260128 dan doubao-seedance-2-0-fast-260128?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
StAndar = kualitas tinggi (untuk produksi), fast = lebih cepat, kualitas turun (untuk rapid prototyping).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Bisa dipakai di luar Tiongkok?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Endpoint di Beijing, developer global bisa akses, tapi ada latency lebih tinggi. Cek terms Volcengine untuk batasan akun.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Cara chaining beberapa klip jadi video panjang?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Set &lt;code&gt;return_last_frame: true&lt;/code&gt; pada tiap klip, ambil frame terakhir untuk jadi input awal klip selanjutnya. Gabung semua klip di aplikasi video editing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Generate audio asli lebih mahal?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Token usage naik moderat karena proses audio-video bersama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Bisa pakai webhook, bukan polling?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Bisa. Kirim &lt;code&gt;callback_url&lt;/code&gt; di request, API akan POST ke URL tsb saat status berubah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Melebihi 9 gambar?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
API akan return error 400. Kurangi jumlah gambar ≤9.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Apakah seed selalu reproduksi video identik?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Seed mendekati reproduksi, tapi tidak 100% jika parameter/model berubah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Cara tracking biaya per tugas?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ambil &lt;code&gt;completion_tokens&lt;/code&gt; dari respons, kalikan dengan tarif. Simpan di DB sendiri, tidak ada dashboard built-in.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cara Menggunakan Grok Text to Video API (Panduan Lengkap)</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Fri, 03 Apr 2026 08:47:26 +0000</pubDate>
      <link>https://dev.to/walse/cara-menggunakan-grok-text-to-video-api-panduan-lengkap-12fp</link>
      <guid>https://dev.to/walse/cara-menggunakan-grok-text-to-video-api-panduan-lengkap-12fp</guid>
      <description>&lt;h2&gt;
  
  
  Ringkasan
&lt;/h2&gt;

&lt;p&gt;API Grok text-to-video memungkinkan Anda menghasilkan video dari prompt teks. Langkah dasarnya: lakukan &lt;code&gt;POST /v1/videos/generations&lt;/code&gt;, Anda akan menerima &lt;code&gt;request_id&lt;/code&gt;, lalu polling dengan &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt; sampai status-nya &lt;code&gt;"done"&lt;/code&gt;. Model yang digunakan adalah &lt;code&gt;grok-imagine-video&lt;/code&gt;, mulai dari $0.05 per detik untuk resolusi 480p. xAI Python SDK sudah menangani polling otomatis.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Pendahuluan
&lt;/h2&gt;

&lt;p&gt;Pada Januari 2026 saja, xAI menghasilkan 1,2 miliar video setelah peluncuran API Grok text-to-video. Model ini langsung menduduki peringkat 1 di leaderboard text-to-video Artificial Analysis. Inilah bukti infrastrukturnya siap untuk skala besar.&lt;/p&gt;

&lt;p&gt;Panduan berikut langsung praktik: membuat permintaan pertama, polling hasil, pengaturan parameter, dan menulis prompt yang efektif. Anda juga akan belajar penggunaan gambar referensi, memperpanjang/mengedit video, serta menentukan kapan text-to-video tepat digunakan.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;API bersifat async:&lt;/strong&gt; Frontend tidak bisa menunggu video selesai sebelum merender. Untuk membangun UI video generator, Anda perlu alur polling yang efisien agar tidak membuang kredit saat development. Smart Mock Apidog bisa memalsukan endpoint pembuatan dan polling, sehingga tim frontend dapat membangun UI tanpa menunggu backend siap. Unduh Apidog gratis untuk pengujian API Grok Anda.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Apa itu API Grok text to video?
&lt;/h2&gt;

&lt;p&gt;API Grok text-to-video adalah bagian dari suite media xAI di &lt;code&gt;https://api.x.ai&lt;/code&gt;. Anda cukup mengirim prompt teks, model &lt;code&gt;grok-imagine-video&lt;/code&gt; akan menghasilkan video tanpa butuh gambar sumber.&lt;/p&gt;

&lt;p&gt;Tersedia juga endpoint pembuatan gambar sinkron (&lt;code&gt;POST /v1/images/generations&lt;/code&gt;, model &lt;code&gt;grok-imagine-image&lt;/code&gt;, $0.02/gambar) serta endpoint untuk memperpanjang atau mengedit video.&lt;/p&gt;

&lt;p&gt;Endpoint text-to-video hanya membutuhkan teks. Model membangun visual, gerak, dan gaya dari deskripsi Anda. Jika ingin menganimasikan gambar sumber, cek &lt;a href="http://apidog.com/blog/grok-image-to-video-api/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;panduan API Grok image to video&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Kerja Pembuatan Text-to-Video (Async Pattern)
&lt;/h2&gt;

&lt;p&gt;Berbeda dari API sinkron, proses pembuatan video membutuhkan waktu sehingga menggunakan pola async:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kirim &lt;code&gt;POST&lt;/code&gt; dengan prompt.&lt;/li&gt;
&lt;li&gt;Dapatkan &lt;code&gt;request_id&lt;/code&gt; secara instan.&lt;/li&gt;
&lt;li&gt;Video diproses di server xAI.&lt;/li&gt;
&lt;li&gt;Polling endpoint &lt;code&gt;GET&lt;/code&gt; dengan &lt;code&gt;request_id&lt;/code&gt; berulang kali.&lt;/li&gt;
&lt;li&gt;Jika status berubah ke &lt;code&gt;"done"&lt;/code&gt;, respons berisi URL video.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Frontend Anda harus menangani status menengah, misal menampilkan loading indicator sampai URL video tersedia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prasyarat
&lt;/h2&gt;

&lt;p&gt;Sebelum mulai:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Akun xAI:&lt;/strong&gt; Daftar di &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Key:&lt;/strong&gt; Buat API key di menu API Keys, simpan, dan gunakan sebagai Bearer token di header permintaan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Set variabel environment agar key tidak hardcode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_api_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Opsional: Install xAI Python SDK (cara termudah integrasi):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;xai-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-69.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-69.png" alt="" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Permintaan Text-to-Video Pertama Anda
&lt;/h2&gt;

&lt;p&gt;Endpoint: &lt;code&gt;POST https://api.x.ai/v1/videos/generations&lt;/code&gt;. Field wajib: &lt;code&gt;model&lt;/code&gt; dan &lt;code&gt;prompt&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Menggunakan curl
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "prompt": "A golden retriever running through autumn leaves in slow motion, cinematic lighting"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Respons:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"d97415a1-5796-b7ec-379f-4e6819e08fdf"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Menggunakan Python (requests)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A golden retriever running through autumn leaves in slow motion, cinematic lighting&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos/generations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;request_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generation started. Request ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Polling untuk Hasil Video
&lt;/h2&gt;

&lt;p&gt;Setelah mendapat &lt;code&gt;request_id&lt;/code&gt;, polling endpoint &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt; hingga status &lt;code&gt;"done"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Status yang mungkin:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;"processing"&lt;/code&gt;: masih diproses&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"done"&lt;/code&gt;: selesai, URL tersedia&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"failed"&lt;/code&gt;: gagal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh loop polling Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;progress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;progress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Attempt &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: status=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, progress=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;done&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video generation failed: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;TimeoutError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video not ready after &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;max_attempts&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; attempts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/v1/videos/generations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;request_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Request ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;video_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video ready: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;video_url&lt;/span&gt;

&lt;span class="n"&gt;video_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generate_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A timelapse of a city skyline at sunset transitioning to night, aerial view&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contoh respons polling selesai:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"done"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://vidgen.x.ai/....mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"respect_moderation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"progress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cost_in_usd_ticks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500000000&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Menggunakan xAI Python SDK
&lt;/h2&gt;

&lt;p&gt;Gunakan SDK untuk otomatisasi polling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;xai_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A golden retriever running through autumn leaves in slow motion&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;720p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;aspect_ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Duration: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gunakan SDK untuk integrasi cepat. Untuk kontrol lebih lanjut (retry, interval polling custom), gunakan permintaan mentah.&lt;/p&gt;

&lt;h2&gt;
  
  
  Menulis Prompt yang Efektif
&lt;/h2&gt;

&lt;p&gt;Prompt yang baik sangat menentukan hasil. Berikut struktur yang direkomendasikan:&lt;/p&gt;

&lt;h3&gt;
  
  
  Deskripsi Adegan
&lt;/h3&gt;

&lt;p&gt;Gabungkan subjek dan latar. Contoh:&lt;br&gt;&lt;br&gt;
&lt;code&gt;Cangkir kopi keramik putih di atas meja kayu di samping jendela yang basah karena hujan&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Gerakan
&lt;/h3&gt;

&lt;p&gt;Jelaskan apa yang bergerak dan bagaimana:&lt;br&gt;&lt;br&gt;
&lt;code&gt;Kamera perlahan mengitari cangkir saat uap mengepul ke atas&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Gaya Kamera
&lt;/h3&gt;

&lt;p&gt;Gunakan istilah sinematografi:&lt;br&gt;&lt;br&gt;
&lt;code&gt;close-up&lt;/code&gt;, &lt;code&gt;tracking shot&lt;/code&gt;, &lt;code&gt;overhead drone view&lt;/code&gt;, dll.&lt;/p&gt;
&lt;h3&gt;
  
  
  Pencahayaan &amp;amp; Suasana
&lt;/h3&gt;

&lt;p&gt;Gabungkan istilah seperti:&lt;br&gt;&lt;br&gt;
&lt;code&gt;golden hour&lt;/code&gt;, &lt;code&gt;overcast&lt;/code&gt;, &lt;code&gt;neon-lit&lt;/code&gt;, &lt;code&gt;studio three-point lighting&lt;/code&gt;, dst.&lt;/p&gt;
&lt;h3&gt;
  
  
  Referensi Gaya
&lt;/h3&gt;

&lt;p&gt;Tambahkan gaya visual:&lt;br&gt;&lt;br&gt;
&lt;code&gt;sinematik&lt;/code&gt;, &lt;code&gt;dokumenter&lt;/code&gt;, &lt;code&gt;anime&lt;/code&gt;, &lt;code&gt;stop-motion&lt;/code&gt;, dst.&lt;/p&gt;
&lt;h3&gt;
  
  
  Contoh Struktur Prompt
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A lone astronaut floats past the International Space Station,
tether drifting behind them. The camera tracks slowly
alongside, showing Earth below. Cinematic, IMAX quality,
warm sunrise light reflecting off the visor.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Kontrol Resolusi, Durasi, dan Rasio Aspek
&lt;/h2&gt;

&lt;p&gt;Anda bisa atur dengan parameter opsional:&lt;/p&gt;
&lt;h3&gt;
  
  
  Durasi
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Rentang: 1-15 detik. Default: 6 detik.&lt;/p&gt;
&lt;h3&gt;
  
  
  Resolusi
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"720p"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pilihan: &lt;code&gt;"480p"&lt;/code&gt; (default), &lt;code&gt;"720p"&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Rasio Aspek
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"aspect_ratio"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"9:16"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pilihan:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rasio&lt;/th&gt;
&lt;th&gt;Terbaik untuk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;16:9&lt;/td&gt;
&lt;td&gt;Desktop, YouTube, presentasi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9:16&lt;/td&gt;
&lt;td&gt;TikTok, Reels, mobile&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1:1&lt;/td&gt;
&lt;td&gt;Instagram feed, social card&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4:3&lt;/td&gt;
&lt;td&gt;Video klasik, presentasi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3:4&lt;/td&gt;
&lt;td&gt;Konten mobile portrait&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3:2&lt;/td&gt;
&lt;td&gt;Standar foto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2:3&lt;/td&gt;
&lt;td&gt;Fotografi potret&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Contoh Permintaan Lengkap
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "prompt": "A coastal town at dawn, waves breaking gently on a rocky shore",
    "duration": 10,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Menggunakan Gambar Referensi untuk Gaya Video
&lt;/h2&gt;

&lt;p&gt;Parameter &lt;code&gt;reference_images&lt;/code&gt; menerima array max 7 URL gambar.&lt;br&gt;&lt;br&gt;
Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-imagine-video"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A coastal town at dawn, waves breaking gently on a rocky shore"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reference_images"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/my-style-reference.jpg"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/color-palette-reference.jpg"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gunakan gambar referensi dengan gaya yang konsisten untuk hasil terbaik.&lt;br&gt;&lt;br&gt;
Berbeda dengan image-to-video, prompt tetap memimpin adegan, gambar hanya memandu gaya visual.&lt;/p&gt;
&lt;h2&gt;
  
  
  Memperpanjang &amp;amp; Mengedit Video
&lt;/h2&gt;

&lt;p&gt;xAI menyediakan endpoint tambahan:&lt;/p&gt;
&lt;h3&gt;
  
  
  Memperpanjang Video
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;POST /v1/videos/extensions&lt;/code&gt;&lt;br&gt;&lt;br&gt;
Tambahkan rekaman ke video eksisting dengan &lt;code&gt;request_id&lt;/code&gt; dan prompt baru.&lt;/p&gt;
&lt;h3&gt;
  
  
  Mengedit Video
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;POST /v1/videos/edits&lt;/code&gt;&lt;br&gt;&lt;br&gt;
Modifikasi video berdasarkan instruksi teks.&lt;/p&gt;

&lt;p&gt;Kedua endpoint ini juga async: dapatkan &lt;code&gt;request_id&lt;/code&gt;, lalu polling dengan &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Membaca Biaya dari Respons API
&lt;/h2&gt;

&lt;p&gt;Cek biaya dari field &lt;code&gt;usage&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cost_in_usd_ticks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500000000&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Konversi ke USD:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;cost_in_usd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;usage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cost_in_usd_ticks&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;10_000_000&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cost: $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;cost_in_usd&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Output: Cost: $0.0500
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Referensi Harga
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resolusi&lt;/th&gt;
&lt;th&gt;Harga per detik&lt;/th&gt;
&lt;th&gt;Klip 10 detik&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;480p&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;720p&lt;/td&gt;
&lt;td&gt;$0.07&lt;/td&gt;
&lt;td&gt;$0.70&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Lacak penggunaan dengan menyimpan &lt;code&gt;cost_in_usd_ticks&lt;/code&gt; dari setiap respons selesai.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Menguji API Video Grok dengan Apidog
&lt;/h2&gt;

&lt;p&gt;Polling async menuntut frontend menangani status memuat, sukses, error. Mocking dengan Apidog sangat disarankan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-70.png" alt="" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Kasus Penggunaan 1: Smart Mock untuk Pengembangan Frontend
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://apidog.com/api-mocking/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Smart Mock Apidog&lt;/a&gt; bisa memberikan respons palsu sesuai skema endpoint Anda.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mock endpoint pembuatan:&lt;/strong&gt;
Buat endpoint &lt;code&gt;POST /v1/videos/generations&lt;/code&gt; dengan respons &lt;code&gt;request_id&lt;/code&gt; string.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"d97415a1-5796-b7ec-379f-4e6819e08fdf"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mock endpoint polling:&lt;/strong&gt;
Buat &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt; dengan respons mock status &lt;code&gt;"done"&lt;/code&gt; dan URL video placeholder.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"done"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://vidgen.x.ai/mock-video-12345.mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"respect_moderation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"progress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cost_in_usd_ticks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;400000000&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Frontend dapat menguji seluruh UI tanpa menghabiskan kredit API. Respons mock bisa diubah ke &lt;code&gt;"failed"&lt;/code&gt; untuk menguji error handling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kasus Penggunaan 2: Skenario Pengujian untuk Loop Polling
&lt;/h3&gt;

&lt;p&gt;Testing otomatis dengan Skenario Pengujian Apidog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tambah permintaan pembuatan:&lt;/strong&gt;
Tambah &lt;code&gt;POST /v1/videos/generations&lt;/code&gt; dan ekstrak &lt;code&gt;request_id&lt;/code&gt; ke variabel, misal &lt;code&gt;videoRequestId&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tambah loop polling:&lt;/strong&gt;
Tambah &lt;code&gt;GET /v1/videos/{{videoRequestId}}&lt;/code&gt; dalam loop For, berhenti jika &lt;code&gt;response.body.status == "done"&lt;/code&gt;. Tambahkan Wait 5 detik per iterasi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assert hasil:&lt;/strong&gt;
Setelah loop, pastikan &lt;code&gt;$.video.url&lt;/code&gt; tidak kosong.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Testing async workflow jadi otomatis dan dapat dijalankan di CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Text-to-Video vs Image-to-Video: Kapan Menggunakannya
&lt;/h2&gt;

&lt;p&gt;Dua mode, model sama (&lt;code&gt;grok-imagine-video&lt;/code&gt;), tujuan berbeda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gunakan text-to-video jika:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Konten orisinal dari konsep/skrip&lt;/li&gt;
&lt;li&gt;Ingin model punya kontrol kreatif penuh&lt;/li&gt;
&lt;li&gt;Alat content creation berbasis prompt&lt;/li&gt;
&lt;li&gt;Tidak ada gambar sumber&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Gunakan image-to-video jika:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ada foto/ilustrasi/brand asset untuk dianimasikan&lt;/li&gt;
&lt;li&gt;Harus mempertahankan detail visual&lt;/li&gt;
&lt;li&gt;Animasi konsisten dari gambar terkait&lt;/li&gt;
&lt;li&gt;Ingin menganimasikan karya seni/foto sendiri&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Text-to-video membangun adegan dari awal. Image-to-video membuat gambar bergerak.&lt;br&gt;&lt;br&gt;
Panduan lengkap: &lt;a href="https://apidog.com/api-mocking/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;API Grok image to video&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Jika pengguna upload gambar, gunakan &lt;code&gt;POST /v1/images/generations&lt;/code&gt;. Jika hanya prompt, gunakan &lt;code&gt;POST /v1/videos/generations&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesalahan Umum dan Solusinya
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;401 Unauthorized:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
API key salah/hilang/kedaluwarsa. Pastikan header Authorization: &lt;code&gt;Bearer YOUR_XAI_API_KEY&lt;/code&gt; tanpa spasi ekstra dan key masih aktif.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;429 Too Many Requests:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Kena rate limit (max 60 req/min, 1 req/detik). Tambahkan delay polling minimal 5 detik.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;status: "failed":&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Prompt gagal/moderasi. Kolom &lt;code&gt;respect_moderation&lt;/code&gt; menandakan moderasi aktif. Revisi prompt Anda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;URL video 404:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
URL video sementara. Segera download ke storage Anda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Video kosong/beku:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Prompt terlalu umum/tanpa isyarat gerakan. Tambahkan deskripsi gerakan yang jelas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Polling lambat:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
720p/durasi panjang butuh waktu lebih lama. Untuk development, gunakan 480p &amp;amp; durasi pendek.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;API Grok text-to-video memudahkan konversi teks ke video. Kirim prompt, dapatkan &lt;code&gt;request_id&lt;/code&gt;, polling hingga selesai, ambil MP4. Async pattern adalah kunci. Jika loop polling sudah jalan, parameter lain bisa disesuaikan dengan mudah.&lt;/p&gt;

&lt;p&gt;Untuk produksi, lacak biaya via &lt;code&gt;cost_in_usd_ticks&lt;/code&gt; di setiap respons. Mock endpoint di Apidog saat development untuk UI frontend yang lebih gesit. Gunakan Test Scenarios agar polling logic tetap stabil seiring integrasi berkembang.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Model apa untuk text-to-video?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Gunakan &lt;code&gt;grok-imagine-video&lt;/code&gt; di field &lt;code&gt;model&lt;/code&gt; saat POST ke &lt;code&gt;/v1/videos/generations&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Berapa lama pembuatan video?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tergantung durasi &amp;amp; resolusi. 480p pendek &amp;lt;30 detik, 720p panjang bisa beberapa menit. Polling setiap 5-10 detik.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bisakah video &amp;gt;15 detik?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tidak dalam satu permintaan. Maksimal 15 detik. Untuk lebih panjang, gunakan &lt;code&gt;POST /v1/videos/extensions&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana cara download video?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ambil URL dari &lt;code&gt;result.video.url&lt;/code&gt; di respons polling selesai. Download segera karena URL sementara.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jika prompt kena moderasi?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Status polling jadi &lt;code&gt;"failed"&lt;/code&gt;. Kolom &lt;code&gt;respect_moderation&lt;/code&gt; menandakan moderasi aktif. Revisi prompt dan coba lagi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah ada free tier?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
xAI mengenakan biaya per detik video. Tidak ada free tier spesifik. Cek &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt; untuk promo kredit akun baru.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apa beda &lt;code&gt;reference_images&lt;/code&gt; dengan gambar sumber?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;reference_images&lt;/code&gt; hanya memandu gaya visual. Untuk image-to-video, gambar sumber jadi frame awal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tes polling loop tanpa menghabiskan kredit?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Gunakan Smart Mock Apidog untuk membuat endpoint pembuatan dan polling palsu. Skema bisa mengembalikan status &lt;code&gt;"processing"&lt;/code&gt; dan &lt;code&gt;"done"&lt;/code&gt; agar kode polling bisa dites tanpa akses API asli.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cara Menggunakan API Grok Image ke Video: Panduan Lengkap Langkah demi Langkah</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Fri, 03 Apr 2026 08:42:30 +0000</pubDate>
      <link>https://dev.to/walse/cara-menggunakan-api-grok-image-ke-video-panduan-lengkap-langkah-demi-langkah-19ml</link>
      <guid>https://dev.to/walse/cara-menggunakan-api-grok-image-ke-video-panduan-lengkap-langkah-demi-langkah-19ml</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;API Grok image-to-video dengan model &lt;code&gt;grok-imagine-video&lt;/code&gt; dapat menganimasikan gambar statis menjadi klip video. Kirim POST berisi URL gambar, prompt, dan pengaturan opsional ke &lt;code&gt;https://api.x.ai/v1/videos/generations&lt;/code&gt;. Anda akan menerima &lt;code&gt;request_id&lt;/code&gt; untuk polling status via &lt;code&gt;GET /v1/videos/{request_id}&lt;/code&gt; hingga &lt;code&gt;status&lt;/code&gt; menjadi &lt;code&gt;"done"&lt;/code&gt;. Durasi output 1–15 detik. Harga mulai $0.05/detik untuk 480p.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Pengantar
&lt;/h2&gt;

&lt;p&gt;Pada 28 Januari 2026, xAI meluncurkan model &lt;code&gt;grok-imagine-video&lt;/code&gt; untuk akses API publik. Dalam bulan pertamanya, model ini menghasilkan 1,2 miliar video dan menempati peringkat #1 text-to-video di Artificial Analysis. Image-to-video adalah fitur kunci: cukup kirim foto dan prompt deskriptif ke API, lalu dapatkan klip animasi siap unduh (MP4).&lt;/p&gt;

&lt;p&gt;Karena proses asinkron, pengujian integrasi tidak berhenti di POST 200. Anda harus memastikan loop polling menangani status &lt;code&gt;"processing"&lt;/code&gt;, &lt;code&gt;"done"&lt;/code&gt;, dan &lt;code&gt;"failed"&lt;/code&gt; di kondisi nyata.&lt;/p&gt;

&lt;p&gt;Skenario Uji Apidog memudahkan alur ini: chaining POST ke &lt;code&gt;/v1/videos/generations&lt;/code&gt;, ekstraksi &lt;code&gt;request_id&lt;/code&gt;, polling berulang hingga &lt;code&gt;status == "done"&lt;/code&gt;, dan validasi URL video. Ikuti panduan ini untuk menguji otomatis dengan Apidog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa itu API Grok Image-to-Video?
&lt;/h2&gt;

&lt;p&gt;API Grok image-to-video adalah bagian dari produk generasi video xAI. Model &lt;code&gt;grok-imagine-video&lt;/code&gt; menerima gambar sebagai bingkai pertama video output. Model memproses konten gambar dan prompt, lalu menghasilkan gerakan alami untuk animasi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Endpoint:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST https://api.x.ai/v1/videos/generations
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Autentikasi:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Authorization: Bearer YOUR_XAI_API_KEY
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ambil API key dari &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;konsol xAI&lt;/a&gt;. Endpoint ini juga mendukung text-to-video (tanpa parameter &lt;code&gt;image&lt;/code&gt;), ekstensi video, dan pengeditan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Kerja Proses Image-to-Video
&lt;/h2&gt;

&lt;p&gt;Parameter &lt;code&gt;image&lt;/code&gt; pada request menentukan &lt;strong&gt;bingkai pertama&lt;/strong&gt; video. Model memulai dari gambar tersebut dan memprediksi gerakan berdasarkan prompt.&lt;/p&gt;

&lt;p&gt;Contoh: Kirim foto danau pegunungan saat matahari terbit, prompt "riak lembut menyebar di permukaan air saat kabut pagi melayang". Bingkai pertama = foto asli. Bingkai selanjutnya = air/kabut bergerak.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kapan pakai image-to-video:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Punya foto produk, lanskap, atau potret yang ingin digerakkan&lt;/li&gt;
&lt;li&gt;Membutuhkan identitas visual konsisten di frame pertama&lt;/li&gt;
&lt;li&gt;Ingin gerakan terasa nyata atau spesifik&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kapan pakai text-to-video:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tidak ada gambar referensi&lt;/li&gt;
&lt;li&gt;Komposisi adegan ingin ditentukan model&lt;/li&gt;
&lt;li&gt;Kecepatan iterasi lebih penting dari presisi&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prasyarat
&lt;/h2&gt;

&lt;p&gt;Sebelum mulai, siapkan:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Akun xAI&lt;/strong&gt; di &lt;a href="https://console.x.ai" rel="noopener noreferrer"&gt;console.x.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Key&lt;/strong&gt; dari konsol (simpan di environment variable)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.8+&lt;/strong&gt; atau &lt;strong&gt;Node.js 18+&lt;/strong&gt; (contoh tersedia untuk keduanya)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL gambar publik&lt;/strong&gt; atau gambar base64 sebagai data URI&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozcnsdoclf1obpc6q6w3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozcnsdoclf1obpc6q6w3.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set environment variable API key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install SDK Python xAI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;xai-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Untuk raw HTTP, cukup gunakan &lt;code&gt;requests&lt;/code&gt; (Python) atau &lt;code&gt;fetch&lt;/code&gt; (Node.js).&lt;/p&gt;

&lt;h2&gt;
  
  
  Permintaan Image-to-Video Pertama Anda
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Menggunakan curl
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/generations &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "prompt": "Gentle waves move across the surface, morning mist rises slowly",
    "image": {
      "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg"
    },
    "duration": 6,
    "resolution": "720p",
    "aspect_ratio": "16:9"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Respons:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"d97415a1-5796-b7ec-379f-4e6819e08fdf"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Video belum siap—lakukan polling untuk hasilnya.&lt;/p&gt;

&lt;h3&gt;
  
  
  Menggunakan Python (raw request)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gentle waves move across the surface, morning mist rises slowly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/24701-nature-natural-beauty.jpg/1280px-24701-nature-natural-beauty.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;duration&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resolution&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;720p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;aspect_ratio&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai/v1/videos/generations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;request_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Job started: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Gambar Base64
&lt;/h3&gt;

&lt;p&gt;Jika gambar lokal, enkode ke data URI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my_image.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;encoded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data:image/jpeg;base64,&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;encoded&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Polling untuk Hasil
&lt;/h2&gt;

&lt;p&gt;Video digenerate secara asinkron. Gunakan endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET https://api.x.ai/v1/videos/{request_id}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Status yang mungkin:&lt;br&gt;
| Status        | Arti                                 |&lt;br&gt;
|---------------|--------------------------------------|&lt;br&gt;
| &lt;code&gt;"processing"&lt;/code&gt;| Video sedang dirender                |&lt;br&gt;
| &lt;code&gt;"done"&lt;/code&gt;      | Video siap, URL tersedia             |&lt;br&gt;
| &lt;code&gt;"failed"&lt;/code&gt;    | Terjadi error                        |&lt;/p&gt;

&lt;p&gt;Contoh respons selesai:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"done"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"video"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://vidgen.x.ai/....mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"progress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Loop Polling Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai/v1/videos/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | Progress: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;progress&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;done&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video generation failed for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Usage
&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;poll_video&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Duration: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;duration&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tips:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Polling setiap ≥5 detik. Batas laju API 60 request/menit (1/detik).&lt;/p&gt;
&lt;h2&gt;
  
  
  Menggunakan SDK Python xAI
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;xai-sdk&lt;/code&gt; menangani polling asinkron otomatis via &lt;code&gt;client.video.generate()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;xai_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-imagine-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gentle waves move across the surface, morning mist rises slowly&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://example.com/landscape.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;resolution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;720p&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;aspect_ratio&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;16:9&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Duration: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gunakan SDK untuk kode aplikasi yang bersih. Untuk kontrol interval polling/logging, gunakan raw HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kontrol Resolusi, Durasi, dan Rasio Aspek
&lt;/h2&gt;

&lt;p&gt;API mendukung penyesuaian output.&lt;/p&gt;

&lt;h3&gt;
  
  
  Durasi
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;duration&lt;/code&gt; = integer 1–15 (detik). Default: 6.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Semakin panjang video, semakin besar biaya.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resolusi
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nilai&lt;/th&gt;
&lt;th&gt;Deskripsi&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"480p"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Standar, murah, cepat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;"720p"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Kualitas tinggi, $0.07/dtk&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"720p"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Rasio Aspek
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Nilai&lt;/th&gt;
&lt;th&gt;Penggunaan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;16:9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Landscape, layar lebar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;9:16&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Vertikal, mobile/story&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;1:1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Persegi, Instagram&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;4:3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Klasik, presentasi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;3:4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Potret&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;3:2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Foto standar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;2:3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Potret tinggi&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Jika &lt;code&gt;image&lt;/code&gt; disediakan, rasio aspek default mengikuti gambar. Atur manual untuk menimpa.&lt;/p&gt;




&lt;h2&gt;
  
  
  Gambar Referensi untuk Panduan Gaya
&lt;/h2&gt;

&lt;p&gt;Perbedaan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;image&lt;/code&gt;&lt;/strong&gt;: frame pertama output, jadi dasar animasi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;reference_images&lt;/code&gt;&lt;/strong&gt;: hingga 7 gambar, memandu gaya/konten, bukan frame output.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contoh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-imagine-video"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A product rotating slowly on a clean white surface"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/product-shot.jpg"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reference_images"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/brand-style-reference-1.jpg"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/lighting-reference.jpg"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"720p"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tanpa parameter &lt;code&gt;image&lt;/code&gt;, referensi tetap bisa digunakan untuk text-to-video.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memperpanjang &amp;amp; Mengedit Video
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Memperpanjang Video
&lt;/h3&gt;

&lt;p&gt;Lanjutkan video hingga 15 detik per call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/extensions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "video_id": "your_original_request_id",
    "prompt": "The mist continues to lift as sunlight breaks through",
    "duration": 5
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Polling hasil sama seperti awal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mengedit Video
&lt;/h3&gt;

&lt;p&gt;Edit video dengan prompt baru:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.x.ai/v1/videos/edits &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$XAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "grok-imagine-video",
    "video_id": "your_original_request_id",
    "prompt": "Change the sky to a dramatic sunset with deep orange tones"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Polling hingga selesai.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rincian Harga
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Komponen&lt;/th&gt;
&lt;th&gt;Biaya&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gambar input&lt;/td&gt;
&lt;td&gt;$0.002/gambar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output 480p&lt;/td&gt;
&lt;td&gt;$0.05/detik&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output 720p&lt;/td&gt;
&lt;td&gt;$0.07/detik&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Contoh: Video 10 detik 720p&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input: $0.002&lt;/li&gt;
&lt;li&gt;Output: 10 × $0.07 = $0.70&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total: $0.702&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contoh: 6 detik 480p&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input: $0.002&lt;/li&gt;
&lt;li&gt;Output: 6 × $0.05 = $0.30&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total: $0.302&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Setiap POST akan dikenakan biaya gambar input, meski URL gambar sama. Text-to-video tanpa &lt;code&gt;image&lt;/code&gt; tidak kena biaya input.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Menguji Integrasi API Video Grok Anda dengan Apidog
&lt;/h2&gt;

&lt;p&gt;Pola asinkron perlu pengujian chaining, bukan single request. Pastikan:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Permintaan POST menghasilkan &lt;code&gt;request_id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Polling menangani status &lt;code&gt;"processing"&lt;/code&gt; dengan benar&lt;/li&gt;
&lt;li&gt;Respons akhir status &lt;code&gt;"done"&lt;/code&gt; dan URL video valid&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Langkah Uji dengan Apidog
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Buat Skenario Uji Baru&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Di Apidog, buka modul Tests, klik &lt;code&gt;+&lt;/code&gt;, beri nama "Grok image-to-video async flow".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Tambahkan Permintaan Generasi&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://api.x.ai/v1/videos/generations&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Method: POST&lt;/li&gt;
&lt;li&gt;Header: &lt;code&gt;Authorization: Bearer {{xai_api_key}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Body (JSON):
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"grok-imagine-video"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Gentle mist rises from the water as light filters through the trees"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/your-test-image.jpg"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"480p"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;3. Ekstrak request_id&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tambahkan "Extract Variable":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nama: &lt;code&gt;video_request_id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sumber: response body&lt;/li&gt;
&lt;li&gt;Ekstraksi: JSONPath &lt;code&gt;$.request_id&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Bangun Loop Polling&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tambahkan "For" loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request polling:

&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;https://api.x.ai/v1/videos/{{video_request_id}}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Method: GET&lt;/li&gt;
&lt;li&gt;Header: &lt;code&gt;Authorization: Bearer {{xai_api_key}}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Extract Variable di dalam loop:

&lt;ul&gt;
&lt;li&gt;Nama: &lt;code&gt;video_status&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;JSONPath: &lt;code&gt;$.status&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Wait processor (5000ms)&lt;/li&gt;
&lt;li&gt;Break If: &lt;code&gt;{{video_status}} == "done"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Tegaskan URL Video&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Setelah loop, GET ke endpoint polling. Tambahkan Assertion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Field: &lt;code&gt;$.video.url&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Condition: not empty&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Menjalankan Skenario&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Klik Run. Apidog akan chaining request, polling hingga selesai, dan validasi URL. Integrasi dengan pipeline CI/CD:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;--scenario&lt;/span&gt; grok-video-async-flow &lt;span class="nt"&gt;--env&lt;/span&gt; production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Kesalahan Umum &amp;amp; Solusi
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;401 Unauthorized&lt;/strong&gt;: API key salah/hilang. Cek header Authorization dan status key di konsol xAI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;422 Unprocessable Entity&lt;/strong&gt;: Body request salah. Pastikan &lt;code&gt;model&lt;/code&gt;, &lt;code&gt;prompt&lt;/code&gt;, &lt;code&gt;image.url&lt;/code&gt; valid dan dapat diakses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL gambar tidak dapat diakses&lt;/strong&gt;: Gunakan URL publik atau base64 data URI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Status "processing" tanpa akhir&lt;/strong&gt;: Jika &amp;gt;10 menit, retry request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;429 Rate Limit&lt;/strong&gt;: Max 60 request/menit. Tambahkan delay antar polling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base64 upload gagal&lt;/strong&gt;: Tambahkan prefix MIME yang benar, misal &lt;code&gt;data:image/jpeg;base64,&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aspect ratio mismatch&lt;/strong&gt;: Jika &lt;code&gt;aspect_ratio&lt;/code&gt; sangat beda dari gambar, gambar bisa ter-crop/letterbox. Samakan rasio aspek untuk hasil optimal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;API Grok image-to-video memungkinkan Anda mengubah foto statis jadi klip animasi pendek. POST gambar dan prompt, dapatkan &lt;code&gt;request_id&lt;/code&gt;, polling hingga selesai, dan unduh MP4. Model &lt;code&gt;grok-imagine-video&lt;/code&gt; terbukti skala besar dan performa tinggi.&lt;/p&gt;

&lt;p&gt;Testing async dengan Skenario Uji Apidog: chaining Extract Variable, polling loop, dan assertion URL—menjamin integrasi tahan produksi.&lt;/p&gt;

&lt;p&gt;Mulai bangun integrasi Anda dengan Apidog secara gratis. Tidak diperlukan kartu kredit.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nama model apa untuk API Grok image-to-video?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Gunakan &lt;code&gt;grok-imagine-video&lt;/code&gt; sebagai value field &lt;code&gt;model&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apa beda parameter &lt;code&gt;image&lt;/code&gt; vs &lt;code&gt;reference_images&lt;/code&gt;?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;image&lt;/code&gt;: frame pertama video.&lt;br&gt;&lt;br&gt;
&lt;code&gt;reference_images&lt;/code&gt;: panduan gaya, bukan frame. Bisa digabung.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Berapa lama proses generate video?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
6 detik 480p: 1–3 menit. 15 detik 720p: 4–8 menit. Polling tiap 5 detik.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bisa pakai file lokal sebagai gambar?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ya, enkode base64 ke data URI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jika tidak set &lt;code&gt;aspect_ratio&lt;/code&gt;?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Dengan &lt;code&gt;image&lt;/code&gt;, default ke proporsi gambar. Tanpa gambar, default &lt;code&gt;16:9&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Biaya video 10 detik 720p?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Input: $0.002 + Output: $0.70 = $0.702.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Batas laju?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
60 request/menit, 1 request/detik (POST + GET total).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bisa memperpanjang video &amp;gt;15 detik?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ya, pakai endpoint &lt;code&gt;POST /v1/videos/extensions&lt;/code&gt;, dengan polling asinkron.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Harga API SMS Bird di Tahun 2026</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Fri, 03 Apr 2026 07:11:03 +0000</pubDate>
      <link>https://dev.to/walse/harga-api-sms-bird-di-tahun-2026-ne9</link>
      <guid>https://dev.to/walse/harga-api-sms-bird-di-tahun-2026-ne9</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;API SMS Bird mulai dari &lt;strong&gt;$0,00331 per pesan keluar AS&lt;/strong&gt; dan &lt;strong&gt;$0,003 per pesan masuk AS&lt;/strong&gt;, termasuk salah satu harga terendah di antara provider besar. Ada paket gratis (5 SMS/hari) untuk uji coba, dan paket Pro $49/bulan dengan 1.000 kredit SMS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Artikel ini membahas detail biaya SMS Bird tahun 2025-2026, faktor yang memengaruhi tagihan, serta perbandingan dengan alternatif lain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pendahuluan
&lt;/h2&gt;

&lt;p&gt;MessageBird rebranding menjadi Bird pada 2023, dengan fokus baru pada komunikasi omnichannel berbasis AI (SMS, WhatsApp, email, suara) dalam satu platform. Model harga berubah ke pay-as-you-go transparan, menempatkan biaya dasar SMS Bird di bawah Twilio, Vonage, dan mayoritas provider utama lainnya.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Tips cepat:&lt;/strong&gt; Untuk integrasi SMS, pastikan Anda memiliki data harga terbaru dan cara mudah menguji API sebelum produksi. &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; memungkinkan Anda mendesain, menjalankan, dan memvalidasi API Bird tanpa coding manual.&lt;/p&gt;

&lt;p&gt;Artikel ini akan menguraikan rincian harga SMS Bird, apa yang memengaruhi total biaya, serta membandingkannya dengan provider lain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ikhtisar Harga SMS Bird
&lt;/h2&gt;

&lt;p&gt;Bird menggunakan dua komponen harga untuk SMS:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Biaya paket platform&lt;/strong&gt; (langganan bulanan)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Biaya per pesan&lt;/strong&gt; (bayar sesuai penggunaan setelah kuota habis)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Rincian paket:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Paket&lt;/th&gt;
&lt;th&gt;Biaya bulanan&lt;/th&gt;
&lt;th&gt;SMS termasuk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gratis&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;5 SMS/hari&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$49&lt;/td&gt;
&lt;td&gt;1.000 SMS/bulan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;Kustom&lt;/td&gt;
&lt;td&gt;Volume kustom&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Setelah melewati batas paket, harga per pesan untuk nomor AS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SMS Keluar:&lt;/strong&gt; $0,00331/pesan&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SMS Masuk:&lt;/strong&gt; $0,003/pesan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Harga CRM/Marketing Automation ditampilkan dalam EUR di halaman resmi. Selalu cek &lt;a href="https://bird.com/en/pricing/sms" rel="noopener noreferrer"&gt;bird.com/en/pricing/sms&lt;/a&gt; untuk update biaya operator dan konversi kurs terbaru.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rincian Harga: SMS, MMS, WhatsApp, Email
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SMS
&lt;/h3&gt;

&lt;p&gt;SMS keluar AS: $0,00331/pesan. Tarif bervariasi antar negara.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Negara&lt;/th&gt;
&lt;th&gt;Tarif keluar (perkiraan)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Amerika Serikat&lt;/td&gt;
&lt;td&gt;~$0,00331&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inggris Raya&lt;/td&gt;
&lt;td&gt;~€0,036&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Australia&lt;/td&gt;
&lt;td&gt;~€0,009&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jerman&lt;/td&gt;
&lt;td&gt;~€0,056&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;India&lt;/td&gt;
&lt;td&gt;Bervariasi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brasil&lt;/td&gt;
&lt;td&gt;~€0,047&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Catatan:&lt;/strong&gt; Biaya operator tambahan (10DLC, bebas pulsa) berlaku untuk AS &amp;amp; Kanada, di luar tarif dasar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  MMS
&lt;/h3&gt;

&lt;p&gt;MMS (pesan gambar) lebih mahal dari SMS, didukung untuk nomor AS &amp;amp; Kanada. Biaya berkisar 3-5x tarif SMS. Cek tarif MMS terkini di &lt;a href="https://bird.com/en/pricing/sms" rel="noopener noreferrer"&gt;bird.com/en/pricing/sms&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  WhatsApp
&lt;/h3&gt;

&lt;p&gt;Harga WhatsApp Bird:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Biaya pemrosesan Bird&lt;/strong&gt; (per 1.000 pesan):&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;| Volume                | Biaya per 1.000 pesan |&lt;br&gt;
   |-----------------------|-----------------------|&lt;br&gt;
   | 1–1.000               | $0,001                |&lt;br&gt;
   | 1.001–100.000         | $0,005                |&lt;br&gt;
   | 100.001–500.000       | $0,0045               |&lt;br&gt;
   | 500.001+              | $0,004                |&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Biaya passthrough Meta&lt;/strong&gt; (berdasarkan jenis percakapan):&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Percakapan Pemasaran: $0,0250&lt;/li&gt;
&lt;li&gt;Percakapan Utilitas: $0,0034&lt;/li&gt;
&lt;li&gt;Percakapan Autentikasi: $0,0034&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bird hanya meloloskan biaya Meta tanpa markup.&lt;/p&gt;

&lt;h3&gt;
  
  
  Email
&lt;/h3&gt;

&lt;p&gt;Harga email mulai $0,001/email untuk volume rendah, makin murah jika volume besar. Paket Pro mencakup 10.000 email/bulan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Suara
&lt;/h3&gt;

&lt;p&gt;API Suara Bird berbasis penggunaan, tarif bervariasi. Panggilan keluar AS: $0,013–$0,015/menit. Panggilan masuk sedikit lebih murah. Untuk volume tinggi, hubungi sales Bird.&lt;/p&gt;

&lt;h2&gt;
  
  
  Faktor yang Memengaruhi Tagihan Bird Anda
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Negara &amp;amp; Perutean Operator
&lt;/h3&gt;

&lt;p&gt;SMS AS ($0,00331) sangat murah. Untuk negara lain, biaya bisa 10x–80x lebih mahal. Selalu cek lembar tarif Bird per negara sebelum memperkirakan biaya internasional.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Jenis Nomor
&lt;/h3&gt;

&lt;p&gt;Jenis nomor memengaruhi biaya:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kode panjang (10DLC):&lt;/strong&gt; Nomor standar AS, wajib registrasi merek &amp;amp; kampanye (TCR).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kode pendek:&lt;/strong&gt; 5-6 digit, throughput tinggi, sewa bulanan $500–$1.000.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nomor bebas pulsa:&lt;/strong&gt; Biaya bulanan lebih rendah, throughput sedang.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sewa nomor bulanan di luar tarif per pesan.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Panjang Pesan &amp;amp; Pengkodean
&lt;/h3&gt;

&lt;p&gt;SMS standar: 160 karakter (GSM-7). Melebihi 160 karakter = multi-segmen (ditagih per segmen). Menggunakan Unicode (emoji, huruf khusus) menurunkan limit per segmen ke 70 karakter.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Campuran Saluran
&lt;/h3&gt;

&lt;p&gt;Jika workflow Anda mengalihkan pesan gagal ke WhatsApp, akan ada biaya tambahan WhatsApp. Model biaya harus mempertimbangkan fallback channel.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Volume
&lt;/h3&gt;

&lt;p&gt;Bird tidak mempublikasikan diskon volume SMS secara terbuka. Untuk volume besar, paket Enterprise menawarkan tarif kustom (kontak sales).&lt;/p&gt;

&lt;h2&gt;
  
  
  Biaya &amp;amp; Biaya Tersembunyi
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Biaya Operator AS (10DLC)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pendaftaran merek:&lt;/strong&gt; Sekali, ~$4–$44&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pendaftaran kampanye:&lt;/strong&gt; Bulanan, ~$10/bulan/kampanye&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Biaya tambahan operator:&lt;/strong&gt; Per pesan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Biaya ini ditetapkan operator AS, Bird hanya meloloskan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sewa Nomor Telepon
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kode panjang AS:&lt;/strong&gt; $1–$2/bulan&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bebas pulsa:&lt;/strong&gt; $2–$3/bulan&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kode pendek:&lt;/strong&gt; $500–$1.000/bulan&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Webhook Masuk &amp;amp; Pemrosesan
&lt;/h3&gt;

&lt;p&gt;Menerima SMS masuk ($0,003/pesan AS) memicu biaya. Workflow opt-out/keyword akan menambah tagihan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Langganan Platform
&lt;/h3&gt;

&lt;p&gt;Biaya Pro ($49/bulan) tetap. Untuk volume rendah, biaya utama dari kelebihan pesan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perbandingan dengan Alternatif
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Penyedia&lt;/th&gt;
&lt;th&gt;SMS keluar AS&lt;/th&gt;
&lt;th&gt;SMS masuk AS&lt;/th&gt;
&lt;th&gt;Catatan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bird&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0,00331&lt;/td&gt;
&lt;td&gt;$0,003&lt;/td&gt;
&lt;td&gt;Tarif dasar terendah; platform omnichannel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twilio&lt;/td&gt;
&lt;td&gt;$0,0079&lt;/td&gt;
&lt;td&gt;$0,0079&lt;/td&gt;
&lt;td&gt;Lebih mahal; ekosistem besar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telnyx&lt;/td&gt;
&lt;td&gt;~$0,004&lt;/td&gt;
&lt;td&gt;~$0,001&lt;/td&gt;
&lt;td&gt;Kompetitif; direct-to-operator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plivo&lt;/td&gt;
&lt;td&gt;$0,0055&lt;/td&gt;
&lt;td&gt;$0,0005&lt;/td&gt;
&lt;td&gt;Tarif masuk murah; platform sederhana&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Bird unggul di tarif dasar. Twilio hampir 2x lebih mahal di entry-level. Penyedia seperti Telnyx/Plivo menawarkan model lebih sederhana jika hanya butuh SMS API. Untuk workflow omnichannel dan automation, Bird sangat kompetitif.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Memulai dengan Bird
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Buat akun gratis&lt;/strong&gt; di &lt;a href="https://bird.com" rel="noopener noreferrer"&gt;bird.com&lt;/a&gt;. Dapatkan 5 SMS/hari, tanpa kartu kredit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daftarkan merek &amp;amp; kampanye&lt;/strong&gt; via dashboard Bird untuk compliance 10DLC AS (durasi proses 1–3 hari kerja).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dapatkan nomor telepon&lt;/strong&gt; melalui API atau dashboard Bird.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kirim API pertama:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.bird.com/messages &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: AccessKey YOUR_ACCESS_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
  "originator": "+1XXXXXXXXXX",
  "recipients": ["+1XXXXXXXXXX"],
  "body": "Pesan pertama Anda dari Bird API!"
}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cek dokumentasi lengkap di &lt;a href="https://docs.bird.com" rel="noopener noreferrer"&gt;docs.bird.com&lt;/a&gt; untuk autentikasi, SDK (Node.js, Python, PHP, Go, Java, Ruby), serta pengaturan webhook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;API SMS Bird menawarkan tarif dasar terendah untuk AS ($0,00331/pesan keluar). Paket gratis bisa langsung dicoba tanpa kartu kredit, Pro cocok untuk tim kecil (1.000 SMS/bulan).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Waspada biaya tambahan:&lt;/strong&gt; operator 10DLC, sewa nomor, dan SMS internasional (bisa 50x harga AS!). Selalu modelkan biaya sebelum produksi.&lt;/p&gt;

&lt;p&gt;Untuk pengujian API SMS Bird, &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;gunakan Apidog&lt;/a&gt; untuk pembuatan request, environment variable, chaining test, dan assertion dalam satu tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Berapa harga API SMS Bird per pesan di AS?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
$0,00331 per SMS keluar AS dan $0,003 per SMS masuk AS (belum termasuk biaya operator 10DLC).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah Bird sama dengan MessageBird?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ya, MessageBird rebranding jadi Bird pada 2023. Beberapa endpoint API masih memakai nama lama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah Bird mengenakan biaya untuk SMS masuk?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ya, $0,003/pesan masuk AS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apa itu paket gratis Bird?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
5 SMS/hari, 10 email/hari, 15 pesan AI/hari. Akses API tanpa kartu kredit, cocok untuk uji coba.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana harga SMS Bird dibandingkan Twilio?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Bird jauh lebih murah ($0,00331 vs $0,0079 AS). Untuk 100.000 pesan/bulan: Bird ~$331, Twilio $790 (harga dasar).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ada biaya tersembunyi di SMS Bird?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ada: pendaftaran merek/kampanye 10DLC, biaya operator, sewa nomor ($1–$2/bulan), dan tarif internasional lebih mahal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana cara menguji API SMS Bird tanpa mengirim pesan nyata?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Gunakan fitur Mock Cerdas di &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; untuk simulasi respons API Bird, atau sandbox di Bird. Skenario pengujian Apidog memungkinkan chaining request &amp;amp; assertion tanpa menyentuh sistem produksi.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Harga SMS API Twilio: Rincian Biaya Lengkap 2026</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Fri, 03 Apr 2026 03:59:36 +0000</pubDate>
      <link>https://dev.to/walse/harga-sms-api-twilio-rincian-biaya-lengkap-2026-21m8</link>
      <guid>https://dev.to/walse/harga-sms-api-twilio-rincian-biaya-lengkap-2026-21m8</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SMS long code AS (keluar &amp;amp; masuk): &lt;strong&gt;$0.0083 per pesan&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;MMS keluar: &lt;strong&gt;$0.022/pesan&lt;/strong&gt;; MMS masuk: &lt;strong&gt;$0.0165/pesan&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;SMS bebas pulsa: &lt;strong&gt;$0.0083/pesan&lt;/strong&gt; + biaya tambahan operator&lt;/li&gt;
&lt;li&gt;Sewa short code: &lt;strong&gt;$1.000/bulan&lt;/strong&gt; (acak); &lt;strong&gt;$1.500/bulan&lt;/strong&gt; (vanity code)&lt;/li&gt;
&lt;li&gt;Pendaftaran merek 10DLC: &lt;strong&gt;$4.50 sekali bayar&lt;/strong&gt; (update Agustus 2025); kampanye mulai &lt;strong&gt;$1.50–$10/bulan&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Nomor long code: &lt;strong&gt;$1.15/bulan&lt;/strong&gt;; bebas pulsa: &lt;strong&gt;$2.15/bulan&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Biaya operator di atas harga dasar&lt;/li&gt;
&lt;li&gt;Diskon volume otomatis di 150.000 pesan/bulan&lt;/li&gt;
&lt;li&gt;Uji coba gratis tersedia; tidak perlu kartu kredit&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pendahuluan
&lt;/h2&gt;

&lt;p&gt;Twilio adalah API SMS default untuk banyak pengembang karena dokumentasinya lengkap, uptime andal, dan REST API yang baik. Namun, saat aplikasi Anda masuk produksi, biaya akan meningkat. Anda membayar tarif dasar Twilio, biaya operator, nomor telepon, dan mungkin biaya pendaftaran 10DLC.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Saran:&lt;/strong&gt; Selalu uji integrasi SMS Anda sebelum produksi. &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; menyediakan skenario uji otomatis untuk memvalidasi respons webhook Twilio dengan spesifikasi OpenAPI. Anda dapat cek kode status, validasi skema respons, dan jalankan pengujian kontrak di CI/CD. Coba gratis untuk pastikan alur SMS Anda valid sebelum go-live.&lt;/p&gt;

&lt;p&gt;Artikel ini mengurai setiap item biaya Twilio, agar Anda tahu apa saja yang memengaruhi tagihan, hal-hal yang sering terlewat, dan perbandingan Twilio dengan alternatif lain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ikhtisar Harga SMS Twilio
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.twilio.com/en-us/pricing/messaging" rel="noopener noreferrer"&gt;Twilio memakai model pay-as-you-go&lt;/a&gt;: bayar per segmen pesan, per nomor telepon/bulan, dan fitur tambahan opsional. Tidak ada kontrak atau minimum kecuali negosiasi diskon volume enterprise.&lt;/p&gt;

&lt;p&gt;Tarif dasar SMS AS pada long code: &lt;strong&gt;$0.0083/segmen&lt;/strong&gt; (masuk &amp;amp; keluar). Namun, biaya operator, sewa nomor, dan pendaftaran compliance menambah biaya setiap bulan.&lt;/p&gt;

&lt;p&gt;Diskon volume otomatis berlaku tanpa negosiasi setelah Anda kirim &amp;gt;150.000 pesan/bulan (semua jenis nomor dihitung terpisah).&lt;/p&gt;

&lt;h2&gt;
  
  
  Rincian Harga: SMS, MMS, Bebas Pulsa, &amp;amp; Short Code
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SMS Long Code (10-digit)
&lt;/h3&gt;

&lt;p&gt;Long code adalah nomor 10 digit standar untuk pesan A2P AS.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Jenis pesan&lt;/th&gt;
&lt;th&gt;Harga per segmen&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SMS keluar&lt;/td&gt;
&lt;td&gt;$0.0083&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMS masuk&lt;/td&gt;
&lt;td&gt;$0.0083&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMS keluar&lt;/td&gt;
&lt;td&gt;$0.022&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMS masuk&lt;/td&gt;
&lt;td&gt;$0.0165&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Catatan:&lt;/strong&gt; Twilio menagih per &lt;strong&gt;segmen&lt;/strong&gt;, bukan per pesan. Segmen GSM-7 = 160 karakter; Unicode (emoji/aksen) = 70 karakter/segmen. Pesan 200 karakter = 2 segmen tagihan.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Nomor Bebas Pulsa
&lt;/h3&gt;

&lt;p&gt;Tarif dasar sama: $0.0083/segmen SMS, MMS keluar $0.022, MMS masuk $0.02. Tidak perlu pendaftaran 10DLC, tapi butuh verifikasi bebas pulsa untuk throughput maksimum.&lt;/p&gt;

&lt;h3&gt;
  
  
  Short Code (5–6 digit)
&lt;/h3&gt;

&lt;p&gt;Untuk throughput tinggi. Tarif per pesan sama ($0.0083), tapi sewa nomor mahal.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Jenis short code&lt;/th&gt;
&lt;th&gt;Biaya bulanan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Short code acak&lt;/td&gt;
&lt;td&gt;$1.000/bulan (kuartalan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Short code vanity&lt;/td&gt;
&lt;td&gt;$1.500/bulan (kuartalan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vanity code sendiri&lt;/td&gt;
&lt;td&gt;$500/bulan (kuartalan)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Semua short code dengan MMS: biaya setup $500 (sekali bayar).&lt;/p&gt;

&lt;h3&gt;
  
  
  Diskon Volume
&lt;/h3&gt;

&lt;p&gt;Diskon otomatis berlaku berikut:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pesan bulanan&lt;/th&gt;
&lt;th&gt;Harga per segmen&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 – 150.000&lt;/td&gt;
&lt;td&gt;$0.0083&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;150.001 – 300.000&lt;/td&gt;
&lt;td&gt;$0.0081&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;300.001 – 500.000&lt;/td&gt;
&lt;td&gt;$0.0079&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500.001 – 750.000&lt;/td&gt;
&lt;td&gt;$0.0077&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;750.001 – 1.000.000&lt;/td&gt;
&lt;td&gt;$0.0075&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.000.001+&lt;/td&gt;
&lt;td&gt;$0.0073&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Volume dihitung per jenis nomor (long code, bebas pulsa, short code tidak digabung).&lt;/p&gt;

&lt;h2&gt;
  
  
  Faktor yang Memengaruhi Tagihan Twilio
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Jenis Nomor Telepon
&lt;/h3&gt;

&lt;p&gt;Jenis nomor (long code, bebas pulsa, short code) menentukan tarif dan diskon. Membagi trafik antar jenis bisa buat Anda tak dapat diskon volume di salah satu.&lt;/p&gt;

&lt;h3&gt;
  
  
  Segmen Pesan
&lt;/h3&gt;

&lt;p&gt;Biaya dihitung per segmen. Pesan panjang/ber-Emoji bisa 2–3x lipat biaya per pesan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Biaya Operator
&lt;/h3&gt;

&lt;p&gt;Di atas tarif dasar Twilio, operator utama AS menambahkan biaya per pesan. Ini diteruskan ke Anda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Biaya operator long code (SMS keluar):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operator&lt;/th&gt;
&lt;th&gt;Biaya keluar&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AT&amp;amp;T&lt;/td&gt;
&lt;td&gt;$0.0035&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T-Mobile&lt;/td&gt;
&lt;td&gt;$0.0045&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verizon&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Cellular&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lainnya&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;MMS lebih mahal: AT&amp;amp;T +$0.009, T-Mobile +$0.01.&lt;/p&gt;

&lt;p&gt;Contoh: SMS keluar ke AT&amp;amp;T = $0.0083 (Twilio) + $0.0035 (operator) = &lt;strong&gt;$0.0118/segmen&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Negara Tujuan
&lt;/h3&gt;

&lt;p&gt;Harga internasional bervariasi besar: Inggris $0.04/pesan, India $0.0029, Brasil $0.075. &lt;a href="https://www.twilio.com/en-us/pricing/messaging" rel="noopener noreferrer"&gt;Unduh CSV harga Twilio&lt;/a&gt; untuk detail.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pendaftaran 10DLC
&lt;/h3&gt;

&lt;p&gt;Bisnis yang kirim A2P SMS di AS pada long code wajib daftar merek dan kampanye. Lalu lintas tak terdaftar akan difilter operator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Biaya &amp;amp; Ongkos Tersembunyi
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Biaya Pendaftaran 10DLC
&lt;/h3&gt;

&lt;p&gt;Update Agustus 2025 (TCR):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pendaftaran merek:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pemilik Tunggal / Volume Rendah: $4.50 (sekali bayar)&lt;/li&gt;
&lt;li&gt;Standar (plus pemeriksaan sekunder): $46 (sekali bayar)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pendaftaran kampanye:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pemeriksaan: $15 sekali&lt;/li&gt;
&lt;li&gt;Biaya kampanye: $1.50 – $10/bulan tergantung tipe&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Jenis kampanye&lt;/th&gt;
&lt;th&gt;Biaya bulanan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pemilik Tunggal&lt;/td&gt;
&lt;td&gt;$2/bulan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Campuran volume rendah&lt;/td&gt;
&lt;td&gt;$1.50/bulan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standar&lt;/td&gt;
&lt;td&gt;$10/bulan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amal&lt;/td&gt;
&lt;td&gt;$3/bulan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Layanan darurat&lt;/td&gt;
&lt;td&gt;$5/bulan&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pemeriksaan standar: $41.50. Banding: $11. Ulang Authentication Plus: $12.50.&lt;/p&gt;

&lt;h3&gt;
  
  
  Biaya Nomor Telepon
&lt;/h3&gt;

&lt;p&gt;Long code: $1.15/bulan. Bebas pulsa: $2.15/bulan. Jika Anda butuh banyak nomor (misal A/B test atau kehadiran lokal), biaya bertambah.&lt;/p&gt;

&lt;h3&gt;
  
  
  Biaya Pemrosesan Pesan Gagal
&lt;/h3&gt;

&lt;p&gt;Twilio menagih &lt;strong&gt;$0.001/pesan&lt;/strong&gt; berstatus "Gagal"—biaya kecil, tapi menumpuk saat debugging atau operator filtering.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fitur Opsional
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Engagement Suite (pemendek link, click tracking): $0.015/pesan keluar (setelah 1.000 pesan gratis/bulan)&lt;/li&gt;
&lt;li&gt;Compliance Toolkit: $0.015/pesan keluar&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paket Dukungan
&lt;/h3&gt;

&lt;p&gt;Dukungan gratis terbatas. Paket berbayar mulai $250/bulan ("Developer"). Untuk kebutuhan mission-critical, kontrak support biasanya wajib.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perbandingan Twilio vs Alternatif
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Penyedia&lt;/th&gt;
&lt;th&gt;SMS keluar AS&lt;/th&gt;
&lt;th&gt;SMS masuk AS&lt;/th&gt;
&lt;th&gt;Nomor telepon&lt;/th&gt;
&lt;th&gt;10DLC diperlukan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Twilio&lt;/td&gt;
&lt;td&gt;$0.0083 + operator&lt;/td&gt;
&lt;td&gt;$0.0083 + operator&lt;/td&gt;
&lt;td&gt;$1.15/bulan&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plivo&lt;/td&gt;
&lt;td&gt;$0.005&lt;/td&gt;
&lt;td&gt;$0.00035&lt;/td&gt;
&lt;td&gt;$0.80/bulan&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telnyx&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;td&gt;$1.00/bulan&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bird&lt;/td&gt;
&lt;td&gt;~$0.007&lt;/td&gt;
&lt;td&gt;~$0.007&lt;/td&gt;
&lt;td&gt;Bervariasi&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Plivo &amp;amp; Telnyx jauh lebih murah per pesan (khususnya SMS masuk Plivo). Telnyx mengelola biaya operator berbeda, total biaya sering lebih rendah.&lt;/p&gt;

&lt;p&gt;Twilio unggul pada dokumentasi, ekosistem, dan fitur lanjutan (Messaging Services, sticky sender, smart encoding). Untuk volume besar dengan harga minimal, Plivo/Telnyx layak dicoba.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Uji Twilio Gratis
&lt;/h2&gt;

&lt;p&gt;Twilio menyediakan akun uji coba gratis (tanpa kartu kredit). Anda dapat:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dapat nomor uji coba&lt;/li&gt;
&lt;li&gt;Kirim/terima SMS via API&lt;/li&gt;
&lt;li&gt;Uji webhook untuk pesan masuk&lt;/li&gt;
&lt;li&gt;Eksplorasi Console &amp;amp; log&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Selama trial, pesan ke nomor belum diverifikasi ada awalan "Dikirim dari akun uji coba Twilio Anda". Untuk hilangkan awalan, upgrade ke akun berbayar.&lt;/p&gt;

&lt;p&gt;Setelah upgrade, bayar sesuai penggunaan tanpa minimum bulanan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Uji Integrasi SMS Twilio Anda dengan Apidog
&lt;/h2&gt;

&lt;p&gt;Setelah kredensial &amp;amp; webhook Twilio siap, validasi integrasi Anda dengan pendekatan otomatis. Pengujian manual tidak berskala dan rentan human error.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-64.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-64.png" alt="" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Langkah Praktis dengan Apidog
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Skenario Uji&lt;/strong&gt; Apidog memungkinkan Anda merangkai permintaan API menjadi alur otomatis.&lt;/p&gt;

&lt;p&gt;Contoh penerapan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Import spesifikasi endpoint webhook Twilio ke skenario uji&lt;/li&gt;
&lt;li&gt;Tambah langkah: kirim SMS → terima callback delivery → tangani balasan masuk&lt;/li&gt;
&lt;li&gt;Gunakan mode orkestrasi untuk eksekusi berurutan&lt;/li&gt;
&lt;li&gt;Pass data antar langkah pakai sintaks &lt;code&gt;{{$.stepId.response.body.field}}&lt;/code&gt; (misal: SID pesan)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pengujian Kontrak&lt;/strong&gt;: Validasi respons API Twilio terhadap OpenAPI Anda secara otomatis. Cek:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kode status HTTP sesuai dokumentasi&lt;/li&gt;
&lt;li&gt;Semua field wajib di webhook ada&lt;/li&gt;
&lt;li&gt;Tipe data field benar (SID string, timestamp format ISO)&lt;/li&gt;
&lt;li&gt;Tidak ada field ekstra kecuali diizinkan (&lt;code&gt;additionalProperties&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Mulai:&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Download Apidog gratis&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Import spesifikasi API Twilio atau definisikan skema webhook
&lt;/li&gt;
&lt;li&gt;Buat skenario uji sesuai alur kirim/terima SMS Anda&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;Harga API SMS Twilio mulai &lt;strong&gt;$0.0083/segmen&lt;/strong&gt; (long code AS), tapi biaya riil termasuk markup operator, sewa nomor, dan 10DLC. Satu pesan keluar ke AT&amp;amp;T: sekitar &lt;strong&gt;$0.0118/segmen&lt;/strong&gt;. Untuk kampanye 10DLC standar, tambahkan &lt;strong&gt;$10/bulan per kampanye&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Harga transparan, diskon volume otomatis, tapi Anda wajib hitung semua komponen biaya.&lt;/p&gt;

&lt;p&gt;Setelah simulasi biaya, bangun integrasi dan &lt;strong&gt;uji otomatis&lt;/strong&gt;. Gunakan Skenario Uji &amp;amp; Pengujian Kontrak Apidog untuk validasi webhook Twilio &amp;amp; pastikan respons API selalu sesuai spesifikasi—tanpa perlu boilerplate test script.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ (Pertanyaan yang Sering Diajukan)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;T: Berapa harga dasar SMS keluar AS di Twilio?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
J: $0.0083/segmen pesan (long code AS) + biaya operator. SMS ke AT&amp;amp;T total $0.0118/segmen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Apakah Twilio menagih SMS masuk?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
J: Ya. $0.0083/segmen untuk SMS masuk (long code &amp;amp; bebas pulsa). Biaya operator bisa berlaku.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Apa itu 10DLC, wajib daftar?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
J: 10DLC = sistem pendaftaran SMS A2P di AS untuk long code 10 digit. Wajib daftar jika mengirim pesan aplikasi ke konsumen AS. Biaya: pendaftaran merek $4.50 (sekali), kampanye $1.50–$10/bulan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Berapa biaya short code Twilio?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
J: Short code acak $1.000/bulan, vanity $1.500/bulan. Setup MMS $500 (sekali). Tarif SMS per pesan sama ($0.0083).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Twilio ada diskon volume?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
J: Ya. 150.000 pesan pertama/bulan di $0.0083, lalu turun sampai $0.0073 (&amp;gt;1 juta pesan). Diskon enterprise tersedia via sales.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Ada uji coba gratis Twilio?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
J: Ya. Akun trial gratis + saldo kredit. Tidak perlu kartu kredit. Pesan keluar trial ada awalan, hilang setelah upgrade akun.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T: Alternatif Twilio termurah untuk SMS?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
J: Plivo ($0.005 keluar, $0.00035 masuk), Telnyx ($0.004 keluar/masuk). Keduanya perlu 10DLC untuk A2P AS. Twilio lebih unggul di dokumentasi, dukungan, dan fitur untuk use case kompleks.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Harga API SMS Vonage: Berapa Biayanya di Tahun 2026?</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Fri, 03 Apr 2026 03:53:15 +0000</pubDate>
      <link>https://dev.to/walse/harga-api-sms-vonage-berapa-biayanya-di-tahun-2026-1mhl</link>
      <guid>https://dev.to/walse/harga-api-sms-vonage-berapa-biayanya-di-tahun-2026-1mhl</guid>
      <description>&lt;h2&gt;
  
  
  Inti Sari
&lt;/h2&gt;

&lt;p&gt;Harga API SMS Vonage dimulai dari &lt;strong&gt;$0,00809 per pesan keluar&lt;/strong&gt; dan &lt;strong&gt;$0,00649 per pesan masuk&lt;/strong&gt; di AS. Tidak ada minimum bulanan; Anda hanya membayar apa yang dikirim/diterima. Tarif internasional bervariasi per negara, bahkan bisa lebih dari $1,00 di beberapa pasar. Untuk membangun atau menguji integrasi SMS Vonage, gunakan Apidog agar pengujian permintaan, validasi respons, dan troubleshooting error lebih efisien sebelum deploy ke produksi.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Pendahuluan
&lt;/h2&gt;

&lt;p&gt;Jika Anda familiar dengan Nexmo, Anda sudah mengenal Vonage. Setelah diakuisisi pada tahun 2016, Nexmo menjadi inti platform API komunikasi Vonage. Tahun 2022, Vonage diakuisisi Ericsson, memperkuat posisinya di industri telekomunikasi API global.&lt;/p&gt;

&lt;p&gt;Saat ini, Vonage digunakan oleh lebih dari 100.000 bisnis dan 1,6 juta developer, menawarkan harga fleksibel (pay-as-you-go), tanpa kontrak, dan menjangkau lebih dari 190 negara.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Tips:&lt;/strong&gt; Untuk integrasi API yang lebih stabil, gunakan Apidog untuk membangun skenario tes permintaan SMS Vonage, validasi respons, serta chaining API dalam satu workflow otomatis. Apidog gratis, tidak perlu kartu kredit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ikhtisar Harga SMS Vonage
&lt;/h2&gt;

&lt;p&gt;Vonage menggunakan model pay-as-you-go untuk API SMS. Tidak ada biaya platform atau langganan bulanan. Tarif per pesan berdasarkan negara tujuan dan jenis nomor.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Jenis pesan&lt;/th&gt;
&lt;th&gt;Harga per pesan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SMS Keluar (LVN AS)&lt;/td&gt;
&lt;td&gt;$0.00809&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMS Masuk (LVN AS)&lt;/td&gt;
&lt;td&gt;$0.00649&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMS Keluar (Bebas Pulsa)&lt;/td&gt;
&lt;td&gt;Hubungi bagian penjualan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SMS Masuk (Bebas Pulsa)&lt;/td&gt;
&lt;td&gt;Gratis&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;LVN&lt;/strong&gt; (Local Virtual Number) = nomor panjang standar (10DLC). Tarif diproses real-time berdasarkan penggunaan. Untuk rencana internasional, download global rate sheet dari dashboard Vonage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rincian Harga: Pesan Keluar, Masuk, MMS, dan WhatsApp
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SMS Keluar
&lt;/h3&gt;

&lt;p&gt;Pesan yang dikirim dari aplikasi ke user. Tarif dasar AS: &lt;strong&gt;$0,00809 per pesan&lt;/strong&gt; (nomor virtual lokal). Cek dashboard resmi untuk update terbaru.&lt;/p&gt;

&lt;h3&gt;
  
  
  SMS Masuk
&lt;/h3&gt;

&lt;p&gt;Pesan ke nomor Vonage yang Anda sewa. Di AS: &lt;strong&gt;$0,00649 per pesan masuk&lt;/strong&gt;. Nomor bebas pulsa sering gratis untuk pesan masuk, tapi tetap verifikasi via akun.&lt;/p&gt;

&lt;h3&gt;
  
  
  Harga MMS
&lt;/h3&gt;

&lt;p&gt;MMS didukung via API Pesan Vonage. Tarif MMS tidak dipublikasikan secara umum—harus request via sales karena tergantung operator/negara.&lt;/p&gt;

&lt;h3&gt;
  
  
  WhatsApp via Vonage
&lt;/h3&gt;

&lt;p&gt;WhatsApp didukung melalui API Pesan. Ada dua biaya:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Biaya WhatsApp:&lt;/strong&gt; Dibebankan Meta per pesan, tergantung kategori (marketing, utility, authentication, service).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Biaya platform Vonage:&lt;/strong&gt; Mulai $0,00015 per pesan. Variatif tergantung kategori dan volume.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Facebook Messenger
&lt;/h3&gt;

&lt;p&gt;Biaya &lt;strong&gt;$0,0011 per pesan&lt;/strong&gt; yang dikirim via API Pesan Vonage.&lt;/p&gt;

&lt;h3&gt;
  
  
  RCS (Rich Communication Services)
&lt;/h3&gt;

&lt;p&gt;Tarif khusus operator di AS, contoh:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operator&lt;/th&gt;
&lt;th&gt;RCS Kaya (teks)&lt;/th&gt;
&lt;th&gt;RCS Media Kaya&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;T-Mobile&lt;/td&gt;
&lt;td&gt;$0.00620&lt;/td&gt;
&lt;td&gt;$0.01250&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verizon&lt;/td&gt;
&lt;td&gt;$0.00400&lt;/td&gt;
&lt;td&gt;$0.00600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AT&amp;amp;T&lt;/td&gt;
&lt;td&gt;$0.00450&lt;/td&gt;
&lt;td&gt;$0.01000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Cellular&lt;/td&gt;
&lt;td&gt;$0.00620&lt;/td&gt;
&lt;td&gt;$0.01350&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Ada setup fee satu kali, &lt;strong&gt;$600 per negara&lt;/strong&gt; untuk RCS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Faktor yang Mempengaruhi Tagihan Vonage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Negara Tujuan
&lt;/h3&gt;

&lt;p&gt;Destinasi adalah faktor terbesar. Pesan ke AS murah, tapi ke negara dengan konektivitas rendah bisa $0,50+ per SMS. Selalu cek global rate sheet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jenis Nomor
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kode Panjang (10DLC):&lt;/strong&gt; Nomor lokal, murah untuk P2P dan aplikasi-ke-orang.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nomor Bebas Pulsa:&lt;/strong&gt; Throughput tinggi, pesan masuk sering gratis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kode Pendek:&lt;/strong&gt; Volume tinggi marketing, perlu registrasi operator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Setiap jenis punya tarif berbeda. Kode pendek paling mahal sewanya, tapi cocok untuk volume tinggi.&lt;/p&gt;

&lt;h3&gt;
  
  
  Biaya Sewa Nomor
&lt;/h3&gt;

&lt;p&gt;Sewa nomor virtual = biaya tambahan bulanan. Nomor lokal mulai beberapa dollar, toll-free/kode pendek lebih mahal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pengkodean Pesan
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GSM-7:&lt;/strong&gt; 160 karakter/SMS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unicode:&lt;/strong&gt; 70 karakter/SMS (misal pakai emoji/aksara khusus).&lt;/li&gt;
&lt;li&gt;Pesan Unicode &amp;gt;70 karakter bisa dihitung jadi 2-3 SMS sekaligus.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Biaya Tambahan Operator
&lt;/h3&gt;

&lt;p&gt;Operator AS bisa menambahkan surcharge pada A2P lewat 10DLC. Vonage meneruskan biaya ini ke tagihan Anda.&lt;/p&gt;

&lt;h2&gt;
  
  
  Biaya Tersembunyi yang Perlu Diwaspadai
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tingkat Dukungan
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gratis:&lt;/strong&gt; Forum komunitas &amp;amp; dokumentasi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business Support:&lt;/strong&gt; Berbayar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Premium 24/7:&lt;/strong&gt; $3.300/bulan; untuk kebutuhan mission-critical.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  API Tambahan
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Add-on&lt;/th&gt;
&lt;th&gt;Biaya bulanan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;API Audit&lt;/td&gt;
&lt;td&gt;$550/bulan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Otomatis redaksi&lt;/td&gt;
&lt;td&gt;$1.100/bulan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API Laporan&lt;/td&gt;
&lt;td&gt;$495/bulan / $0,00049/CDR&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;API Audit untuk regulasi ketat; Otomatis redaksi menghapus PII otomatis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Biaya API Verifikasi
&lt;/h3&gt;

&lt;p&gt;API Verifikasi Vonage: &lt;strong&gt;$0,0572 per verifikasi berhasil&lt;/strong&gt; (plus biaya pesan/voice). Verifikasi gagal tetap kena biaya pengiriman pesan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Registrasi Nomor (10DLC AS)
&lt;/h3&gt;

&lt;p&gt;A2P dengan kode panjang di AS wajib registrasi di The Campaign Registry (TCR):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Brand registration:&lt;/strong&gt; Sekali bayar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Campaign registration:&lt;/strong&gt; Bulanan per campaign&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tanpa registrasi, pesan Anda tidak akan terkirim.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vonage vs Alternatif
&lt;/h2&gt;

&lt;p&gt;Perbandingan harga SMS keluar AS:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Penyedia&lt;/th&gt;
&lt;th&gt;SMS keluar AS&lt;/th&gt;
&lt;th&gt;SMS masuk AS&lt;/th&gt;
&lt;th&gt;Uji coba gratis&lt;/th&gt;
&lt;th&gt;Dukungan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vonage&lt;/td&gt;
&lt;td&gt;$0.00809&lt;/td&gt;
&lt;td&gt;$0.00649&lt;/td&gt;
&lt;td&gt;Ya (nomor diverifikasi)&lt;/td&gt;
&lt;td&gt;Berbayar; $3.300/bulan untuk 24/7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twilio&lt;/td&gt;
&lt;td&gt;$0.0079&lt;/td&gt;
&lt;td&gt;$0.0075&lt;/td&gt;
&lt;td&gt;Ya ($15 kredit)&lt;/td&gt;
&lt;td&gt;Berbayar mulai $250/bulan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plivo&lt;/td&gt;
&lt;td&gt;$0.0055&lt;/td&gt;
&lt;td&gt;$0.0005&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;td&gt;Dasar gratis; berbayar tersedia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telnyx&lt;/td&gt;
&lt;td&gt;$0.004&lt;/td&gt;
&lt;td&gt;$0.002&lt;/td&gt;
&lt;td&gt;Ya ($5 kredit)&lt;/td&gt;
&lt;td&gt;Email 24/7 gratis; telepon berbayar&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Catatan:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Telnyx paling murah, tapi lebih baru dan tim support lebih kecil.&lt;/li&gt;
&lt;li&gt;Plivo ramah developer.&lt;/li&gt;
&lt;li&gt;Twilio unggul di ekosistem &amp;amp; integrasi.&lt;/li&gt;
&lt;li&gt;Vonage unggul di keandalan operator &amp;amp; harga menengah.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Harga bukan segalanya: cek juga deliverability, compliance, tooling, dan support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Mencoba Vonage Secara Gratis
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.vonage.com/communications-apis/pricing/" rel="noopener noreferrer"&gt;Vonage menawarkan akun trial gratis.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fitur trial:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nomor virtual Vonage untuk testing&lt;/li&gt;
&lt;li&gt;API credentials (key &amp;amp; secret)&lt;/li&gt;
&lt;li&gt;Akses dokumentasi &amp;amp; SDK lengkap&lt;/li&gt;
&lt;li&gt;Kredit pengujian terbatas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pembatasan trial:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hanya bisa kirim ke nomor yang diverifikasi.&lt;/li&gt;
&lt;li&gt;Tidak bisa broadcast ke nomor random sampai upgrade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Langkah memulai:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Akses &lt;a href="https://dashboard.nexmo.com" rel="noopener noreferrer"&gt;dashboard.nexmo.com&lt;/a&gt; atau &lt;a href="https://www.vonage.com/communications-apis/" rel="noopener noreferrer"&gt;vonage.com/communications-apis&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Daftar akun gratis dengan email&lt;/li&gt;
&lt;li&gt;Verifikasi nomor telepon Anda&lt;/li&gt;
&lt;li&gt;Dapatkan API key &amp;amp; secret dari dashboard&lt;/li&gt;
&lt;li&gt;Lakukan call API pertama via REST API atau SDK resmi&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ueumbyjp6vt2xicifxk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ueumbyjp6vt2xicifxk.png" alt="gambar-63" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SDK Vonage tersedia untuk Node.js, Python, PHP, Ruby, Java, .NET, dan Go. Alternatif: gunakan klien HTTP untuk REST API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Menguji Integrasi SMS Vonage Anda dengan Apidog
&lt;/h2&gt;

&lt;p&gt;Setelah punya API key &amp;amp; secret, gunakan Apidog untuk testing integrasi sebelum go-live.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi04oh5iormtlr02zuvt3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi04oh5iormtlr02zuvt3.png" alt="gambar-62" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fitur Skenario Uji Apidog:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chain beberapa request API jadi satu skenario otomatis.&lt;/li&gt;
&lt;li&gt;Simulasi alur kerja SMS sebenarnya: kirim, cek status, handle error.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Menyiapkan Skenario Pengujian
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Buka modul Tes di Apidog, buat skenario baru.&lt;/li&gt;
&lt;li&gt;Tambahkan langkah dari:

&lt;ul&gt;
&lt;li&gt;Import spesifikasi API (OpenAPI)&lt;/li&gt;
&lt;li&gt;Request custom ke endpoint Vonage REST API&lt;/li&gt;
&lt;li&gt;Import perintah cURL dari dokumentasi Vonage&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contoh pengujian SMS dasar:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Buat request POST ke &lt;code&gt;https://rest.nexmo.com/sms/json&lt;/code&gt; dengan parameter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"api_key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"API_KEY_ANDA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"api_secret"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"API_SECRET_ANDA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NOMOR_PENGIRIM"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NOMOR_PENERIMA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Pesan testing dari Apidog"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Memvalidasi Respons
&lt;/h3&gt;

&lt;p&gt;Apidog otomatis validasi respons dengan skema. Untuk SMS Vonage, response sukses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP status = 200&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;messages[0].status&lt;/code&gt; = &lt;code&gt;"0"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;messages[0].message-id&lt;/code&gt; tidak kosong&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jika status error (1, 2, 4, dst), assertion gagal dan Anda bisa debug respons langsung.&lt;/p&gt;

&lt;h3&gt;
  
  
  Meneruskan Data Antar Permintaan
&lt;/h3&gt;

&lt;p&gt;Gunakan sintaks &lt;code&gt;{{$.stepId.response.body.field}}&lt;/code&gt; untuk passing data antar step. Misal, ambil &lt;code&gt;message-id&lt;/code&gt; dari response pertama untuk request selanjutnya.&lt;/p&gt;

&lt;h3&gt;
  
  
  Menjalankan Pengujian di CI/CD
&lt;/h3&gt;

&lt;p&gt;Integrasi Apidog dengan GitHub Actions/GitLab CI/Jenkins tersedia. Export skenario, jalankan otomatis via Apidog CLI setiap pull request. Menangkap bug integrasi sebelum produksi.&lt;/p&gt;

&lt;p&gt;Coba gratis di &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;apidog.com&lt;/a&gt;. Tidak perlu kartu kredit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;API SMS Vonage menawarkan model bayar per pakai tanpa minimum bulanan. SMS keluar AS: $0,00809/pesan, masuk: $0,00649. Biaya bisa bertambah tergantung negara, tipe nomor, dan encoding pesan. Fitur premium (API Audit, Redaksi Otomatis, Dukungan 24/7) menambah biaya signifikan—rencanakan budget dengan matang.&lt;/p&gt;

&lt;p&gt;Alternatif lebih murah: Telnyx &amp;amp; Plivo. Twilio menang di ekosistem. Vonage cocok untuk kebutuhan enterprise, keandalan operator, dan global reach.&lt;/p&gt;

&lt;p&gt;Sebelum produksi, gunakan Apidog untuk membangun skenario pengujian Vonage Anda. Pastikan semua alur berjalan sesuai rencana dan error bisa dideteksi sebelum masuk ke user.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Apakah Vonage sama dengan Nexmo?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ya. Vonage mengakuisisi Nexmo pada 2016. Endpoint API lama (&lt;code&gt;rest.nexmo.com&lt;/code&gt;) masih aktif dan dokumentasi di &lt;code&gt;developer.vonage.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah Vonage mengenakan biaya bulanan untuk SMS?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tidak ada biaya platform bulanan untuk API SMS. Anda hanya membayar per pesan dan sewa nomor virtual. Add-on seperti Audit/Redaksi punya biaya bulanan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Berapa biaya nomor telepon Vonage?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Nomor virtual lokal AS mulai beberapa dolar per bulan. Nomor bebas pulsa &amp;amp; kode pendek lebih mahal. Cek dashboard untuk harga terbaru.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Negara mana saja yang didukung SMS Vonage?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Vonage mendukung SMS di 190+ negara. Tarif sangat bervariasi. Untuk detail, download global rate sheet di dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah Vonage menawarkan diskon volume?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ya. Untuk volume tinggi, hubungi sales Vonage untuk harga khusus. Default: pay-as-you-go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bisakah saya menerima SMS masuk secara gratis?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Nomor bebas pulsa AS sering menerima SMS masuk gratis. Kode panjang: $0,00649/pesan masuk. Harga beda tiap negara, cek rate sheet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana perbandingan Vonage dengan Twilio untuk SMS?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Harga keluar SMS AS Vonage ($0,00809) sedikit lebih tinggi dari Twilio ($0,0079). Twilio unggul ekosistem &amp;amp; integrasi. Vonage punya keunggulan hubungan operator (Ericsson) dan harga kompetitif di pasar tertentu. Pilihan akhir tergantung kebutuhan workflow &amp;amp; support.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Apa Arti Cursor 3 bagi Pengembang API?</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Fri, 03 Apr 2026 03:48:08 +0000</pubDate>
      <link>https://dev.to/walse/apa-arti-cursor-3-bagi-pengembang-api-4haj</link>
      <guid>https://dev.to/walse/apa-arti-cursor-3-bagi-pengembang-api-4haj</guid>
      <description>&lt;p&gt;&lt;strong&gt;Intinya:&lt;/strong&gt; Cursor 3 diluncurkan pada 2 April 2026, menggantikan antarmuka berbasis IDE dengan ruang kerja yang berfokus pada agen. Untuk pengembang API, perubahan utama adalah eksekusi agen paralel, output alat MCP yang lebih kaya, dan kemampuan serah terima cloud ke lokal yang menjaga alur kerja tetap lancar. Jika Anda mengintegrasikan Cursor 3 dengan Apidog's MCP Server, agen AI Anda bisa langsung membaca spesifikasi API dan menghasilkan kode yang akurat serta sadar skema—tanpa copy-paste.

&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  Pergeseran yang Sudah Terjadi di Lingkungan Pengembangan
&lt;/h2&gt;

&lt;p&gt;Editor kode AI makin canggih dalam dua tahun terakhir. Namun, Cursor 3 bukan sekadar upgrade—ini adalah redesain total lingkungan pengembangan AI.&lt;/p&gt;

&lt;p&gt;Sebelum Cursor 3, alur kerja Anda masih mirip IDE tradisional: buka file, panggil agen, tinjau perbedaan, lanjutkan. Agen berperan sebagai asisten on-demand.&lt;/p&gt;

&lt;p&gt;Dengan Cursor 3, agen menjadi unit kerja utama. Anda kelola mereka seperti tab browser: jalankan beberapa agen paralel, pantau output mereka, dan pilih hasil terbaik.&lt;/p&gt;

&lt;p&gt;Bagi pengembang API, perubahan ini sangat penting. Pekerjaan API sangat bergantung pada koordinasi: menulis endpoint, menguji kontrak, memperbarui dokumentasi, dan mengejar konsistensi skema. Semua berjalan paralel di proyek nyata. Kini, alat Anda bisa mengikuti ritme itu.&lt;/p&gt;

&lt;p&gt;💡Satu hal yang tidak dilakukan Cursor 3 secara otomatis: ia tidak tahu spesifikasi API Anda. Di sinilah Apidog MCP Server dibutuhkan. Setelah terhubung, agen Cursor bisa menarik skema OpenAPI, definisi endpoint, dan skenario pengujian langsung dari Apidog. Agen berhenti mengira-ngira nama field. Kode yang dihasilkan langsung sesuai spesifikasi.&lt;/p&gt;

&lt;p&gt;Artikel ini membahas detail perubahan di Cursor 3, dampaknya pada pengembangan API, serta workflow konkret menghubungkan Cursor 3 dengan Apidog MCP Server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa yang Baru di Cursor 3
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cursor.com/blog/cursor-3" rel="noopener noreferrer"&gt;Cursor 3&lt;/a&gt; dirilis 2 April 2026. Fitur utamanya adalah Agents Window, namun ada beberapa perubahan kunci yang langsung berdampak bagi developer API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jendela Agen (Agents Window)
&lt;/h3&gt;

&lt;p&gt;Agents Window menggantikan layout editor tradisional dengan layout berbasis agen. Anda bisa menjalankan agen di beberapa repo sekaligus—baik lokal, worktree git, cloud Cursor, atau mesin SSH remote.&lt;/p&gt;

&lt;p&gt;Akses via &lt;code&gt;Cmd+Shift+P -&amp;gt; Agents Window&lt;/code&gt;. Anda tetap bisa membuka IDE seperti biasa atau beralih kapan saja.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4oyy02bv4kn9xdm2zubf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4oyy02bv4kn9xdm2zubf.png" alt="Agents Window" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contoh workflow:&lt;/strong&gt; Mulai agen untuk membuat kerangka endpoint API baru di satu repo, sementara agen lain memperbaiki bug di library bersama. Pantau dan review perubahan masing-masing sebelum merge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mode Desain
&lt;/h3&gt;

&lt;p&gt;Di Agents Window, Design Mode memungkinkan Anda menganotasi UI browser langsung: pilih elemen, highlight area, dan tambahkan ke konteks agen tanpa perlu deskripsi manual. Cocok untuk API developer yang sering menguji frontend.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pintasan: &lt;code&gt;Cmd+Shift+D&lt;/code&gt; untuk toggle, &lt;code&gt;Shift+drag&lt;/code&gt; untuk pilih area, &lt;code&gt;Cmd+L&lt;/code&gt; untuk tambahkan elemen ke chat.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6pfv5dbgfl43dnkza119.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6pfv5dbgfl43dnkza119.png" alt="Design Mode" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Aplikasi MCP: Output Konten Terstruktur
&lt;/h3&gt;

&lt;p&gt;Cursor 3 kini mendukung output terstruktur dari aplikasi MCP. Output sebelumnya berupa plain text, sekarang bisa berupa data kaya/terstruktur.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F479ffyk6lfbdc6dsuua9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F479ffyk6lfbdc6dsuua9.png" alt="MCP Output" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dengan Apidog MCP Server, respons API (endpoint, skema, hasil tes) disajikan dalam format yang langsung bisa diproses agen Cursor—bukan sekadar text blob.&lt;/p&gt;

&lt;h3&gt;
  
  
  Worktree, /best-of-n, dan Isolasi
&lt;/h3&gt;

&lt;p&gt;Perintah baru:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/worktree&lt;/code&gt;: Buat worktree git terisolasi. Aman untuk eksperimen/destruktif tanpa mengganggu direktori kerja utama.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/best-of-n&lt;/code&gt;: Jalankan task yang sama paralel di beberapa model AI, masing-masing di worktree sendiri, lalu bandingkan hasil.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contoh:&lt;/strong&gt; Uji bagaimana Claude, GPT-4o, dan Gemini mengimplementasikan endpoint rumit. Pilih hasil terbaik.&lt;/p&gt;

&lt;h3&gt;
  
  
  Serah Terima Cloud ke Lokal
&lt;/h3&gt;

&lt;p&gt;Agen kini bisa berpindah antara cloud dan lokal: mulai task berat di cloud, lalu tarik ke lokal untuk tes terhadap service nyata; atau dorong sesi ke cloud agar tetap jalan saat laptop dimatikan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implikasi untuk Pengembangan API
&lt;/h2&gt;

&lt;p&gt;Pekerjaan API penuh context switching: spesifikasi, klien (Apidog), kode, terminal, dokumentasi—semua terpisah. Cursor 3 mulai menyatukan ini dengan agen persisten dan paralel. Nilai tambahnya makin terasa dengan MCP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pengembangan Endpoint Paralel
&lt;/h3&gt;

&lt;p&gt;Bangun REST API dengan banyak endpoint? Tidak perlu lagi sequential. Jelaskan setiap endpoint di agen berbeda, biarkan semua berjalan paralel. Review dan merge hanya yang lolos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pembuatan Kode Sadar Skema
&lt;/h3&gt;

&lt;p&gt;Tanpa akses spesifikasi OpenAPI, agen hanya menebak struktur data. Dengan integrasi Apidog MCP Server, agen benar-benar membaca skema: field, tipe, enum, dll. Kode yang dihasilkan langsung sesuai spesifikasi.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pengujian Kontrak di Editor
&lt;/h3&gt;

&lt;p&gt;Agen Cursor 3 bisa menjalankan perintah terminal. Gabungkan dengan Apidog CLI, dan otomatisasi validasi kontrak langsung dari editor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contoh:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;--scenario&lt;/span&gt; &amp;lt;test-id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agen baca output, iterasi jika gagal, dan Anda bisa langsung review.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dokumentasi Selalu Sinkron
&lt;/h3&gt;

&lt;p&gt;Agen Cursor 3 bisa membaca dokumentasi Apidog via MCP Server dan membandingkan dengan kode. Ketidaksesuaian dideteksi otomatis—tinggal update spesifikasi atau kode lewat workflow review.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apa yang Belum Berubah
&lt;/h3&gt;

&lt;p&gt;Cursor 3 tidak otomatis menguji API, validasi auth, atau test load—ini tetap butuh alat QA khusus. Output MCP terstruktur juga bergantung versi; pastikan MCP Server Anda sudah mendukungnya (Apidog sudah).&lt;/p&gt;

&lt;h2&gt;
  
  
  Cursor 3 + Apidog MCP Server: Workflow Praktis
&lt;/h2&gt;

&lt;p&gt;Ini contoh workflow nyata antara Cursor 3 dan Apidog MCP Server. Bukan sekadar "AI untuk tulis kode," tapi benar-benar integrasi workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Penyiapan
&lt;/h3&gt;

&lt;p&gt;Hubungkan Apidog MCP Server ke Cursor. Di pengaturan MCP Cursor, tambahkan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apidog"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@apidog/mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APIDOG_ACCESS_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your_access_token"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Token akses didapat dari Apidog &amp;gt; Pengaturan Akun &amp;gt; Token Akses API. Setelah terkoneksi, agen Cursor bisa memanggil tools seperti &lt;code&gt;get_endpoint_detail&lt;/code&gt;, &lt;code&gt;list_endpoints&lt;/code&gt;, &lt;code&gt;get_schema&lt;/code&gt; ke proyek Anda.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contoh Workflow: Buat Kerangka Endpoint Baru dari Spesifikasi
&lt;/h3&gt;

&lt;p&gt;Misal Anda menambah endpoint &lt;code&gt;POST /invoices&lt;/code&gt; di Apidog (sudah ada request body, response schema, dan skenario tes).&lt;/p&gt;

&lt;p&gt;Di Agents Window, buka sesi agen baru dan beri instruksi:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Cari endpoint POST /invoices di proyek Apidog. Baca skema permintaan dan respons. Buat handler Node.js/Express sesuai spesifikasi. Jalankan skenario testing untuk verifikasi."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agen akan:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ambil detail endpoint via MCP.&lt;/li&gt;
&lt;li&gt;Generate handler code dari skema.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jalankan testing via:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog run &lt;span class="nt"&gt;--scenario&lt;/span&gt; invoice-creation-test &lt;span class="nt"&gt;--env&lt;/span&gt; staging
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Patch kode jika tes gagal.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Anda review diff terakhir. Kode langsung sesuai spesifikasi karena agen akses skema aktual.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keunggulan &lt;code&gt;/best-of-n&lt;/code&gt; untuk Endpoint Kompleks
&lt;/h3&gt;

&lt;p&gt;Untuk endpoint rumit, gunakan &lt;code&gt;/best-of-n&lt;/code&gt;. Tiga agen, tiga implementasi berbeda, semua baca spesifikasi Apidog yang sama via MCP. Bandingkan hasil di worktree—pilih yang terbaik.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sinkronisasi Dokumentasi
&lt;/h3&gt;

&lt;p&gt;Setelah deploy endpoint, jalankan agen kedua:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Periksa dokumentasi Apidog untuk POST /invoices. Bandingkan dengan kode di invoices.js. Tandai perbedaan. Jika respons di kode beda dari spesifikasi, update spesifikasi Apidog."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agen membandingkan via MCP, mengusulkan update, dan Anda tinggal review/approve.&lt;/p&gt;

&lt;p&gt;Baca lebih lanjut di [ikhtisar server mcp apidog] dan [memulai dengan cli apidog].&lt;/p&gt;

&lt;h2&gt;
  
  
  Penyiapan Praktis: Mulai Sekarang
&lt;/h2&gt;

&lt;p&gt;Berikut langkah konkret untuk mulai pakai Cursor 3 + Apidog MCP Server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Langkah 1: Update Cursor
&lt;/h3&gt;

&lt;p&gt;Download latest dari cursor.com. Pastikan Agents Window tersedia di &lt;code&gt;Cmd+Shift+P&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Langkah 2: Buat Token Akses Apidog
&lt;/h3&gt;

&lt;p&gt;Login Apidog, buka Pengaturan Akun &amp;gt; Token Akses API. Buat token baru (read access), copy untuk langkah selanjutnya.&lt;/p&gt;

&lt;h3&gt;
  
  
  Langkah 3: Tambahkan Apidog MCP Server ke Cursor
&lt;/h3&gt;

&lt;p&gt;Di Pengaturan Cursor &amp;gt; MCP, tambahkan konfigurasi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apidog"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@apidog/mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APIDOG_ACCESS_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your_token_here"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APIDOG_PROJECT_ID"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your_project_id"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ambil ID proyek dari URL Apidog Anda. Simpan dan restart Cursor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Langkah 4: Verifikasi Koneksi
&lt;/h3&gt;

&lt;p&gt;Buka Agents Window, mulai sesi baru, dan ketik: "Daftar endpoint di proyek Apidog saya." Jika list muncul, koneksi sukses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Langkah 5: Instal dan Konfigurasi Apidog CLI
&lt;/h3&gt;

&lt;p&gt;Untuk eksekusi pengujian, instal Apidog CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; apidog-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cek dengan &lt;code&gt;apidog -v&lt;/code&gt;. Di Apidog, pada skenario testing, buka tab CI/CD dan copy perintah CLI yang sudah disiapkan. Jalankan di terminal Cursor, atau minta agen menjalankan otomatis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Langkah 6: Jalankan Task Agen MCP Pertama Anda
&lt;/h3&gt;

&lt;p&gt;Di Agents Window, beri instruksi nyata, misal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Cari skema objek User di Apidog. Buat TypeScript interface yang persis sama."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Review output dengan skema aktual. Jika tepat, integrasi MCP berfungsi.&lt;/p&gt;

&lt;p&gt;Setelah ini, Anda bisa buat workflow lebih kompleks: baca spesifikasi → generate kode → jalankan pengujian—semua dalam satu sesi agen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;Cursor 3 mengubah cara Anda bekerja dengan AI di lingkungan pengembangan. Fokus pada agen dan eksekusi paralel cocok dengan pola kerja pengembangan API modern.&lt;/p&gt;

&lt;p&gt;Output MCP terstruktur jadi kunci: agen menerima data bersih dan bertipe, sehingga kode yang dihasilkan lebih akurat dan minim koreksi.&lt;/p&gt;

&lt;p&gt;Integrasi Cursor 3 + Apidog MCP Server + CLI = workflow di mana agen AI benar-benar memahami API Anda, membaca spesifikasi, generate kode, dan menjalankan testing—bukan sekadar demo, tapi siklus kerja harian.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pertanyaan yang Sering Diajukan
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Apakah Cursor 3 menggantikan IDE lama?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tidak. Cursor 3 menambah Agents Window sebagai antarmuka baru. Anda bebas beralih ke IDE kapan pun, atau buka keduanya bersamaan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apa bedanya Cursor 3 dengan versi sebelumnya?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Arsitektur utama berubah: versi lama fokus pada editor, agen hanya fitur sampingan. Cursor 3 fokus pada agen, editor tetap bisa diakses. Tambahan: eksekusi paralel, serah terima cloud-lokal, Design Mode, &lt;code&gt;/worktree&lt;/code&gt;, &lt;code&gt;/best-of-n&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana Apidog MCP Server terhubung ke Cursor 3?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Apidog MCP Server ditambahkan sebagai konfigurasi MCP di Cursor Settings. Server mengekspos data API proyek Apidog sebagai tools yang bisa dipanggil agen Cursor (spesifikasi endpoint, skema, skenario tes). Dukungan konten terstruktur berarti data diterima dalam format bertipe, bukan plain text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bisakah agen Cursor 3 menjalankan skenario pengujian Apidog otomatis?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Bisa, via Apidog CLI. Agen dapat menjalankan perintah terminal, termasuk skenario Apidog, baca output, dan iterasi kode secara otomatis. Proses ini menciptakan feedback loop antara pembuatan kode dan validasi kontrak API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Butuh paket berbayar Cursor untuk Agents Window?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Agents Window tersedia di semua paket Cursor 3. Eksekusi cloud agent (agen tetap berjalan walau Anda offline) butuh langganan berbayar. Eksekusi lokal gratis. Cek &lt;a href="https://cursor.com/pricing" rel="noopener noreferrer"&gt;cursor.com/pricing&lt;/a&gt; untuk detail terbaru.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cara Menjalankan Gemma 4 Secara Lokal dengan Ollama: Panduan Lengkap</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Fri, 03 Apr 2026 02:53:10 +0000</pubDate>
      <link>https://dev.to/walse/cara-menjalankan-gemma-4-secara-lokal-dengan-ollama-panduan-lengkap-4966</link>
      <guid>https://dev.to/walse/cara-menjalankan-gemma-4-secara-lokal-dengan-ollama-panduan-lengkap-4966</guid>
      <description>&lt;h2&gt;
  
  
  Ringkasan Singkat
&lt;/h2&gt;

&lt;p&gt;Gemma 4 dirilis pada 3 April 2026, dan Ollama v0.20.0 langsung menambahkan dukungan di hari yang sama. Anda bisa menarik (pull) dan menjalankan model default &lt;code&gt;gemma4:e4b&lt;/code&gt; hanya dengan dua perintah. Panduan ini akan membimbing Anda mulai dari pengaturan, pemilihan model, penggunaan API, hingga cara menguji endpoint Gemma 4 lokal dengan Apidog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Pendahuluan
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://apidog.com/blog/gemma-4-api/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Google merilis Gemma 4&lt;/a&gt; pada 2 April 2026. Dalam 24 jam, Ollama merilis v0.20.0 dengan dukungan penuh untuk keempat varian model.&lt;/p&gt;

&lt;p&gt;Bagi developer, ini adalah perubahan besar. Gemma 4 melonjak ke 89,2% di AIME 2026 dari 20,8% (Gemma 3). Benchmark pemrograman naik dari 110 ELO ke 2150 di Codeforces. Ada native function calling, mode berpikir configurable, dan jendela konteks 256K untuk varian besar—semua berjalan di hardware Anda sendiri.&lt;/p&gt;

&lt;p&gt;Jika Anda membangun aplikasi berbasis API, menjalankan Gemma 4 lokal memungkinkan AI privat, cepat, dan efisien untuk menghasilkan mock data, menulis skenario pengujian, serta memvalidasi respons API tanpa mengirim data ke cloud.&lt;/p&gt;

&lt;p&gt;💡 Setelah Gemma 4 berjalan lokal, Smart Mock Apidog dapat menghasilkan data respons API realistis dari skema Anda menggunakan inferensi AI yang sama. Anda cukup menentukan bentuk API sekali; Apidog menangani mock-nya. Cocok untuk eksperimen model lokal agar data uji konsisten dan sesuai skema tanpa fixture manual.&lt;/p&gt;

&lt;p&gt;Panduan ini membahas instalasi hingga panggilan API lokal pertama Anda.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa yang Baru di Gemma 4
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.google/innovation-and-ai/technology/developers-tools/gemma-4/" rel="noopener noreferrer"&gt;Gemma 4&lt;/a&gt; hadir dalam empat varian model dengan kemampuan berbeda.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsos2mixfbxq6ww8ghoy8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsos2mixfbxq6ww8ghoy8.png" alt="Gemma 4 Model Comparison"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perbedaan utama dengan Gemma 3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Penalaran &amp;amp; Coding:&lt;/strong&gt; Model 31B mencapai 80% di LiveCodeBench v6, jauh di atas 29,1% (Gemma 3 27B).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mixture-of-Experts (MoE):&lt;/strong&gt; Varian 26B menggunakan MoE dengan hanya 4B parameter aktif per inferensi—kualitas flagship, biaya komputasi rendah.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Konteks Panjang:&lt;/strong&gt; E2B dan E4B: 128K token. 26B dan 31B: 256K—cukup untuk basis kode besar atau file API specs dalam satu prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function Calling Native:&lt;/strong&gt; Semua model mendukung function calling terstruktur langsung, return JSON valid sesuai skema tanpa prompt engineering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input Audio &amp;amp; Gambar:&lt;/strong&gt; E2B dan E4B mendukung input audio/gambar variabel + teks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mode Berpikir:&lt;/strong&gt; Chain-of-thought reasoning bisa diaktifkan per permintaan; aktifkan untuk coding/matematika kompleks, matikan untuk permintaan sederhana.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Varian Model Gemma 4 Dijelaskan
&lt;/h2&gt;

&lt;p&gt;Sebelum pull, pilih model sesuai hardware:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Ukuran di disk&lt;/th&gt;
&lt;th&gt;Konteks&lt;/th&gt;
&lt;th&gt;Arsitektur&lt;/th&gt;
&lt;th&gt;Terbaik untuk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemma4:e2b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;7.2 GB&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;Laptop, edge, audio/gambar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemma4:e4b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;9.6 GB&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;Sebagian besar developer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemma4:26b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;18 GB&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;MoE (4B aktif)&lt;/td&gt;
&lt;td&gt;Kualitas terbaik per GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gemma4:31b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;20 GB&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;Dense&lt;/td&gt;
&lt;td&gt;Kualitas maksimal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Model &lt;code&gt;e4b&lt;/code&gt; adalah default saat menjalankan &lt;code&gt;ollama run gemma4&lt;/code&gt; — cocok untuk GPU konsumer VRAM 10+ GB atau Apple Silicon 16 GB unified memory.&lt;/p&gt;

&lt;p&gt;Varian MoE &lt;code&gt;26b&lt;/code&gt; sangat efisien: 4B aktif per token, kecepatan mirip model 4B, kualitas setara 13B. Coba jika punya RAM 20+ GB.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prasyarat
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ollama v0.20.0+ (versi lama belum mendukung Gemma 4).&lt;/li&gt;
&lt;li&gt;Cek versi:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  ollama &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Jika perlu update:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="c"&gt;# macOS&lt;/span&gt;
  brew upgrade ollama

  &lt;span class="c"&gt;# Linux&lt;/span&gt;
  curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Windows: unduh installer terbaru dari &lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;ollama.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Persyaratan hardware:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gemma4:e2b&lt;/code&gt;: RAM minimal 8 GB (disarankan 16 GB)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gemma4:e4b&lt;/code&gt;: VRAM 10 GB / unified memory 16 GB&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gemma4:26b&lt;/code&gt;: RAM/unified memory 20+ GB&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gemma4:31b&lt;/code&gt;: VRAM 24 GB / unified memory 32 GB&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Instalasi dan Menjalankan Gemma 4
&lt;/h2&gt;

&lt;p&gt;Tarik dan jalankan model default e4b:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama run gemma4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8678q5cv6x7szg7u7lfq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8678q5cv6x7szg7u7lfq.png" alt="Ollama Terminal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unduhan pertama ±9.6 GB, lalu Anda masuk sesi interaktif. Coba prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; What are the HTTP status codes for client errors?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jalankan varian lain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Model Edge&lt;/span&gt;
ollama run gemma4:e2b

&lt;span class="c"&gt;# Model MoE&lt;/span&gt;
ollama run gemma4:26b

&lt;span class="c"&gt;# Flagship&lt;/span&gt;
ollama run gemma4:31b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pull tanpa run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma4
ollama pull gemma4:26b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cek model yang tersedia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Menggunakan API Gemma 4 Secara Lokal
&lt;/h2&gt;

&lt;p&gt;Ollama expose API REST lokal di &lt;code&gt;http://localhost:11434&lt;/code&gt;. Setelah model di-pull, Anda bisa panggil via HTTP tanpa CLI interaktif.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generate Completion
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:11434/api/generate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "gemma4",
    "prompt": "Write a JSON response for a user profile API endpoint",
    "stream": false
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Chat Completion (OpenAI-Compatible)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://localhost:11434/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "gemma4",
    "messages": [
      {
        "role": "user",
        "content": "Generate a realistic JSON mock for an e-commerce order API response"
      }
    ]
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Klien Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ask_gemma4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:11434/api/generate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stream&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;response&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ask_gemma4&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;List the fields a payment API response should include&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Menggunakan OpenAI Python SDK
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:11434/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ollama&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# required by the SDK but unused by Ollama
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You generate realistic API response data in JSON format.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generate a sample response for a GET /users/{id} endpoint&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Menggunakan Function Calling dengan Gemma 4
&lt;/h2&gt;

&lt;p&gt;Gemma 4 mendukung function calling native. Definisikan skema fungsi, model akan mengembalikan JSON terstruktur sesuai signature Anda.&lt;/p&gt;

&lt;p&gt;Contoh implementasi dengan OpenAI SDK:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:11434/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ollama&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Retrieve a user by ID from the API&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;integer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The unique user ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                    &lt;span class="p"&gt;},&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;include_orders&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;boolean&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Whether to include order history&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Get user 42 with their order history&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tool_choice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tool_call&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="c1"&gt;# get_user
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tool_call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# {"user_id": 42, "include_orders": true}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Model secara otomatis mengekstrak parameter dari input natural language dan return JSON valid sesuai skema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mengaktifkan Mode Berpikir
&lt;/h2&gt;

&lt;p&gt;Untuk tugas kompleks seperti membuat skenario pengujian atau analisis spesifikasi API, aktifkan chain-of-thought reasoning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Design a complete test scenario for a payment processing API with edge cases&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;think&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Untuk permintaan sederhana, lewati mode berpikir agar latensi tetap rendah.&lt;/p&gt;

&lt;h2&gt;
  
  
  Menguji Respons API Gemma 4 dengan Apidog
&lt;/h2&gt;

&lt;p&gt;Setelah Gemma 4 lokal berjalan, Anda bisa menguji endpoint API secara otomatis dengan Apidog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fci3hhb0u9dmnzb9i72vs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fci3hhb0u9dmnzb9i72vs.png" alt="Apidog Test Scenario"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Langkah-langkah:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Impor Spesifikasi API Ollama:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Buat project baru di Apidog, tambahkan base URL &lt;code&gt;http://localhost:11434&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Definisikan Endpoint:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;POST /api/generate&lt;/code&gt; untuk completion&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /v1/chat/completions&lt;/code&gt; untuk chat&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /api/tags&lt;/code&gt; untuk daftar model&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Siapkan Skenario Pengujian:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Langkah 1: &lt;code&gt;GET /api/tags&lt;/code&gt; — pastikan &lt;code&gt;gemma4&lt;/code&gt; tersedia&lt;/li&gt;
&lt;li&gt;Langkah 2: &lt;code&gt;POST /api/generate&lt;/code&gt; — pastikan field &lt;code&gt;response&lt;/code&gt; tidak kosong&lt;/li&gt;
&lt;li&gt;Langkah 3: &lt;code&gt;POST /v1/chat/completions&lt;/code&gt; — validasi format balasan&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Gunakan Extract Variable Apidog untuk menangkap value respons dan diteruskan antar langkah.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Validasi Skema Respons:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Uji contract Apidog terhadap OpenAPI spec Anda. Definisikan bentuk respons tiap endpoint, jalankan contract test setelah update model untuk deteksi breaking change.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Smart Mock untuk Pengembangan Paralel:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Backend tergantung Gemma 4? Frontend bisa lanjut kerja tanpa harus tunggu model lokal—Smart Mock Apidog hasilkan respons sesuai skema otomatis.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Pelajari lebih lanjut tentang Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Input Multimodal dengan Gemma 4
&lt;/h2&gt;

&lt;p&gt;Model E2B dan E4B menerima gambar bersama teks. Kirim gambar sebagai base64 string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api_diagram.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;image_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemma4:e4b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data:image/png;base64,&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;image_data&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Describe the API flow shown in this diagram and identify potential error paths&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sangat berguna untuk analisis diagram arsitektur, review screenshot API docs, atau ekstraksi data dari gambar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Masalah Umum dan Solusi
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Model tidak ditemukan:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Jalankan &lt;code&gt;ollama pull gemma4&lt;/code&gt; atau cek dengan &lt;code&gt;ollama list&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inferensi lambat di CPU:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Gemma 4 dioptimalkan untuk GPU. Untuk CPU, gunakan &lt;code&gt;gemma4:e2b&lt;/code&gt; (paling ringan).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Out-of-memory error:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Cek VRAM/unified memory dengan &lt;code&gt;ollama ps&lt;/code&gt;. Jika terlalu besar, gunakan &lt;code&gt;gemma4:e2b&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Model tidak mau load di Apple Silicon:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ollama 0.20.0 sudah dukung MLX (Apple Silicon). Update Ollama jika belum.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Port sudah digunakan:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Jalankan dengan port custom:&lt;br&gt;&lt;br&gt;
&lt;code&gt;OLLAMA_HOST=0.0.0.0:11435 ollama serve&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Respons terpotong:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tambahkan opsi konteks di request:&lt;br&gt;&lt;br&gt;
&lt;code&gt;"options": {"num_ctx": 8192}&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Gemma 4 vs Model Lokal Lainnya
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Ukuran Terbaik&lt;/th&gt;
&lt;th&gt;Konteks&lt;/th&gt;
&lt;th&gt;Function Calling&lt;/th&gt;
&lt;th&gt;Benchmark Coding&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4&lt;/td&gt;
&lt;td&gt;e4b (9.6 GB)&lt;/td&gt;
&lt;td&gt;128K-256K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;80% LiveCodeBench&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.3&lt;/td&gt;
&lt;td&gt;70B-Q4 (40 GB)&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;~60% LiveCodeBench&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3.6-Plus&lt;/td&gt;
&lt;td&gt;72B-Q4 (44 GB)&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Kuat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral Small&lt;/td&gt;
&lt;td&gt;24B (14 GB)&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Sedang&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Kelebihan Gemma 4 ada di varian MoE 26B: 18 GB, kualitas flagship, hanya 4B parameter aktif per inferensi = throughput lebih tinggi dari model dense besar.&lt;/p&gt;

&lt;p&gt;Untuk coding, model 31B bersaing dengan model jauh lebih besar. Untuk laptop/edge, &lt;code&gt;e2b&lt;/code&gt; berjalan di bawah 8 GB.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;Gemma 4 + Ollama adalah setup lokal AI paling powerful saat ini. Instalasi hanya dua command. Model default berjalan di hampir semua mesin developer. Kenaikan kualitas reasoning dan coding dibanding Gemma 3 sangat terasa.&lt;/p&gt;

&lt;p&gt;Mulai dengan &lt;code&gt;ollama run gemma4&lt;/code&gt;, uji API Anda dengan Apidog untuk validasi endpoint, lalu pilih varian model sesuai workload (lihat tabel model).&lt;/p&gt;

&lt;p&gt;Untuk tim yang membangun fitur API di atas Gemma 4, kombinasi inferensi lokal, Smart Mock, dan Skenario Pengujian Apidog memberi Anda siklus dev lengkap tanpa tergantung cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana cara memperbarui Gemma 4 di Ollama saat versi baru keluar?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Jalankan &lt;code&gt;ollama pull gemma4&lt;/code&gt; lagi. Ollama otomatis cek versi terbaru dan hanya unduh yang berubah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dapatkah saya menjalankan Gemma 4 di mesin tanpa GPU?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Bisa, walau lambat. 1-3 token/detik di CPU. Gunakan model &lt;code&gt;e2b&lt;/code&gt; untuk CPU-only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apa beda gemma4:e2b dan gemma4:e4b?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Keduanya dense, optimasi untuk edge hardware. E4B lebih besar, lebih baik untuk reasoning. E2B lebih kecil, bisa input audio. Untuk tugas teks, e4b biasanya lebih baik.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah Gemma 4 bekerja dengan LangChain dan LlamaIndex?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ya. Arahkan provider Ollama ke &lt;code&gt;http://localhost:11434&lt;/code&gt; dan gunakan nama model &lt;code&gt;gemma4&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah API Gemma 4 lokal kompatibel dengan kode OpenAI API?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sebagian besar, ya. Endpoint &lt;code&gt;/v1/chat/completions&lt;/code&gt; kompatibel format OpenAI. Ganti &lt;code&gt;base_url&lt;/code&gt; ke &lt;code&gt;http://localhost:11434/v1&lt;/code&gt; dan &lt;code&gt;api_key&lt;/code&gt; ke string apa saja.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana cara menggunakan mode berpikir Gemma 4?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tambahkan &lt;code&gt;"think": true&lt;/code&gt; di parameter &lt;code&gt;extra_body&lt;/code&gt; (OpenAI SDK) atau di body JSON request API. Matikan untuk task sederhana untuk latensi rendah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dapatkah saya menyajikan Gemma 4 ke mesin lain di jaringan?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ya. Jalankan dengan:&lt;br&gt;&lt;br&gt;
&lt;code&gt;OLLAMA_HOST=0.0.0.0:11434 ollama serve&lt;/code&gt;&lt;br&gt;&lt;br&gt;
Mesin lain akses via IP Anda dan port 11434.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model Gemma 4 terbaik untuk tugas pengembangan API?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Untuk mock data dan test case: &lt;code&gt;e4b&lt;/code&gt; seimbang antara kecepatan/kualitas. Untuk analisis spesifikasi kompleks: model MoE &lt;code&gt;26b&lt;/code&gt; lebih baik tanpa overhead 31B.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Pelajari lebih lanjut tentang Apidog&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cara Menjalankan Gemma 4 sebagai Backend API</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Fri, 03 Apr 2026 02:40:08 +0000</pubDate>
      <link>https://dev.to/walse/cara-menjalankan-gemma-4-sebagai-backend-api-3chi</link>
      <guid>https://dev.to/walse/cara-menjalankan-gemma-4-sebagai-backend-api-3chi</guid>
      <description>&lt;p&gt;&lt;strong&gt;Singkatnya:&lt;/strong&gt; Google merilis Gemma 4 pada April 2026, menghadirkan empat model terbuka berlisensi Apache 2.0 yang mampu mengungguli model 20x lebih besar pada tolok ukur standar. Anda dapat mengakses API Gemma 4 via Google AI Studio, Vertex AI, atau menjalankan secara lokal melalui Ollama dan vLLM. Padukan dengan Smart Mock Apidog untuk menghasilkan respons API realistis dari skema OpenAPI Anda secara otomatis tanpa menulis aturan mock manual.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;
&lt;/p&gt;

&lt;h2 id="pendahuluan"&gt;Pendahuluan&lt;/h2&gt;

&lt;p&gt;Sebagian besar model AI open source biasanya memaksa Anda memilih antara kemampuan mentah atau kemudahan penerapan. Sering kali, model terlalu besar untuk laptop atau terlalu kecil untuk penalaran multi-langkah. Gemma 4 mematahkan kompromi ini.&lt;/p&gt;

&lt;p&gt;Gemma 4 adalah keluarga model open source Google DeepMind terkuat sejauh ini. Model Dense 31B menempati urutan ke-3 di Arena AI, mengalahkan model 20x lebih besar. Model MoE 26B menempati posisi ke-6 dan keduanya berjalan di satu GPU 80GB. Model ringan E2B dan E4B dapat berjalan offline di perangkat edge dan ponsel.&lt;/p&gt;

&lt;p&gt;Bagi pengembang API, Gemma 4 mendukung pemanggilan fungsi native, output JSON terstruktur, dan jendela konteks 256K. Ini menjadikannya pilihan praktis untuk membangun alat API berbasis AI seperti generator data uji, penulis mock, hingga analisa respons API.&lt;/p&gt;

&lt;p&gt;💡Jika Anda membangun dengan Gemma 4 dan perlu memvalidasi respons AI terhadap spesifikasi OpenAPI, mesin Smart Mock Apidog bisa otomatis menghasilkan respons mock sesuai skema API Anda. Tidak perlu menulis aturan mock manual—cukup hubungkan dan data akan dihasilkan sesuai konteks secara instan. Unduh Apidog gratis dan integrasikan ke workflow API Gemma 4 Anda.&lt;/p&gt;

&lt;h2 id="apa-itu-gemma-4-dan-apa-yang-baru"&gt;Apa itu Gemma 4 dan Apa yang Baru&lt;/h2&gt;

&lt;p&gt;Gemma 4 adalah generasi keempat model bahasa terbuka Google DeepMind. Nama "Gemma" berasal dari Latin untuk batu permata. Dimulai awal 2024, model Gemma telah diunduh lebih dari 400 juta kali dan komunitas telah merilis 100.000+ varian di ekosistem "Gemmaverse".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-52.png" alt="" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gemma 4 dirilis dengan &lt;a href="https://goo.gle/gemma-4-apache-2" rel="noopener noreferrer"&gt;lisensi Apache 2.0&lt;/a&gt;, berbeda dari generasi sebelumnya yang memakai kebijakan kustom. Artinya, Anda bebas menggunakan, memodifikasi, dan mendistribusikan Gemma 4 secara komersial tanpa batasan.&lt;/p&gt;

&lt;p&gt;Peningkatan utama Gemma 4 ada pada "kecerdasan-per-parameter". Model Dense 31B menawarkan performa terdepan dengan biaya komputasi jauh lebih efisien daripada GPT-4 atau Claude 3 Sonnet. Di Arena AI (per April 2026), Gemma 4 31B mengalahkan model dengan 600B+ parameter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-51.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-51.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fitur baru Gemma 4 dibanding Gemma 3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Input multimodal native:&lt;/strong&gt; Semua model Gemma 4 memproses gambar &amp;amp; video. Model edge E2B/E4B juga mengolah audio untuk pengenalan suara.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jendela konteks lebih panjang:&lt;/strong&gt; E2B/E4B mendukung 128K token; 26B/31B hingga 256K token—cukup untuk seluruh repo kode dalam satu prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dukungan alur kerja agen:&lt;/strong&gt; Fungsi native, output JSON terstruktur, dan instruksi sistem—memudahkan pembuatan agen API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Penalaran tingkat lanjut:&lt;/strong&gt; Model 31B lebih baik pada matematika dan instruksi multi-langkah, ideal untuk generasi uji API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dukungan 140+ bahasa:&lt;/strong&gt; Gemma 4 dilatih native di 140+ bahasa, langsung siap untuk API global.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lisensi Apache 2.0:&lt;/strong&gt; Hilangkan ambiguitas hukum untuk penggunaan komersial.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="varian-dan-kemampuan-model-gemma-4"&gt;Varian dan Kemampuan Model Gemma 4&lt;/h2&gt;

&lt;p&gt;Empat ukuran model—setiap varian untuk segmen hardware berbeda:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Parameter aktif (inferensi)&lt;/th&gt;
&lt;th&gt;Konteks&lt;/th&gt;
&lt;th&gt;Terbaik untuk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;E2B&lt;/td&gt;
&lt;td&gt;Efektif 2B&lt;/td&gt;
&lt;td&gt;~2B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Seluler, IoT, edge offline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E4B&lt;/td&gt;
&lt;td&gt;Efektif 4B&lt;/td&gt;
&lt;td&gt;~4B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Ponsel, Raspberry Pi, Jetson Orin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26B MoE&lt;/td&gt;
&lt;td&gt;Total 26B&lt;/td&gt;
&lt;td&gt;~3.8B aktif&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;Server latency-sensitif&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31B Dense&lt;/td&gt;
&lt;td&gt;31B&lt;/td&gt;
&lt;td&gt;31B&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;Kualitas tertinggi, riset, fine-tuning&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;E2B/E4B memakai arsitektur Mixture of Experts (MoE), hanya mengaktifkan sebagian kecil parameter tiap token, hemat baterai &amp;amp; RAM, bisa berjalan offline di Android (AICore Developer Preview).&lt;/p&gt;

&lt;p&gt;26B MoE hanya mengaktifkan 3.8B parameter saat inferensi, jadi rendah latensi tapi tetap berkualitas.&lt;/p&gt;

&lt;p&gt;31B Dense adalah model tertinggi—pilihan tepat untuk fine-tuning domain spesifik atau output kompleks. Semua model tersedia dalam varian instruction-tuned (IT) dan base.&lt;/p&gt;

&lt;p&gt;Untuk API, 26B MoE adalah sweet spot kecepatan vs kualitas. Pilih 31B Dense jika butuh output JSON terstruktur atau logika multi-langkah.&lt;/p&gt;

&lt;p&gt;Semua model mendukung fungsi native dan mode JSON.&lt;/p&gt;

&lt;h2 id="menyiapkan-api-gemma-4-langkah-demi-langkah"&gt;Menyiapkan API Gemma 4: Langkah Praktis&lt;/h2&gt;

&lt;p&gt;Ada tiga cara utama untuk memanggil Gemma 4: Google AI Studio (prototipe cepat), Vertex AI (enterprise), atau lokal (Ollama/vLLM).&lt;/p&gt;

&lt;h3 id="opsi-1-google-ai-studio-direkomendasikan-untuk-pembuatan-prototipe"&gt;Opsi 1: Google AI Studio (Prototipe Cepat)&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Buka Google AI Studio&lt;/a&gt;, buat akun gratis, lalu buat API key.&lt;/li&gt;
&lt;li&gt;Install SDK Google Generative AI:
&lt;pre&gt;&lt;code&gt;pip install google-genai
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Contoh panggilan API:
&lt;pre&gt;&lt;code&gt;import google.generativeai as genai

genai.configure(api_key="YOUR_API_KEY")
model = genai.GenerativeModel("gemma-4-31b-it")

response = model.generate_content(
    "Generate a JSON object for a user account with id, email, and created_at fields."
)

print(response.text)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Output JSON terstruktur dengan &lt;code&gt;response_mime_type&lt;/code&gt;:
&lt;pre&gt;&lt;code&gt;import google.generativeai as genai
import json

genai.configure(api_key="YOUR_API_KEY")

model = genai.GenerativeModel(
    "gemma-4-31b-it",
    generation_config={"response_mime_type": "application/json"}
)

prompt = '''
Generate 3 sample user objects for an e-commerce API. 
Each user should have: id (integer), email (string), username (string), 
created_at (ISO 8601 timestamp), and subscription_tier (free|pro|enterprise).
Return as a JSON array.
'''

response = model.generate_content(prompt)
users = json.loads(response.text)
print(json.dumps(users, indent=2))
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id="opsi-2-penerapan-lokal-dengan-ollama"&gt;Opsi 2: Lokal dengan Ollama&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://ollama.com" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Tarik model:
&lt;pre&gt;&lt;code&gt;ollama pull gemma4
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Jalankan server:
&lt;pre&gt;&lt;code&gt;ollama serve
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Panggil model via API OpenAI-compatible:
&lt;pre&gt;&lt;code&gt;import requests
import json

response = requests.post(
    "http://localhost:11434/api/chat",
    json={
        "model": "gemma4",
        "messages": [
            {
                "role": "user",
                "content": "Generate a valid JSON response for a REST API /products endpoint. Include id, name, price, and stock fields."
            }
        ],
        "stream": False
    }
)

result = response.json()
print(result["message"]["content"])
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 id="opsi-3-pemanggilan-fungsi-untuk-orkestrasi-api"&gt;Opsi 3: Pemanggilan Fungsi API&lt;/h3&gt;

&lt;p&gt;Untuk membangun pipeline API agen, manfaatkan pemanggilan fungsi native:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import google.generativeai as genai

genai.configure(api_key="YOUR_API_KEY")

tools = [
    {
        "function_declarations": [
            {
                "name": "get_api_schema",
                "description": "Retrieve the OpenAPI schema for a given endpoint path",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "endpoint_path": {
                            "type": "string",
                            "description": "The API endpoint path, e.g. /users/{id}"
                        },
                        "method": {
                            "type": "string",
                            "enum": ["GET", "POST", "PUT", "DELETE", "PATCH"]
                        }
                    },
                    "required": ["endpoint_path", "method"]
                }
            }
        ]
    }
]

model = genai.GenerativeModel("gemma-4-31b-it", tools=tools)

response = model.generate_content(
    "I need to test the GET /users/{id} endpoint. What schema should the response follow?"
)

if response.candidates[0].content.parts[0].function_call:
    fc = response.candidates[0].content.parts[0].function_call
    print(f"Model called function: {fc.name}")
    print(f"With args: {dict(fc.args)}")
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Pemanggilan fungsi ini sangat berguna untuk pipeline pengujian API otomatis.&lt;/p&gt;

&lt;h2 id="membangun-mock-api-bertenaga-ai-dengan-gemma-4"&gt;Mock API Otomatis dengan Gemma 4&lt;/h2&gt;

&lt;p&gt;Untuk pengembang API, Gemma 4 sangat efektif dalam menghasilkan data mock. Cocok untuk prototyping frontend, pengujian edge case, hingga validasi skema.&lt;/p&gt;

&lt;p&gt;Contoh prompt data mock dari skema OpenAPI:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import google.generativeai as genai
import json

genai.configure(api_key="YOUR_API_KEY")

model = genai.GenerativeModel(
    "gemma-4-31b-it",
    generation_config={"response_mime_type": "application/json"}
)

schema = {
    "type": "object",
    "properties": {
        "id": {"type": "integer"},
        "order_number": {"type": "string", "pattern": "^ORD-[0-9]{6}$"},
        "status": {"type": "string", "enum": ["pending", "shipped", "delivered", "cancelled"]},
        "total": {"type": "number", "minimum": 0},
        "items": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "product_id": {"type": "integer"},
                    "quantity": {"type": "integer", "minimum": 1},
                    "unit_price": {"type": "number"}
                }
            }
        },
        "created_at": {"type": "string", "format": "date-time"}
    }
}

prompt = f"""
Generate 5 realistic mock responses for an order management API.
Each response must conform exactly to this JSON Schema:
{json.dumps(schema, indent=2)}

Make the data realistic: use realistic prices, product IDs, and varied statuses.
Return as a JSON array of 5 order objects.
"""

response = model.generate_content(prompt)
mock_orders = json.loads(response.text)
print(json.dumps(mock_orders, indent=2))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Gemma 4 memahami constraint JSON Schema—enum, pola string, rentang numerik—dan akan menghasilkan data sesuai kontrak API, bukan sekadar string acak.&lt;/p&gt;

&lt;p&gt;Workflow praktis: ekspor koleksi Apidog Anda sebagai OpenAPI, tempel ke prompt, lalu generate 10 kasus uji realistis per endpoint. Hemat waktu—tidak perlu manual mocking.&lt;/p&gt;

&lt;h2 id="menguji-respons-api-gemma-4-dengan-apidog"&gt;Menguji Respons API Gemma 4 dengan Apidog&lt;/h2&gt;

&lt;p&gt;Setelah Gemma 4 menghasilkan data, Anda perlu memastikan output-nya valid sesuai skema. Berikut langkah implementasi di Apidog:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-53.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-53.png" alt="" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Langkah 1: Impor endpoint API Gemma 4 Anda ke Apidog.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Buat endpoint baru di proyek Apidog Anda, arahkan ke API wrapper Gemma 4 (atau endpoint Google AI Studio). Definisikan skema respons di Apidog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Langkah 2: Gunakan Smart Mock untuk prototipe respons.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Smart Mock otomatis menghasilkan data realistis berdasarkan skema. Properti seperti &lt;code&gt;email&lt;/code&gt; otomatis diisi dengan email valid, &lt;code&gt;created_at&lt;/code&gt; dengan timestamp ISO8601.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F04%2Fimage-54.png" alt="" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Smart Mock mengutamakan: nilai custom, inferensi nama properti, lalu default schema JSON.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Langkah 3: Buat Skenario Pengujian pipeline Gemma 4.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Di modul Pengujian Apidog, buat Skenario Pengujian baru. Tambahkan panggilan API Gemma 4, lalu langkah asersi validasi respons.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Panggil endpoint autentikasi (jika ada)&lt;/li&gt;
&lt;li&gt;Kirim prompt ke Gemma 4 beserta token auth&lt;/li&gt;
&lt;li&gt;Ekstrak JSON dari body respons&lt;/li&gt;
&lt;li&gt;Validasi JSON terhadap skema&lt;/li&gt;
&lt;li&gt;Lanjutkan data ke endpoint POST berikutnya&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Langkah 4: Setup asersi.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Validasi kode status, header, dan field JSON. Untuk Gemma 4, cek &lt;code&gt;candidates[0].content.parts[0].text&lt;/code&gt; dan parsing JSON-nya sesuai skema.&lt;/p&gt;

&lt;p&gt;Gunakan prosesor Ekstrak Variabel Apidog untuk menarik output ke variabel, lalu gunakan di permintaan berikutnya.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Langkah 5: Jalankan pengujian berbasis data.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apidog mendukung file data uji CSV/JSON. Definisikan banyak variasi prompt, jalankan sekaligus. Integrasi mudah ke pipeline CI/CD via Apidog CLI.&lt;/p&gt;

&lt;p&gt;Pipeline dari definisi skema hingga eksekusi pengujian bisa disiapkan dalam 15 menit.&lt;/p&gt;

&lt;h2 id="kasus-penggunaan-dunia-nyata"&gt;Kasus Penggunaan Nyata&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generasi data uji API:&lt;/strong&gt; Dengan Gemma 4 mode output JSON + skema OpenAPI, generate ratusan data uji dalam menit. Input skema, tentukan edge case, biarkan model buat datanya.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mocking API cerdas:&lt;/strong&gt; Mock statis diganti dengan respons dinamis berbasis konteks. Contoh: API pencarian produk mengembalikan hasil berbeda sesuai query tanpa hardcoded case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Otomatisasi dokumentasi API:&lt;/strong&gt; Jendela konteks 256K memungkinkan seluruh kode base masuk prompt. Generate dokumentasi OpenAPI otomatis, bahkan generate spesifikasi dari file route.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validasi skema respons:&lt;/strong&gt; Analisis respons API pihak ketiga dengan Gemma 4, tandai pelanggaran skema lebih akurat dari validator JSON Schema sederhana.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Penulisan uji regresi otomatis:&lt;/strong&gt; Beri model spesifikasi API &amp;amp; bug report, minta generate test case untuk mendeteksi bug tersebut. Gemma 4 memahami dependency &amp;amp; status transition antar field.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="gemma-4-vs-model-terbuka-lainnya-untuk-penggunaan-api"&gt;Gemma 4 vs Model Terbuka Lain untuk API&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Konteks&lt;/th&gt;
&lt;th&gt;Output JSON&lt;/th&gt;
&lt;th&gt;Pemanggilan fungsi&lt;/th&gt;
&lt;th&gt;Lisensi&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 31B&lt;/td&gt;
&lt;td&gt;31B&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 26B MoE&lt;/td&gt;
&lt;td&gt;26B (3.8B aktif)&lt;/td&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.3 70B&lt;/td&gt;
&lt;td&gt;70B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Via prompt&lt;/td&gt;
&lt;td&gt;Via prompt&lt;/td&gt;
&lt;td&gt;Lisensi Komunitas Llama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral 7B&lt;/td&gt;
&lt;td&gt;7B&lt;/td&gt;
&lt;td&gt;32K&lt;/td&gt;
&lt;td&gt;Via prompt&lt;/td&gt;
&lt;td&gt;Terbatas&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen 2.5 72B&lt;/td&gt;
&lt;td&gt;72B&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Fitur kritikal API: output JSON native, fungsi native, konteks panjang. Gemma 4 31B &amp;amp; 26B punya ketiganya.&lt;/p&gt;

&lt;p&gt;Llama 3.3 70B setara performa tapi butuh 2x GPU dibanding Gemma 4 31B. Qwen 2.5 72B juga kuat, tapi lebih berat secara hardware.&lt;/p&gt;

&lt;p&gt;Lisensi Apache 2.0 Gemma 4 lebih jelas untuk produk komersial dibanding Llama Community License.&lt;/p&gt;

&lt;p&gt;Rekomendasi: 26B MoE untuk API latency-sensitif, 31B Dense untuk kualitas/output kompleks.&lt;/p&gt;

&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;

&lt;p&gt;Gemma 4 adalah alternatif terbuka kredibel untuk API AI proprietary dalam pengembangan alat API. Lisensi Apache 2.0 menghilangkan friksi legal. Fungsi native &amp;amp; output JSON membuat integrasi API sederhana tanpa prompt engineering rumit.&lt;/p&gt;

&lt;p&gt;Empat ukuran model mencakup semua kebutuhan hardware. 26B MoE adalah opsi seimbang untuk sebagian besar workflow API. Integrasikan dengan &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; untuk workflow validasi otomatis: Gemma 4 untuk data uji/mock, Apidog Smart Mock untuk prototipe skema, dan Skenario Pengujian untuk validasi output AI. Alur kerja ini mempercepat pembangunan &amp;amp; pengujian API berbasis AI.&lt;/p&gt;

&lt;h2 id="faq"&gt;FAQ&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Apa itu Gemma 4?&lt;/strong&gt; Gemma 4 adalah keluarga model bahasa terbuka terbaru Google DeepMind, dirilis April 2026, dalam 4 ukuran (E2B, E4B, 26B MoE, 31B Dense) dengan lisensi Apache 2.0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah Gemma 4 gratis digunakan?&lt;/strong&gt; Bobot model gratis (Apache 2.0). Biaya hanya pada komputasi. Google AI Studio menyediakan tier gratis terbatas, Vertex AI berbayar sesuai tarif Google Cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bisakah Gemma 4 menghasilkan JSON terstruktur?&lt;/strong&gt; Ya, dengan parameter &lt;code&gt;response_mime_type: "application/json"&lt;/code&gt; di SDK Google Generative AI. Output selalu valid JSON.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana perbandingan Gemma 4 dengan GPT-4o untuk API?&lt;/strong&gt; GPT-4o proprietary, tanpa opsi lokal dan biaya API lebih tinggi. Gemma 4 31B gratis untuk deploy lokal dan punya skor benchmark kompetitif. Cocok untuk tim yang butuh privasi data/kontrol biaya.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bisakah saya fine-tune Gemma 4 dengan data API sendiri?&lt;/strong&gt; Ya, via Google AI Studio, Vertex AI, atau tools pihak ketiga (Hugging Face TRL). Fine-tuning pada skema/pola respons API akan tingkatkan output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perangkat keras apa yang dibutuhkan untuk menjalankan Gemma 4 lokal?&lt;/strong&gt; 31B &amp;amp; 26B muat di satu NVIDIA H100 80GB bfloat16. Versi kuantisasi bisa jalan di GPU consumer VRAM 16-24GB. E4B/E2B berjalan di ponsel/edge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah Gemma 4 mendukung fungsi native?&lt;/strong&gt; Ya, semua model Gemma 4 support pemanggilan fungsi native. Definisikan alat sebagai JSON, model akan memanggil sesuai instruksi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana cara menguji respons API Gemma 4 otomatis?&lt;/strong&gt; Gunakan Skenario Pengujian Apidog—impor endpoint, setup permintaan, tambahkan asersi validasi struktur respons. Jalankan lokal, via CLI, atau otomatis di pipeline CI/CD pada setiap push kode.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>API Qwen3.6-Plus: Ungguli Claude dalam Benchmark Terminal</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Thu, 02 Apr 2026 09:33:34 +0000</pubDate>
      <link>https://dev.to/walse/api-qwen36-plus-ungguli-claude-dalam-benchmark-terminal-43jm</link>
      <guid>https://dev.to/walse/api-qwen36-plus-ungguli-claude-dalam-benchmark-terminal-43jm</guid>
      <description>&lt;h2&gt;
  
  
  Inti Singkat
&lt;/h2&gt;

&lt;p&gt;Qwen3.6-Plus resmi diluncurkan. Model ini mencapai skor 78,8% pada SWE-bench Verified dan 61,6% pada Terminal-Bench 2.0, melampaui Claude Opus 4.5. Dengan jendela konteks 1 juta token, parameter &lt;code&gt;preserve_thinking&lt;/code&gt; baru untuk loop agen, serta kompatibilitas API OpenAI, model ini siap digunakan di berbagai skenario automasi pengembangan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Dari Pratinjau ke Rilis
&lt;/h2&gt;

&lt;p&gt;Jika Anda sudah mengikuti &lt;a href="http://apidog.com/blog/qwen-3-6-free-openrouter/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;panduan Qwen 3.6 Plus Preview di OpenRouter&lt;/a&gt;, Anda pasti paham kemampuannya. Versi pratinjau rilis diam-diam pada 30 Maret, tanpa daftar tunggu, gratis lewat OpenRouter. Dalam dua hari, model ini memproses 400 juta token dari 400.000 permintaan.&lt;/p&gt;

&lt;p&gt;Kini, rilis resmi membawa versi produksi penuh: tersedia di Alibaba Cloud Model Studio, API stabil, SLA uptime, dan parameter baru untuk tugas agen multi-langkah.&lt;/p&gt;

&lt;p&gt;Panduan ini membahas perubahan utama, cara pemanggilan API yang benar, serta pengujian integrasi dengan Apidog sebelum deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa itu Qwen3.6-Plus
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://qwen.ai/blog?id=qwen3.6" rel="noopener noreferrer"&gt;Qwen3.6-Plus&lt;/a&gt; adalah model mixture-of-experts dari tim Qwen Alibaba. Seperti Qwen3.5, model ini memakai sparse activation—hanya sebagian parameter aktif per token—sehingga performa tinggi bisa dicapai tanpa biaya komputasi besar seperti dense model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spesifikasi utama:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jendela konteks 1 juta token&lt;/li&gt;
&lt;li&gt;Chain-of-thought wajib&lt;/li&gt;
&lt;li&gt;Parameter &lt;code&gt;preserve_thinking&lt;/code&gt; untuk tugas agensi&lt;/li&gt;
&lt;li&gt;Dukungan multimodal: penglihatan, video, dokumen&lt;/li&gt;
&lt;li&gt;API kompatibel OpenAI, Anthropic, dan OpenAI Responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Varian open-source ukuran kecil akan segera tersedia. Jika butuh model self-hosted, tunggu update-nya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hasil Benchmark
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Agen Pengkodean
&lt;/h3&gt;

&lt;p&gt;Qwen3.6-Plus sedikit di belakang Claude Opus 4.5 pada SWE-bench, tapi memimpin operasi terminal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56nehdw7rei6u9ghff6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56nehdw7rei6u9ghff6v.png" alt="Terminal-Bench 2.0" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Terminal-Bench 2.0 menguji operasi shell nyata: manajemen file, kontrol proses, alur kerja terminal multi-langkah dalam 3 jam, 32 inti CPU, 48GB RAM. Skor 61,6% vs 59,3% (Claude Opus 4.5) adalah selisih signifikan untuk tugas developer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agen Umum &amp;amp; Penggunaan Alat
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Claude Opus 4.5&lt;/th&gt;
&lt;th&gt;Qwen3.6-Plus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TAU3-Bench&lt;/td&gt;
&lt;td&gt;70,2%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;70,7%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepPlanning&lt;/td&gt;
&lt;td&gt;33,9%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;41,5%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCPMark&lt;/td&gt;
&lt;td&gt;42,3%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;48,2%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP-Atlas&lt;/td&gt;
&lt;td&gt;71,8%&lt;/td&gt;
&lt;td&gt;74,1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WideSearch&lt;/td&gt;
&lt;td&gt;76,4%&lt;/td&gt;
&lt;td&gt;74,3%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;MCPMark menguji pemanggilan alat GitHub MCP v0.30.3. Qwen3.6-Plus unggul di MCP dan DeepPlanning, penting untuk workflow berbasis MCP dan perencanaan jangka panjang.&lt;/p&gt;

&lt;h3&gt;
  
  
  Penalaran &amp;amp; Pengetahuan
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Claude Opus 4.5&lt;/th&gt;
&lt;th&gt;Qwen3.6-Plus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPQA&lt;/td&gt;
&lt;td&gt;87,0%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90,4%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LiveCodeBench v6&lt;/td&gt;
&lt;td&gt;84,8%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;87,1%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IFEval strict&lt;/td&gt;
&lt;td&gt;90,9%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;94,3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMLU-Pro&lt;/td&gt;
&lt;td&gt;89,5%&lt;/td&gt;
&lt;td&gt;88,5%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Qwen3.6-Plus memimpin pada GPQA dan IFEval strict—krusial untuk output terstruktur dan tugas agensi dengan instruksi kompleks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multimodal
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Qwen3.6-Plus&lt;/th&gt;
&lt;th&gt;Catatan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OmniDocBench 1.5&lt;/td&gt;
&lt;td&gt;91,2%&lt;/td&gt;
&lt;td&gt;Teratas di tabel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RefCOCO avg&lt;/td&gt;
&lt;td&gt;93,5%&lt;/td&gt;
&lt;td&gt;Teratas di tabel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;We-Math&lt;/td&gt;
&lt;td&gt;89,0%&lt;/td&gt;
&lt;td&gt;Teratas di tabel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CountBench&lt;/td&gt;
&lt;td&gt;97,6%&lt;/td&gt;
&lt;td&gt;Teratas di tabel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OSWorld-Verified&lt;/td&gt;
&lt;td&gt;62,5%&lt;/td&gt;
&lt;td&gt;Di bawah Claude (66,3%)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Qwen3.6-Plus unggul di tugas pemahaman dokumen dan deteksi objek, namun sedikit di bawah Claude pada OSWorld-Verified (desktop automation).&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Memanggil API
&lt;/h2&gt;

&lt;p&gt;Qwen3.6-Plus tersedia di Alibaba Cloud Model Studio. Dapatkan API key di modelstudio.alibabacloud.com.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Endpoint regional:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Singapura: &lt;code&gt;https://dashscope-intl.aliyuncs.com/compatible-mode/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Beijing: &lt;code&gt;https://dashscope.aliyuncs.com/compatible-mode/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;US Virginia: &lt;code&gt;https://dashscope-us.aliyuncs.com/compatible-mode/v1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Panggilan Dasar dengan Streaming
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DASHSCOPE_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://dashscope-intl.aliyuncs.com/compatible-mode/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;completion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.6-plus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tinjau fungsi Python ini dan temukan bug.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enable_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;reasoning&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
&lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
&lt;span class="n"&gt;is_answering&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;continue&lt;/span&gt;
    &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;hasattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reasoning_content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reasoning_content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;is_answering&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;reasoning&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reasoning_content&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;is_answering&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;is_answering&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Parameter &lt;code&gt;preserve_thinking&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Pada versi pratinjau, penalaran hanya disimpan untuk giliran saat ini. Rilis resmi menambahkan &lt;code&gt;preserve_thinking&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Aktifkan &lt;code&gt;preserve_thinking: true&lt;/code&gt; untuk mempertahankan chain-of-thought seluruh giliran percakapan, ideal untuk loop agen multi-langkah.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;completion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.6-plus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation_history&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enable_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;preserve_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# pertahankan penalaran di semua giliran
&lt;/span&gt;    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Qwen3.6-Plus dengan Claude Code
&lt;/h3&gt;

&lt;p&gt;API Qwen kompatibel dengan protokol Anthropic. Jalankan Claude Code di Qwen3.6-Plus hanya dengan mengubah env variable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @anthropic-ai/claude-code

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_SMALL_FAST_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://dashscope-intl.aliyuncs.com/apps/anthropic
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANTHROPIC_AUTH_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_dashscope_api_key

claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Qwen3.6-Plus dengan OpenClaw
&lt;/h3&gt;

&lt;p&gt;OpenClaw (eks Moltbot/Clawdbot) adalah agen pengkodean open source yang bisa self-hosted.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Instal (Node.js 22+)&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://molt.bot/install.sh | bash

&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;DASHSCOPE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_key
openclaw dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"providers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alibaba-coding-plan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://coding-intl.dashscope.aliyuncs.com/v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"apiKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${DASHSCOPE_API_KEY}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"qwen3.6-plus"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Qwen3.6-Plus dengan Qwen Code
&lt;/h3&gt;

&lt;p&gt;Qwen Code adalah agen terminal open source dari Alibaba, khusus untuk seri Qwen. Dapatkan 1.000 API call gratis/hari dengan Qwen Code OAuth.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @qwen-code/qwen-code@latest
qwen
&lt;span class="c"&gt;# Ketik /auth untuk login &amp;amp; aktifkan quota gratis&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Mengapa &lt;code&gt;preserve_thinking&lt;/code&gt; Penting untuk Agen
&lt;/h2&gt;

&lt;p&gt;Mayoritas API LLM memperlakukan setiap giliran secara independen. Pada loop agen multi-langkah, model tanpa &lt;code&gt;preserve_thinking&lt;/code&gt; bisa kehilangan konteks penalaran sebelumnya sehingga keputusan jadi kurang konsisten.&lt;/p&gt;

&lt;p&gt;Aktifkan &lt;code&gt;preserve_thinking&lt;/code&gt; agar model melihat seluruh chain-of-thought:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;conversation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;preserve&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen3.6-plus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enable_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;preserve_thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;preserve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;
    &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;

&lt;span class="c1"&gt;# Contoh: agen tinjauan kode multi-langkah
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analisis modul otentikasi untuk masalah keamanan.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sekarang sarankan perbaikan untuk 3 masalah teratas yang Anda temukan.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;agent_step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tulis tes yang memvalidasi setiap perbaikan.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tanpa &lt;code&gt;preserve_thinking&lt;/code&gt;, pada langkah ke-3 model tidak tahu masalah yang sudah diidentifikasi di langkah 1. Dengan parameter ini, chain-of-thought tetap utuh di semua giliran.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Case Terbaik
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Perbaikan bug tingkat repositori&lt;/strong&gt;: SWE-bench Verified 78,8% dan SWE-bench Pro 56,6%. Cocok untuk automasi perbaikan kode atau code review pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Otomatisasi terminal&lt;/strong&gt;: Skor Terminal-Bench 2.0 tertinggi di kelasnya. Cocok untuk operasi shell, manajemen proses, pipeline build.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pemanggilan alat MCP&lt;/strong&gt;: MCPMark 48,2%—terbaik untuk workflow berbasis MCP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analisis dokumen konteks panjang&lt;/strong&gt;: Jendela 1 juta token, skor LongBench v2 tinggi. Untuk codebase besar, spesifikasi panjang, analisis multi-file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pembuatan kode frontend&lt;/strong&gt;: Skor QwenWebBench internal 1501,7 vs Claude Opus 4.5 (1517,9), setara untuk kualitas frontend generation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multibahasa&lt;/strong&gt;: WMT24++ 84,3% (teratas), MAXIFE 88,2% di 23 bahasa. Kuat untuk use case non-Inggris.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Menguji API Qwen3.6-Plus dengan Apidog
&lt;/h2&gt;

&lt;p&gt;Endpoint Qwen3.6-Plus kompatibel OpenAI. Impor langsung ke &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; dan lakukan pengujian seperti API lainnya.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3lln60azqwzlva81kvps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3lln60azqwzlva81kvps.png" alt="Contoh Apidog" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Endpoint&lt;/strong&gt;: &lt;code&gt;https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Header&lt;/strong&gt;: &lt;code&gt;Authorization: Bearer {{DASHSCOPE_API_KEY}}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Contoh Assertion
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Respons berisi pilihan&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;choices&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;and&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tidak ada penalaran kosong saat pemikiran diaktifkan&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;choice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reasoning_content&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reasoning_content&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gunakan &lt;strong&gt;Smart Mock&lt;/strong&gt; Apidog untuk generate respons pengujian selama development, menghemat token dan mempercepat siklus pengujian.&lt;/p&gt;

&lt;p&gt;Jika membangun agen multi-turn, buat &lt;strong&gt;Skenario Pengujian&lt;/strong&gt; di Apidog dengan beberapa request berurutan. Validasi bahwa &lt;code&gt;preserve_thinking&lt;/code&gt; membawa penalaran antar giliran dengan cek struktur respons di setiap langkah sebelum production.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Unduh Apidog gratis&lt;/a&gt; untuk menyiapkan pengujian ini.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa yang Akan Datang
&lt;/h2&gt;

&lt;p&gt;Tim Qwen mengonfirmasi varian open-source ukuran kecil akan dirilis dalam beberapa hari, mengikuti pola MoE Qwen3.5 dengan bobot Apache 2.0 publik.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Roadmap:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tugas tingkat repositori jangka panjang: penyelesaian masalah multi-file yang makin kompleks&lt;/li&gt;
&lt;li&gt;Pengembangan agen multimodal: GUI agent &amp;amp; pengkodean visual sebagai core feature&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Varian open-source Qwen3.5 menjadi model self-host paling populer dalam beberapa minggu. Jika Qwen3.6 mengikuti pola ini, varian kecilnya akan jadi pilihan utama agen pengkodean self-hosted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;Qwen3.6-Plus menutup gap dengan Claude Opus 4.5 pada tugas pengkodean dan unggul pada operasi terminal, pemanggilan alat MCP, serta perencanaan jangka panjang. Dukungan konteks 1 juta token, kompatibilitas protokol Anthropic, dan parameter &lt;code&gt;preserve_thinking&lt;/code&gt; menjadikannya pilihan praktis untuk sistem agensi produksi modern.&lt;/p&gt;

&lt;p&gt;Pratinjau gratis di OpenRouter cocok untuk evaluasi model. API resmi memberikan stabilitas, SLA, dan parameter baru yang mengoptimalkan workflow multi-turn.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; menangani pengujian: impor endpoint kompatibel OpenAI, tulis assertion respons, mock saat development, dan jalankan regresi testing setiap update model/API.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Apa perbedaan Qwen3.6-Plus dan pratinjau?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Pratinjau (&lt;code&gt;qwen/qwen3.6-plus-preview&lt;/code&gt;) diluncurkan di OpenRouter pada 30 Maret 2026. Rilis resmi menambah parameter &lt;code&gt;preserve_thinking&lt;/code&gt;, SLA uptime, dan dukungan penuh Model Studio. Varian open-source kecil segera hadir.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apa itu &lt;code&gt;preserve_thinking&lt;/code&gt; dan kapan digunakan?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Default: hanya penalaran giliran saat ini yang disimpan. Dengan &lt;code&gt;preserve_thinking: true&lt;/code&gt;, model mempertahankan chain-of-thought seluruh percakapan. Gunakan untuk loop agen multi-step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana Qwen3.6-Plus dibanding Claude Opus 4.5?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Claude Opus 4.5 unggul di SWE-bench Verified (80,9% vs 78,8%) dan OSWorld-Verified (66,3% vs 62,5%). Qwen3.6-Plus unggul di Terminal-Bench 2.0 (61,6% vs 59,3%), MCPMark (48,2% vs 42,3%), DeepPlanning (41,5% vs 33,9%), dan GPQA (90,4% vs 87,0%).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bisakah Qwen3.6-Plus dipakai dengan Claude Code?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ya. Set &lt;code&gt;ANTHROPIC_BASE_URL&lt;/code&gt; ke endpoint Dashscope, &lt;code&gt;ANTHROPIC_MODEL&lt;/code&gt; ke &lt;code&gt;qwen3.6-plus&lt;/code&gt;, dan &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;/code&gt; ke API key Dashscope Anda.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah Qwen3.6-Plus open source?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Model hosted API bukan open-weight. Varian kecil dengan bobot publik akan dirilis dalam beberapa hari.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana cara mendapatkan akses gratis?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Instal Qwen Code (&lt;code&gt;npm install -g @qwen-code/qwen-code@latest&lt;/code&gt;), jalankan &lt;code&gt;qwen&lt;/code&gt;, lalu &lt;code&gt;/auth&lt;/code&gt;. Login dengan Qwen Code OAuth untuk 1.000 API call gratis/hari.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jendela konteks yang didukung?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
1 juta token default. Beberapa benchmark memakai 256K untuk standar, tapi default API 1M.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana menguji integrasi API sebelum deployment?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Impor endpoint ke Apidog, tambahkan API key sebagai variabel lingkungan, tulis assertion respons, gunakan Smart Mock untuk development offline, dan rangkai request ke Skenario Pengujian untuk validasi agen multi-giliran.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Holo3: Model Penggunaan Komputer Terbaik?</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Thu, 02 Apr 2026 08:54:30 +0000</pubDate>
      <link>https://dev.to/walse/holo3-model-penggunaan-komputer-terbaik-1ip7</link>
      <guid>https://dev.to/walse/holo3-model-penggunaan-komputer-terbaik-1ip7</guid>
      <description>&lt;h2&gt;
  
  
  Intinya
&lt;/h2&gt;

&lt;p&gt;H Company meluncurkan Holo3 pada 31 Maret 2026, sebuah model mixture-of-experts yang mencetak 78,85% pada OSWorld-Verified, angka tertinggi yang pernah tercatat pada benchmark penggunaan komputer desktop terkemuka. Ini mengalahkan GPT-5.4 dan Opus 4.6 dengan biaya yang jauh lebih rendah. API sudah tersedia sekarang, dan varian 35B bersifat open-weight di HuggingFace di bawah lisensi Apache 2.0.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesenjangan penggunaan komputer yang belum dipecahkan sebagian besar pengembang
&lt;/h2&gt;

&lt;p&gt;Anda sudah mengotomatisasi API Anda. Pipeline CI/CD berjalan lancar. Tapi, masih ada tugas yang sulit diotomatisasi: perangkat lunak perusahaan lama tanpa API, aplikasi desktop sebelum era REST, dan alur kerja multi-langkah yang harus melintasi banyak UI berbeda.&lt;/p&gt;

&lt;p&gt;Alat RPA tradisional (UiPath, Automation Anywhere) biasanya menggunakan skrip koordinat layar yang mudah rusak ketika UI berubah. Solusi lain: kerja manual.&lt;/p&gt;

&lt;p&gt;Model AI penggunaan komputer mengubah pendekatan ini. Model yang bisa membaca tangkapan layar dan mengeluarkan tindakan klik, ketik, atau gulir dapat menavigasi GUI tanpa perlu API. Holo3, dirilis 31 Maret 2026 oleh H Company, saat ini adalah model publik terkuat untuk tugas-tugas ini.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Jika Anda membangun workflow otomatisasi atau pipeline pengujian yang berhubungan dengan perangkat lunak desktop, API Holo3 layak dipelajari. Jika Anda menggunakan Apidog untuk desain dan pengujian API, bagian di bawah menjelaskan cara mengintegrasikan Holo3 ke workflow Anda dengan langkah praktis.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa itu Holo3?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://hcompany.ai/holo3" rel="noopener noreferrer"&gt;Holo3&lt;/a&gt; adalah model AI penggunaan komputer: berikan tangkapan layar desktop atau browser, beri tahu tugasnya, dan model akan mengembalikan aksi (klik, ketik, scroll) yang bisa dieksekusi di layar tersebut. Loop: tangkap hasil, screenshot ulang, ulangi sampai selesai.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3aoh5dvl0jtpi764v8qu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3aoh5dvl0jtpi764v8qu.png" alt="Holo3 Example" width="800" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;H Company menawarkan dua varian:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-122B-A10B&lt;/strong&gt; — 122B parameter (10B aktif, sparse MoE). Hanya tersedia via API &lt;a href="https://hcompany.ai/holo-models-api" rel="noopener noreferrer"&gt;hcompany.ai/holo-models-api&lt;/a&gt;. Rekor benchmark saat ini.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-35B-A3B&lt;/strong&gt; — 35B (3B aktif). Open-weight di &lt;a href="https://huggingface.co/Hcompany/Holo3-35B-A3B" rel="noopener noreferrer"&gt;HuggingFace&lt;/a&gt; (Apache 2.0). Ada tier gratis di API. Bisa di-host sendiri.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Arsitektur MoE memastikan hanya sebagian kecil parameter aktif per token, membuat model jauh lebih efisien dijalankan. H Company menyatakan Holo3-122B-A10B lebih murah dari GPT-5.4 dan Opus 4.6 per tugas.&lt;/p&gt;

&lt;h2&gt;
  
  
  OSWorld-Verified: Apa yang Diukur
&lt;/h2&gt;

&lt;p&gt;OSWorld-Verified adalah benchmark utama untuk AI penggunaan komputer. Berbeda dengan benchmark berbasis teks, OSWorld menilai eksekusi nyata: agen harus menyelesaikan tugas di komputer sungguhan, diverifikasi dengan memeriksa status sistem akhir.&lt;/p&gt;

&lt;p&gt;Tugas meliputi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Satu aplikasi (membuka file, isi form, copy antar sel)&lt;/li&gt;
&lt;li&gt;Lintas aplikasi (ambil data dari PDF, update spreadsheet, kirim email)&lt;/li&gt;
&lt;li&gt;Urutan multi-aplikasi jangka panjang&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Holo3-122B-A10B mendapatkan &lt;strong&gt;78,85%&lt;/strong&gt; pada OSWorld-Verified. Sebelumnya, skor &amp;gt;40% dianggap state-of-the-art. Model Anthropic dan OpenAI sebelumnya berkisar 60-65%.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F15te4auw5vh59u6lsyf9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F15te4auw5vh59u6lsyf9.png" alt="OSWorld Benchmark" width="800" height="631"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Performa terbaik Holo3 ada di tugas multi-aplikasi yang membutuhkan koordinasi data di beberapa aplikasi secara bersamaan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Holo3 Dilatih: Agentic Learning Flywheel
&lt;/h2&gt;

&lt;p&gt;Kebanyakan model penggunaan komputer dilatih dengan demonstrasi statis. H Company menggunakan pendekatan &lt;em&gt;Agentic Learning Flywheel&lt;/em&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data Navigasi Sintetis&lt;/strong&gt; — Kombinasi instruksi manusia &amp;amp; AI untuk contoh navigasi skenario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Augmentasi di Luar Domain&lt;/strong&gt; — Ekspansi skenario ke status UI tak terduga &amp;amp; edge case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pembelajaran Penguatan Terkurasi&lt;/strong&gt; — Data difilter &amp;amp; dipakai pada pipeline RL, langsung memaksimalkan tingkat penyelesaian tugas.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Data berasal dari &lt;strong&gt;Synthetic Environment Factory&lt;/strong&gt;: sistem di mana agen membangun aplikasi web perusahaan dari nol, sehingga pelatihan dilakukan pada workflow bisnis realistis.&lt;/p&gt;

&lt;p&gt;Hasil: Holo3 mengungguli model Qwen3.5 yang lebih besar pada tugas benchmark yang sama – bukan semata-mata soal arsitektur, tapi metodologi training.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cara Memanggil API Holo3
&lt;/h2&gt;

&lt;p&gt;API Holo3 menggunakan pola loop screenshot-action. Berikut implementasi step-by-step:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Siapkan Autentikasi
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# API Inferensi H Company&lt;/span&gt;
https://api.hcompany.ai/v1

&lt;span class="c"&gt;# Header&lt;/span&gt;
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dapatkan API key di &lt;a href="https://hcompany.ai/holo-models-api" rel="noopener noreferrer"&gt;hcompany.ai/holo-models-api&lt;/a&gt;. Tier gratis tersedia untuk Holo3-35B-A3B.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Kirim Screenshot dan Tugas
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pyautogui&lt;/span&gt;

&lt;span class="n"&gt;screenshot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pyautogui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/tmp/screen.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/tmp/screen.png&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;image_b64&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.hcompany.ai/v1/computer-use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;holo3-122b-a10b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Open the invoice folder and find the most recent PDF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;screenshot&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;image_b64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;screen_width&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;screen_height&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Uraikan &amp;amp; Eksekusi Tindakan
&lt;/h3&gt;

&lt;p&gt;API mengembalikan aksi terstruktur, misal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"click"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"coordinate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;245&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;380&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ikon folder faktur terlihat pada posisi ini"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jenis aksi: &lt;code&gt;click&lt;/code&gt;, &lt;code&gt;double_click&lt;/code&gt;, &lt;code&gt;right_click&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;key&lt;/code&gt;, &lt;code&gt;scroll&lt;/code&gt;, &lt;code&gt;screenshot_request&lt;/code&gt;, &lt;code&gt;task_complete&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Ulangi Sampai Selesai
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_computer_use_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_steps&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;screenshot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;capture_screen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;call_holo3_api&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;action_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task_complete&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Selesai dalam &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; langkah&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="nf"&gt;execute_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;TimeoutError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tugas tidak selesai dalam batas langkah&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Menguji Panggilan API Holo3 dengan Apidog
&lt;/h2&gt;

&lt;p&gt;Setelah memanggil API Holo3, pastikan integrasi Anda andal, terutama untuk otomatisasi produksi. &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; sangat membantu.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impor endpoint:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Buat permintaan HTTP baru di Apidog ke &lt;code&gt;https://api.hcompany.ai/v1/computer-use&lt;/code&gt;. Tambahkan header &lt;code&gt;Authorization&lt;/code&gt; sebagai variabel environment agar aman.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setup validasi respons (assertion):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Di skrip post-response Apidog&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Jenis tindakan valid&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;validActions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scroll&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;task_complete&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;screenshot_request&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;validActions&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;action_type&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Koordinat dalam batas layar&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coordinate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coordinate&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;within&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1920&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;coordinate&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;within&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Mock API selama pengembangan:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Gunakan fitur Smart Mock Apidog untuk mensimulasikan respons Holo3 realistis tanpa memanggil API asli. Hemat kuota dan percepat pengembangan frontend/orchestration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jalankan skenario pengujian:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Rangkai beberapa permintaan Holo3 dalam Skenario Pengujian Apidog untuk mensimulasikan loop tugas multi-langkah sebelum dijalankan di mesin nyata.&lt;/p&gt;

&lt;h2&gt;
  
  
  Holo3 vs Claude Computer Use vs OpenAI Operator
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Holo3-122B&lt;/th&gt;
&lt;th&gt;Holo3-35B&lt;/th&gt;
&lt;th&gt;Claude Computer Use&lt;/th&gt;
&lt;th&gt;OpenAI Operator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OSWorld-Verified&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;78.85%&lt;/td&gt;
&lt;td&gt;~55% (est.)&lt;/td&gt;
&lt;td&gt;~65%&lt;/td&gt;
&lt;td&gt;~62%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Akses API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;td&gt;Ya (tingkat gratis)&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bobot terbuka&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tidak&lt;/td&gt;
&lt;td&gt;Ya (Apache 2.0)&lt;/td&gt;
&lt;td&gt;Tidak&lt;/td&gt;
&lt;td&gt;Tidak&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dapat di-host sendiri&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tidak&lt;/td&gt;
&lt;td&gt;Ya&lt;/td&gt;
&lt;td&gt;Tidak&lt;/td&gt;
&lt;td&gt;Tidak&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Biaya vs GPT-5.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lebih rendah&lt;/td&gt;
&lt;td&gt;Jauh lebih rendah&lt;/td&gt;
&lt;td&gt;Setara&lt;/td&gt;
&lt;td&gt;Harga GPT-5.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Terbaik untuk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Perusahaan produksi&lt;/td&gt;
&lt;td&gt;Dev/pengujian/OSS&lt;/td&gt;
&lt;td&gt;Ekosistem Anthropic&lt;/td&gt;
&lt;td&gt;Ekosistem OpenAI&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Rekomendasi praktis:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-122B&lt;/strong&gt;: Akurasi maksimal untuk workflow multi-aplikasi kompleks, biaya jadi pertimbangan kedua.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Holo3-35B&lt;/strong&gt;: Pengembangan, testing, open source, atau ingin self-host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Computer Use&lt;/strong&gt;: Sudah deep di ekosistem Anthropic dan ingin billing terpadu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Operator&lt;/strong&gt;: Sudah pakai GPT-5.4 dan ingin vendor tunggal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Kasus Penggunaan Perusahaan
&lt;/h2&gt;

&lt;p&gt;Holo3 sangat tepat untuk workflow tanpa solusi API bersih:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Entri data sistem lama:&lt;/strong&gt; ERP/CRM lawas tanpa API REST. Holo3 bisa navigasi UI desktop dan input/ekstrak data tanpa modernisasi besar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rekonsiliasi lintas platform:&lt;/strong&gt; Ambil angka dari PDF, cek ke spreadsheet, update dashboard pihak ketiga — semua otomatis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testing regresi aplikasi web:&lt;/strong&gt; Gantikan Selenium rapuh. Berikan deskripsi tugas ke Holo3, adaptasi otomatis ke perubahan UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelijen kompetitif:&lt;/strong&gt; Scrape data struktur dari web yang memblokir scraping tradisional.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Benchmark internal H Company menunjukkan Holo3 unggul di E-commerce, Business Software, Collaboration, dan Multi-Application Workflow. Kesenjangan terbesar pada tugas multi-aplikasi – penalaran di beberapa aplikasi sekaligus.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa Selanjutnya: Agensi Adaptif
&lt;/h2&gt;

&lt;p&gt;Langkah berikutnya dari H Company adalah &lt;strong&gt;Agensi Adaptif&lt;/strong&gt; — model yang bisa belajar menavigasi perangkat lunak perusahaan yang benar-benar baru secara real-time.&lt;/p&gt;

&lt;p&gt;Model saat ini (termasuk Holo3) masih dilatih pada set lingkungan terbatas. Untuk alat internal kustom yang belum pernah dilihat, tingkat keberhasilan lebih rendah. Agensi Adaptif bertujuan menutup celah: model bernalar tentang struktur perangkat lunak pada kontak pertama, membangun pemahaman kerja, dan menjalankan tugas tanpa data pelatihan sebelumnya.&lt;/p&gt;

&lt;p&gt;Jika berhasil, ini akan menghapus batas utama AI penggunaan komputer di perusahaan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;Holo3 menetapkan standar baru untuk AI penggunaan komputer desktop. Dengan 78,85% pada OSWorld-Verified, ini mengungguli model berbasis Claude dan GPT dalam workflow multi-langkah kompleks. Tier gratis Holo3-35B-A3B dan bobot Apache 2.0 memungkinkan developer mencoba tanpa biaya awal.&lt;/p&gt;

&lt;p&gt;Integrasi sederhana: screenshot, POST ke API, eksekusi aksi, ulangi. Di sinilah &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; membantu: validasi respons, mocking saat development, dan menjalankan skenario pengujian sebelum go live.&lt;/p&gt;

&lt;p&gt;Jika Anda membangun workflow yang menyentuh GUI desktop, coba Apidog gratis dan pastikan integrasi Holo3 Anda stabil sebelum produksi.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Apa itu Holo3?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Holo3 adalah model AI penggunaan komputer dari H Company yang menerima screenshot dan mengembalikan aksi (klik, ketik, scroll) untuk menyelesaikan tugas di desktop/browser. Skor 78,85% di OSWorld-Verified, rekor tertinggi saat ini.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah Holo3 open source?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Holo3-35B-A3B bersifat open-weight (Apache 2.0) dan bisa diunduh dari HuggingFace. Holo3-122B hanya tersedia via API. Keduanya ada di API inferensi H Company, dengan tier gratis untuk model 35B.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana benchmark OSWorld bekerja?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
OSWorld menguji AI pada tugas komputer nyata: web navigation, file management, workflow lintas aplikasi. Verifikasi dengan memeriksa status sistem setelah aksi, bukan evaluasi teks output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana Holo3 dibandingkan Claude Computer Use?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Holo3-122B mencetak skor lebih tinggi pada OSWorld-Verified (78,85% vs ~65% untuk Claude) dan lebih murah per tugas. Claude tetap opsi kuat bagi tim dengan ekosistem Anthropic dan billing tunggal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bisakah saya menjalankan Holo3 lokal?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Ya, jika memakai Holo3-35B-A3B. Bobot tersedia di HuggingFace (Apache 2.0). Model 122B hanya via API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apa saja kasus penggunaan utama API penggunaan komputer?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Otomatisasi sistem lama tanpa API, workflow data lintas aplikasi, regression testing web tanpa selector rapuh, scraping intelijen kompetitif, dan workflow desktop yang selama ini mengandalkan manusia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana menguji integrasi API Holo3?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Gunakan Apidog untuk impor endpoint, set assertion validasi respons, mock API, dan merangkai permintaan jadi skenario pengujian. Ini mendeteksi masalah integrasi sebelum otomatisasi dijalankan di mesin nyata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apa itu "Agensi Adaptif" di roadmap Holo3?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
H Company mengembangkan model yang bisa menavigasi perangkat lunak perusahaan yang belum pernah dilihat, belajar struktur UI secara real-time tanpa data pelatihan sebelumnya. Ini akan menghapus batas utama AI penggunaan komputer untuk deployment enterprise.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Serangan Rantai Pasokan axios@1.14.1: Cara Mengatasi Sekarang</title>
      <dc:creator>Walse</dc:creator>
      <pubDate>Thu, 02 Apr 2026 08:49:40 +0000</pubDate>
      <link>https://dev.to/walse/serangan-rantai-pasokan-axios1141-cara-mengatasi-sekarang-5cof</link>
      <guid>https://dev.to/walse/serangan-rantai-pasokan-axios1141-cara-mengatasi-sekarang-5cof</guid>
      <description>&lt;h2&gt;
  
  
  Intinya
&lt;/h2&gt;

&lt;p&gt;Pada tanggal 30–31 Maret 2026, axios versi 1.14.1 dan 0.30.4 disusupi di npm dengan dependensi berbahaya yang menjatuhkan trojan akses jarak jauh (RAT) pada mesin yang terinfeksi. Kedua versi tersebut telah dihapus publikasinya. Versi yang aman adalah 1.14.0. Jika Anda menginstal &lt;a href="mailto:axios@1.14.1"&gt;axios@1.14.1&lt;/a&gt; atau 0.30.4, anggap mesin tersebut telah disusupi dan segera ubah semua kredensial.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;Coba Apidog hari ini&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa itu axios dan Mengapa Ini Penting
&lt;/h2&gt;

&lt;p&gt;axios memiliki 100 juta unduhan mingguan di npm. Ini adalah klien HTTP di banyak framework frontend, layanan Node.js backend, dan aplikasi perusahaan. Ketika paket yang begitu fundamental ini disusupi, dampaknya sangat besar — pengembang yang menjalankan &lt;code&gt;npm install&lt;/code&gt; dalam jendela waktu 30–31 Maret tanpa sadar menarik malware ke mesin mereka.&lt;/p&gt;

&lt;p&gt;Ini adalah risiko rantai pasokan nyata dan telah dikonfirmasi: trojan akses jarak jauh multi-tahap yang bisa mengeksekusi perintah arbitrer, mengekstrak data sistem, dan bertahan di mesin terinfeksi.&lt;/p&gt;

&lt;p&gt;Jika tim Anda menggunakan axios, dan Anda memakai Apidog untuk mendesain dan menguji integrasi klien HTTP, baca ini sebelum deployment berikutnya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kronologi Serangan
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;30 Maret 2026 — 23:59:12 UTC:&lt;/strong&gt; Paket berbahaya &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; diterbitkan ke npm oleh akun &lt;code&gt;nrwise@proton.me&lt;/code&gt;. Versi 4.2.0 sebelumnya adalah typosquat dari pustaka &lt;code&gt;crypto-js&lt;/code&gt; yang sah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;31 Maret 2026 — 00:05:41 UTC:&lt;/strong&gt; Deteksi otomatis Socket menandai &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; sebagai berbahaya — enam menit setelah publikasi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;31 Maret 2026 — tak lama setelah tengah malam:&lt;/strong&gt; &lt;code&gt;axios@1.14.1&lt;/code&gt; diterbitkan ke npm, menarik &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; sebagai dependensi. Rilis ini tidak muncul di tag resmi GitHub; tag sah terbaru tetap &lt;code&gt;v1.14.0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;31 Maret 2026 — pagi:&lt;/strong&gt; Isu GitHub &lt;code&gt;#10604&lt;/code&gt; dibuka, melaporkan &lt;code&gt;axios@1.14.1&lt;/code&gt; dan &lt;code&gt;axios@0.30.4&lt;/code&gt; telah disusupi. Pemelihara Axios tidak dapat langsung mencabut akses penyerang karena akun yang disusupi punya izin npm lebih tinggi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;31 Maret 2026:&lt;/strong&gt; Baik &lt;code&gt;axios@1.14.1&lt;/code&gt; maupun &lt;code&gt;axios@0.30.4&lt;/code&gt; dihapus dari npm. Pemelihara mencabut token, memperketat kontrol publikasi, dan menyelidiki eksploitasi token npm berumur panjang.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bagaimana Serangan Bekerja
&lt;/h2&gt;

&lt;p&gt;Serangan ini memanfaatkan token npm berumur panjang pada alur publikasi axios. Penyerang, kemungkinan setelah mendapatkan kredensial pemelihara, menggunakan token tersebut untuk menerbitkan versi baru di luar proses rilis normal.&lt;/p&gt;

&lt;p&gt;Versi baru menambahkan dependensi &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; (dengan versi 4.2.0 yang bersih untuk menurunkan kecurigaan).&lt;/p&gt;

&lt;p&gt;Payload dalam &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tahap 1 — Eksekusi:&lt;/strong&gt; Skrip instalasi npm menjalankan kode untuk menjatuhkan payload sekunder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tahap 2 — Deployment RAT:&lt;/strong&gt; Payload menginstal trojan akses jarak jauh yang membuka backdoor persisten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tahap 3 — Eksfiltrasi:&lt;/strong&gt; RAT dapat mengeksekusi perintah shell, membaca env/secret, dan mengirim data ke server C2.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;RAT tetap ada setelah reboot, sehingga mesin tetap berisiko walau paket npm sudah dihapus — RAT harus dicari dan dihapus manual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apakah Saya Terkena Dampak?
&lt;/h2&gt;

&lt;p&gt;Anda berpotensi terdampak jika:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Menjalankan &lt;code&gt;npm install axios&lt;/code&gt; atau &lt;code&gt;npm install&lt;/code&gt; (axios di &lt;code&gt;package.json&lt;/code&gt;) antara &lt;strong&gt;30 Maret, 23:59 UTC&lt;/strong&gt; dan &lt;strong&gt;31 Maret 2026 tengah hari UTC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;node_modules/axios/package.json&lt;/code&gt; menunjukkan versi &lt;code&gt;1.14.1&lt;/code&gt; atau &lt;code&gt;0.30.4&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;package-lock.json&lt;/code&gt; atau &lt;code&gt;yarn.lock&lt;/code&gt; mengunci axios ke &lt;code&gt;1.14.1&lt;/code&gt; atau &lt;code&gt;0.30.4&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cek dengan cepat:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Periksa versi yang terinstal&lt;/span&gt;
npm list axios

&lt;span class="c"&gt;# Periksa file kunci&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s1"&gt;'"axios"'&lt;/span&gt; package-lock.json | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-5&lt;/span&gt;

&lt;span class="c"&gt;# Periksa keberadaan plain-crypto-js&lt;/span&gt;
npm list plain-crypto-js
&lt;span class="nb"&gt;ls &lt;/span&gt;node_modules/plain-crypto-js 2&amp;gt;/dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"INFECTED"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Tidak ditemukan"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jika &lt;code&gt;plain-crypto-js&lt;/code&gt; ada di &lt;code&gt;node_modules&lt;/code&gt;, Anda menjalankan versi berbahaya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa yang Harus Dilakukan Sekarang
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Perbarui axios segera
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;axios@1.14.0
&lt;span class="c"&gt;# atau kunci ke versi aman terbaru&lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;axios@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verifikasi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm list axios
&lt;span class="c"&gt;# Pastikan versi 1.14.0 atau lebih tinggi (setelah versi bersih dirilis)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Jika Anda menginstal versi yang disusupi
&lt;/h3&gt;

&lt;p&gt;Anggap mesin telah disusupi, lakukan langkah berikut:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ubah semua rahasia&lt;/strong&gt; (API key, kredensial DB, SSH key, token cloud, variabel &lt;code&gt;.env&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Periksa variabel lingkungan&lt;/strong&gt; — RAT menargetkan env proses dan sistem file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit koneksi jaringan keluar&lt;/strong&gt; pada periode terdampak — cek koneksi ke IP mencurigakan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pindai persistensi&lt;/strong&gt; — cek cron, skrip startup, systemd service yang muncul di waktu kompromi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buat ulang citra mesin&lt;/strong&gt; jika itu CI runner / server produksi. Untuk laptop developer, anggap semua kredensial telah bocor dan ganti sebelum digunakan lagi.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Audit alur CI/CD Anda
&lt;/h3&gt;

&lt;p&gt;Jika pipeline build menjalankan &lt;code&gt;npm install&lt;/code&gt; pada jendela waktu tersebut, CI Anda mungkin terinfeksi. Lakukan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Cek log build pada periode terdampak&lt;/span&gt;
&lt;span class="c"&gt;# Cari axios@1.14.1 di output instalasi&lt;/span&gt;

&lt;span class="c"&gt;# Pastikan node_modules CI saat ini bersih&lt;/span&gt;
npm list axios plain-crypto-js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ganti semua rahasia yang diakses pipeline CI: kunci deployment, token cloud, token registry.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Verifikasi file kunci Anda
&lt;/h3&gt;

&lt;p&gt;File kunci (&lt;code&gt;package-lock.json&lt;/code&gt;, &lt;code&gt;yarn.lock&lt;/code&gt;) harus mengunci versi tepat. Jika ada &lt;code&gt;1.14.1&lt;/code&gt;, buat ulang:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm &lt;/span&gt;package-lock.json
npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pastikan file kunci baru mengunci axios ke versi aman sebelum commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Menggunakan Apidog untuk Mengaudit Panggilan API axios Anda
&lt;/h2&gt;

&lt;p&gt;Jika Anda memakai axios sebagai klien HTTP untuk memanggil API, Apidog dapat membantu memverifikasi integrasi Anda tetap benar setelah update dependensi.&lt;/p&gt;

&lt;p&gt;Setelah update ke &lt;a href="mailto:axios@1.14.0"&gt;axios@1.14.0&lt;/a&gt;, impor endpoint API ke Apidog dan jalankan regresi untuk konfirmasi perilaku tidak berubah. Ini penting jika Anda khawatir versi berbahaya pernah mengubah muatan request/response. Gunakan penegasan respons Apidog untuk validasi field, header, dan status code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Penegasan pasca-respons Apidog&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Respons bersih — tidak ada bidang yang disuntikkan&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;not&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;__injected&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;X-Injected-Header&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jalankan seluruh pengujian pada axios versi baru di Apidog untuk dokumentasi baseline sebelum push ke produksi.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Coba Apidog gratis&lt;/a&gt; untuk setup regresi testing klien HTTP Anda.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mengapa Serangan Rantai Pasokan di npm Sulit Dihentikan
&lt;/h2&gt;

&lt;p&gt;Serangan axios bukan anomali, ini pola yang berulang:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;event-stream (2018):&lt;/strong&gt; Pemelihara menambahkan payload yang menargetkan dompet bitcoin. 8 juta unduhan/minggu.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ua-parser-js (2021):&lt;/strong&gt; Disusupi untuk menjatuhkan crypto miner &amp;amp; pencuri password.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;node-ipc (2022):&lt;/strong&gt; Pemelihara menambahkan kode destruktif untuk IP Rusia/Belarusia.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xz utils (2024):&lt;/strong&gt; Rekayasa sosial selama dua tahun untuk menyuntik backdoor ke pustaka Linux inti.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;axios (2026):&lt;/strong&gt; Kredensial pemelihara disusupi, RAT diterbitkan melalui dependensi berbahaya.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inti masalah: &lt;strong&gt;kepercayaan pada akun publikasi, bukan pada kode itu sendiri.&lt;/strong&gt; Model npm mengandalkan trust pada pemelihara; jika kredensial mereka bocor, penyerang mewarisi kepercayaan itu.&lt;/p&gt;

&lt;p&gt;Mitigasi yang sangat membantu:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tindakan&lt;/th&gt;
&lt;th&gt;Apa yang Dilakukan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;File kunci (&lt;code&gt;package-lock.json&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Mengunci versi tepat, cegah upgrade diam-diam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;npm audit&lt;/code&gt; di CI&lt;/td&gt;
&lt;td&gt;Tandai kerentanan sebelum deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Socket.dev / Snyk&lt;/td&gt;
&lt;td&gt;Analisis perilaku — tandai paket mencurigakan sebelum ada CVE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2FA di npm&lt;/td&gt;
&lt;td&gt;Sulitkan kompromi kredensial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;npm publish&lt;/code&gt; dengan token berumur pendek&lt;/td&gt;
&lt;td&gt;Batasi jendela paparan jika token bocor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review file kunci di PR&lt;/td&gt;
&lt;td&gt;Tangkap perubahan dependensi tidak terduga di code review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tim axios kini beralih ke kontrol publikasi lebih ketat dan token pendek. Tapi perbaikan harus datang dari ekosistem, bukan hanya paket individu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Indikator Kompromi (IOC)
&lt;/h2&gt;

&lt;p&gt;Menurut analisis Socket:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Paket berbahaya:&lt;/strong&gt; &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt;, &lt;code&gt;axios@1.14.1&lt;/code&gt;, &lt;code&gt;axios@0.30.4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email penerbit:&lt;/strong&gt; &lt;code&gt;nrwise@proton.me&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Perilaku:&lt;/strong&gt; Koneksi jaringan saat instalasi npm, persistensi RAT, eksfiltrasi env&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versi axios aman:&lt;/strong&gt; 1.14.0 ke bawah (kecuali 0.30.4), 1.13.x, 1.12.x&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jika Anda curiga terinfeksi, laporkan ke &lt;a href="mailto:security@npmjs.com"&gt;security@npmjs.com&lt;/a&gt; dan simpan log.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kesimpulan
&lt;/h2&gt;

&lt;p&gt;Kompromi axios 1.14.1 adalah pengingat bahwa keamanan dependensi adalah proses berkelanjutan. Kunci versi, jalankan alat analisis perilaku seperti Socket di CI, ubah kredensial saat ada anomali, dan pantau file kunci di code review.&lt;/p&gt;

&lt;p&gt;Jika Anda perlu rebuild kepercayaan pada integrasi API setelah update axios, &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; menyediakan skenario testing, penegasan, dan mocking untuk memverifikasi klien HTTP Anda sebelum release.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Versi axios mana yang disusupi?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;axios@1.14.1&lt;/code&gt; dan &lt;code&gt;axios@0.30.4&lt;/code&gt;. Keduanya sudah dihapus dari npm. Versi aman: &lt;code&gt;1.14.0&lt;/code&gt; (atau 1.13.x, 1.12.x).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apa yang dilakukan muatan axios berbahaya?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Menarik &lt;code&gt;plain-crypto-js@4.2.1&lt;/code&gt; yang men-deploy RAT multi-tahap. RAT dapat mengeksekusi perintah jarak jauh, eksfiltrasi env dan secret, serta bertahan setelah reboot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana tahu kalau saya menginstal versi berbahaya?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Jalankan &lt;code&gt;npm list axios&lt;/code&gt; — jika 1.14.1 atau 0.30.4, Anda terdampak. Cek juga &lt;code&gt;npm list plain-crypto-js&lt;/code&gt; — jika ada, kode berbahaya sudah berjalan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah cukup hanya update axios?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tidak cukup. Update hanya menghapus dependensi ke depan, tapi RAT bisa sudah terinstal dan bertahan. Jika pernah install versi berbahaya, ganti semua rahasia dan audit mesin untuk persistensi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana penyerang bisa publish ke npm tanpa jadi pemelihara?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Penyerang kemungkinan mendapatkan kredensial pemelihara dan mengeksploitasi token npm berumur panjang. Tim axios kini perketat kontrol publikasi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apa beda ini dengan kerentanan biasa?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Kerentanan = bug pada kode sah. Supply chain attack = kode berbahaya masuk lewat publikasi tepercaya. Kode jahat tidak pernah ada di repo GitHub axios — disuntikkan langsung ke npm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bagaimana melindungi proyek dari supply chain attack kedepan?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Gunakan file kunci, jalankan &lt;code&gt;npm audit&lt;/code&gt; di CI, gunakan Socket.dev untuk analisis perilaku, aktifkan 2FA npm, token publish pendek, dan audit perbedaan file kunci di code review.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
