Tham chiếu API

API Cloud VPS

VPS theo tháng tại nhiều khu vực: danh mục gói kèm đặc tính từng gói (features), báo giá, mua máy bất đồng bộ (HTTP 202 rồi hỏi /cloudvps/info), và quản lý trọn vòng đời — gia hạn, đổi chu kỳ, nâng cấp, tự gia hạn, bật/tắt, cài lại hệ điều hành, đổi IP, làm mới trạng thái, console, xoá. Mỗi đơn kèm provision_status, features và allowed_actions — allowed_actions sinh từ đúng chốt mà máy chủ dùng để chặn. Đại lý: giá mua mới / nâng cấp đã trừ chiết khấu. Giao dịch qua API không tính hoa hồng giới thiệu.

Trên trang này
  1. Tổng quan
  2. Đặc tính theo dòng VPS
  3. Nhịp thao tác
  4. Mã lỗi riêng
  5. GET /cloudvps/products
  6. GET /cloudvps/os
  7. GET /cloudvps/addons
  8. POST /cloudvps/quote
  9. POST /cloudvps/buy
  10. GET /cloudvps/list
  11. GET /cloudvps/info
  12. POST /cloudvps/renew
  13. POST /cloudvps/change-cycle
  14. POST /cloudvps/upgrade
  15. POST /cloudvps/auto-renew
  16. POST /cloudvps/action
  17. POST /cloudvps/reinstall
  18. POST /cloudvps/change-ip
  19. POST /cloudvps/sync
  20. GET /cloudvps/console
  21. POST /cloudvps/delete

Tổng quan

Địa chỉ gốc của các endpoint trên trang này:

Base URL
https://cloudmoon.net/api/v1
EndpointViệcQuyền khoá
GET /cloudvps/products Catalog VPS theo tháng: giá từng chu kỳ (cycles = chu kỳ thật sự mua được), features của gói (addon_on_order · upgrade … Chỉ đọc
GET /cloudvps/os Hệ điều hành. Truyền product_id ⇒ chỉ HĐH máy của gói đó cài được (dùng cho mua + cài lại). Chỉ đọc
GET /cloudvps/addons Giá addon CPU/RAM/Disk (1 đơn vị / chu kỳ; DISK 1 đơn vị = 10 GB) + trần: limits.order (mua kèm) · limits.upgrade (mỗi … Chỉ đọc
POST /cloudvps/quote BÁO GIÁ — không trừ tiền, không ghi gì, khoá chỉ đọc gọi được. Mua mới: {product_id, billing_cycle, addon_*}. Đơn có sẵ… Chỉ đọc
POST /cloudvps/buy Mua VPS theo tháng — BẤT ĐỒNG BỘ: trả HTTP 202 ngay kèm order_code, máy được tạo ở nền; hỏi /cloudvps/info?order_code= … Toàn quyền
GET /cloudvps/list Mọi VPS theo tháng của tài khoản (không kèm mật khẩu). Mặc định bỏ đơn đã xoá; ?status= active | pending_expired | expi… Chỉ đọc
GET /cloudvps/info Chi tiết một VPS + features + allowed_actions. Mỗi lần gọi tự hỏi lại trạng thái mới nhất của máy (tối đa 1 lần / 30 gi… Chỉ đọc
POST /cloudvps/renew Gia hạn một chu kỳ, trừ ví ngay. Giá ĐỘNG = max(giá đã trả, giá niêm yết hiện hành) — báo giá trước bằng /cloudvps/quot… Toàn quyền
POST /cloudvps/change-cycle Đổi sang chu kỳ DÀI HƠN = gia hạn luôn một kỳ mới, TRỪ TIỀN NGAY (amount = số thật đã trừ). Chỉ đơn features.change_cyc… Toàn quyền
POST /cloudvps/upgrade Nâng CPU/RAM/Disk máy đang chạy (chỉ đơn features.upgrade). Tiền = giá addon 1 chu kỳ × số chu kỳ còn lại tới hạn ĐÃ TR… Toàn quyền
POST /cloudvps/auto-renew Bật/tắt tự gia hạn của một VPS (tới hạn hệ thống tự trừ ví, giá động như gia hạn tay). Toàn quyền
POST /cloudvps/action Bật / tắt / khởi động lại. Gửi lệnh cho máy đã ở sẵn trạng thái đó vẫn THÀNH CÔNG; already: true khi hệ thống đo được m… Toàn quyền
POST /cloudvps/reinstall Cài lại hệ điều hành — XOÁ TOÀN BỘ DỮ LIỆU. os_id lấy từ /cloudvps/os?product_id=. Một lần / 60 phút / máy. Sau lệnh pr… Toàn quyền
POST /cloudvps/change-ip Đổi IP công khai, CÓ PHÍ (change_ip_price). Chỉ đơn features.change_ip. Máy mất mạng tới khi hệ thống tự khởi động lại … Toàn quyền
POST /cloudvps/sync Hỏi lại trạng thái THẬT của máy (IP · trạng thái chạy · máy mới/cài lại đã sẵn sàng chưa) rồi trả đơn đã làm mới. Khoá … Chỉ đọc
GET /cloudvps/console URL console trên trình duyệt (tên miền trung tính). Khoá TOÀN QUYỀN. Chưa sẵn ⇒ pending: true + retry_after (giây). Chỉ… Toàn quyền
POST /cloudvps/delete Xoá VPS — không hoàn tiền, không khôi phục. Bắt buộc confirm = đúng order_code. Toàn quyền

Giá đại lý: Danh mục, báo giá, mua, đổi chu kỳ và nâng cấp trả về (và trừ ví) giá đã trừ chiết khấu theo cấp đại lý; gia hạn giữ theo giá của đơn lúc mua; đổi IP một mức cho mọi tài khoản. — xem mục Tài khoản đại lý.

Đặc tính theo dòng VPS

Mỗi dòng máy hỗ trợ một bộ thao tác khác nhau. API nói rõ điều đó ở hai chỗ, và máy chủ chặn đúng theo hai chỗ ấy — tài liệu, phản hồi và hành vi không lệch nhau:

  • features — gói / máy có hỗ trợ việc này không (ở /cloudvps/products và mỗi đơn).
  • allowed_actions — việc làm được ngay lúc này trên một đơn cụ thể, đã tính trạng thái đơn (đang khởi tạo, quá hạn, đã nâng cấp…).
Dòng VPS · khu vựcMua kèm cấu hìnhNâng cấp sauĐổi chu kỳĐổi IPConsoleChu kỳ (tháng)
Gold HCM · 6 gói
Việt Nam
1 · 2 · 3 · 6 · 12 · 24 · 36
Xeon · 35 gói (23 còn hàng)
Mỹ · Anh · Pháp · Tây Ban Nha · Thụy Sĩ · Hà Lan · Iceland · Thổ Nhĩ Kỳ · Nga
1 · 3 · 6 · 12
Gold · 55 gói (34 còn hàng)
Mỹ · Anh · Pháp · Đức · Tây Ban Nha · Ý · Ba Lan · Hà Lan · Iceland · Thổ Nhĩ Kỳ · Nga
1 · 3 · 6 · 12
Ryzen · 30 gói (20 còn hàng)
Mỹ · Anh · Pháp · Đức · Tây Ban Nha · Ý · Thụy Sĩ · Ba Lan · Hà Lan · Thổ Nhĩ Kỳ
1 · 3 · 6 · 12
Store · 28 gói (21 còn hàng)
Mỹ · Anh · Pháp · Đức · Tây Ban Nha · Ý · Thụy Sĩ · Ba Lan · Hà Lan · Nga
1 · 3 · 6 · 12
Amd · 45 gói (36 còn hàng)
Anh · Pháp · Đức · Tây Ban Nha · Ý · Thụy Sĩ · Ba Lan · Hà Lan · Nga
1 · 3 · 6 · 12
Xeon 2 · 112 gói (107 còn hàng)
Anh · Mỹ · Úc · Canada · Đức · Pháp · Hongkong · Indonesia · Ý · Nhật · Malaysia · Hà Lan · Singapore · Thailand · Hàn Quốc
1 · 3 · 6 · 12 · 24 · 36
Gpu · 3 gói (2 còn hàng)
Pháp · Hà Lan · Iceland
1 · 3 · 6 · 12

Mọi dòng đều bật/tắt/khởi động lại, cài lại hệ điều hành và tự gia hạn được. Bảng dựng trực tiếp từ danh mục /cloudvps/products — gói tạm hết hàng vẫn được tính (in_stock: false, đặt mua nhận 409 OUT_OF_STOCK), gói ngừng bán tự rời khỏi bảng. Muốn thuê máy trả theo giờ, xem API Cloud VPS theo giờ.

Các khoá của features

Khoátrue nghĩa là
addon_on_orderMua kèm CPU / RAM / Disk ngay lúc đặt (addon_cpu · addon_ram · addon_disk, trần ở addon_limits). Chỉ có ở danh mục gói.
upgradeNâng CPU / RAM / Disk cho máy đang chạy (/cloudvps/upgrade).
change_cycleĐổi sang chu kỳ dài hơn (/cloudvps/change-cycle). Máy đã nâng cấp thì không đổi được nữa.
change_ipĐổi IP công khai, có phí (change_ip_price).
consoleMở màn hình máy trên trình duyệt (/cloudvps/console).
reinstall · power · auto_renewCài lại hệ điều hành · bật / tắt / khởi động lại · tự gia hạn.

Giá trị của allowed_actions

start · stop · restart · reinstall · renew · change_cycle · upgrade · change_ip · console · sync · auto_renew · delete — tên nào vắng mặt thì lệnh tương ứng sẽ bị chối (NOT_SUPPORTED, REBUILDING, RENEW_REQUIRED…). Danh sách chưa tính nhịp giữa hai lệnh trên cùng máy (429 COOLDOWN).

Nhịp thao tác trên cùng một máy

Để máy kịp đổi trạng thái, các lệnh trên cùng một máy phải cách lệnh trước một khoảng tối thiểu (cùng luật với web). 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ệnhCách lệnh trước trên cùng máy
Bật · Tắt · Khởi động lại · Gia hạn · Đổi chu kỳ1 phút
Nâng cấp · Xoá5 phút
Đổi IP10 giây
Làm mới trạng thái (/cloudvps/sync)20 giây (tính riêng)
Bật/tắt tự gia hạn5 giây (tính riêng)
Cài lại hệ điều hành1 lần / 60 phút

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.

HTTPcodeÝ nghĩaNên làm gì
400 NOT_SUPPORTED Gói / máy này không hỗ trợ thao tác được yêu cầu, hoặc đơn thuộc loại khác (VPS theo giờ gọi vào /cloudvps/… và ngược lại). Đọc features và allowed_actions trước khi gọi; đơn khác loại thì dùng đúng đường mà msg chỉ.
400 CONFIRM_REQUIRED Lệnh xoá thiếu trường xác nhận. Gửi confirm bằng đúng order_code.
409 OUT_OF_STOCK Gói tạm hết hàng (trong danh mục gói mang in_stock: false). Chọn gói khác — thêm ?in_stock=1 vào danh mục để chỉ thấy gói còn hàng.
409 REBUILDING Máy đang khởi tạo / chờ bàn giao, hoặc đang cài lại hệ điều hành. Hỏi /cloudvps/info tới khi provision_status = ready.
409 ORDER_EXPIRED Đơn đã hết hạn hẳn — tài nguyên đã giải phóng. Không thao tác được nữa; mua máy mới.
409 ORDER_DELETED Đơn đã bị xoá. Không thao tác được nữa.
409 RENEW_REQUIRED Dịch vụ đang tạm ngưng vì quá hạn. Gia hạn (/cloudvps/renew) rồi thao tác lại.
409 LISTED_ON_MARKETPLACE Máy đang được rao bán trên chợ — xoá và đổi chu kỳ bị chặn. Huỷ tin rao trên web rồi gửi lại.
429 COOLDOWN Một máy vừa nhận lệnh cùng nhóm — cần nghỉ giữa hai lệnh. Chờ Retry-After giây.
429 IN_PROGRESS Máy đang xử lý một lệnh khác — hoặc lệnh mua vừa nhận chưa tạo xong máy. Chờ Retry-After giây rồi gửi lại.
503 SYNC_FAILED Chưa lấy được trạng thái máy lúc này. Thử lại sau ít phút.
503 CONSOLE_UNAVAILABLE Chưa mở được console lúc này. Thử lại sau ít phút.
503 MAINTENANCE Khu vực của gói / máy này đang bảo trì. Thử lại sau.
GET

/cloudvps/products

Chỉ đọc

Catalog VPS theo tháng: giá từng chu kỳ (cycles = chu kỳ thật sự mua được), features của gói (addon_on_order · upgrade · change_cycle · change_ip · console · reinstall · power · auto_renew), trần mua kèm, giá đổi IP. Gói tạm hết hàng VẪN có trong danh sách với in_stock: false (đặt mua sẽ nhận 409 OUT_OF_STOCK) — thêm ?in_stock=1 để chỉ lấy gói còn hàng. Lọc ?region=.

GET https://cloudmoon.net/api/v1/cloudvps/products
Tham sốVị tríBắt buộcMô tả
region query không mã khu vực, vd VN
in_stock query không 1 = chỉ gói còn hàng (mặc định: cả gói tạm hết hàng, in_stock: false)
Yêu cầu
curl 'https://cloudmoon.net/api/v1/cloudvps/products' \
  -H 'X-API-Key: ak_...'
Yêu cầu
import requests

r = requests.get(
    "https://cloudmoon.net/api/v1/cloudvps/products",
    headers={"X-API-Key": "ak_..."},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/products", {
  headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/cloudvps/products');
print_r($kq);
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "items": [
            {
                "product_id": 526,
                "product_code": "415",
                "name": "VN03-1-1-20",
                "group_name": "vn03",
                "region_code": "VN",
                "cpu": "1",
                "ram": "1",
                "disk": "20",
                "ip": "1",
                "bandwidth": "",
                "traffic": "",
                "allow_addon": 1,
                "in_stock": true,
                "cycles": [
                    "onemonth",
                    "threemonth",
                    "oneyear"
                ],
                "pricing": {
                    "onemonth": {
                        "amount": 70000,
                        "amount_original": 70000,
                        "billing_cycle": "1 Tháng"
                    }
                },
                "features": {
                    "addon_on_order": true,
                    "upgrade": true,
                    "change_cycle": true,
                    "change_ip": false,
                    "console": true,
                    "reinstall": true,
                    "power": true,
                    "auto_renew": true
                },
                "addon_limits": {
                    "cpu": 4,
                    "ram": 8,
                    "disk": 10,
                    "disk_unit_gb": 10
                },
                "change_ip_price": null
            }
        ],
        "total": 1,
        "discount_percent": 0
    }
}
GET

/cloudvps/os

Chỉ đọc

Hệ điều hành. Truyền product_id ⇒ chỉ HĐH máy của gói đó cài được (dùng cho mua + cài lại).

GET https://cloudmoon.net/api/v1/cloudvps/os
Tham sốVị tríBắt buộcMô tả
product_id query không id số trong /cloudvps/products (nên luôn truyền)
Yêu cầu
curl 'https://cloudmoon.net/api/v1/cloudvps/os?product_id=526' \
  -H 'X-API-Key: ak_...'
Yêu cầu
import requests

r = requests.get(
    "https://cloudmoon.net/api/v1/cloudvps/os",
    headers={"X-API-Key": "ak_..."},
    params={"product_id": "526"},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/os?product_id=526", {
  headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/cloudvps/os?product_id=526');
print_r($kq);
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "items": [
            {
                "os_id": 17,
                "os_name": "Linux Ubuntu 22.04",
                "os_type": "linux",
                "icon": "/frontend/assets/images/ubuntu.png"
            }
        ],
        "total": 1
    }
}
GET

/cloudvps/addons

Chỉ đọc

Giá addon CPU/RAM/Disk (1 đơn vị / chu kỳ; DISK 1 đơn vị = 10 GB) + trần: limits.order (mua kèm) · limits.upgrade (mỗi lượt nâng cấp).

GET https://cloudmoon.net/api/v1/cloudvps/addons

Không có tham số — chỉ cần header X-API-Key.

Yêu cầu
curl 'https://cloudmoon.net/api/v1/cloudvps/addons' \
  -H 'X-API-Key: ak_...'
Yêu cầu
import requests

r = requests.get(
    "https://cloudmoon.net/api/v1/cloudvps/addons",
    headers={"X-API-Key": "ak_..."},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/addons", {
  headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/cloudvps/addons');
print_r($kq);
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "items": [
            {
                "type_addon": "addon_cpu",
                "name": "CPU",
                "pricing": {
                    "onemonth": {
                        "amount": 50000,
                        "amount_original": 50000
                    }
                }
            }
        ],
        "discount_percent": 0,
        "limits": {
            "order": {
                "cpu": 4,
                "ram": 8,
                "disk": 10
            },
            "upgrade": {
                "cpu": 10,
                "ram": 10,
                "disk": 10
            },
            "disk_unit_gb": 10
        },
        "note": "amount = giá 1 đơn vị addon / chu kỳ"
    }
}
POST

