qrtzcode
HomeDocsAPILeaderboardChangelog
Contribute
Docs

qrtzcode

Kumpulan gist & snippet pribadi — anime, AI tools, scraper, dan randomness.

Navigate

HomeDocsAPI Reference

Links

© 2026 qrtz. All snippets welcome.

ESC

Navigate

Links

Tools

Subdomain Zone id

Scrape Create Domain zone.id / limit 1 akun 10 domain udh ada sistem add dns nya, di scrape juga udh ada penjelasan sistem demi sistem

Note

harus ngambil cookie RT_COOKIE & INITIAL_TOKEN

Contributed by

@vorx4 contributions

Creator

vorx

Language

javascript

Views

26

Copies

4

Base

—

Updated

17 Agu 2026

#api#tools#domain

Code

264
subdomain_zone.id.js
/* Subdomain Zone.id
   Scrape Create Domain zone.id / limit 1 akun 10 domain udh ada sistem add dns nya, di scrape juga udh ada penjelasan sistem demi sistem 
   by: vorx
   source: https://whatsapp.com/channel/0029Vb6P2e1E50UZYaX4wI0W
   tags: subdomain, tools
*/

class ZoneIdScraper {
  constructor(initialToken, refreshTokenCookie) {
    this.baseUrl = "https://my.zone.id/api";
    this.token = initialToken;
    this.refreshTokenCookie = refreshTokenCookie; // Simpan nilai cookie rt_subzoneid
  }

  // Fungsi pembantu untuk menghasilkan header dengan token dan cookie terbaru
  _getHeaders() {
    return {
      "Accept": "application/json, text/plain, */*",
      "Content-Type": "application/json",
      "Authorization": `Bearer ${this.token}`,
      "Cookie": `rt_subzoneid=${this.refreshTokenCookie}` 
    };
  }

  // Fungsi utama untuk handle request dan otomatisasi refresh token jika kena 401
  async _makeRequest(method, endpoint, payload = null) {
    const url = `${this.baseUrl}${endpoint}`;
    const options = {
      method: method,
      headers: this._getHeaders(),
    };

    if (payload) {
      options.body = JSON.stringify(payload);
    }

    let response = await fetch(url, options);

    // Jika mendapat 401 Invalid Token, lakukan Refresh Token lalu ulangi request
    if (response.status === 401) {
      console.log("[!] Token expired (401). Mencoba refresh token...");
      const isRefreshed = await this.refreshToken();
      
      if (isRefreshed) {
        // Perbarui header di options dengan token yang baru dan ulangi request
        options.headers = this._getHeaders();
        response = await fetch(url, options);
      } else {
        console.log("[-] Gagal melanjutkan request karena refresh token gagal.");
        return null;
      }
    }

    // Mengambil teks response (menghindari error JSON.parse jika response kosong seperti "{}")
    const text = await response.text();
    try {
      return text ? JSON.parse(text) : {};
    } catch (e) {
      return text;
    }
  }

  async refreshToken() {
    const url = `${this.baseUrl}/refresh-token`;
    const response = await fetch(url, {
      method: "POST",
      headers: this._getHeaders()
    });

    if (response.status === 200) {
      const data = await response.json();
      this.token = data.token; // Simpan token baru
      console.log("[+] Token berhasil diperbarui!");
      return true;
    } else {
      console.log("[-] Gagal refresh token:", await response.text());
      return false;
    }
  }

  async createSubdomain(suffix, subdomain, usageDescription) {
    const payload = {
      suffix: suffix,
      subdomain: subdomain,
      usage_type: "Organization/Community",
      usage_description: usageDescription,
      mode: "dns_record",
      step: 2,
      will: true
    };
    console.log(`[*] Membuat subdomain: ${subdomain}.${suffix}...`);
    return await this._makeRequest("POST", "/subdomains", payload);
  }

  async getSubdomains() {
    console.log("[*] Mengambil daftar subdomain...");
    return await this._makeRequest("GET", "/subdomains");
  }

  async getSubdomainDetail(subdomainId) {
    console.log(`[*] Mengambil detail untuk ID: ${subdomainId}...`);
    return await this._makeRequest("GET", `/subdomains/${subdomainId}`);
  }

