BKNSWhois Lookup

BKNS Whois API

REST API tra cứu thông tin WHOIS và kiểm tra khả dụng tên miền.
Hỗ trợ 1.260+ TLD · Dữ liệu .vn từ VNNIC chính thức · Độ trễ < 200ms

Base URLhttps://whois.bkns.vn/api/v1

Tất cả request qua HTTPS. Phản hồi JSON, encoding UTF-8.

Xác thực

Đính kèm API key vào header X-API-Key trong mọi request. Thiếu key hoặc key sai → HTTP 401.

http
GET /api/v1/whois?domain=bkns.vn
X-API-Key: bkns_dmo_2376da23bd44858c8390aeeb93065404d21ede1ba2c5d59c0cffc33d6e83c2dd
Content-Type: application/json
Giữ API key bí mật. Không nhúng vào client-side JavaScript hay mobile app. Liên hệ info@bkns.vn để được cấp hoặc xoay vòng key.

Demo API key — dùng thử ngay

Sao chép key bên dưới và dán vào header X-API-Key để kiểm tra tích hợp ngay lập tức — không cần đăng ký.

http
X-API-Key: bkns_dmo_2376da23bd44858c8390aeeb93065404d21ede1ba2c5d59c0cffc33d6e83c2dd

Giới hạn demo: 2 lượt/phút và 200 lượt/ngày mỗi IP · Chỉ dùng được GET /api/v1/whois và GET /api/v1/domain/check · Bulk WHOIS trả 403.

Để dùng Bulk WHOIS hoặc cần rate limit cao hơn, hãy đăng ký key Partner tại info@bkns.vn hoặc qua trang quản trị.

Rate Limits

Giới hạn request theo tier. Vượt ngưỡng → 429 Too Many Requests kèm header Retry-After.

Public
10 req/min
Tra cứu qua UI. Không cần API key.
Demo
2 req/min
+ 200 req/day per IP
Key demo công khai trên trang này. Chỉ GET /api/v1/whois + /api/v1/domain/check.
Partner
300 req/min
Tích hợp server-side. Liên hệ để được cấp key.
response headers
X-RateLimit-Limit:     300
X-RateLimit-Remaining:  0
X-RateLimit-Reset:      1711234567
Retry-After:           15

Mã lỗi

200OK — Thành côngXử lý response bình thường
400Bad Request — Domain không hợp lệValidate format trước khi gọi
401Unauthorized — Sai hoặc thiếu API keyKiểm tra header X-API-Key
429Too Many Requests — Vượt rate limitĐợi theo header Retry-After
500Internal Server ErrorRetry sau, báo cáo nếu lặp lại
503Service Unavailable — Registry không phản hồiExponential backoff retry

So sánh error envelope: v1 và v2

v1 (legacy) trả lỗi dạng phẳng với errorCode. v2 (standard) bọc lỗi trong object error kèm mã BKNS-WHOIS-NNN, message song ngữ, và correlation_id để tra cứu.

json · v1 (legacy)
{
  "errorCode": "INVALID_DOMAIN",
  "message": "Invalid domain name",
  "statusCode": 400
}

Bảng mã lỗi v2 — BKNS-WHOIS-001 … 014

Mỗi lỗi v2 có mã BKNS-WHOIS-NNN cố định kèm HTTP status tương ứng. Trường error.details.legacyCode (khi có) là mã v1 tương đương, dùng để bắc cầu trong lúc chuyển tiếp — mã này sẽ được gỡ bỏ khi mọi consumer đã đọc error.code.

Mã v2HTTPÝ nghĩa (tiếng Anh)Mã v1 (legacy)
BKNS-WHOIS-001400Invalid domain nameINVALID_DOMAIN
BKNS-WHOIS-002400Request validation failedINVALID_INPUT
BKNS-WHOIS-003400Too many domains (max 10)TOO_MANY_DOMAINS
BKNS-WHOIS-004400Too many domains (max 20)TOO_MANY_DOMAINS_BULK
BKNS-WHOIS-005401API key requiredAPI_KEY_REQUIRED
BKNS-WHOIS-006403Invalid API keyINVALID_API_KEY
BKNS-WHOIS-007403Tier insufficientFORBIDDEN
BKNS-WHOIS-008429Too many requestsRATE_LIMITED
BKNS-WHOIS-009503Service temporarily unavailableALL_BACKENDS_FAILED
BKNS-WHOIS-010500An internal error occurredINTERNAL_ERROR
BKNS-WHOIS-014404Resource not foundNOT_FOUND
correlation_id được trả về trong mọi lỗi v2 — hãy log lại giá trị này và cung cấp cho đội hỗ trợ (info@bkns.vn) để tra cứu nhanh. Giá trị này cũng được trả về ở response header X-Correlation-ID trên cả hai bề mặt (v1 và v2); bạn có thể tự gửi X-Correlation-ID trong request để BKNS phản hồi đúng giá trị đó.