/cloudvps/quote

Chỉ đọc

BÁO GIÁ — không trừ tiền, không ghi gì, khoá chỉ đọc gọi được. Mua mới: {product_id, billing_cycle, addon_*}. Đơn có sẵn: {order_code, type: renew | change_cycle | upgrade | change_ip}. Dùng ĐÚNG hàm tính tiền + chốt của lệnh thật. Mua mới kèm available_balance (= số dư − tiền mọi lệnh mua/thuê VPS còn chờ tạo máy) và enough so với số ấy — đúng phép lệnh mua chối 402.

POST https://cloudmoon.net/api/v1/cloudvps/quote
Tham sốVị tríBắt buộcMô tả
product_id body không mua mới
billing_cycle body không mua mới / change_cycle
order_code body không đơn có sẵn
type body không renew | change_cycle | upgrade | change_ip
addon_cpu body không số nguyên ≥ 0
addon_ram body không —
addon_disk body không đơn vị 10 GB

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.

Yêu cầu
curl -X POST 'https://cloudmoon.net/api/v1/cloudvps/quote' \
  -H 'X-API-Key: ak_...' \
  -H 'Content-Type: application/json' \
  -d '{"order_code":"090926CLOUDQCLIENFZGKOX","type":"renew"}'
Yêu cầu
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/cloudvps/quote",
    headers={"X-API-Key": "ak_..."},
    json={"order_code": "090926CLOUDQCLIENFZGKOX", "type": "renew"},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/quote", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ order_code: "090926CLOUDQCLIENFZGKOX", type: "renew" }),
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/cloudvps/quote', ['order_code' => '090926CLOUDQCLIENFZGKOX', 'type' => 'renew']);
print_r($kq);
Thân yêu cầu
{
    "order_code": "090926CLOUDQCLIENFZGKOX",
    "type": "renew"
}
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "type": "renew",
        "amount": 70000,
        "currency": "VND",
        "balance": 954112,
        "enough": true,
        "order_code": "090926CLOUDQCLIENFZGKOX",
        "billing_cycle": "onemonth",
        "time_expire_moon": "2026-10-08",
        "new_time_expire_moon": "2026-11-08"
    }
}
POST