  async getDnsRecords(subdomainId) {
    console.log(`[*] Mengambil DNS records untuk ID: ${subdomainId}...`);
    return await this._makeRequest("GET", `/subdomains/${subdomainId}/dns`);
  }

  async createDnsRecord(subdomainId, hostname, recordType, content) {
    const payload = {
      hostname: hostname,
      type: recordType,
      content: content,
      editing: true
    };
    console.log(`[*] Membuat DNS Record (${recordType}) untuk ID ${subdomainId}...`);
    return await this._makeRequest("POST", `/subdomains/${subdomainId}/dns`, payload);
  }
}

// ==========================================
// CONTOH PENGGUNAAN SISTEM NYA
// ==========================================
(async () => {
  const INITIAL_TOKEN = "eyJhbG... (ISI_TOKEN_KAMU_DI_SINI)";
  const RT_COOKIE = "RT_COOKIE_KAMU";
  
  const api = new ZoneIdScraper(INITIAL_TOKEN, RT_COOKIE);
  
  const namaSubdomain = "wabot-api"; 
  
  // 1. Kirim request pembuatan subdomain baru
  console.log("\n--- MEMBUAT SUBDOMAIN BARU ---");
  const createRes = await api.createSubdomain("zone.id", namaSubdomain, "bot endpoint");
  console.log("[DEBUG] Respon dari server:", createRes); 
  
  // Hentikan script jika server menolak karena cooldown/error biar gak maksa 😠
  if (createRes.message && createRes.message.includes("Kindly wait")) {
    console.log("\n[-] PROSES DIBATALKAN: Kamu terkena limit cooldown dari server.");
    console.log(`[-] Silakan tunggu sekitar 30 menit sebelum mencoba lagi.`);
    return; // Perintah ini akan menghentikan sisa eksekusi di bawahnya
  }

  // Jika sukses tapi balikan datanya error lain
  if (createRes.message && !createRes.message.includes("success")) {
     // Terkadang API membalas error lain tapi bukan soal waktu tunggu
     console.log("\n[-] Ada pesan dari server:", createRes.message);
  }
  
  // Beri jeda 2 detik agar database server sinkron
  console.log("[*] Menunggu 2 detik untuk sinkronisasi server...");
  await new Promise(resolve => setTimeout(resolve, 2000));
  
  // 2. Ambil ulang daftar subdomain untuk mendapatkan ID-nya
  console.log("\n--- MENCARI ID SUBDOMAIN BARU ---");
  const dataSubdomains = await api.getSubdomains();
  
  // Cari subdomain yang cocok
  const targetSubdomain = dataSubdomains.subdomains?.find(
    (sub) => sub.subdomain === `${namaSubdomain}.zone.id`
  );

  if (targetSubdomain) {
    const newId = targetSubdomain.id;
    console.log(`[+] Subdomain ditemukan! ID-nya adalah: ${newId}`);
    
    // 3. Tambahkan DNS Record
    console.log("\n--- MENAMBAHKAN DNS RECORD ---");
    const ipAddressKamu = "104.21.55.100"; 
    await api.createDnsRecord(newId, "@", "A", ipAddressKamu);
    
    // 4. Verifikasi DNS
    const verifikasiDns = await api.getDnsRecords(newId);
    console.log("\n[+] Hasil DNS Records untuk", `${namaSubdomain}.zone.id:`);
    console.log(JSON.stringify(verifikasiDns, null, 2));

  } else {
    console.log("[-] Subdomain tetap tidak ditemukan. Cek respon server di atas untuk melihat penyebab gagalnya.");
  }

})();

Rating

4.7(3)

Gimana snippet ini menurutmu?

</> Embed

Embed ke website / blog

<iframe src="https://qrtzcode.vercel.app/api/embed/tools/subdomain-zone-id" style="width:100%;height:400px;border:none;border-radius:12px;"></iframe>

Related Snippets

proxy scraper

Dapatkan proxy gratis loh ya

66
16

Top up e-wallet Dana

scrape top up cocok untuk mau buat sistem top up dana otomatis di bot, dan juga ini output nya ada qris nya

26
4

tempmail

bikin email sementara.

22
4