API v2 & Nâng cấp

BKNS Whois API hiện phục vụ song song hai phiên bản trên cùng một gateway. Chọn phiên bản phù hợp với tích hợp của bạn — không có yêu cầu bắt buộc chuyển đổi.

v1 — Ổn định, giữ nguyên vĩnh viễn
https://whois.bkns.vn/api/v1

Hợp đồng API gốc. Không có kế hoạch gỡ bỏ, không deadline. Tích hợp hiện tại tiếp tục hoạt động mà không cần sửa gì.

v2 — Khuyến nghị cho tích hợp mới
https://whois.bkns.vn/api/v2

Cùng endpoint, cùng response thành công như v1 — nhưng có error envelope chuẩn hóa và validate request nghiêm ngặt (strict). Dùng cho mọi tích hợp mới.

Hướng dẫn nâng cấp v1 → v2

  1. 1

    Bước 1 — Đổi base URL

    Đổi /api/v1 thành /api/v2. Response thành công giữ nguyên 100% — cùng field, cùng cấu trúc phẳng, không bọc trong wrapper success/data — không cần sửa code xử lý phần thành công.

  2. 2

    Bước 2 — Cập nhật xử lý lỗi

    Đọc error.code (ví dụ BKNS-WHOIS-001) thay vì errorCode ở cấp cao nhất, và error.message / error.messageEn thay vì message. Dùng bảng mã lỗi ở mục Mã lỗi để map; trong lúc chuyển tiếp, error.details.legacyCode vẫn giữ mã cũ nên bạn có thể so khớp cả hai.

  3. 3

    Bước 3 — Request nghiêm ngặt (strict)

    v2 từ chối ngay bất kỳ field query/body lạ nào ngay từ request đầu tiên — trả 400 BKNS-WHOIS-002, không có thời gian ân hạn. Chỉ gửi các tham số đã tài liệu hóa: domain, raw, bypass_cache (bulk: domains). Xóa mọi tham số thừa trước khi chuyển sang v2.

  4. 4

    Bước 4 — Mọi thứ khác giữ nguyên

    Xác thực (X-API-Key), rate limit theo tier, và các giá trị status (pending | registered | available | reserved | auction) giống hệt nhau giữa v1 và v2. v2 dùng chung ngân sách rate-limit với v1 — chuyển bề mặt không reset quota của bạn.

Không có deadline. v1 sẽ không bao giờ bị gỡ bỏ — bạn có thể nâng cấp bất cứ khi nào thuận tiện.

GETWHOIS Lookup

Tra cứu thông tin WHOIS đầy đủ: chủ sở hữu, nhà đăng ký, ngày tạo/hết hạn, nameserver, trạng thái EPP.

Cũng khả dụng tại /api/v2/whois với error envelope chuẩn hóa (v2) — xem hướng dẫn nâng cấp v1 → v2

GET/api/v1/whoisWHOIS Lookup

Tham số / Kiểu / Mô tả

Tham sốKiểuMô tả
domain requiredstringTên miền cần tra cứu. Chấp nhận ASCII (bkns.vn), punycode (xn--...), hoặc Unicode IDN (münchen.de). Tự động chuẩn hóa sang punycode.

Response

json · HTTP 200 · source: vnnic-relay
{
  "domain": "bkns.vn",
  "tld": "vn",
  "status": "registered",
  "cached": true,
  "cacheTtlRemaining": null,
  "data": {
    "registrant": {
      "name": "Công ty Cổ phần Giải pháp Mạng Bạch Kim"
    },
    "registrar": {
      "name": "Công ty cổ phần giải pháp mạng Bạch Kim"
    },
    "nameservers": ["ns1.bkdns.vn", "ns2.bkdns.vn", "ns3.bkdns.vn"],
    "dates": {
      "created": "2010-06-24T17:00:00.000Z",
      "updated": null,
      "expiry": "2030-06-24T17:00:00.000Z",
      "renewalDeadline": null
    },
    "domainStatus": ["clientTransferProhibited"],
    "dnssec": false
  }
}
Chỉ có với .vn: Field data.registrant được trả về. Domain quốc tế thường không có thông tin registrant.