/cloudvps/buy

Toàn quyền

Mua VPS theo tháng — BẤT ĐỒNG BỘ: trả HTTP 202 ngay kèm order_code, máy được tạo ở nền; hỏi /cloudvps/info?order_code= tới khi provision_status = ready (failed kèm charged: false = chưa trừ tiền). Kiểm đủ TRƯỚC khi nhận lệnh: gói · còn hàng (gói in_stock: false ⇒ 409 OUT_OF_STOCK) · chu kỳ · HĐH · addon · số dư KHẢ DỤNG (= số dư − giá các đơn đang chờ tạo máy). Trần: 3 đơn chờ, 10 lượt mua/giờ — GỘP với lệnh thuê VPS theo giờ (429). Đơn mua qua API không tính hoa hồng giới thiệu. Thử miễn phí: header X-Sandbox: 1.

POST https://cloudmoon.net/api/v1/cloudvps/buy
Tham sốVị tríBắt buộcMô tả
Idempotency-Key header không KHUYÊN DÙNG — gửi lại cùng khoá ⇒ đúng order_code cũ, không mua hai lần
product_id body có id số trong /cloudvps/products
os_id body có từ /cloudvps/os?product_id=
billing_cycle body có một trong cycles của gói
addon_cpu body không chỉ gói features.addon_on_order, trần addon_limits
addon_ram body không GB
addon_disk body không đơn vị 10 GB
auto_renew body không true/false, mặc định true

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) · OUT_OF_STOCK (409) · TOO_MANY_PENDING (429) · RATE_LIMITED (429) · BUSY (429) · SERVICE_DISABLED (503) · MAINTENANCE (503) · FAILED (500) · PROVISION_FAILED (lệnh vẫn nhận, info về sau báo failed).

Yêu cầu
curl -X POST 'https://cloudmoon.net/api/v1/cloudvps/buy' \
  -H 'X-API-Key: ak_...' \
  -H 'Idempotency-Key: 7f9c2e4b-1a2b-4c3d-9e8f-0123456789ab' \
  -H 'Content-Type: application/json' \
  -d '{"product_id":526,"os_id":17,"billing_cycle":"onemonth","auto_renew":false}'
Yêu cầu
import uuid
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/cloudvps/buy",
    headers={"X-API-Key": "ak_...", "Idempotency-Key": str(uuid.uuid4())},
    json={"product_id": 526, "os_id": 17, "billing_cycle": "onemonth", "auto_renew": False},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs
import { randomUUID } from "node:crypto";

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/buy", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
    "Idempotency-Key": randomUUID(),
  },
  body: JSON.stringify({ product_id: 526, os_id: 17, billing_cycle: "onemonth", auto_renew: false }),
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/cloudvps/buy', ['product_id' => 526, 'os_id' => 17, 'billing_cycle' => 'onemonth', 'auto_renew' => false], bin2hex(random_bytes(16)));
print_r($kq);
Thân yêu cầu
{
    "product_id": 526,
    "os_id": 17,
    "billing_cycle": "onemonth",
    "auto_renew": false
}
Phản hồi
{
    "status": "success",
    "msg": "Đã nhận lệnh mua — máy đang được tạo",
    "data": {
        "order_code": "071026CLOUDABCDEFGHIJKL",
        "status": "queued",
        "provision_status": "queued",
        "product_id": 526,
        "billing_cycle": "onemonth",
        "os_id": 17,
        "addons": {
            "cpu": 0,
            "ram": 0,
            "disk": 0
        },
        "price_buy": 66500,
        "auto_renew": false,
        "note": "Máy đang được tạo ở nền — hỏi GET /cloudvps/info?order_code= để biết khi nào sẵn sàng"
    }
}
GET

/cloudvps/list

Chỉ đọc

Mọi VPS theo tháng của tài khoản (không kèm mật khẩu). Mặc định bỏ đơn đã xoá; ?status= active | pending_expired | expired | deleted. Phân trang.

GET https://cloudmoon.net/api/v1/cloudvps/list
Tham sốVị tríBắt buộcMô 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
Yêu cầu
curl 'https://cloudmoon.net/api/v1/cloudvps/list' \
  -H 'X-API-Key: ak_...'
Yêu cầu
import requests

