Trên trang này
- Tổng quan
- Đăng ký & theo dõi
- Người đứng tên
- Chuyển tên miền về
- Trạng thái đơn
- Gia hạn & hết hạn
- DNS
- Luật riêng
- Nhịp thao tác
- Mã lỗi riêng
- GET /domain/tlds
- GET /domain/check
- GET /domain/price
- POST /domain/quote
- POST /domain/buy
- POST /domain/transfer
- GET /domain/list
- GET /domain/info
- POST /domain/renew
- POST /domain/auto-renew
- POST /domain/note
- POST /domain/delete
- GET /domain/dns/list
- POST /domain/dns/add
- POST /domain/dns/update
- POST /domain/dns/delete
- POST /domain/dns/mode
Tổng quan
Địa chỉ gốc của các endpoint trên trang này:
https://cloudmoon.net/api/v1| Endpoint | Việc | Quyền khoá |
|---|---|---|
GET /domain/tlds |
Danh mục đuôi đang bán + bảng giá (đăng ký năm đầu theo bảng · gia hạn mỗi năm) đã trừ chiết khấu đại lý; *_original = … | Chỉ đọc |
GET /domain/check |
Tên miền còn đăng ký được không: available = nhà đăng ký báo trống VÀ chưa có đơn nào giữ tên (status in_order). Đuôi k… | Chỉ đọc |
GET /domain/price |
Giá đăng ký một tên miền: amount (= price_buy) = năm đầu theo nhà đăng ký lúc gọi + (period − 1) × giá gia hạn, đã trừ … | Chỉ đọc |
POST /domain/quote |
BÁO GIÁ — không trừ tiền, không ghi gì, khoá chỉ đọc gọi được. type register (mặc định) {domain, period?, whois_privacy… | Chỉ đọc |
POST /domain/buy |
Đăng ký tên miền — trừ tiền NGAY và đăng ký luôn trong lượt gọi (đặt thời gian chờ HTTP từ 90 giây): HTTP 200 provision… | Toàn quyền |
POST /domain/transfer |
CHUYỂN tên miền đang đăng ký ở nơi khác về đây — trừ tiền NGAY (giá chuyển về = +1 năm, đã trừ chiết khấu; báo giá: /do… | Toàn quyền |
GET /domain/list |
Mọi tên miền của tài khoản (mua trên web lẫn qua API, nhận chuyển quyền), cùng khuôn /domain/info (kèm allowed_actions)… | Chỉ đọc |
GET /domain/info |
Chi tiết một tên miền: provision_status (provisioning · ready · failed · expired · suspended · cancelled · transferred_… | Chỉ đọc |
POST /domain/renew |
Gia hạn — trừ ví NGAY: amount = giá gia hạn mỗi năm hiện hành × period, đã trừ chiết khấu (báo giá: /domain/quote type … | Toàn quyền |
POST /domain/auto-renew |
ĐẶT tự gia hạn (không lật — gửi lại cùng giá trị vẫn thành công). Bật ⇒ khi còn ≤ 7 ngày tới billing.time_expire (kể cả… | Toàn quyền |
POST /domain/note |
Ghi chú riêng của tài khoản cho một tên miền (≤ 200 ký tự, bỏ thẻ HTML; rỗng = xoá). Đọc lại ở user_note của /domain/in… | Toàn quyền |
POST /domain/delete |
XOÁ tên miền khỏi danh sách quản lý — KHÔNG hoàn tiền, không khôi phục được (confirm = order_code). Tên miền VẪN đăng k… | Toàn quyền |
GET /domain/dns/list |
Bản ghi DNS (bản lưu tại đây là nguồn đúng) + dns_mode. name rỗng = gốc tên miền (@). sync: synced · pending (đang đẩy … | Chỉ đọc |
POST /domain/dns/add |
Thêm bản ghi: A · AAAA · CNAME (không ở gốc) · TXT · MX (priority) · NS (không ở gốc) · SRV (tên _dịch-vụ._giao-thức nh… | Toàn quyền |
POST /domain/dns/update |
Sửa một bản ghi (record_id lấy từ /domain/dns/list). Máy chủ DNS chối ⇒ 400 và bản ghi GIỮ giá trị cũ; tạm hỏng ⇒ sync … | Toàn quyền |
POST /domain/dns/delete |
Xoá một bản ghi. Máy chủ DNS xoá hỏng ⇒ 503 UNAVAILABLE và bản ghi GIỮ NGUYÊN — gửi lại sau ít phút. | Toàn quyền |
POST /domain/dns/mode |
Đổi chế độ DNS: external_ns + ns (2–13 hostname) ⇒ trỏ sang nameserver riêng (bản ghi tại đây giữ lại nhưng thôi có hiệ… | Toàn quyền |
Giá đại lý: Danh mục, báo giá và lệnh mua trả về (và trừ ví) giá đã trừ chiết khấu theo cấp đại lý — cả giá gia hạn mỗi năm (billing.price_renew). — xem mục Tài khoản đại lý.
Đăng ký & theo dõi
Lệnh mua trừ tiền và đăng ký luôn trong lượt gọi — thường xong ngay trong câu trả lời, nhưng một lượt có thể mất tới khoảng một phút: đặt thời gian chờ HTTP từ 90 giây.
GET /domain/check?domain=…cho biết tên còn đăng ký được không (available). Muốn biết đúng số sẽ trừ thì gọiPOST /domain/quotevới{domain, period}(khoá Chỉ đọc gọi được): nó chạy đúng bộ kiểm của lệnh mua — tên, đuôi, số năm, người đứng tên, còn trống, giá năm đầu theo nhà đăng ký — rồi trảamount(số sẽ trừ) vàenough(số dư khả dụng đủ chưa).POST /domain/buyvới{domain, period}(thêmregistrantnếu đăng ký hộ người khác — mục Người đứng tên) và headerIdempotency-Key: hệ thống kiểm lại hết rồi trừ ví và gửi đăng ký. Thường nhận HTTP 200 +provision_status: "ready": tên miền đã đăng ký xong. Vùng DNS tại đây được dựng ngay sau đó — sửa bản ghi được khidns_statuslàready(dnscó trongallowed_actions); sớm hơn ⇒409 DNS_NOT_READY, thử lại sau ít phút.- Đuôi nào nhà đăng ký cần duyệt thêm ⇒ HTTP 202 +
provisioning+charged: true: đơn đã tồn tại — hỏiGET /domain/info?order_code=…mỗi vài phút tới khiready.
- Đã trừ tiền mà nhà đăng ký chối ⇒ HTTP 200 +
provision_status: "failed"+charged: true(ví dụ dưới). Tiền không tự hoàn — bộ phận hỗ trợ được báo và xử lý (đăng ký lại, hoặc hoàn tiền nếu không làm tiếp được). Đừng gửi lại lệnh mua. - Lệnh bị chối ở bước kiểm — tên đã có người đăng ký (
409 DOMAIN_UNAVAILABLE), thiếu tiền, thiếu thông tin người đứng tên, đuôi không bán… — thì chưa trừ đồng nào.409 PRICE_CHANGED: giá năm đầu theo nhà đăng ký vừa cao hơn lúc kiểm — báo giá lại rồi gửi lệnh mới vớiIdempotency-Keymới. Ngoại lệ:400 FAILEDở lệnh mua có thể là giao dịch chưa rõ kết quả — đừng mua lại ngay: đối chiếu/domain/listhoặc liên hệ hỗ trợ trước. - Hết thời gian chờ, mất câu trả lời: gửi lại với đúng
Idempotency-Keycũ ⇒ nhận lại kết quả lần đầu (hoặc409 IDEMPOTENCY_PENDINGkhi lượt đầu chưa xong). Gửi lại cùng tên mà không kèm khoá ⇒409 DOMAIN_UNAVAILABLE(đơn của lượt đầu đang giữ tên) — không bị trừ hai lần, nhưng hãy đối chiếu/domain/listđể biết lượt đầu ra sao. - Giá: năm đầu theo nhà đăng ký đúng lúc mua (có thể đang khuyến mãi —
is_promo), các năm sau và mọi lần gia hạn theo bảng giá gia hạn. Nhiều đuôi gia hạn đắt hơn hẳn năm đầu (renewal_shock: 1) — xemprice_renewtrước khi mua. Bảng giá ở/domain/tldscập nhật mỗi ngày; số chính xác cho một tên cụ thể là/domain/quote. - Một lệnh mua đăng ký từ 1 tới 10 năm (
max_periodở/domain/tlds; vượt ⇒400+data.max_period). Tên miền premium (giá riêng do registry đặt) chưa bán qua đây (400 NOT_SUPPORTED).
{
"status": "success",
"msg": "Đã trừ tiền nhưng tên miền chưa đăng ký được — hỗ trợ sẽ xử lý",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"domain": "ten-mien-cua-ban.com",
"period": 1,
"provision_status": "failed",
"order_status": "register_failed",
"charged": true,
"price_buy": 418950,
"need_info": false,
"time_expire": "",
"registrant_source": "request",
"note": "Đã trừ tiền nhưng nhà đăng ký chưa nhận tên miền — bộ phận hỗ trợ sẽ xử lý (không cần gửi lại lệnh)."
}
}Người đứng tên
Mỗi tên miền có một người đứng tên (registrant) — chủ sở hữu ghi ở nhà đăng ký. Lệnh mua và lệnh chuyển về chọn người đứng tên theo một trong hai cách:
- Không gửi
registrant⇒ dùng hồ sơ Thông tin định danh của tài khoản (khai một lần ở trang tài khoản trên web; email người đứng tên là email tài khoản). Hồ sơ còn thiếu ⇒422 IDENTITY_REQUIREDvớidata.fields(các trường còn thiếu) vàdata.link(trang cần khai) — chưa trừ tiền; khai xong gửi lại được bằng đúngIdempotency-Keycũ. - Gửi
registrant⇒ đăng ký hộ người khác (khách của bạn) với thông tin trong lệnh. Hồ sơ của tài khoản không bị đổi.
Trường của registrant | Quy tắc |
|---|---|
name có | Họ tên, tối đa 100 ký tự — chữ cái, khoảng trắng và . ' - (chữ có dấu được tự bỏ dấu). |
email | Email người đứng tên. Bỏ trống ⇒ email của tài khoản đang gọi. |
phone có | Dạng quốc tế E.164, vd +84901234567. |
address có | 3–255 ký tự — chữ, số, khoảng trắng và , . - /. |
city có | Tối đa 100 ký tự — chữ, khoảng trắng và . ' -. |
zip có | Mã bưu chính: Việt Nam 4–10 chữ số; nước khác 2–10 ký tự (chữ, số, khoảng trắng, -). |
country có | Mã quốc gia ISO 2 chữ cái: VN, US, GB… |
company · state | Tuỳ chọn — tên tổ chức · tỉnh / bang, mỗi trường tối đa 100 ký tự. |
- Sai ⇒
422 INVALID_REGISTRANTvớidata.fields={trường: lý do}— chưa trừ tiền, sửa rồi gửi lại cùngIdempotency-Keyđược. Nhà đăng ký cũng có thể chối dữ liệu (email, số điện thoại, quốc gia) ⇒ cùng mã./domain/quotekiểmregistranty như lệnh mua. - ⚠ Xác minh email: sau khi đăng ký, nhà đăng ký có thể gửi thư xác minh tới email người đứng tên (với địa chỉ chưa từng xác minh). Không xác nhận trong 14 ngày ⇒ tên miền bị tạm khoá — ngừng phân giải — tới khi xác minh. Đăng ký hộ thì dùng email mà chính người ấy đọc được.
- Người đứng tên gắn với tên miền lúc đăng ký: sửa hồ sơ về sau chỉ áp cho tên miền đăng ký sau đó. Đổi người đứng tên của tên miền đang có không làm qua API — liên hệ hỗ trợ (đổi tên, tổ chức hoặc email người đứng tên có thể khoá việc chuyển nhà đăng ký 60 ngày theo quy định chung của tên miền quốc tế).
registrantởinfo/list:{source, name, company, country, email}—sourcelàprofile(hồ sơ tài khoản) hoặcrequest(khai trong lệnh), email đã che bớt. Chỉ tài khoản đã khai bộ người đứng tên ấy mới thấy chi tiết; tên miền nhận qua chuyển quyền hoặc mua trên Chợ ⇒{"source": "other"}; tên miền mua trước 15/10/2026 ⇒null.- WHOIS privacy (
whois_privacyở lệnh mua): bật ⇒ thông tin người đứng tên được che trên tra cứu WHOIS công khai (với các đuôi hỗ trợ). Không gửi ⇒ theowhois_privacy_defaultcủa/domain/tlds(hiện: bật).
Chuyển tên miền về
- Ở nhà đăng ký hiện tại: mở khoá chuyển (transfer lock) và lấy mã chuyển (auth code / EPP). Tên miền vừa đăng ký hoặc vừa chuyển nhà trong 60 ngày thì chưa chuyển được.
POST /domain/quotevới{"type": "transfer", "domain": "…"}— giá chuyển về theo nhà đăng ký đúng lúc hỏi, đã trừ chiết khấu (gồm 1 năm hạn: chuyển xong, hạn tên miền được cộng thêm 1 năm). Báo giá không giữ giá: lệnh chuyển hỏi lại giá lúc nó tới và trừ theo giá ấy; giá tăng ngay giữa lúc lệnh kiểm và lúc trừ ⇒409 PRICE_CHANGED, chưa trừ tiền. Tên chưa đăng ký ở đâu ⇒409 DOMAIN_NOT_REGISTERED— đăng ký mới bằng/domain/buy.POST /domain/transfervới{domain, auth_code}(thêmregistrantnhư lệnh mua) vàIdempotency-Key: trừ ví ngay rồi gửi lệnh chuyển ⇒ HTTP 202,provision_status: "provisioning",charged: true.- Nhà đăng ký cũ và registry duyệt — thường 5–7 ngày. Hỏi
infothưa thôi (vài giờ một lần) tới khiready.
- Nhà đăng ký chối ngay (mã chuyển sai, tên miền còn khoá, chưa đủ 60 ngày) ⇒ HTTP 200 +
failed+charged: true— tiền không tự hoàn, bộ phận hỗ trợ xử lý; đừng gửi lại lệnh. Hãy kiểm mã chuyển và khoá chuyển trước khi gửi. - ⚠ DNS sau khi chuyển: chuyển xong, tên miền được trỏ về DNS quản lý tại đây với một vùng DNS mới chưa có bản ghi nào. Khi đơn
readyvàdns_status: "ready", thêm bản ghi (/domain/dns/add) hoặc trỏ sang nameserver riêng (/domain/dns/mode) — không thì website và email dùng tên miền sẽ ngừng hoạt động tới lúc ấy. auth_code: 1–255 ký tự in được, không khoảng trắng. Mã chuyển không bao giờ được trả lại qua API.- Trong lúc chuyển, đơn chỉ đổi được tự gia hạn và ghi chú; lượt chuyển về tính chung giới hạn lượt mua mỗi giờ với lệnh mua (mục Luật riêng).
Trạng thái đơn
provision_status gộp trạng thái đơn thành một chữ cho bộ tích hợp — cùng tên với các sản phẩm khác; order_status cho biết chi tiết. Mỗi ô bên trái ghi provision_status ở trên, order_status ở dưới:
provision_statusorder_status | Nghĩa |
|---|---|
provisioningprocessing | Đang đăng ký (nhà đăng ký chưa duyệt xong) hoặc đang chuyển về. |
provisioningpending_info | Chỉ còn ở đơn cũ: chờ khai thông tin định danh — khai ở trang Thông tin định danh để đơn chạy tiếp. |
readyactive | Đang hoạt động. |
failedregister_failed | Đã trừ tiền nhưng nhà đăng ký chối (đăng ký hoặc chuyển về) — bộ phận hỗ trợ xử lý, không tự hoàn. Lệnh còn làm được: ghi chú. |
expiredpending_expired | Đã quá hạn bạn trả (billing.time_expire). Khi hạn ở nhà đăng ký (time_expire) cũng đã qua, nhà đăng ký đã huỷ tên miền — website / email ngừng; gia hạn lúc này được hệ thống tự chuộc lại theo giá gia hạn thường. Còn gia hạn được tối đa 30 ngày kể từ ngày hết hạn (tuỳ đuôi tên miền — vài đuôi không cho gia hạn sau ngày hết hạn). |
expiredexpired | Hết hạn hẳn — không gia hạn được nữa (409 ORDER_EXPIRED), vùng DNS tại đây đã gỡ; chỉ còn ghi chú và xoá khỏi danh sách. |
suspendedsuspended | Bị tạm ngưng bởi bộ phận hỗ trợ — chỉ ghi chú và xem bản ghi DNS được; liên hệ hỗ trợ. |
cancelledcancelled | Đã xoá khỏi danh sách quản lý (hoặc đơn đã huỷ) — lệnh nhận 409 ORDER_CANCELLED. |
transferred_outtransferred_out | Đã chuyển sang nhà đăng ký khác — chỉ còn ghi chú và xoá khỏi danh sách. |
allowed_actions(ở cảlistlẫninfo) — việc làm được ngay lúc này, theo cùng luật với các nút trên trang quản lý tên miền:renew·auto_renew·note·delete·dns(thêm / sửa / xoá bản ghi) ·dns_mode. Tên nào vắng mặt thì lệnh ấy đang bị chối — vdrenewvắng khi hôm nay tên miền đã được gia hạn hoặc hạn đã chạm trần 10 năm. Không tính nhịp thao tác — xem mục Nhịp thao tác.billing.time_expire(=time_expire_moon) là ngày bạn đã trả tới — mốc của mọi luật hết hạn.time_expirelà hạn đang ghi ở nhà đăng ký: thường khớp ngay sau lệnh gia hạn; khiregistrar_renewed: falsenó đứng nguyên tới lúc hệ thống gia hạn lại ở nhà đăng ký (chậm nhất quanh ngày hết hạn ở đó) — đừng gửi lại lệnh gia hạn vì nó.chargedluôn làtrue: mọi đơn tên miền được tạo cùng lượt trừ tiền.billing.price_renew= giá gia hạn 1 năm hiện hành, đã trừ chiết khấu (price_renew_estlà số ước tính cũ lưu trên đơn, chưa trừ chiết khấu — giữ cho tích hợp cũ).listtrả mọi tên miền của tài khoản — mua trên web lẫn qua API, nhận chuyển quyền — mới nhất trước; lọc bằng?status=theoprovision_status(nhận cả giá trịorder_status).
Gia hạn & hết hạn
POST /domain/renewvới{order_code, period}trừ ví ngay: giá = giá gia hạn niêm yết hiện hành × số năm, trừ chiết khấu (làm tròn xuống trên tổng — có thể lệch vài đồng so vớibilling.price_renew× số năm; nhà đăng ký có thể đổi giá theo năm). Số chính xác làamountcủa báo giá với đúngperiod:quotevới{"type": "renew", "order_code": "…", "period": …}. Hạn mới =billing.time_expirecộng số năm — kể cả khi gia hạn trễ (những ngày tên miền đã ngừng không được bù, như mọi nhà đăng ký).- Tổng hạn tối đa 10 năm tính từ hôm nay: vượt ⇒
400 BAD_REQUEST+data.max_years(số năm còn gia hạn được — báo giá cũng trảmax_years). Mỗi tên miền một lượt gia hạn mỗi ngày, tính cả gia hạn trên web và tự gia hạn: lượt thứ hai ⇒429 COOLDOWN,Retry-Aftertới 0 giờ. registrar_renewed: falsetrong câu trả lời ⇒ tiền đã thu và hạn đã cộng, còn phần gia hạn ở nhà đăng ký sẽ được hệ thống tự làm lại — đừng gửi lại lệnh.- Tự gia hạn (
billing.renew_auto; đổi bằngPOST /domain/auto-renewvớienabledlà boolean — lệnh ĐẶT giá trị, gửi lại cùng giá trị không lật ngược): khi còn 7 ngày hoặc ít hơn tớibilling.time_expire— kể cả khi đã quá hạn — hệ thống tự trừ ví gia hạn 1 năm, cùng giá với gia hạn tay. Lượt tự gia hạn chạy khi số dư đủ đúng số sẽ trừ — giá gia hạn 1 năm hiện hành đã trừ chiết khấu (billing.price_renew); thiếu ⇒ bỏ qua, thử lại ở lượt kiểm sau (mỗi giờ). - Quá hạn: qua
billing.time_expiremà chưa gia hạn, đơn chuyểnpending_expired(provision_status: "expired") — đã quá hạn bạn trả tại đây; khi hạn ở nhà đăng ký (time_expire) cũng đã qua, nhà đăng ký đã huỷ tên miền — website / email ngừng. Vẫn gia hạn được tối đa 30 ngày kể từ ngày hết hạn (tuỳ đuôi — vài đuôi không cho gia hạn sau ngày hết hạn) đúng giá gia hạn thường: hệ thống tự chuộc lại ở nhà đăng ký, đơn vềactivengay khi lệnh thành công, tên miền có thể mất tới 1–2 ngày để chạy lại ở mọi nơi (registrar_renewed: false= nhà đang xử lý, hệ thống tự làm tiếp — đừng gửi lại lệnh). Trước khi trừ tiền, hệ thống hỏi nhà đăng ký: chưa hỏi được ⇒503 UNAVAILABLE· nhà đang chuộc ⇒429 IN_PROGRESS— chưa trừ tiền, gửi lại sau (kể cả cùngIdempotency-Key). Quá hạn chót ⇒409 ORDER_EXPIRED: không gia hạn / không chuộc được nữa, đơn chuyểnexpired, vùng DNS tại đây bị gỡ; lúc tên miền được thả cho người khác đăng ký do registry quyết. Đừng để tới hạn: bật tự gia hạn hoặc gia hạn sớm. - Dịch vụ tên miền tạm dừng bán (bảo trì) hay đuôi ngừng bán đều không chặn gia hạn tên miền đang có.
DNS
dns_mode:cloudmoon_managed— DNS quản lý tại đây (mặc định khi mua; nameserverns1.systemcloudvps.com·ns2.systemcloudvps.com) ·external_ns— tên miền trỏ sang nameserver riêng của bạn, bản ghi quản lý ở nơi ấy. Đổi bằngPOST /domain/dns/mode:external_nskèmns(2–13 hostname); vềcloudmoon_managedthì tên miền trỏ lại DNS tại đây với các bản ghi đã lưu (vùng DNS chưa có thì được dựng trước khi trỏ nameserver; dựng hỏng ⇒503 UNAVAILABLE, chưa đổi gì). Nameserver mới cần vài giờ để có hiệu lực trên toàn mạng.- Bản ghi đọc ở
GET /domain/dns/list— bản lưu tại đây là nguồn đúng.namerỗng hoặc@là gốc tên miền; tên con nhiều cấp và wildcard*.được. - Loại bản ghi:
A·AAAA·CNAME(không đặt ở gốc) ·MX(priority0–65535) ·TXT(tối đa 2000 ký tự) ·NS(chỉ cho tên con — muốn dùng nameserver riêng cho cả tên miền thì đổidns_mode) ·SRV(tên dạng_dịch-vụ._giao-thức, vd_sip._tcp;priority0–65535;value=trọng-số cổng máy-đích, vd5 5060 sip.example.com;0 0 .= tên miền không có dịch vụ này) ·CAA(value=cờ thẻ giá-trị, vd0 issue letsencrypt.org— thẻissue·issuewild·iodef, giá trị không chứa dấu nháy kép hay gạch ngược; hệ thống lưu giá trị trong nháy kép:0 issue "letsencrypt.org"). TTL do hệ thống tự đặt (ngắn khi bạn vừa sửa, dài dần khi bản ghi ổn định). Tối đa 200 bản ghi mỗi tên miền (vượt ⇒400+data.max_records). synccủa mỗi bản ghi:synced— đã có hiệu lực ·pending— đã lưu, máy chủ DNS tạm lỗi nên hệ thống tự đẩy lại trong vài phút ·error— đẩy chưa được, hệ thống đang thử lại (kéo dài thì liên hệ hỗ trợ).- Máy chủ DNS chối một bản ghi (vd CNAME trùng tên với bản ghi khác) ⇒
400: bản ghi mới không được lưu, bản ghi đang sửa giữ giá trị cũ. Xoá mà máy chủ DNS chưa xoá được ⇒503 UNAVAILABLE, bản ghi giữ nguyên — gửi lại sau ít phút. - Sửa DNS cần tên miền đang hoạt động và dùng DNS tại đây (
409 DNS_EXTERNALkhi đang dùng nameserver riêng ·409 DNS_NOT_READYkhi vùng DNS chưa dựng xong). Tên miền quá hạn hoặc bị tạm ngưng vẫn xem được bản ghi, không sửa được.
Luật riêng
- Xoá khỏi danh sách (
POST /domain/delete,confirm= đúngorder_code): không hoàn tiền, không khôi phục được. Tên miền vẫn đăng ký ở nhà đăng ký tới hết hạn rồi tự hết (tự gia hạn bị tắt), và vùng DNS tại đây bị gỡ — tên miền đang dùng DNS tại đây sẽ ngừng phân giải. Bị chối khi tên miền đang đăng ký / chuyển về, gặp sự cố chờ hỗ trợ, bị tạm ngưng, hoặc đang rao bán trên Chợ. - Dịch vụ tên miền tạm dừng bán:
tlds·check·price· báo giá mua / chuyển về · lệnh mua · lệnh chuyển về nhận503 SERVICE_DISABLED(GET /services/statusbáodomain: false); gia hạn, báo giá gia hạn,info,list, DNS, tự gia hạn, ghi chú, xoá vẫn chạy bình thường. Một đuôi ngừng bán thì không còn trong/domain/tlds(kiểm tên, báo giá, mua, chuyển về nhận404), còn tên miền đã có của đuôi ấy vẫn gia hạn và dùng DNS bình thường. - Giới hạn lệnh mua qua API: tối đa 10 lượt mua + chuyển về tên miền mỗi giờ (gộp chung, đếm cả lượt trên web —
429 RATE_LIMITED), tính riêng với các sản phẩm khác. Số dư xét lệnh mua là số dư khả dụng — đã trừ tiền các lệnh mua Cloud VPS còn chờ tạo máy. - Không làm qua API: lấy mã chuyển đi / chuyển tên miền sang nhà đăng ký khác · đổi người đứng tên của tên miền đang có · chuyển quyền sang tài khoản khác · rao bán trên Chợ · xem nhật ký đơn — dùng trang quản lý tên miền trên web.
- Chạy thử (
X-Sandbox: 1): kiểm tên, giá và báo giá không hỏi nhà đăng ký —checktrảstatus: "simulated"(chỉ biết tên có đang được một đơn tại đây giữ không), giá năm đầu lấy theo bảng giá (realtime: false). Lệnh mua trả mãSANDBOX…(26 ký tự): hỏiinfobằng mã ấy (vẫn kèmX-Sandbox: 1) ⇒ tên miền mẫusandbox-….<đuôi>ởreadyngay, hạn = hôm mua + số năm; kịch bảnPROVISION_FAILED⇒ lệnh mua 202,infoởprovisioning10 giây đầu rồifailed. Lệnh chuyển về thử ⇒ 202,provisioning10 giây đầu rồiready(failedvớiPROVISION_FAILED). Mã chỉ chở đuôi, số năm và cờ — không chở tên miền. Gia hạn, tự gia hạn, ghi chú, xoá, DNS trên đơn mẫu đi đủ các bước kiểm rồi trả mô phỏng;dns/listtrả hai bản ghi mẫu. Không lưu gì: mã không có tronglist, lệnh mô phỏng không làminfovề sau đổi theo.
Nhịp thao tác trên cùng một tên miền
Các lệnh trên cùng một tên miền phải cách lệnh trước một khoảng tối thiểu — nhịp này chỉ áp cho lệnh gửi qua API, để chặn lệnh gửi lặp. Các việc trong cùng một dòng dùng chung một đồng hồ. Gửi sớm hơn ⇒ 429 COOLDOWN (header Retry-After cho biết còn bao nhiêu giây); gửi trong lúc máy đang xử lý lệnh khác ⇒ 429 IN_PROGRESS.
| Lệnh | Cách lệnh trước trên cùng tên miền |
|---|---|
| Gia hạn | 1 phút |
| Bật/tắt tự gia hạn | 5 giây (tính riêng) |
| Gia hạn | tối đa 1 lượt / ngày / tên miền (tính cả gia hạn trên web và tự gia hạn — lượt thứ hai ⇒ 429 COOLDOWN, Retry-After tới 0 giờ) |
| Xoá · đổi chế độ DNS | không phải chờ (chỉ một lệnh mỗi lúc trên cùng tên miền (429 IN_PROGRESS)) |
| Ghi chú · thêm / sửa / xoá bản ghi DNS | không phải chờ (hai lệnh cùng lúc trên một tên miền thì lệnh sau chờ tối đa 10 giây, quá ⇒ 429 BUSY) |
Mã lỗi riêng
Ngoài các mã lỗi chung của mọi endpoint, trang này còn có các mã dưới đây. Hãy rẽ nhánh theo code.
| HTTP | code | Ý nghĩa | Nên làm gì |
|---|---|---|---|
| 409 | PRICE_CHANGED |
Giá năm đầu (theo nhà đăng ký, đúng lúc trừ tiền) vừa cao hơn lúc kiểm — lệnh mua CHƯA trừ đồng nào. | Báo giá lại (/domain/quote) rồi gửi lệnh mua mới (Idempotency-Key mới). |
| 409 | DOMAIN_UNAVAILABLE |
Tên miền đã có người đăng ký, hoặc đang có một đơn khác giữ tên ấy — lệnh mua CHƯA trừ tiền. | Chọn tên khác — hỏi /domain/check trước khi mua. |
| 422 | IDENTITY_REQUIRED |
Tài khoản chưa khai đủ thông tin định danh (người đứng tên tên miền) mà lệnh không gửi registrant — CHƯA trừ tiền. data.fields = các trường còn thiếu / sai của hồ sơ. |
Khai một lần ở trang Thông tin định danh của tài khoản (web), hoặc gửi registrant trong lệnh (đăng ký hộ người khác). Gửi lại được bằng đúng Idempotency-Key cũ. |
| 422 | INVALID_REGISTRANT |
Người đứng tên trong registrant không hợp lệ, hoặc bị nhà đăng ký chối — CHƯA trừ tiền. data.fields = {trường: lý do}. |
Sửa đúng các trường rồi gửi lại. |
| 400 | NOT_SUPPORTED |
Tên miền premium (giá riêng do nhà đăng ký đặt) — chưa hỗ trợ bán; hoặc thao tác chưa làm được cho tên miền này (vd giá gia hạn chưa có). | Chọn tên khác / liên hệ hỗ trợ. |
| 400 | CONFIRM_REQUIRED |
Lệnh xoá thiếu trường xác nhận. | Gửi confirm bằng đúng order_code — xoá khỏi danh sách không khôi phục được và KHÔNG hoàn tiền. |
| 409 | DOMAIN_NOT_REGISTERED |
Tên miền chưa được đăng ký ở đâu nên không chuyển về được — lệnh CHƯA trừ tiền. | Đăng ký mới bằng /domain/buy. |
| 409 | PROVISIONING |
Tên miền đang được đăng ký / chuyển về — lúc này chỉ đổi tự gia hạn và ghi chú được. | Hỏi /domain/info tới khi provision_status = ready. |
| 409 | ORDER_FAILED |
Đơn đăng ký / chuyển về gặp sự cố SAU khi đã trừ tiền — bộ phận hỗ trợ đang xử lý (hoàn tiền nếu không làm tiếp được); chỉ ghi chú được. | Liên hệ hỗ trợ kèm order_code — ⛔ đừng đặt lại. |
| 409 | SUSPENDED |
Tên miền đang bị tạm ngưng — chỉ ghi chú và xem bản ghi DNS được. | Liên hệ hỗ trợ. |
| 409 | RENEW_REQUIRED |
Tên miền đã quá hạn — chỉ gia hạn, tự gia hạn, ghi chú, xem bản ghi DNS và xoá khỏi danh sách được. | Gia hạn (/domain/renew) rồi thao tác lại. |
| 409 | ORDER_EXPIRED |
Tên miền đã hết hạn hẳn — chỉ còn ghi chú / xoá khỏi danh sách. | Đăng ký lại (nếu tên còn trống). |
| 409 | TRANSFERRED_OUT |
Tên miền đã chuyển sang nhà đăng ký khác — chỉ còn ghi chú / xoá khỏi danh sách. | Không thao tác được nữa. |
| 409 | ORDER_CANCELLED |
Tên miền đã bị xoá khỏi danh sách quản lý (hoặc đơn đã huỷ). | Không thao tác được nữa. |
| 409 | LISTED_ON_MARKETPLACE |
Tên miền đang được rao bán trên chợ — xoá bị chặn. | Huỷ tin rao trên web rồi gửi lại. |
| 409 | DNS_EXTERNAL |
Tên miền đang dùng nameserver riêng — bản ghi DNS quản lý ở nhà cung cấp DNS của bạn. | Muốn quản lý DNS tại đây: /domain/dns/mode với mode: cloudmoon_managed. |
| 409 | DNS_NOT_READY |
Vùng DNS của tên miền chưa sẵn sàng. | Thử lại sau ít phút; vẫn vậy ⇒ /domain/dns/mode với mode: cloudmoon_managed (tạo lại vùng) hoặc liên hệ hỗ trợ. |
| 429 | COOLDOWN |
Đơn vừa nhận lệnh cùng nhóm (gia hạn: 60 giây · tự gia hạn: 5 giây), hoặc hôm nay tên miền đã có một lượt gia hạn (Retry-After tới 0 giờ). | Chờ Retry-After giây. |
| 429 | IN_PROGRESS |
Đơn đang xử lý một lệnh khác (hai lệnh cùng lúc trên một tên miền). | Chờ Retry-After giây rồi gửi lại. |
/domain/tlds
Chỉ đọcDanh mục đuôi đang bán + bảng giá (đăng ký năm đầu theo bảng · gia hạn mỗi năm) đã trừ chiết khấu đại lý; *_original = giá gốc. renewal_shock = 1 khi giá gia hạn cao hơn hẳn năm đầu. max_period = số năm tối đa của một lệnh mua. Giá năm đầu thật lấy theo nhà đăng ký lúc mua — báo giá chính xác bằng /domain/quote.
GET https://cloudmoon.net/api/v1/domain/tldsKhông có tham số — chỉ cần header X-API-Key.
curl 'https://cloudmoon.net/api/v1/domain/tlds' \
-H 'X-API-Key: ak_...'import requests
r = requests.get(
"https://cloudmoon.net/api/v1/domain/tlds",
headers={"X-API-Key": "ak_..."},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/tlds", {
headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/domain/tlds');
print_r($kq);{
"status": "success",
"msg": "OK",
"data": {
"items": [
{
"tld": "com",
"name": ".com",
"tier": "popular",
"price_register": 427770,
"price_renew": 427770,
"price_register_original": 441000,
"price_renew_original": 441000,
"renewal_shock": 0
}
],
"total": 1,
"discount_percent": 3,
"max_period": 10,
"whois_privacy_default": true,
"currency": "VND"
}
}/domain/check
Chỉ đọcTên miền còn đăng ký được không: available = nhà đăng ký báo trống VÀ chưa có đơn nào giữ tên (status in_order). Đuôi không bán ⇒ 404 NOT_FOUND. is_premium = tên giá riêng (chưa bán).
GET https://cloudmoon.net/api/v1/domain/check| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
domain |
query | có | vd example.com |
curl 'https://cloudmoon.net/api/v1/domain/check?domain=ten-mien-cua-ban.com' \
-H 'X-API-Key: ak_...'import requests
r = requests.get(
"https://cloudmoon.net/api/v1/domain/check",
headers={"X-API-Key": "ak_..."},
params={"domain": "ten-mien-cua-ban.com"},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/check?domain=ten-mien-cua-ban.com", {
headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/domain/check?domain=ten-mien-cua-ban.com');
print_r($kq);{
"status": "success",
"msg": "OK",
"data": {
"domain": "ten-mien-cua-ban.com",
"available": true,
"status": "free",
"is_premium": false
}
}/domain/price
Chỉ đọcGiá đăng ký một tên miền: amount (= price_buy) = năm đầu theo nhà đăng ký lúc gọi + (period − 1) × giá gia hạn, đã trừ chiết khấu; price_renew (= price_renew_year) = giá gia hạn mỗi năm đã trừ chiết khấu. realtime: false ⇒ năm đầu lấy theo bảng giá. period 1 … max_period.
GET https://cloudmoon.net/api/v1/domain/price| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
domain |
query | có | — |
period |
query | không | số năm, mặc định 1 |
curl 'https://cloudmoon.net/api/v1/domain/price?domain=ten-mien-cua-ban.com' \
-H 'X-API-Key: ak_...'import requests
r = requests.get(
"https://cloudmoon.net/api/v1/domain/price",
headers={"X-API-Key": "ak_..."},
params={"domain": "ten-mien-cua-ban.com"},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/price?domain=ten-mien-cua-ban.com", {
headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/domain/price?domain=ten-mien-cua-ban.com');
print_r($kq);{
"status": "success",
"msg": "OK",
"data": {
"domain": "ten-mien-cua-ban.com",
"period": 1,
"price_buy": 418950,
"price_renew_year": 427770,
"discount_percent": 3,
"is_promo": false,
"realtime": true,
"amount": 418950,
"amount_original": 431900,
"price_renew": 427770,
"price_renew_original": 441000,
"renewal_shock": 0,
"max_period": 10,
"currency": "VND"
}
}/domain/quote
Chỉ đọcBÁO GIÁ — không trừ tiền, không ghi gì, khoá chỉ đọc gọi được. type register (mặc định) {domain, period?, whois_privacy?, registrant?}: CÙNG bộ kiểm với lệnh mua (tên · đuôi · số năm · người đứng tên · còn trống · giá năm đầu theo nhà đăng ký) ⇒ báo giá được thì lệnh mua chỉ còn hỏng vì số dư hoặc có người vừa mua mất tên. type transfer {domain, registrant?}: giá chuyển về (+1 năm), tên miền phải đang đăng ký ở nơi khác (chưa đăng ký ⇒ 409 DOMAIN_NOT_REGISTERED). type renew {order_code, period?}: giá gia hạn + hạn mới (time_expire) + max_years (số năm tối đa còn gia hạn được — trần 10 năm tính từ hôm nay); bảo trì không chặn báo giá gia hạn. enough so với available_balance (= số dư − tiền các lệnh mua VPS còn chờ tạo máy; báo giá gia hạn so với số dư).
POST https://cloudmoon.net/api/v1/domain/quote| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
type |
body | không | register | transfer | renew (mặc định register) |
domain |
body | không | register · transfer |
period |
body | không | số năm (register · renew), mặc định 1 |
whois_privacy |
body | không | register: true / false (mặc định: whois_privacy_default) |
registrant |
body | không | register · transfer — người đứng tên, như /domain/buy |
order_code |
body | không | renew |
Chạy thử Lệnh đọc — gửi kèm X-Sandbox: 1 vẫn chạy như thường (không đổi gì). Nhận cả mã SANDBOX… của lệnh mua chạy thử ⇒ trả máy mẫu.
curl -X POST 'https://cloudmoon.net/api/v1/domain/quote' \
-H 'X-API-Key: ak_...' \
-H 'Content-Type: application/json' \
-d '{"domain":"ten-mien-cua-ban.com","period":1}'import requests
r = requests.post(
"https://cloudmoon.net/api/v1/domain/quote",
headers={"X-API-Key": "ak_..."},
json={"domain": "ten-mien-cua-ban.com", "period": 1},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/quote", {
method: "POST",
headers: {
"X-API-Key": "ak_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ domain: "ten-mien-cua-ban.com", period: 1 }),
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/domain/quote', ['domain' => 'ten-mien-cua-ban.com', 'period' => 1]);
print_r($kq);{
"domain": "ten-mien-cua-ban.com",
"period": 1
}{
"status": "success",
"msg": "OK",
"data": {
"type": "register",
"domain": "ten-mien-cua-ban.com",
"period": 1,
"available": true,
"amount": 418950,
"amount_original": 431900,
"discount_percent": 3,
"price_renew": 427770,
"price_renew_original": 441000,
"renewal_shock": 0,
"realtime": true,
"registrant_source": "profile",
"whois_privacy": true,
"currency": "VND",
"balance": 800000,
"available_balance": 800000,
"enough": true
}
}/domain/buy
Toàn quyềnĐăng ký tên miền — trừ tiền NGAY và đăng ký luôn trong lượt gọi (đặt thời gian chờ HTTP từ 90 giây): HTTP 200 provision_status = ready; nhà đăng ký cần duyệt thêm ⇒ HTTP 202 provisioning + charged: true (hỏi /domain/info); đã trừ mà nhà chối ⇒ HTTP 200 provision_status = failed + charged: true (hỗ trợ xử lý — đừng gửi lại). Người đứng tên: không gửi registrant ⇒ hồ sơ định danh của tài khoản (thiếu ⇒ 422 IDENTITY_REQUIRED, data.fields = trường còn thiếu); gửi registrant ⇒ đăng ký HỘ người khác (sai ⇒ 422 INVALID_REGISTRANT, data.fields = {trường: lý do}) — hồ sơ tài khoản không bị đổi. Tên đã có người đăng ký / đang có đơn khác giữ ⇒ 409 DOMAIN_UNAVAILABLE. Lượt mua mỗi giờ: xem mục Giới hạn.
POST https://cloudmoon.net/api/v1/domain/buy| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
Idempotency-Key |
header | không | chống trừ tiền hai lần khi gửi lại |
domain |
body | có | — |
period |
body | không | số năm 1 … max_period, mặc định 1 (đường cũ nhận reg_period) |
whois_privacy |
body | không | true / false — ẩn thông tin người đứng tên trên WHOIS |
registrant |
body | không | object { name, email, phone (E.164, vd +84901234567), address, city, zip, country (ISO 2 chữ), company?, state? } — chữ không dấu |
Chạy thử Gửi kèm X-Sandbox: 1: máy chủ kiểm như lượt thật rồi trả kết quả mô phỏng cùng khuôn — không trừ tiền, không đổi gì. Kịch bản lỗi (X-Sandbox-Scenario): INSUFFICIENT_BALANCE (402) · NOT_FOUND (404) · DOMAIN_UNAVAILABLE (409) · PRICE_CHANGED (409) · IDENTITY_REQUIRED (422) · INVALID_REGISTRANT (422) · IDEMPOTENCY_PENDING (409) · RATE_LIMITED (429) · BUSY (429) · SERVICE_DISABLED (503) · UNAVAILABLE (503) · FAILED (400) · PROVISION_FAILED (lệnh vẫn nhận, info về sau báo failed).
curl -X POST 'https://cloudmoon.net/api/v1/domain/buy' \
-H 'X-API-Key: ak_...' \
-H 'Idempotency-Key: 7f9c2e4b-1a2b-4c3d-9e8f-0123456789ab' \
-H 'Content-Type: application/json' \
-d '{"domain":"ten-mien-cua-ban.com","period":1,"registrant":{"name":"Nguyen Van A","email":"[email protected]","phone":"+84901234567","address":"12 Nguyen Hue","city":"Ho Chi Minh","zip":"700000","country":"VN"}}'import uuid
import requests
r = requests.post(
"https://cloudmoon.net/api/v1/domain/buy",
headers={"X-API-Key": "ak_...", "Idempotency-Key": str(uuid.uuid4())},
json={"domain": "ten-mien-cua-ban.com", "period": 1, "registrant": {"name": "Nguyen Van A", "email": "[email protected]", "phone": "+84901234567", "address": "12 Nguyen Hue", "city": "Ho Chi Minh", "zip": "700000", "country": "VN"}},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
import { randomUUID } from "node:crypto";
const res = await fetch("https://cloudmoon.net/api/v1/domain/buy", {
method: "POST",
headers: {
"X-API-Key": "ak_...",
"Content-Type": "application/json",
"Idempotency-Key": randomUUID(),
},
body: JSON.stringify({ domain: "ten-mien-cua-ban.com", period: 1, registrant: { name: "Nguyen Van A", email: "[email protected]", phone: "+84901234567", address: "12 Nguyen Hue", city: "Ho Chi Minh", zip: "700000", country: "VN" } }),
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/domain/buy', ['domain' => 'ten-mien-cua-ban.com', 'period' => 1, 'registrant' => ['name' => 'Nguyen Van A', 'email' => '[email protected]', 'phone' => '+84901234567', 'address' => '12 Nguyen Hue', 'city' => 'Ho Chi Minh', 'zip' => '700000', 'country' => 'VN']], bin2hex(random_bytes(16)));
print_r($kq);{
"domain": "ten-mien-cua-ban.com",
"period": 1,
"registrant": {
"name": "Nguyen Van A",
"email": "[email protected]",
"phone": "+84901234567",
"address": "12 Nguyen Hue",
"city": "Ho Chi Minh",
"zip": "700000",
"country": "VN"
}
}{
"status": "success",
"msg": "Đăng ký tên miền thành công",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"domain": "ten-mien-cua-ban.com",
"period": 1,
"provision_status": "ready",
"order_status": "active",
"charged": true,
"price_buy": 418950,
"need_info": false,
"time_expire": "2027-10-15",
"registrant_source": "request",
"note": "Tên miền đã đăng ký xong — quản lý DNS ở /domain/dns/*."
}
}/domain/transfer
Toàn quyềnCHUYỂN tên miền đang đăng ký ở nơi khác về đây — trừ tiền NGAY (giá chuyển về = +1 năm, đã trừ chiết khấu; báo giá: /domain/quote type transfer) rồi gửi lệnh chuyển trong lượt gọi ⇒ HTTP 202 provision_status = provisioning + charged: true. Nhà đăng ký cũ + registry duyệt, thường 5–7 ngày — hỏi /domain/info tới ready. Nhà chối ngay (mã chuyển sai · tên miền đang khoá chuyển · đăng ký chưa đủ 60 ngày) ⇒ HTTP 200 provision_status = failed + charged: true (hỗ trợ xử lý — đừng gửi lại). Người đứng tên như /domain/buy. Chưa đăng ký ở đâu ⇒ 409 DOMAIN_NOT_REGISTERED. Lượt mua mỗi giờ tính chung với /domain/buy. Chuyển xong, tên miền trỏ về DNS quản lý tại đây với vùng DNS MỚI chưa có bản ghi — thêm bản ghi (/domain/dns/add) hoặc đổi sang nameserver riêng (/domain/dns/mode) ngay khi ready.
POST https://cloudmoon.net/api/v1/domain/transfer| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
Idempotency-Key |
header | không | chống trừ tiền hai lần khi gửi lại |
domain |
body | có | — |
auth_code |
body | có | mã chuyển (EPP) lấy từ nhà đăng ký hiện tại — tên miền phải đã MỞ khoá chuyển |
registrant |
body | không | người đứng tên — như /domain/buy (không gửi ⇒ hồ sơ tài khoản) |
Chạy thử Gửi kèm X-Sandbox: 1: máy chủ kiểm như lượt thật rồi trả kết quả mô phỏng cùng khuôn — không trừ tiền, không đổi gì. Kịch bản lỗi (X-Sandbox-Scenario): INSUFFICIENT_BALANCE (402) · DOMAIN_UNAVAILABLE (409) · DOMAIN_NOT_REGISTERED (409) · PRICE_CHANGED (409) · IDENTITY_REQUIRED (422) · INVALID_REGISTRANT (422) · IDEMPOTENCY_PENDING (409) · RATE_LIMITED (429) · BUSY (429) · SERVICE_DISABLED (503) · UNAVAILABLE (503) · FAILED (400) · PROVISION_FAILED (lệnh vẫn nhận, info về sau báo failed).
curl -X POST 'https://cloudmoon.net/api/v1/domain/transfer' \
-H 'X-API-Key: ak_...' \
-H 'Idempotency-Key: 7f9c2e4b-1a2b-4c3d-9e8f-0123456789ab' \
-H 'Content-Type: application/json' \
-d '{"domain":"khachhang.com","auth_code":"Ab#12345cd"}'import uuid
import requests
r = requests.post(
"https://cloudmoon.net/api/v1/domain/transfer",
headers={"X-API-Key": "ak_...", "Idempotency-Key": str(uuid.uuid4())},
json={"domain": "khachhang.com", "auth_code": "Ab#12345cd"},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
import { randomUUID } from "node:crypto";
const res = await fetch("https://cloudmoon.net/api/v1/domain/transfer", {
method: "POST",
headers: {
"X-API-Key": "ak_...",
"Content-Type": "application/json",
"Idempotency-Key": randomUUID(),
},
body: JSON.stringify({ domain: "khachhang.com", auth_code: "Ab#12345cd" }),
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/domain/transfer', ['domain' => 'khachhang.com', 'auth_code' => 'Ab#12345cd'], bin2hex(random_bytes(16)));
print_r($kq);{
"domain": "khachhang.com",
"auth_code": "Ab#12345cd"
}{
"status": "success",
"msg": "Đã gửi lệnh chuyển về — chờ nhà đăng ký duyệt",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"domain": "khachhang.com",
"type": "transfer",
"provision_status": "provisioning",
"order_status": "processing",
"charged": true,
"price_buy": 427770,
"registrant_source": "profile",
"note": "Đã gửi lệnh chuyển — nhà đăng ký cũ + registry duyệt, thường 5–7 ngày; hỏi GET /domain/info?order_code= tới khi provision_status = ready."
}
}/domain/list
Chỉ đọcMọi tên miền của tài khoản (mua trên web lẫn qua API, nhận chuyển quyền), cùng khuôn /domain/info (kèm allowed_actions). ?status= provisioning | ready | failed | expired | suspended | cancelled | transferred_out (nhận cả trạng thái thô order_status cũ). Phân trang.
GET https://cloudmoon.net/api/v1/domain/list| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
status |
query | không | Lọc theo trạng thái đơn |
limit |
query | không | 1-200, mặc định 50 |
page |
query | không | Trang, tính từ 1 |
curl 'https://cloudmoon.net/api/v1/domain/list' \
-H 'X-API-Key: ak_...'import requests
r = requests.get(
"https://cloudmoon.net/api/v1/domain/list",
headers={"X-API-Key": "ak_..."},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/list", {
headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/domain/list');
print_r($kq);{
"status": "success",
"msg": "OK",
"data": {
"items": [
{
"order_code": "151026DOMAINHNFPVZRQWUOD",
"domain": "ten-mien-cua-ban.com",
"sld": "ten-mien-cua-ban",
"tld": "com",
"purchase_type": "register",
"reg_period": 1,
"whois_privacy": 1,
"price_buy": 418950,
"price_renew_est": 441000,
"dns_mode": "cloudmoon_managed",
"dns_status": "ready",
"order_status": "active",
"renew_auto": "on",
"time_buy": "2026-10-15",
"time_expire_moon": "2027-10-15",
"time_expire": "2027-10-15",
"user_note": "",
"source_buy": "webcon:15",
"ref_excluded": 1,
"period": 1,
"provision_status": "ready",
"charged": true,
"billing": {
"price_buy": 418950,
"price_renew": 427770,
"renew_auto": "on",
"time_buy": "2026-10-15",
"time_expire": "2027-10-15"
},
"registrant": {
"source": "profile",
"name": "Nguyen Van A",
"company": null,
"country": "VN",
"email": "n*******@gmail.com"
},
"allowed_actions": [
"renew",
"auto_renew",
"note",
"delete",
"dns",
"dns_mode"
]
}
],
"page": 1,
"limit": 50,
"total": 1
}
}/domain/info
Chỉ đọcChi tiết một tên miền: provision_status (provisioning · ready · failed · expired · suspended · cancelled · transferred_out) + order_status thô, DNS (dns_mode · dns_status), billing (price_renew = giá gia hạn mỗi năm đã trừ chiết khấu · time_expire), registrant (tên · công ty · quốc gia · email che — chỉ hiện với tài khoản đã khai người đứng tên ấy; tên miền nhận chuyển quyền ⇒ source = other; tên miền mua trước 15/10/2026 ⇒ null), allowed_actions (renew · auto_renew · note · delete · dns · dns_mode — việc làm được NGAY LÚC NÀY, cùng luật nút trên web).
GET https://cloudmoon.net/api/v1/domain/info| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
order_code |
query | có | Mã đơn (order_code) — lấy từ lệnh mua hoặc /list |
Chạy thử Nhận cả mã SANDBOX… của lệnh mua chạy thử ⇒ trả máy mẫu.
curl 'https://cloudmoon.net/api/v1/domain/info?order_code=151026DOMAINHNFPVZRQWUOD' \
-H 'X-API-Key: ak_...'import requests
r = requests.get(
"https://cloudmoon.net/api/v1/domain/info",
headers={"X-API-Key": "ak_..."},
params={"order_code": "151026DOMAINHNFPVZRQWUOD"},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/info?order_code=151026DOMAINHNFPVZRQWUOD", {
headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/domain/info?order_code=151026DOMAINHNFPVZRQWUOD');
print_r($kq);{
"status": "success",
"msg": "OK",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"domain": "ten-mien-cua-ban.com",
"sld": "ten-mien-cua-ban",
"tld": "com",
"purchase_type": "register",
"reg_period": 1,
"whois_privacy": 1,
"price_buy": 418950,
"price_renew_est": 441000,
"dns_mode": "cloudmoon_managed",
"dns_status": "ready",
"order_status": "active",
"renew_auto": "on",
"time_buy": "2026-10-15",
"time_expire_moon": "2027-10-15",
"time_expire": "2027-10-15",
"user_note": "",
"source_buy": "webcon:15",
"ref_excluded": 1,
"period": 1,
"provision_status": "ready",
"charged": true,
"billing": {
"price_buy": 418950,
"price_renew": 427770,
"renew_auto": "on",
"time_buy": "2026-10-15",
"time_expire": "2027-10-15"
},
"registrant": {
"source": "profile",
"name": "Nguyen Van A",
"company": null,
"country": "VN",
"email": "n*******@gmail.com"
},
"allowed_actions": [
"renew",
"auto_renew",
"note",
"delete",
"dns",
"dns_mode"
]
}
}/domain/renew
Toàn quyềnGia hạn — trừ ví NGAY: amount = giá gia hạn mỗi năm hiện hành × period, đã trừ chiết khấu (báo giá: /domain/quote type renew). Hạn mới = hạn đã trả + period năm (kể cả gia hạn trễ); tối đa 10 năm tính từ hôm nay (vượt ⇒ 400, data.max_years). Gia hạn trễ: tối đa 30 ngày sau ngày hết hạn tuỳ đuôi — hệ thống tự chuộc lại ở nhà đăng ký đúng giá thường; quá hạn chót ⇒ 409 ORDER_EXPIRED; hỏi nhà đăng ký trước khi trừ tiền: 503 UNAVAILABLE / 429 IN_PROGRESS (chưa trừ tiền, gửi lại sau). Mỗi tên miền một lượt gia hạn mỗi ngày (429 COOLDOWN tới 0 giờ). registrar_renewed = false ⇒ đã thu tiền + cộng hạn, nhà đăng ký được gia hạn lại tự động (không cần gửi lại). Bảo trì không chặn gia hạn. Khoá cũ time_expire_moon · price giữ cho tích hợp cũ.
POST https://cloudmoon.net/api/v1/domain/renew| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
Idempotency-Key |
header | không | chống trừ tiền hai lần khi gửi lại |
order_code |
body | có | Mã đơn (order_code) — lấy từ lệnh mua hoặc /list |
period |
body | không | số năm 1–10, mặc định 1 |
Chạy thử Gửi kèm X-Sandbox: 1: máy chủ kiểm như lượt thật rồi trả kết quả mô phỏng cùng khuôn — không trừ tiền, không đổi gì. Nhận cả mã SANDBOX… của lệnh mua chạy thử ⇒ trả máy mẫu. Kịch bản lỗi (X-Sandbox-Scenario): INSUFFICIENT_BALANCE (402) · ORDER_CANCELLED (409) · ORDER_EXPIRED (409) · ORDER_FAILED (409) · TRANSFERRED_OUT (409) · PROVISIONING (409) · SUSPENDED (409) · IDEMPOTENCY_PENDING (409) · COOLDOWN (429) · IN_PROGRESS (429) · BUSY (429) · FAILED (400).
curl -X POST 'https://cloudmoon.net/api/v1/domain/renew' \
-H 'X-API-Key: ak_...' \
-H 'Idempotency-Key: 7f9c2e4b-1a2b-4c3d-9e8f-0123456789ab' \
-H 'Content-Type: application/json' \
-d '{"order_code":"151026DOMAINHNFPVZRQWUOD","period":1}'import uuid
import requests
r = requests.post(
"https://cloudmoon.net/api/v1/domain/renew",
headers={"X-API-Key": "ak_...", "Idempotency-Key": str(uuid.uuid4())},
json={"order_code": "151026DOMAINHNFPVZRQWUOD", "period": 1},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
import { randomUUID } from "node:crypto";
const res = await fetch("https://cloudmoon.net/api/v1/domain/renew", {
method: "POST",
headers: {
"X-API-Key": "ak_...",
"Content-Type": "application/json",
"Idempotency-Key": randomUUID(),
},
body: JSON.stringify({ order_code: "151026DOMAINHNFPVZRQWUOD", period: 1 }),
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/domain/renew', ['order_code' => '151026DOMAINHNFPVZRQWUOD', 'period' => 1], bin2hex(random_bytes(16)));
print_r($kq);{
"order_code": "151026DOMAINHNFPVZRQWUOD",
"period": 1
}{
"status": "success",
"msg": "Gia hạn thành công",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"domain": "ten-mien-cua-ban.com",
"period": 1,
"amount": 427770,
"time_expire": "2028-10-15",
"registrar_renewed": true,
"time_expire_moon": "2028-10-15",
"price": 427770
}
}/domain/auto-renew
Toàn quyềnĐẶT tự gia hạn (không lật — gửi lại cùng giá trị vẫn thành công). Bật ⇒ khi còn ≤ 7 ngày tới billing.time_expire (kể cả khi đã quá hạn) hệ thống tự trừ ví gia hạn 1 năm, cùng giá gia hạn tay — lượt tự gia hạn chỉ chạy khi số dư đủ giá gia hạn NIÊM YẾT (price_renew_original, chưa trừ chiết khấu); thiếu ⇒ bỏ qua, thử lại mỗi giờ.
POST https://cloudmoon.net/api/v1/domain/auto-renew| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
order_code |
body | có | Mã đơn (order_code) — lấy từ lệnh mua hoặc /list |
enabled |
body | có | true / false |
Chạy thử Gửi kèm X-Sandbox: 1: máy chủ kiểm như lượt thật rồi trả kết quả mô phỏng cùng khuôn — không trừ tiền, không đổi gì. Nhận cả mã SANDBOX… của lệnh mua chạy thử ⇒ trả máy mẫu. Kịch bản lỗi (X-Sandbox-Scenario): ORDER_CANCELLED (409) · ORDER_EXPIRED (409) · ORDER_FAILED (409) · TRANSFERRED_OUT (409) · SUSPENDED (409) · COOLDOWN (429) · IN_PROGRESS (429) · BUSY (429) · FAILED (400).
curl -X POST 'https://cloudmoon.net/api/v1/domain/auto-renew' \
-H 'X-API-Key: ak_...' \
-H 'Content-Type: application/json' \
-d '{"order_code":"151026DOMAINHNFPVZRQWUOD","enabled":false}'import requests
r = requests.post(
"https://cloudmoon.net/api/v1/domain/auto-renew",
headers={"X-API-Key": "ak_..."},
json={"order_code": "151026DOMAINHNFPVZRQWUOD", "enabled": False},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/auto-renew", {
method: "POST",
headers: {
"X-API-Key": "ak_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ order_code: "151026DOMAINHNFPVZRQWUOD", enabled: false }),
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/domain/auto-renew', ['order_code' => '151026DOMAINHNFPVZRQWUOD', 'enabled' => false]);
print_r($kq);{
"order_code": "151026DOMAINHNFPVZRQWUOD",
"enabled": false
}{
"status": "success",
"msg": "Đã tắt tự gia hạn",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"renew_auto": "off"
}
}/domain/note
Toàn quyềnGhi chú riêng của tài khoản cho một tên miền (≤ 200 ký tự, bỏ thẻ HTML; rỗng = xoá). Đọc lại ở user_note của /domain/info.
POST https://cloudmoon.net/api/v1/domain/note| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
order_code |
body | có | Mã đơn (order_code) — lấy từ lệnh mua hoặc /list |
note |
body | có | ≤ 200 ký tự |
Chạy thử Gửi kèm X-Sandbox: 1: máy chủ kiểm như lượt thật rồi trả kết quả mô phỏng cùng khuôn — không trừ tiền, không đổi gì. Nhận cả mã SANDBOX… của lệnh mua chạy thử ⇒ trả máy mẫu. Kịch bản lỗi (X-Sandbox-Scenario): ORDER_CANCELLED (409) · FAILED (400).
curl -X POST 'https://cloudmoon.net/api/v1/domain/note' \
-H 'X-API-Key: ak_...' \
-H 'Content-Type: application/json' \
-d '{"order_code":"151026DOMAINHNFPVZRQWUOD","note":"Website cong ty"}'import requests
r = requests.post(
"https://cloudmoon.net/api/v1/domain/note",
headers={"X-API-Key": "ak_..."},
json={"order_code": "151026DOMAINHNFPVZRQWUOD", "note": "Website cong ty"},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/note", {
method: "POST",
headers: {
"X-API-Key": "ak_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ order_code: "151026DOMAINHNFPVZRQWUOD", note: "Website cong ty" }),
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/domain/note', ['order_code' => '151026DOMAINHNFPVZRQWUOD', 'note' => 'Website cong ty']);
print_r($kq);{
"order_code": "151026DOMAINHNFPVZRQWUOD",
"note": "Website cong ty"
}{
"status": "success",
"msg": "Đã lưu ghi chú",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"user_note": "Website cong ty"
}
}/domain/delete
Toàn quyềnXOÁ tên miền khỏi danh sách quản lý — KHÔNG hoàn tiền, không khôi phục được (confirm = order_code). Tên miền VẪN đăng ký tới hết hạn (không tự gia hạn nữa); vùng DNS tại đây bị gỡ. Đang đăng ký / lỗi đăng ký / tạm ngưng / đang rao Chợ ⇒ 409.
POST https://cloudmoon.net/api/v1/domain/delete| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
order_code |
body | có | Mã đơn (order_code) — lấy từ lệnh mua hoặc /list |
confirm |
body | có | bằng đúng order_code |
Chạy thử Gửi kèm X-Sandbox: 1: máy chủ kiểm như lượt thật rồi trả kết quả mô phỏng cùng khuôn — không trừ tiền, không đổi gì. Nhận cả mã SANDBOX… của lệnh mua chạy thử ⇒ trả máy mẫu. Kịch bản lỗi (X-Sandbox-Scenario): ORDER_CANCELLED (409) · PROVISIONING (409) · ORDER_FAILED (409) · SUSPENDED (409) · LISTED_ON_MARKETPLACE (409) · IN_PROGRESS (429) · BUSY (429) · FAILED (400).
curl -X POST 'https://cloudmoon.net/api/v1/domain/delete' \
-H 'X-API-Key: ak_...' \
-H 'Content-Type: application/json' \
-d '{"order_code":"151026DOMAINHNFPVZRQWUOD","confirm":"151026DOMAINHNFPVZRQWUOD"}'import requests
r = requests.post(
"https://cloudmoon.net/api/v1/domain/delete",
headers={"X-API-Key": "ak_..."},
json={"order_code": "151026DOMAINHNFPVZRQWUOD", "confirm": "151026DOMAINHNFPVZRQWUOD"},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/delete", {
method: "POST",
headers: {
"X-API-Key": "ak_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ order_code: "151026DOMAINHNFPVZRQWUOD", confirm: "151026DOMAINHNFPVZRQWUOD" }),
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/domain/delete', ['order_code' => '151026DOMAINHNFPVZRQWUOD', 'confirm' => '151026DOMAINHNFPVZRQWUOD']);
print_r($kq);{
"order_code": "151026DOMAINHNFPVZRQWUOD",
"confirm": "151026DOMAINHNFPVZRQWUOD"
}{
"status": "success",
"msg": "Đã xoá tên miền khỏi danh sách quản lý — tên miền vẫn đăng ký tới hết hạn, không hoàn tiền",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"domain": "ten-mien-cua-ban.com",
"order_status": "cancelled",
"provision_status": "cancelled",
"refunded": false
}
}/domain/dns/list
Chỉ đọcBản ghi DNS (bản lưu tại đây là nguồn đúng) + dns_mode. name rỗng = gốc tên miền (@). sync: synced · pending (đang đẩy sang máy chủ DNS — tự đẩy lại trong vài phút) · error. Tên miền dùng nameserver riêng ⇒ 409 DNS_EXTERNAL.
GET https://cloudmoon.net/api/v1/domain/dns/list| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
order_code |
query | có | Mã đơn (order_code) — lấy từ lệnh mua hoặc /list |
Chạy thử Nhận cả mã SANDBOX… của lệnh mua chạy thử ⇒ trả máy mẫu.
curl 'https://cloudmoon.net/api/v1/domain/dns/list?order_code=151026DOMAINHNFPVZRQWUOD' \
-H 'X-API-Key: ak_...'import requests
r = requests.get(
"https://cloudmoon.net/api/v1/domain/dns/list",
headers={"X-API-Key": "ak_..."},
params={"order_code": "151026DOMAINHNFPVZRQWUOD"},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/dns/list?order_code=151026DOMAINHNFPVZRQWUOD", {
headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/domain/dns/list?order_code=151026DOMAINHNFPVZRQWUOD');
print_r($kq);{
"status": "success",
"msg": "OK",
"data": {
"records": [
{
"id": 123,
"type": "A",
"name": "",
"value": "203.0.113.10",
"ttl": 3600,
"priority": 0,
"sync": "synced"
},
{
"id": 124,
"type": "CNAME",
"name": "www",
"value": "ten-mien-cua-ban.com",
"ttl": 3600,
"priority": 0,
"sync": "synced"
}
],
"dns_mode": "cloudmoon_managed"
}
}/domain/dns/add
Toàn quyềnThêm bản ghi: A · AAAA · CNAME (không ở gốc) · TXT · MX (priority) · NS (không ở gốc) · SRV (tên _dịch-vụ._giao-thức như _sip._tcp, priority, value "trọng-số cổng máy-đích" — vd 5 5060 sip.example.com) · CAA (value "cờ thẻ giá-trị" — vd 0 issue letsencrypt.org; thẻ issue / issuewild / iodef; lưu ở dạng 0 issue "letsencrypt.org"). TTL hệ thống tự đặt (nhanh khi vừa sửa, chậm khi ổn định). Chạm trần số bản ghi mỗi tên miền ⇒ 400 + data.max_records. Máy chủ DNS chối (vd CNAME trùng tên với bản ghi khác) ⇒ 400, không lưu; tạm hỏng ⇒ 200 sync = pending (đã lưu, tự đẩy lại).
POST https://cloudmoon.net/api/v1/domain/dns/add| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
order_code |
body | có | Mã đơn (order_code) — lấy từ lệnh mua hoặc /list |
type |
body | có | A / AAAA / CNAME / TXT / MX / NS / SRV / CAA |
name |
body | không | "@" hoặc "" = gốc · www · mail … · SRV: _dịch-vụ._giao-thức (vd _sip._tcp) |
value |
body | có | SRV: "trọng-số cổng máy-đích" · CAA: "cờ thẻ giá-trị" |
priority |
body | không | MX · SRV: số 0–65535 |
Chạy thử Gửi kèm X-Sandbox: 1: máy chủ kiểm như lượt thật rồi trả kết quả mô phỏng cùng khuôn — không trừ tiền, không đổi gì. Nhận cả mã SANDBOX… của lệnh mua chạy thử ⇒ trả máy mẫu. Kịch bản lỗi (X-Sandbox-Scenario): ORDER_CANCELLED (409) · ORDER_EXPIRED (409) · ORDER_FAILED (409) · TRANSFERRED_OUT (409) · PROVISIONING (409) · SUSPENDED (409) · RENEW_REQUIRED (409) · DNS_EXTERNAL (409) · DNS_NOT_READY (409) · BUSY (429) · FAILED (400).
curl -X POST 'https://cloudmoon.net/api/v1/domain/dns/add' \
-H 'X-API-Key: ak_...' \
-H 'Content-Type: application/json' \
-d '{"order_code":"151026DOMAINHNFPVZRQWUOD","type":"A","name":"shop","value":"203.0.113.10"}'import requests
r = requests.post(
"https://cloudmoon.net/api/v1/domain/dns/add",
headers={"X-API-Key": "ak_..."},
json={"order_code": "151026DOMAINHNFPVZRQWUOD", "type": "A", "name": "shop", "value": "203.0.113.10"},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/dns/add", {
method: "POST",
headers: {
"X-API-Key": "ak_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ order_code: "151026DOMAINHNFPVZRQWUOD", type: "A", name: "shop", value: "203.0.113.10" }),
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/domain/dns/add', ['order_code' => '151026DOMAINHNFPVZRQWUOD', 'type' => 'A', 'name' => 'shop', 'value' => '203.0.113.10']);
print_r($kq);{
"order_code": "151026DOMAINHNFPVZRQWUOD",
"type": "A",
"name": "shop",
"value": "203.0.113.10"
}{
"status": "success",
"msg": "Đã thêm bản ghi",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"record_id": 125,
"sync": "synced"
}
}/domain/dns/update
Toàn quyềnSửa một bản ghi (record_id lấy từ /domain/dns/list). Máy chủ DNS chối ⇒ 400 và bản ghi GIỮ giá trị cũ; tạm hỏng ⇒ sync = pending.
POST https://cloudmoon.net/api/v1/domain/dns/update| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
order_code |
body | có | Mã đơn (order_code) — lấy từ lệnh mua hoặc /list |
record_id |
body | có | — |
type |
body | có | — |
name |
body | không | Tên gợi nhớ |
value |
body | có | SRV: "trọng-số cổng máy-đích" · CAA: "cờ thẻ giá-trị" |
priority |
body | không | MX · SRV |
Chạy thử Gửi kèm X-Sandbox: 1: máy chủ kiểm như lượt thật rồi trả kết quả mô phỏng cùng khuôn — không trừ tiền, không đổi gì. Nhận cả mã SANDBOX… của lệnh mua chạy thử ⇒ trả máy mẫu. Kịch bản lỗi (X-Sandbox-Scenario): NOT_FOUND (404) · ORDER_CANCELLED (409) · ORDER_EXPIRED (409) · ORDER_FAILED (409) · TRANSFERRED_OUT (409) · PROVISIONING (409) · SUSPENDED (409) · RENEW_REQUIRED (409) · DNS_EXTERNAL (409) · DNS_NOT_READY (409) · BUSY (429) · FAILED (400).
curl -X POST 'https://cloudmoon.net/api/v1/domain/dns/update' \
-H 'X-API-Key: ak_...' \
-H 'Content-Type: application/json' \
-d '{"order_code":"151026DOMAINHNFPVZRQWUOD","record_id":123,"type":"A","name":"@","value":"203.0.113.20"}'import requests
r = requests.post(
"https://cloudmoon.net/api/v1/domain/dns/update",
headers={"X-API-Key": "ak_..."},
json={"order_code": "151026DOMAINHNFPVZRQWUOD", "record_id": 123, "type": "A", "name": "@", "value": "203.0.113.20"},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/dns/update", {
method: "POST",
headers: {
"X-API-Key": "ak_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ order_code: "151026DOMAINHNFPVZRQWUOD", record_id: 123, type: "A", name: "@", value: "203.0.113.20" }),
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/domain/dns/update', ['order_code' => '151026DOMAINHNFPVZRQWUOD', 'record_id' => 123, 'type' => 'A', 'name' => '@', 'value' => '203.0.113.20']);
print_r($kq);{
"order_code": "151026DOMAINHNFPVZRQWUOD",
"record_id": 123,
"type": "A",
"name": "@",
"value": "203.0.113.20"
}{
"status": "success",
"msg": "Đã cập nhật bản ghi",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"record_id": 123,
"sync": "synced"
}
}/domain/dns/delete
Toàn quyềnXoá một bản ghi. Máy chủ DNS xoá hỏng ⇒ 503 UNAVAILABLE và bản ghi GIỮ NGUYÊN — gửi lại sau ít phút.
POST https://cloudmoon.net/api/v1/domain/dns/delete| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
order_code |
body | có | Mã đơn (order_code) — lấy từ lệnh mua hoặc /list |
record_id |
body | có | — |
Chạy thử Gửi kèm X-Sandbox: 1: máy chủ kiểm như lượt thật rồi trả kết quả mô phỏng cùng khuôn — không trừ tiền, không đổi gì. Nhận cả mã SANDBOX… của lệnh mua chạy thử ⇒ trả máy mẫu. Kịch bản lỗi (X-Sandbox-Scenario): NOT_FOUND (404) · ORDER_CANCELLED (409) · ORDER_EXPIRED (409) · ORDER_FAILED (409) · TRANSFERRED_OUT (409) · PROVISIONING (409) · SUSPENDED (409) · RENEW_REQUIRED (409) · DNS_EXTERNAL (409) · DNS_NOT_READY (409) · BUSY (429) · UNAVAILABLE (503) · FAILED (400).
curl -X POST 'https://cloudmoon.net/api/v1/domain/dns/delete' \
-H 'X-API-Key: ak_...' \
-H 'Content-Type: application/json' \
-d '{"order_code":"151026DOMAINHNFPVZRQWUOD","record_id":124}'import requests
r = requests.post(
"https://cloudmoon.net/api/v1/domain/dns/delete",
headers={"X-API-Key": "ak_..."},
json={"order_code": "151026DOMAINHNFPVZRQWUOD", "record_id": 124},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/dns/delete", {
method: "POST",
headers: {
"X-API-Key": "ak_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ order_code: "151026DOMAINHNFPVZRQWUOD", record_id: 124 }),
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/domain/dns/delete', ['order_code' => '151026DOMAINHNFPVZRQWUOD', 'record_id' => 124]);
print_r($kq);{
"order_code": "151026DOMAINHNFPVZRQWUOD",
"record_id": 124
}{
"status": "success",
"msg": "Đã xóa bản ghi",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"record_id": 124
}
}/domain/dns/mode
Toàn quyềnĐổi chế độ DNS: external_ns + ns (2–13 hostname) ⇒ trỏ sang nameserver riêng (bản ghi tại đây giữ lại nhưng thôi có hiệu lực) · cloudmoon_managed ⇒ trỏ về DNS quản lý tại đây. Nameserver mới có hiệu lực sau vài giờ.
POST https://cloudmoon.net/api/v1/domain/dns/mode| Tham số | Vị trí | Bắt buộc | Mô tả |
|---|---|---|---|
order_code |
body | có | Mã đơn (order_code) — lấy từ lệnh mua hoặc /list |
mode |
body | có | cloudmoon_managed / external_ns |
ns |
body | không | external_ns: danh sách 2–13 hostname |
Chạy thử Gửi kèm X-Sandbox: 1: máy chủ kiểm như lượt thật rồi trả kết quả mô phỏng cùng khuôn — không trừ tiền, không đổi gì. Nhận cả mã SANDBOX… của lệnh mua chạy thử ⇒ trả máy mẫu. Kịch bản lỗi (X-Sandbox-Scenario): ORDER_CANCELLED (409) · ORDER_EXPIRED (409) · ORDER_FAILED (409) · TRANSFERRED_OUT (409) · PROVISIONING (409) · SUSPENDED (409) · RENEW_REQUIRED (409) · IN_PROGRESS (429) · BUSY (429) · UNAVAILABLE (503) · FAILED (400).
curl -X POST 'https://cloudmoon.net/api/v1/domain/dns/mode' \
-H 'X-API-Key: ak_...' \
-H 'Content-Type: application/json' \
-d '{"order_code":"151026DOMAINHNFPVZRQWUOD","mode":"external_ns","ns":["ns1.example.com","ns2.example.com"]}'import requests
r = requests.post(
"https://cloudmoon.net/api/v1/domain/dns/mode",
headers={"X-API-Key": "ak_..."},
json={"order_code": "151026DOMAINHNFPVZRQWUOD", "mode": "external_ns", "ns": ["ns1.example.com", "ns2.example.com"]},
timeout=30,
)
print(r.status_code, r.json())// Node.js 18+ — lưu thành tệp .mjs
const res = await fetch("https://cloudmoon.net/api/v1/domain/dns/mode", {
method: "POST",
headers: {
"X-API-Key": "ak_...",
"Content-Type": "application/json",
},
body: JSON.stringify({ order_code: "151026DOMAINHNFPVZRQWUOD", mode: "external_ns", ns: ["ns1.example.com", "ns2.example.com"] }),
});
console.log(res.status, await res.json());// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/domain/dns/mode', ['order_code' => '151026DOMAINHNFPVZRQWUOD', 'mode' => 'external_ns', 'ns' => ['ns1.example.com', 'ns2.example.com']]);
print_r($kq);{
"order_code": "151026DOMAINHNFPVZRQWUOD",
"mode": "external_ns",
"ns": [
"ns1.example.com",
"ns2.example.com"
]
}{
"status": "success",
"msg": "Đã chuyển sang nameserver riêng",
"data": {
"order_code": "151026DOMAINHNFPVZRQWUOD",
"dns_mode": "external_ns",
"ns": [
"ns1.example.com",
"ns2.example.com"
]
}
}