GETDomain Check

Kiểm tra nhanh tên miền còn khả dụng hay không. Nhanh hơn WHOIS vì chỉ trả về trạng thái.

Cũng khả dụng tại /api/v2/domain/check với error envelope chuẩn hóa (v2) — xem hướng dẫn nâng cấp v1 → v2

GET/api/v1/domain/checkKiểm tra khả dụng

Tham số / Kiểu / Mô tả

Tham sốKiểuMô tả
domain requiredstringTên miền cần kiểm tra. Chấp nhận ASCII, punycode, hoặc Unicode IDN. Tự động chuẩn hóa sang punycode.
json · HTTP 200
{
  "domain": "example-notexist.vn",
  "tld": "vn",
  "available": true,
  "premium": false,
  "cached": false
}

Tên miền .vn giữ chỗ / đấu giá

json · HTTP 200 · .vn
// congchung.vn — reserved
{ "domain": "congchung.vn", "available": false, "reserved": true, "reservedBy": "Cục CNTT – Bộ Tư pháp" }

// bk.vn — auction-only (.vn 1–2 ký tự)
{ "domain": "bk.vn", "available": false, "auction": true }
Với .vn: reserved (giữ chỗ) và auction (1–2 ký tự, chỉ qua đấu giá) đều trả available = false — KHÔNG đăng ký được. reserved kèm reservedBy. Đừng coi chúng là available.

POSTBulk WHOIS

Tra cứu nhiều tên miền trong một request. Tối đa 20 domain/request. Yêu cầu tier Partner.

Lưu ý: Bulk WHOIS yêu cầu key Partner — demo key trả về 403 trên endpoint này.

Cũng khả dụng tại /api/v2/whois/bulk với error envelope chuẩn hóa (v2) — xem hướng dẫn nâng cấp v1 → v2

POST/api/v1/whois/bulkBulk lookup

Request Body

json
{
  "domains": ["bkns.vn", "google.com", "example.org"]
}

Response

json · HTTP 200
{
  "results": [
    { "domain": "bkns.vn",     "status": "registered", "data": { ... } },
    { "domain": "example.org", "status": "available" }
  ],
  "total": 3,
  "queryTime": 512
}

Response Schema

Cấu trúc đầy đủ của object WHOIS trả về.

Top-level fields

domainstringTên miền dạng ASCII/punycode (canonical key). Ví dụ: "xn--mnchen-3ya.de"
idnDomainoptionalstring | undefinedDạng Unicode hiển thị của tên miền IDN. Chỉ có khi domain chứa nhãn quốc tế hóa (xn--). Ví dụ: "münchen.de". Bỏ qua với domain ASCII thuần.
tldstringTLD của domain: "vn", "net", "com"…
status"pending" | "registered" | "available" | "reserved" | "auction"pendingregisteredavailablereservedauction
reservedByoptionalstring | undefinedĐơn vị giữ chỗ tên miền (do VNNIC cung cấp). Chỉ có khi status = "reserved".
cachedbooleanResponse từ cache hay live query
dataoptionalobject | undefinedChỉ có khi status = "registered" hoặc "pending"
backendsTriedoptionalarray | undefinedBackends đã thử, chỉ có khi cached = false

data object (chỉ khi registered)