r = requests.get(
    "https://cloudmoon.net/api/v1/cloudvps/list",
    headers={"X-API-Key": "ak_..."},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/list", {
  headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/cloudvps/list');
print_r($kq);
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "items": [
            {
                "order_code": "090926CLOUDQCLIENFZGKOX",
                "name": "VN03-1-1-20",
                "product_id": "415",
                "ip": "103.95.x.x",
                "cpu": "1",
                "ram": "1",
                "disk": "20",
                "os_id": 3,
                "os_name": "Linux Ubuntu 22.04",
                "vps_status": "running",
                "provision_status": "ready",
                "allow_addon": 1,
                "allow_change_billing_cycle": 1,
                "price_buy": 70000,
                "price_renew": 70000,
                "billing_cycle": "onemonth",
                "renew_auto": "off",
                "order_status": "active",
                "market_status": 0,
                "time_buy": "2026-09-09",
                "time_expire_moon": "2026-10-08",
                "plan": {
                    "product_id": 526,
                    "name": "VN03-1-1-20",
                    "region": "VN"
                },
                "features": {
                    "upgrade": true,
                    "change_cycle": true,
                    "change_ip": false,
                    "console": true,
                    "reinstall": true,
                    "power": true,
                    "auto_renew": true
                },
                "allowed_actions": [
                    "start",
                    "stop",
                    "restart",
                    "reinstall",
                    "renew",
                    "change_cycle",
                    "upgrade",
                    "console",
                    "sync",
                    "auto_renew",
                    "delete"
                ],
                "upgrade_limits": {
                    "cpu": 10,
                    "ram": 10,
                    "disk": 10,
                    "disk_unit_gb": 10
                }
            }
        ],
        "page": 1,
        "limit": 50,
        "total": 1
    }
}
GET

/cloudvps/info

Chỉ đọc

Chi tiết một VPS + features + allowed_actions. Mỗi lần gọi tự hỏi lại trạng thái mới nhất của máy (tối đa 1 lần / 30 giây / máy — trong khoảng ấy trả số vừa lấy); /list thì không. username/password/port CHỈ kèm khi khoá TOÀN QUYỀN và provision_status = ready (đang khởi tạo / cài lại HĐH thì chưa có).

GET https://cloudmoon.net/api/v1/cloudvps/info
Tham sốVị tríBắt buộcMô 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.

Yêu cầu
curl 'https://cloudmoon.net/api/v1/cloudvps/info?order_code=090926CLOUDQCLIENFZGKOX' \
  -H 'X-API-Key: ak_...'
Yêu cầu
import requests

r = requests.get(
    "https://cloudmoon.net/api/v1/cloudvps/info",
    headers={"X-API-Key": "ak_..."},
    params={"order_code": "090926CLOUDQCLIENFZGKOX"},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/info?order_code=090926CLOUDQCLIENFZGKOX", {
  headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/cloudvps/info?order_code=090926CLOUDQCLIENFZGKOX');
print_r($kq);
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "order_code": "090926CLOUDQCLIENFZGKOX",
        "ip": "103.95.x.x",
        "os_name": "Linux Ubuntu 22.04",
        "vps_status": "running",
        "provision_status": "ready",
        "price_renew": 70000,
        "order_status": "active",
        "time_expire_moon": "2026-10-08",
        "features": {
            "upgrade": true,
            "change_cycle": true,
            "change_ip": false,
            "console": true,
            "reinstall": true,
            "power": true,
            "auto_renew": true
        },
        "allowed_actions": [
            "start",
            "stop",
            "restart",
            "reinstall",
            "renew",
            "change_cycle",
            "upgrade",
            "console",
            "sync",
            "auto_renew",
            "delete"
        ],
        "username": "root",
        "password": "S3cret-pass",
        "port": 22,
        "dang_cai_lai": false,
        "credentials_note": null
    }
}
POST

/cloudvps/renew

Toàn quyền

Gia hạn một chu kỳ, trừ ví ngay. Giá ĐỘNG = max(giá đã trả, giá niêm yết hiện hành) — báo giá trước bằng /cloudvps/quote. Đơn hết hạn hẳn (expired) / đã xoá bị chối.

POST https://cloudmoon.net/api/v1/cloudvps/renew
Tham sốVị tríBắt buộcMô 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

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_EXPIRED (409) · ORDER_DELETED (409) · IDEMPOTENCY_PENDING (409) · COOLDOWN (429) · IN_PROGRESS (429) · FAILED (400).

Yêu cầu
curl -X POST 'https://cloudmoon.net/api/v1/cloudvps/renew' \
  -H 'X-API-Key: ak_...' \
  -H 'Idempotency-Key: 7f9c2e4b-1a2b-4c3d-9e8f-0123456789ab' \
  -H 'Content-Type: application/json' \
  -d '{"order_code":"090926CLOUDQCLIENFZGKOX"}'
Yêu cầu
import uuid
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/cloudvps/renew",
    headers={"X-API-Key": "ak_...", "Idempotency-Key": str(uuid.uuid4())},
    json={"order_code": "090926CLOUDQCLIENFZGKOX"},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs
import { randomUUID } from "node:crypto";

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/renew", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
    "Idempotency-Key": randomUUID(),
  },
  body: JSON.stringify({ order_code: "090926CLOUDQCLIENFZGKOX" }),
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/cloudvps/renew', ['order_code' => '090926CLOUDQCLIENFZGKOX'], bin2hex(random_bytes(16)));
print_r($kq);
Thân yêu cầu
{
    "order_code": "090926CLOUDQCLIENFZGKOX"
}
Phản hồi
{
    "status": "success",
    "msg": "Gia hạn VPS thành công",
    "data": {
        "order_code": "090926CLOUDQCLIENFZGKOX",
        "amount": 70000,
        "billing_cycle": "onemonth",
        "time_expire_moon": "2026-11-08"
    }
}
POST

/cloudvps/change-cycle

Toàn quyền

Đổi sang chu kỳ DÀI HƠN = gia hạn luôn một kỳ mới, TRỪ TIỀN NGAY (amount = số thật đã trừ). Chỉ đơn features.change_cycle (chưa từng nâng cấp).

POST https://cloudmoon.net/api/v1/cloudvps/change-cycle
Tham sốVị tríBắt buộcMô tả
Idempotency-Key header không Chuỗi ngẫu nhiên duy nhất cho mỗi lệnh — gửi lại cùng giá trị không trừ tiền lần hai
order_code body có Mã đơn (order_code) — lấy từ lệnh mua hoặc /list
billing_cycle body có chu kỳ trong cycles của gói, dài hơn chu kỳ hiện tại

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) · NOT_SUPPORTED (400) · ORDER_EXPIRED (409) · ORDER_DELETED (409) · LISTED_ON_MARKETPLACE (409) · IDEMPOTENCY_PENDING (409) · COOLDOWN (429) · IN_PROGRESS (429) · FAILED (400).

