# Referensi API Domain DNSHE
English · 简体中文 · 繁體中文 · 日本語 · Русский · Bahasa Indonesia · Deutsch · Français · 한국어 · العربية
[Kembali ke pengantar](../README_ID.md) Daftarkan domain, kelola DNS, perbarui IP dinamis, dan otomatisasikan operasi akun. Contoh memakai host API DNSHE dan kredensial pengganti. Ganti nama, ID, dan kunci dengan milik Anda. ## Daftar Isi - [Mulai Menggunakan](#mulai-menggunakan) - [Autentikasi dan Aturan Permintaan](#autentikasi-dan-aturan-permintaan) - [Pengelolaan Domain](#pengelolaan-domain) - [Pengelolaan Rekaman DNS](#pengelolaan-rekaman-dns) - [DNS Dinamis (DDNS)](#dns-dinamis-ddns) - [Pengelolaan Kunci API](#pengelolaan-kunci-api) - [Pemberian Domain](#pemberian-domain) - [Kuota](#kuota) - [WHOIS](#whois) - [Kesalahan dan Batas Permintaan](#kesalahan-dan-batas-permintaan) - [Contoh Klien](#contoh-klien) - [Keamanan dan Pertanyaan Umum](#keamanan-dan-pertanyaan-umum) - [Dukungan](#dukungan) ## Mulai Menggunakan ```text https://api005.dnshe.com/index.php?m=domain_hub ``` URL dasar sudah berisi `m=domain_hub`; tambahkan parameter dengan `&`. Permintaan dan respons memakai JSON, kecuali parameter kueri GET. Batas umum bawaan adalah 60 permintaan/menit dan dapat diubah operator. Fitur bergantung pada akun dan konfigurasi. Contoh shell memakai Bash/sh; atur variabel lingkungan berikut terlebih dahulu. ```bash export DNSHE_API_KEY='replace-with-your-api-key' export DNSHE_API_SECRET='replace-with-your-api-secret' export DNSHE_DDNS_TOKEN='replace-with-your-ddns-token' ``` ## Autentikasi dan Aturan Permintaan Buat kunci pertama melalui area klien → [Kelola domain](https://my.dnshe.com/index.php?m=domain_hub) → Pengelolaan API. Kirim header `X-API-Key` dan `X-API-Secret`; kredensial melalui URL atau isi permintaan dinonaktifkan. Parameter GET berada di kueri; operasi tulis memakai JSON dan `Content-Type: application/json`. `endpoint` memilih sumber daya, `action` memilih operasi. `quota` dan `whois` tidak memerlukan `action`. DDNS memakai token tersendiri. ## Pengelolaan Domain ### 1.1 Daftar domain `GET` · `endpoint=subdomains` · `action=list` #### Parameter - `page` — `integer`; opsional; nilai bawaan / rentang: `1`. - `cursor_id` — `integer`; opsional. - `per_page` — `integer`; opsional; nilai bawaan / rentang: `200; 1–500`. - `include_total` — `boolean`; opsional; nilai bawaan / rentang: `false`. - `search` — `string`; opsional. - `rootdomain` — `string`; opsional. - `status` — `string`; opsional; nilai bawaan / rentang: `active | suspended | expired`. - `created_from / created_to` — `string`; opsional; nilai bawaan / rentang: `YYYY-MM-DD`. - `sort_by` — `string`; opsional; nilai bawaan / rentang: `id`. - `sort_dir` — `string`; opsional; nilai bawaan / rentang: `desc; asc | desc`. - `fields` — `string`; opsional; nilai bawaan / rentang: `all`. `page` adalah nomor halaman kompatibilitas mulai dari 1. Untuk koleksi besar, mulai dengan `cursor_id=0`, lalu gunakan `pagination.next_cursor_id` selama `pagination.has_more=true`; berhenti ketika false. Mode kursor memakai urutan ID tanpa OFFSET. `per_page` bawaan 200, maksimum 500; mulai dari 50–100. `include_total=1` menambahkan penghitungan total yang bisa lambat. `search` mencari prefiks atau domain akar; `rootdomain`, `status`, `created_from`, `created_to` menyaring hasil. Format tanggal YYYY-MM-DD. `sort_by`: `id`, `created_at`, `updated_at`, `expires_at`, `subdomain`; `sort_dir`: `asc` atau `desc`. `fields` berupa daftar dipisahkan koma atau `all`: `id`, `subdomain`, `rootdomain`, `full_domain`, `status`, `created_at`, `updated_at`, `expires_at`, `never_expires`, `cloudflare_zone_id`, `provider_account_id`. Pilihan khusus tetap menyertakan `id`. `count` adalah jumlah koleksi yang dikembalikan, bukan selalu total seluruh hasil. #### Contoh Permintaan ```bash curl --fail-with-body --silent --show-error --max-time 30 -X GET "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=list" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" ``` ```bash curl --fail-with-body --silent --show-error --max-time 30 -X GET "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=list&cursor_id=0&per_page=100&fields=id,subdomain,rootdomain,status" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" ``` ```bash curl --fail-with-body --silent --show-error --max-time 30 -X GET "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=list&search=test&rootdomain=de5.net&status=active&sort_by=expires_at&sort_dir=asc&per_page=50" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" ``` #### Contoh Respons ```json { "success": true, "count": 2, "subdomains": [ { "id": 1, "subdomain": "test", "rootdomain": "de5.net", "full_domain": "test.de5.net", "status": "active", "created_at": "2025-10-19 10:00:00", "updated_at": "2025-10-19 10:00:00" }, { "id": 2, "subdomain": "api", "rootdomain": "de5.net", "full_domain": "api.de5.net", "status": "active", "created_at": "2025-10-19 11:00:00", "updated_at": "2025-10-19 11:00:00" } ] } ``` ```json { "success": true, "count": 1, "subdomains": [ { "id": 901, "subdomain": "test", "rootdomain": "de5.net", "full_domain": "test.de5.net", "status": "active" } ], "pagination": { "mode": "cursor", "page": 1, "per_page": 100, "has_more": true, "cursor_id": 0, "next_cursor_id": 901 } } ``` ### 1.2 Mendaftarkan domain `POST` · `endpoint=subdomains` · `action=create` #### Parameter - `subdomain` — `string`; wajib. - `domain` — `string`; wajib. `subdomain` adalah prefiks seperti `myapp`; `domain` adalah akhiran akar yang tersedia seperti `de5.net`. Registrasi memakai `action=create` dan kolom `domain`. Kolom respons serta filter `rootdomain` bukan kolom registrasi. Ketersediaan dan kuota akun tetap berlaku. #### Contoh Permintaan ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=create" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "subdomain": "myapp", "domain": "de5.net" }' ``` #### Contoh Respons ```json { "success": true, "message": "Subdomain registered successfully", "subdomain_id": 3, "full_domain": "myapp.de5.net" } ``` ### 1.3 Detail domain `GET` · `endpoint=subdomains` · `action=get` #### Parameter - `subdomain_id` — `integer`; wajib. Gunakan ID domain milik akun yang diautentikasi. Respons berisi objek domain, `dns_records`, dan `dns_count`. #### Contoh Permintaan ```bash curl --fail-with-body --silent --show-error --max-time 30 -X GET "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=get&subdomain_id=1" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" ``` #### Contoh Respons ```json { "success": true, "subdomain": { "id": 1, "subdomain": "test", "rootdomain": "de5.net", "full_domain": "test.de5.net", "status": "active", "created_at": "2025-10-19 10:00:00", "updated_at": "2025-10-19 10:00:00" }, "dns_records": [ { "id": 1, "name": "test.de5.net", "type": "A", "content": "203.0.113.10", "ttl": 600, "priority": null, "status": "active", "created_at": "2025-10-19 10:05:00" } ], "dns_count": 1 } ``` ### 1.4 Menghapus domain `POST / DELETE` · `endpoint=subdomains` · `action=delete` #### Parameter - `subdomain_id` — `integer`; wajib. Menghapus domain milik akun beserta rekaman DNS terkait. `dns_records_deleted` melaporkan jumlah yang dihapus. Periksa ID sebelum mengirim. #### Contoh Permintaan ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=delete" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "subdomain_id": 1 }' ``` #### Contoh Respons ```json { "success": true, "message": "Subdomain deleted successfully", "subdomain_id": 1, "full_domain": "test.de5.net", "dns_records_deleted": 4 } ``` ### 1.5 Memperpanjang domain `POST / PUT` · `endpoint=subdomains` · `action=renew` #### Parameter - `subdomain_id` — `integer`; wajib. Perpanjangan gratis normal DNSHE tetap gratis; contoh memakai `charged_amount=0`. Plugin umum dapat mengatur pemulihan berbayar, jadi periksa status dan kebijakan konsol ketika dalam masa pemulihan. Baca `previous_expires_at`, `new_expires_at`, `never_expires`, `remaining_days`, `charged_amount` untuk hasil sebenarnya. Kegagalan meliputi HTTP 403 `renewal disabled`, `redemption period requires administrator`, `renewal window expired`; HTTP 422 `renewal_not_yet_available`; HTTP 402 `insufficient balance for redemption renewal`; HTTP 404 untuk domain tidak ditemukan atau bukan milik akun. Periksa jendela perpanjangan atau hubungi dukungan, jangan mengulang terus-menerus. #### Contoh Permintaan ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=subdomains&action=renew" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "subdomain_id": 3 }' ``` #### Contoh Respons ```json { "success": true, "message": "Subdomain renewed successfully", "subdomain_id": 3, "subdomain": "myapp", "previous_expires_at": "2027-05-01 00:00:00", "new_expires_at": "2028-05-01 00:00:00", "renewed_at": "2027-04-30 00:00:00", "never_expires": 0, "status": "active", "remaining_days": 367, "charged_amount": 0 } ``` ## Pengelolaan Rekaman DNS ### 2.1 Daftar rekaman DNS `GET` · `endpoint=dns_records` · `action=list` #### Parameter - `subdomain_id` — `integer`; wajib. Utamakan `id` modul dari daftar/pembuatan; rekaman publik baru memakai ID 15 digit. `record_id` adalah identitas di penyedia DNS. Ubah/hapus memerlukan setidaknya satu; jika keduanya dikirim harus menunjuk rekaman yang sama, atau muncul `dns_record_identifier_mismatch`. ID internal lama masih kompatibel. Kompatibilitas `record_id` numerik didokumentasikan setidaknya sampai 2027-06-12; klien baru memakai `id` untuk ID modul. #### Contoh Permintaan ```bash curl --fail-with-body --silent --show-error --max-time 30 -X GET "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=dns_records&action=list&subdomain_id=1" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" ``` #### Contoh Respons ```json { "success": true, "count": 2, "records": [ { "id": 1, "record_id": "5a0ce6c4d1d4c71bc5e60a2a2a0e4997", "name": "test.de5.net", "type": "A", "content": "203.0.113.10", "ttl": 600, "priority": null, "line": null, "proxied": false, "status": "active", "created_at": "2025-10-19 10:05:00", "updated_at": "2025-10-19 10:05:00" }, { "id": 2, "name": "www.test.de5.net", "type": "CNAME", "content": "test.de5.net", "ttl": 600, "priority": null, "proxied": false, "status": "active", "created_at": "2025-10-19 10:10:00" } ] } ``` ### 2.2 Membuat rekaman DNS `POST` · `endpoint=dns_records` · `action=create` #### Parameter - `subdomain_id` — `integer`; wajib. - `type` — `string`; wajib. - `name` — `string`; opsional; nilai bawaan / rentang: `@`. - `content` — `string`; opsional. - `ttl` — `integer`; opsional; nilai bawaan / rentang: `600`. - `priority` — `integer`; opsional; nilai bawaan / rentang: `MX: 10; SRV: 0`. - `line` — `string`; opsional. - `record_weight / weight` — `integer`; opsional. - `record_port / port` — `integer`; opsional; nilai bawaan / rentang: `1–65535`. - `record_target / target` — `string`; opsional. - `caa_flag` — `integer`; opsional; nilai bawaan / rentang: `0; 0–255`. - `caa_tag` — `string`; opsional; nilai bawaan / rentang: `issue; 1–15 [A-Za-z0-9]`. - `caa_value` — `string`; opsional. `type` mendukung A, AAAA, CNAME, MX, TXT, NS, SRV, CAA. `name` relatif terhadap domain terdaftar; tidak diisi, kosong, atau `@` berarti domain itu sendiri. Nama lengkap tidak diterima; `*` hanya pada label paling kiri. `content` wajib kecuali dibentuk dari parameter terstruktur SRV/CAA. `ttl` bawaan 600 detik; `priority` bawaan 10 untuk MX dan 0 untuk SRV. SRV memakai `record_weight`/`weight`, `record_port`/`port` (1–65535), `record_target`/`target`; target `.` berarti layanan tidak tersedia. CAA memakai `caa_flag` (0–255, bawaan 0), `caa_tag` (1–15 huruf/angka, bawaan `issue`), `caa_value`. `line` hanya untuk AliDNS; penyedia lain menolak nilai tidak kosong. Penulisan NS dapat dinonaktifkan melalui `disable_ns_management`. Setelah delegasi DNS eksternal, pembuatan/perubahan non-NS ditolak dengan `external_dns_delegated`. Penghapusan rekaman lama, rekonsiliasi, dan pembersihan kedaluwarsa tidak diblokir. #### Contoh Permintaan ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=dns_records&action=create" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "subdomain_id": 1, "type": "A", "content": "203.0.113.10", "ttl": 600 }' ``` #### Contoh Respons ```json { "success": true, "message": "DNS record created successfully", "id": 738492016583241, "record_id": "5a0ce6c4d1d4c71bc5e60a2a2a0e4997" } ``` ### 2.3 Mengubah rekaman DNS `POST / PUT / PATCH` · `endpoint=dns_records` · `action=modify` #### Parameter - `id` — `integer`; opsional. - `record_id` — `string`; opsional. - `type / name / content` — `string`; opsional. - `ttl / priority` — `integer`; opsional. - `line` — `string`; opsional. - `record_weight / weight` — `integer`; opsional. - `record_port / port` — `integer`; opsional. - `record_target / target` — `string`; opsional. - `caa_flag` — `integer`; opsional. - `caa_tag / caa_value` — `string`; opsional. Kirim `id` atau `record_id` dan kolom yang berubah. Aturan nama dan opsi SRV/CAA sama dengan pembuatan. Kedua identitas harus menunjuk rekaman yang sama. Respons mengembalikan ID modul dan penyedia. Utamakan `id` modul dari daftar/pembuatan; rekaman publik baru memakai ID 15 digit. `record_id` adalah identitas di penyedia DNS. Ubah/hapus memerlukan setidaknya satu; jika keduanya dikirim harus menunjuk rekaman yang sama, atau muncul `dns_record_identifier_mismatch`. ID internal lama masih kompatibel. Kompatibilitas `record_id` numerik didokumentasikan setidaknya sampai 2027-06-12; klien baru memakai `id` untuk ID modul. Penulisan NS dapat dinonaktifkan melalui `disable_ns_management`. Setelah delegasi DNS eksternal, pembuatan/perubahan non-NS ditolak dengan `external_dns_delegated`. Penghapusan rekaman lama, rekonsiliasi, dan pembersihan kedaluwarsa tidak diblokir. #### Contoh Permintaan ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=dns_records&action=modify" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "id": 738492016583241, "type": "A", "content": "203.0.113.20", "ttl": 600 }' ``` #### Contoh Respons ```json { "success": true, "message": "DNS record updated successfully", "id": 738492016583241, "record_id": "5a0ce6c4d1d4c71bc5e60a2a2a0e4997" } ``` ### 2.4 Menghapus rekaman DNS `POST / DELETE` · `endpoint=dns_records` · `action=delete` #### Parameter - `id` — `integer`; opsional. - `record_id` — `string`; opsional. Utamakan `id` modul dari daftar/pembuatan; rekaman publik baru memakai ID 15 digit. `record_id` adalah identitas di penyedia DNS. Ubah/hapus memerlukan setidaknya satu; jika keduanya dikirim harus menunjuk rekaman yang sama, atau muncul `dns_record_identifier_mismatch`. ID internal lama masih kompatibel. Kompatibilitas `record_id` numerik didokumentasikan setidaknya sampai 2027-06-12; klien baru memakai `id` untuk ID modul. #### Contoh Permintaan ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=dns_records&action=delete" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "id": 1 }' ``` ```bash curl --fail-with-body --silent --show-error --max-time 30 -X POST "https://api005.dnshe.com/index.php?m=domain_hub&endpoint=dns_records&action=delete" \ -H "X-API-Key: ${DNSHE_API_KEY}" \ -H "X-API-Secret: ${DNSHE_API_SECRET}" \ -H "Content-Type: application/json" \ -d '{ "record_id": "5a0ce6c4d1d4c71bc5e60a2a2a0e4997" }' ``` #### Contoh Respons ```json { "success": true, "message": "DNS record deleted successfully" } ``` ## DNS Dinamis (DDNS) `GET / POST / PUT` · `endpoint=ddns` · `action=update` Buat token khusus rekaman A/AAAA di Pengelolaan Domain → DDNS. Kirim `Authorization: Bearer