data.registrant.nameoptionalstring | undefinedTên chủ sở hữu. Chỉ có với .vn
data.registrar.namestringTên nhà đăng ký
data.nameserversstring[]Danh sách nameserver
data.dates.createdISO 8601 | nullNgày tạo domain
data.dates.expiryISO 8601 | nullNgày hết hạn
data.dates.updatedISO 8601 | nullNgày cập nhật gần nhất
data.domainStatusstring[]EPP status codes: "clientTransferProhibited", "ok"…
data.dnssecbooleanDNSSEC enabled
data.autoRenewHoldoptionalobject | undefinedChỉ có khi phát hiện tên miền gTLD (không .vn) đang bị giữ tự động gia hạn. Optional, additive — vắng mặt hoàn toàn ở các domain còn lại.
data.autoRenewHold.level"suspected" | "confirmed""confirmed" (đã xác minh qua RDAP nhà đăng ký) hoặc "suspected" (không đối chiếu được RDAP nhà đăng ký — không khả dụng hoặc không đủ căn cứ; chỉ gắn cờ theo heuristic Tier-1).
data.autoRenewHold.registrarstring | nullTên nhà đăng ký, lấy từ entity registrar trong WHOIS/RDAP.
data.autoRenewHold.registryExpiryISO 8601 | nullNgày hết hạn bị che (đã tự động gia hạn +1 năm) theo registry WHOIS — giống hệt data.dates.expiry.
data.autoRenewHold.trueExpiryISO 8601 | nullNgày hết hạn THẬT, lấy trực tiếp từ RDAP nhà đăng ký. null khi level = "suspected".
data.autoRenewHold.trueStatusstring | nullTrạng thái THẬT từ nhà đăng ký, ví dụ "inactive". null khi chưa đối chiếu được hoặc level = "suspected".
data.autoRenewHold.signalsstring[]Danh sách tín hiệu đã kích hoạt khi phát hiện, ví dụ anniversary_updated_plus_1y, registrar_hold_ns.
data.autoRenewHold.source"rdap" | "heuristic""rdap" (Tier-2, đã xác nhận qua RDAP) hoặc "heuristic" (Tier-1, fallback khi không đối chiếu được).

TLD hỗ trợ

1.260+ loại TLD bao gồm tất cả ccTLD, gTLD phổ biến và new gTLD.

Tên miền .vn, .com.vn, .net.vn, .org.vn, .edu.vn, .gov.vn tra cứu trực tiếp qua VNNIC chính thức — dữ liệu chính xác, cập nhật nhanh nhất. Backend: vnnic-relay, latency ~145ms.

Code mẫu

WHOIS Lookup

javascript · Node.js 18+
const domain = 'bkns.vn';
const apiKey = 'bkns_dmo_2376da23bd44858c8390aeeb93065404d21ede1ba2c5d59c0cffc33d6e83c2dd';

const res = await fetch(
  `https://whois.bkns.vn/api/v1/whois?domain=${domain}`,
  { headers: { 'X-API-Key': apiKey } }
);

if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();

// Always check status before accessing data.*
if (data.status === 'registered') {
  console.log('Registrar:', data.data.registrar.name);
  console.log('Expires: ', data.data.dates.expiry);
  console.log('Nameservers:', data.data.nameservers.join(', '));
} else {
  console.log('Domain is not registered.');
}

Xử lý 429 — Retry với backoff

javascript
async function whoisWithRetry(domain, apiKey, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    const res = await fetch(
      `https://whois.bkns.vn/api/v1/whois?domain=${domain}`,
      { headers: { 'X-API-Key': apiKey } }
    );
    if (res.status === 429) {
      const wait = Number(res.headers.get('Retry-After') ?? 5) * 1000;
      await new Promise(r => setTimeout(r, wait));
      continue;
    }
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    return res.json();
  }
}

Ví dụ v2 — endpoint & error envelope

Endpoint /api/v2/whois dùng chung tham số với v1 (domain, raw, bypass_cache), nhưng lỗi trả về theo error envelope chuẩn hóa — xem mục Mã lỗi để biết bảng mã đầy đủ.

shell · v2
curl -s \
  "https://whois.bkns.vn/api/v2/whois?domain=bkns.vn" \
  -H "X-API-Key: bkns_dmo_2376da23bd44858c8390aeeb93065404d21ede1ba2c5d59c0cffc33d6e83c2dd" \
  | python3 -m json.tool
json · v2 (standard) · HTTP 400
{
  "success": false,
  "error": {
    "code": "BKNS-WHOIS-001",
    "message": "Tên miền không hợp lệ",
    "messageEn": "Invalid domain name",
    "details": { "legacyCode": "INVALID_DOMAIN" },
    "correlation_id": "01J8Z3K9QW7M2P5RXT6VYB4NDA"
  }
}

Liên hệ

Cần hỗ trợ kỹ thuật hoặc muốn đăng ký API key Partner?