Yêu cầu
curl -X POST 'https://cloudmoon.net/api/v1/cloudvps/change-cycle' \
  -H 'X-API-Key: ak_...' \
  -H 'Idempotency-Key: 7f9c2e4b-1a2b-4c3d-9e8f-0123456789ab' \
  -H 'Content-Type: application/json' \
  -d '{"order_code":"090926CLOUDQCLIENFZGKOX","billing_cycle":"threemonth"}'
Yêu cầu
import uuid
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/cloudvps/change-cycle",
    headers={"X-API-Key": "ak_...", "Idempotency-Key": str(uuid.uuid4())},
    json={"order_code": "090926CLOUDQCLIENFZGKOX", "billing_cycle": "threemonth"},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs
import { randomUUID } from "node:crypto";

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/change-cycle", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
    "Idempotency-Key": randomUUID(),
  },
  body: JSON.stringify({ order_code: "090926CLOUDQCLIENFZGKOX", billing_cycle: "threemonth" }),
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/cloudvps/change-cycle', ['order_code' => '090926CLOUDQCLIENFZGKOX', 'billing_cycle' => 'threemonth'], bin2hex(random_bytes(16)));
print_r($kq);
Thân yêu cầu
{
    "order_code": "090926CLOUDQCLIENFZGKOX",
    "billing_cycle": "threemonth"
}
Phản hồi
{
    "status": "success",
    "msg": "Đổi chu kỳ và gia hạn thành công",
    "data": {
        "order_code": "090926CLOUDQCLIENFZGKOX",
        "billing_cycle": "threemonth",
        "amount": 200000,
        "time_expire_moon": "2027-01-08"
    }
}
POST

/cloudvps/upgrade

Toàn quyền

Nâng CPU/RAM/Disk máy đang chạy (chỉ đơn features.upgrade). Tiền = giá addon 1 chu kỳ × số chu kỳ còn lại tới hạn ĐÃ TRẢ (đếm theo tháng lịch, tối thiểu 1). Lỗi FAILED sau khi trừ tiền: đừng gửi lại, liên hệ hỗ trợ.

POST https://cloudmoon.net/api/v1/cloudvps/upgrade
Tham sốVị tríBắt buộcMô tả
Idempotency-Key header không Chuỗi ngẫu nhiên duy nhất cho mỗi lệnh — gửi lại cùng giá trị không trừ tiền lần hai
order_code body có Mã đơn (order_code) — lấy từ lệnh mua hoặc /list
addon_cpu body không số nguyên ≥ 0, tối đa 10/lượt
addon_ram body không GB
addon_disk body không đơn vị 10 GB

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) · NOT_SUPPORTED (400) · REBUILDING (409) · RENEW_REQUIRED (409) · ORDER_EXPIRED (409) · IDEMPOTENCY_PENDING (409) · COOLDOWN (429) · IN_PROGRESS (429) · BUSY (429) · MAINTENANCE (503) · FAILED (400).

Yêu cầu
curl -X POST 'https://cloudmoon.net/api/v1/cloudvps/upgrade' \
  -H 'X-API-Key: ak_...' \
  -H 'Idempotency-Key: 7f9c2e4b-1a2b-4c3d-9e8f-0123456789ab' \
  -H 'Content-Type: application/json' \
  -d '{"order_code":"090926CLOUDQCLIENFZGKOX","addon_ram":1}'
Yêu cầu
import uuid
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/cloudvps/upgrade",
    headers={"X-API-Key": "ak_...", "Idempotency-Key": str(uuid.uuid4())},
    json={"order_code": "090926CLOUDQCLIENFZGKOX", "addon_ram": 1},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs
import { randomUUID } from "node:crypto";

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/upgrade", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
    "Idempotency-Key": randomUUID(),
  },
  body: JSON.stringify({ order_code: "090926CLOUDQCLIENFZGKOX", addon_ram: 1 }),
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/cloudvps/upgrade', ['order_code' => '090926CLOUDQCLIENFZGKOX', 'addon_ram' => 1], bin2hex(random_bytes(16)));
print_r($kq);
Thân yêu cầu
{
    "order_code": "090926CLOUDQCLIENFZGKOX",
    "addon_ram": 1
}
Phản hồi
{
    "status": "success",
    "msg": "Nâng cấp VPS thành công",
    "data": {
        "order_code": "090926CLOUDQCLIENFZGKOX",
        "cpu": 0,
        "ram": 1,
        "disk": 0,
        "amount": 50000,
        "total_charged": 50000,
        "cycles_charged": 1
    }
}
POST

/cloudvps/auto-renew

Toàn quyền

Bật/tắt tự gia hạn của một VPS (tới hạn hệ thống tự trừ ví, giá động như gia hạn tay).

POST https://cloudmoon.net/api/v1/cloudvps/auto-renew
Tham sốVị tríBắt buộcMô tả
order_code body có Mã đơn (order_code) — lấy từ lệnh mua hoặc /list
enabled body có true | false (boolean JSON)

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_SUPPORTED (400) · ORDER_EXPIRED (409) · ORDER_DELETED (409) · COOLDOWN (429) · IN_PROGRESS (429) · SERVER_ERROR (500).

Yêu cầu
curl -X POST 'https://cloudmoon.net/api/v1/cloudvps/auto-renew' \
  -H 'X-API-Key: ak_...' \
  -H 'Content-Type: application/json' \
  -d '{"order_code":"090926CLOUDQCLIENFZGKOX","enabled":false}'
Yêu cầu
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/cloudvps/auto-renew",
    headers={"X-API-Key": "ak_..."},
    json={"order_code": "090926CLOUDQCLIENFZGKOX", "enabled": False},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/auto-renew", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ order_code: "090926CLOUDQCLIENFZGKOX", enabled: false }),
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/cloudvps/auto-renew', ['order_code' => '090926CLOUDQCLIENFZGKOX', 'enabled' => false]);
print_r($kq);
Thân yêu cầu
{
    "order_code": "090926CLOUDQCLIENFZGKOX",
    "enabled": false
}
Phản hồi
{
    "status": "success",
    "msg": "Đã tắt tự gia hạn",
    "data": {
        "order_code": "090926CLOUDQCLIENFZGKOX",
        "renew_auto": "off"
    }
}
POST

/cloudvps/action

Toàn quyền

Bật / tắt / khởi động lại. Gửi lệnh cho máy đã ở sẵn trạng thái đó vẫn THÀNH CÔNG; already: true khi hệ thống đo được máy đã ở sẵn trạng thái ấy (không phải lượt nào cũng đo được) — muốn biết máy đang chạy hay tắt thì đọc vps_status ở /info. Nhịp: 60 giây/máy.

POST https://cloudmoon.net/api/v1/cloudvps/action
Tham sốVị tríBắt buộcMô tả
order_code body có Mã đơn (order_code) — lấy từ lệnh mua hoặc /list
action body có start | stop | restart

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_SUPPORTED (400) · REBUILDING (409) · RENEW_REQUIRED (409) · ORDER_EXPIRED (409) · ORDER_DELETED (409) · COOLDOWN (429) · IN_PROGRESS (429) · BUSY (429) · MAINTENANCE (503) · FAILED (400).

Yêu cầu
curl -X POST 'https://cloudmoon.net/api/v1/cloudvps/action' \
  -H 'X-API-Key: ak_...' \
  -H 'Content-Type: application/json' \
  -d '{"order_code":"090926CLOUDQCLIENFZGKOX","action":"restart"}'
Yêu cầu
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/cloudvps/action",
    headers={"X-API-Key": "ak_..."},
    json={"order_code": "090926CLOUDQCLIENFZGKOX", "action": "restart"},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/action", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ order_code: "090926CLOUDQCLIENFZGKOX", action: "restart" }),
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/cloudvps/action', ['order_code' => '090926CLOUDQCLIENFZGKOX', 'action' => 'restart']);
print_r($kq);
Thân yêu cầu
{
    "order_code": "090926CLOUDQCLIENFZGKOX",
    "action": "restart"
}
Phản hồi
{
    "status": "success",
    "msg": "Khởi động lại VPS thành công",
    "data": {
        "order_code": "090926CLOUDQCLIENFZGKOX",
        "action": "restart",
        "already": false
    }
}
POST

/cloudvps/reinstall

Toàn quyền

Cài lại hệ điều hành — XOÁ TOÀN BỘ DỮ LIỆU. os_id lấy từ /cloudvps/os?product_id=. Một lần / 60 phút / máy. Sau lệnh provision_status = rebuilding tới khi máy mới sống.

POST https://cloudmoon.net/api/v1/cloudvps/reinstall
Tham sốVị tríBắt buộcMô tả
order_code body có Mã đơn (order_code) — lấy từ lệnh mua hoặc /list
os_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): REBUILDING (409) · RENEW_REQUIRED (409) · ORDER_EXPIRED (409) · ORDER_DELETED (409) · COOLDOWN (429) · IN_PROGRESS (429) · BUSY (429) · MAINTENANCE (503) · FAILED (400).

Yêu cầu
curl -X POST 'https://cloudmoon.net/api/v1/cloudvps/reinstall' \
  -H 'X-API-Key: ak_...' \
  -H 'Content-Type: application/json' \
  -d '{"order_code":"090926CLOUDQCLIENFZGKOX","os_id":17}'
Yêu cầu
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/cloudvps/reinstall",
    headers={"X-API-Key": "ak_..."},
    json={"order_code": "090926CLOUDQCLIENFZGKOX", "os_id": 17},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/reinstall", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ order_code: "090926CLOUDQCLIENFZGKOX", os_id: 17 }),
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/cloudvps/reinstall', ['order_code' => '090926CLOUDQCLIENFZGKOX', 'os_id' => 17]);
print_r($kq);
Thân yêu cầu
{
    "order_code": "090926CLOUDQCLIENFZGKOX",
    "os_id": 17
}
Phản hồi
{
    "status": "success",
    "msg": "Đang cài lại hệ điều hành — hỏi /cloudvps/info để biết khi nào xong",
    "data": {
        "order_code": "090926CLOUDQCLIENFZGKOX",
        "os_id": 17,
        "os_name": "Linux Ubuntu 22.04",
        "provision_status": "rebuilding"
    }
}
POST

/cloudvps/change-ip

Toàn quyền

Đổi IP công khai, CÓ PHÍ (change_ip_price). Chỉ đơn features.change_ip. Máy mất mạng tới khi hệ thống tự khởi động lại (~5-7 phút) — đừng tự restart ngay.

POST https://cloudmoon.net/api/v1/cloudvps/change-ip
Tham sốVị tríBắt buộcMô tả
Idempotency-Key header không Chuỗi ngẫu nhiên duy nhất cho mỗi lệnh — gửi lại cùng giá trị không trừ tiền lần hai
order_code body có Mã đơn (order_code) — lấy từ lệnh mua hoặc /list

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) · NOT_SUPPORTED (400) · REBUILDING (409) · RENEW_REQUIRED (409) · ORDER_EXPIRED (409) · IDEMPOTENCY_PENDING (409) · COOLDOWN (429) · IN_PROGRESS (429) · BUSY (429) · MAINTENANCE (503) · FAILED (400).

Yêu cầu
curl -X POST 'https://cloudmoon.net/api/v1/cloudvps/change-ip' \
  -H 'X-API-Key: ak_...' \
  -H 'Idempotency-Key: 7f9c2e4b-1a2b-4c3d-9e8f-0123456789ab' \
  -H 'Content-Type: application/json' \
  -d '{"order_code":"090926CLOUDBPTWQAXHVFOE"}'
Yêu cầu
import uuid
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/cloudvps/change-ip",
    headers={"X-API-Key": "ak_...", "Idempotency-Key": str(uuid.uuid4())},
    json={"order_code": "090926CLOUDBPTWQAXHVFOE"},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs
import { randomUUID } from "node:crypto";

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/change-ip", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
    "Idempotency-Key": randomUUID(),
  },
  body: JSON.stringify({ order_code: "090926CLOUDBPTWQAXHVFOE" }),
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/cloudvps/change-ip', ['order_code' => '090926CLOUDBPTWQAXHVFOE'], bin2hex(random_bytes(16)));
print_r($kq);
Thân yêu cầu
{
    "order_code": "090926CLOUDBPTWQAXHVFOE"
}
Phản hồi
{
    "status": "success",
    "msg": "Đổi IP thành công. IP mới: 103.77.x.x. Hệ thống đang khởi động lại VPS, máy sẽ vào được sau khoảng 5-7 phút.",
    "data": {
        "order_code": "090926CLOUDBPTWQAXHVFOE",
        "ip_old": "103.77.x.1",
        "ip_new": "103.77.x.2",
        "amount": 20000,
        "restarting": true
    }
}
POST

/cloudvps/sync

Chỉ đọc

Hỏi lại trạng thái THẬT của máy (IP · trạng thái chạy · máy mới/cài lại đã sẵn sàng chưa) rồi trả đơn đã làm mới. Khoá chỉ đọc gọi được. Nhịp: 20 giây/máy.

POST https://cloudmoon.net/api/v1/cloudvps/sync
Tham sốVị tríBắt buộcMô tả
order_code body có Mã đơn (order_code) — lấy từ lệnh mua hoặc /list

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_DELETED (409) · COOLDOWN (429) · IN_PROGRESS (429) · BUSY (429) · MAINTENANCE (503) · SYNC_FAILED (503).

Yêu cầu
curl -X POST 'https://cloudmoon.net/api/v1/cloudvps/sync' \
  -H 'X-API-Key: ak_...' \
  -H 'Content-Type: application/json' \
  -d '{"order_code":"090926CLOUDQCLIENFZGKOX"}'
Yêu cầu
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/cloudvps/sync",
    headers={"X-API-Key": "ak_..."},
    json={"order_code": "090926CLOUDQCLIENFZGKOX"},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/sync", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ order_code: "090926CLOUDQCLIENFZGKOX" }),
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/cloudvps/sync', ['order_code' => '090926CLOUDQCLIENFZGKOX']);
print_r($kq);
Thân yêu cầu
{
    "order_code": "090926CLOUDQCLIENFZGKOX"
}
Phản hồi
{
    "status": "success",
    "msg": "Đã cập nhật trạng thái mới nhất",
    "data": {
        "order_code": "090926CLOUDQCLIENFZGKOX",
        "vps_status": "running",
        "provision_status": "ready",
        "allowed_actions": [
            "start",
            "stop",
            "restart"
        ]
    }
}
GET

/cloudvps/console

Toàn quyền

URL console trên trình duyệt (tên miền trung tính). Khoá TOÀN QUYỀN. Chưa sẵn ⇒ pending: true + retry_after (giây). Chỉ đơn features.console.

GET https://cloudmoon.net/api/v1/cloudvps/console
Tham sốVị tríBắt buộcMô tả
order_code query có Mã đơn (order_code) — lấy từ lệnh mua hoặc /list

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_SUPPORTED (400) · REBUILDING (409) · RENEW_REQUIRED (409) · COOLDOWN (429) · BUSY (429) · MAINTENANCE (503) · CONSOLE_UNAVAILABLE (503).

Yêu cầu
curl 'https://cloudmoon.net/api/v1/cloudvps/console?order_code=090926CLOUDQCLIENFZGKOX' \
  -H 'X-API-Key: ak_...'
Yêu cầu
import requests

r = requests.get(
    "https://cloudmoon.net/api/v1/cloudvps/console",
    headers={"X-API-Key": "ak_..."},
    params={"order_code": "090926CLOUDQCLIENFZGKOX"},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/console?order_code=090926CLOUDQCLIENFZGKOX", {
  headers: { "X-API-Key": "ak_..." },
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('GET', '/v1/cloudvps/console?order_code=090926CLOUDQCLIENFZGKOX');
print_r($kq);
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "order_code": "090926CLOUDQCLIENFZGKOX",
        "console_url": "https://console.systemcloudvps.com/vnc.html?token=...",
        "pending": false,
        "retry_after": null
    }
}
POST

/cloudvps/delete

Toàn quyền

Xoá VPS — không hoàn tiền, không khôi phục. Bắt buộc confirm = đúng order_code.

POST https://cloudmoon.net/api/v1/cloudvps/delete
Tham sốVị tríBắt buộcMô tả
order_code body có Mã đơn (order_code) — lấy từ lệnh mua hoặc /list
confirm body có gõ lại đú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): REBUILDING (409) · ORDER_DELETED (409) · LISTED_ON_MARKETPLACE (409) · COOLDOWN (429) · IN_PROGRESS (429) · FAILED (400).

Yêu cầu
curl -X POST 'https://cloudmoon.net/api/v1/cloudvps/delete' \
  -H 'X-API-Key: ak_...' \
  -H 'Content-Type: application/json' \
  -d '{"order_code":"090926CLOUDQCLIENFZGKOX","confirm":"090926CLOUDQCLIENFZGKOX"}'
Yêu cầu
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/cloudvps/delete",
    headers={"X-API-Key": "ak_..."},
    json={"order_code": "090926CLOUDQCLIENFZGKOX", "confirm": "090926CLOUDQCLIENFZGKOX"},
    timeout=30,
)
print(r.status_code, r.json())
Yêu cầu
// Node.js 18+ — lưu thành tệp .mjs

const res = await fetch("https://cloudmoon.net/api/v1/cloudvps/delete", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ order_code: "090926CLOUDQCLIENFZGKOX", confirm: "090926CLOUDQCLIENFZGKOX" }),
});
console.log(res.status, await res.json());
Yêu cầu
// cm_api(): xem mục "Client mẫu" ở trang Tổng quan
$kq = cm_api('POST', '/v1/cloudvps/delete', ['order_code' => '090926CLOUDQCLIENFZGKOX', 'confirm' => '090926CLOUDQCLIENFZGKOX']);
print_r($kq);
Thân yêu cầu
{
    "order_code": "090926CLOUDQCLIENFZGKOX",
    "confirm": "090926CLOUDQCLIENFZGKOX"
}
Phản hồi
{
    "status": "success",
    "msg": "Đã xóa VPS",
    "data": {
        "order_code": "090926CLOUDQCLIENFZGKOX"
    }
}
Zalo