Tham chiếu API

API VPS Giá Rẻ

VPS Giá Rẻ. Mua là ĐỒNG BỘ: lệnh mua trừ tiền ngay, trả HTTP 202 kèm order_code; máy được bàn giao trong thời gian dự kiến (delivery_hours) — hỏi /vpssave/info tới khi provision_status = ready. Không bàn giao được ⇒ đơn bị huỷ, tiền hoàn vào số dư (failed + refunded_amount). Khởi động lại / cài lại hệ điều hành là YÊU CẦU cho kỹ thuật xử lý (HTTP 202, mỗi lúc một yêu cầu). Không có bật/tắt · console · nâng cấp · đổi chu kỳ · đổi IP. 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. Đặt mua & bàn giao
  3. Trạng thái đơn
  4. Thời hạn & gia hạn
  5. Yêu cầu kỹ thuật
  6. Luật riêng
  7. Nhịp thao tác
  8. Mã lỗi riêng
  9. GET /vpssave/products
  10. GET /vpssave/os
  11. POST /vpssave/quote
  12. POST /vpssave/buy
  13. GET /vpssave/list
  14. GET /vpssave/info
  15. POST /vpssave/renew
  16. POST /vpssave/auto-renew
  17. POST /vpssave/reboot
  18. POST /vpssave/reinstall
  19. POST /vpssave/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 /vpssave/products Danh mục VPS Giá Rẻ: giá từng chu kỳ (cycles = chu kỳ mua được; amount đã trừ chiết khấu đại lý, amount_original = giá … Chỉ đọc
GET /vpssave/os Hệ điều hành: ?product_id= ⇒ HĐH mua được cho gói · ?order_code= ⇒ HĐH cài lại được cho máy đó. Luôn dùng os_id trả về … Chỉ đọc
POST /vpssave/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, os_id?} — CÙNG bộ k… Chỉ đọc
POST /vpssave/buy Mua VPS Giá Rẻ — trừ tiền NGAY (giá thuê) và trả HTTP 202 kèm order_code; đơn ở provision_status = provisioning tới khi… Toàn quyền
GET /vpssave/list Mọi VPS Giá Rẻ của tài khoản (không kèm mật khẩu). Mặc định bỏ đơn đã xoá; ?status= pending | active | pending_expired … Chỉ đọc
GET /vpssave/info Chi tiết một VPS Giá Rẻ: provision_status (provisioning · ready · failed · expired · deleted), estimated_ready_at (đơn … Chỉ đọc
POST /vpssave/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 /vpssave/quote… Toàn quyền
POST /vpssave/auto-renew Bật/tắt tự gia hạn (tới hạn hệ thống tự trừ ví, giá động như gia hạn tay). Đặt đúng giá trị đang có vẫn thành công. Toàn quyền
POST /vpssave/reboot Gửi YÊU CẦU khởi động lại cho kỹ thuật xử lý ⇒ HTTP 202; theo dõi pending_action ở /vpssave/info. Mỗi lúc chỉ MỘT yêu c… Toàn quyền
POST /vpssave/reinstall Gửi YÊU CẦU cài lại hệ điều hành (máy bị XOÁ TRẮNG khi bắt đầu cài — sao lưu trước) ⇒ HTTP 202. os_id lấy từ /vpssave/o… Toàn quyền
POST /vpssave/delete Xoá VPS — KHÔNG hoàn tiền, không khôi phục. Bắt buộc confirm = đúng order_code. Đơn chưa bàn giao không xoá được (409 R… Toàn quyền

Giá đại lý: Danh mục, báo giá và lệnh mua trả về (và trừ ví) giá thuê đã trừ chiết khấu theo cấp đại lý; gia hạn theo giá niêm yết hiện hành (không thấp hơn giá đã trả). — xem mục Tài khoản đại lý.

Đặt mua & bàn giao

VPS Giá Rẻ không được tạo tự động trong vài phút như Cloud VPS: mỗi đơn được kỹ thuật bàn giao sau khi bạn đặt — thời gian dự kiến 48 giờ (trường delivery_hours ở danh mục). Lệnh mua vì vậy trừ tiền ngay nhưng máy tới sau:

  1. POST /vpssave/buy kiểm hết (gói, chu kỳ, hệ điều hành, số dư khả dụng, giới hạn lệnh mua) rồi trừ ví ngay và trả HTTP 202: order_code, provision_status: "provisioning", charged: true, total_charged, time_expire_moon, estimated_ready_at.
  2. Hỏi GET /vpssave/info?order_code=… thưa thôi — mỗi 5–10 phút là đủ — tới khi provision_status là ready (đã bàn giao) hoặc failed.
  3. Khi ready, khoá Toàn quyền đọc được username · password · port; địa chỉ máy ở trường ip.
  • estimated_ready_at là mốc dự kiến, không phải cam kết: quá mốc mà chưa xong thì đơn vẫn đang được xử lý, không tự huỷ. Cần gấp hãy liên hệ hỗ trợ kèm order_code.
  • Không bàn giao được ⇒ đơn bị huỷ và hoàn đủ số đã trừ vào số dư: info trả provision_status: "failed", order_status: "cancelled" và refunded_amount. Đơn đã huỷ không thao tác được nữa (409 ORDER_CANCELLED).
  • Trong lúc chờ bàn giao, đơn chỉ nhận bật/tắt tự gia hạn; gia hạn, yêu cầu kỹ thuật và xoá nhận 409 REBUILDING. Muốn huỷ đơn chưa bàn giao ⇒ liên hệ hỗ trợ.
  • Lệnh mua không tự chống bấm đúp: hai lệnh giống hệt là hai đơn và hai lần trừ tiền — luôn gửi Idempotency-Key.

Trạng thái đơn

order_status là trạng thái của đơn, provision_status là cách đọc gọn cho bộ tích hợp (cùng tên với Cloud VPS) — mỗi ô bên trái ghi order_status ở trên, provision_status tương ứng ở dưới:

order_status
provision_status
Nghĩa
pending
provisioning
Đã trả tiền, đang chờ bàn giao — xem estimated_ready_at.
active
ready
Đang hoạt động. (Đơn đã kích hoạt mà chưa có thông tin truy cập thì vẫn báo provisioning.)
pending_expired
ready
Quá hạn — dịch vụ đang tạm ngưng: Bảng điều khiển và console đã bị khoá. Máy vẫn chạy cho tới khi hết thời gian chờ. Thông tin đăng nhập bị ẩn; gia hạn trong đúng ngày hết hạn để dùng lại.
expired
expired
Hết hạn hẳn — quá thời gian tạm ngưng mà chưa gia hạn: không gia hạn được nữa (409 ORDER_EXPIRED); sau 30 ngày kể từ khi hết hạn, đơn bị xoá khỏi hệ thống và máy được thu hồi.
cancelled
failed
Không bàn giao được — đã hoàn tiền (refunded_amount).
deleted
deleted
Bạn đã xoá — không hoàn tiền, không khôi phục.
  • features: restart · reinstall · auto_renew là true (reinstall còn tuỳ máy có hệ điều hành cài lại được); power · console · upgrade · change_cycle · change_ip luôn false — giữ cùng khoá với Cloud VPS để một bộ tích hợp đọc được cả hai.
  • allowed_actions: renew · auto_renew · reboot · reinstall · delete — tên nào vắng mặt thì lệnh ấy đang bị chối ở thời điểm này (đơn chờ bàn giao, quá hạn, đang có yêu cầu chờ, đang rao bán trên chợ…).

Thời hạn & gia hạn

  • Thời hạn tính từ lúc đặt mua, không chờ tới lúc bàn giao — time_expire_moon có ngay trong câu trả lời của lệnh mua.
  • POST /vpssave/renew cộng một chu kỳ vào hạn hiện tại và trừ ví ngay. Giá = giá đã trả lúc mua hoặc giá niêm yết hiện hành của chu kỳ, lấy số lớn hơn. Số kỳ tới nằm ở price_renew của info; muốn chắc chắn hãy gọi POST /vpssave/quote với {"order_code": "…", "type": "renew"} — kèm hạn mới new_time_expire_moon.
  • Đơn luôn gia hạn theo đúng chu kỳ đã chọn lúc mua (billing_cycle), kể cả khi chu kỳ ấy không còn bán cho đơn mới. Không đổi chu kỳ được.
  • Tự gia hạn (renew_auto: "on", đổi bằng POST /vpssave/auto-renew): trong 7 ngày trước hạn, hệ thống tự gia hạn một chu kỳ khi ví đủ tiền — giá như gia hạn tay.
  • Tới ngày hết hạn mà chưa gia hạn ⇒ pending_expired: dịch vụ tạm ngưng, vẫn gia hạn được trong đúng ngày hết hạn. Sau đó ⇒ expired: không gia hạn được nữa (409 ORDER_EXPIRED); sau 30 ngày kể từ khi hết hạn, đơn bị xoá khỏi hệ thống và máy được thu hồi. Gia hạn trước hạn (hoặc bật tự gia hạn) là chắc nhất.

Yêu cầu kỹ thuật — khởi động lại · cài lại hệ điều hành

POST /vpssave/reboot và POST /vpssave/reinstall (os_id lấy từ GET /vpssave/os?order_code=…) là yêu cầu gửi kỹ thuật xử lý, không chạy tức thì: lệnh trả HTTP 202 kèm request, status: "pending" và mốc dự kiến estimated_done_at.

  • Theo dõi ở info: còn chờ thì pending_action = {type: "restart" | "reinstall", os_id, os_name, deadline}; xử lý xong hoặc bị từ chối thì về null. Kết quả (kể cả lý do khi từ chối) được báo qua email của tài khoản.
  • Mỗi máy chỉ một yêu cầu đang chờ (khởi động lại hoặc cài lại) — gửi thêm ⇒ 409 REQUEST_PENDING. Máy đang rao bán trên chợ ⇒ 409 LISTED_ON_MARKETPLACE.
  • Cài lại xoá trắng dữ liệu khi bắt đầu cài — sao lưu trước. Trong lúc chờ, máy vẫn chạy với thông tin đăng nhập cũ; cài xong thì os_id / os_name đổi sang hệ điều hành mới — đọc lại thông tin đăng nhập ở info.

Luật riêng

  • Không có bật/tắt nguồn, console, nâng cấp cấu hình, đổi chu kỳ, đổi IP hay làm mới trạng thái qua API — features báo false.
  • Xoá (POST /vpssave/delete, confirm = đúng order_code): không hoàn tiền, không khôi phục; đơn chưa bàn giao không xoá được.
  • Trần lệnh mua qua API: tối đa 3 đơn đã trả tiền mà chưa bàn giao (gộp Dedicated Server + VPS Giá Rẻ) — 429 TOO_MANY_PENDING — và 10 lượt mua mỗi giờ (429 RATE_LIMITED); hai bộ đếm tính cả đơn đặt trên web, và tính riêng với lệnh mua Cloud VPS. 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.
  • Chạy thử (X-Sandbox: 1): mã SANDBOX… đi vòng đời rút gọn — 60 giây đầu provisioning, sau đó ready kèm thông tin đăng nhập mẫu; kịch bản PROVISION_FAILED ⇒ failed + refunded_amount (mô phỏng đơn đã trừ tiền rồi được hoàn). Yêu cầu kỹ thuật chạy thử trả 202 mô phỏng, không gửi đi đâu.

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

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 — 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.

Yêu cầu gửi kỹ thuật (khởi động lại · cài lại hệ điều hành) không đi theo đồng hồ mà theo hàng chờ: mỗi máy chỉ một yêu cầu đang chờ — gửi thêm ⇒ 409 REQUEST_PENDING, chờ pending_action ở info về null. Khác với 429 IN_PROGRESS: một lệnh API khác trên cùng đơn đang chạy dở, chờ vài giây là gửi lại được.

LệnhCách lệnh trước trên cùng máy
Gia hạn1 phút
Bật/tắt tự gia hạn5 giây (tính riêng)
Khởi động lại · cài lại hệ điều hànhkhông theo đồng hồ — mỗi máy MỘT yêu cầu đang chờ (gửi thêm khi còn yêu cầu chờ ⇒ 409 REQUEST_PENDING; theo dõi pending_action ở /vpssave/info)
Xoákhông phải chờ

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 /vpssave/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 ORDER_CANCELLED Đơn đã bị huỷ vì không bàn giao được — tiền đã hoàn vào số dư (refunded_amount ở /vpssave/info). Đặt mua gói khác.
409 RENEW_REQUIRED Dịch vụ đang tạm ngưng vì quá hạn. Gia hạn (/vpssave/renew) rồi thao tác lại.
409 REQUEST_PENDING Máy đang có một yêu cầu khởi động lại / cài lại hệ điều hành chờ kỹ thuật xử lý — mỗi lúc chỉ một yêu cầu. Theo dõi pending_action ở /vpssave/info; xong rồi gửi yêu cầu kế.
409 LISTED_ON_MARKETPLACE Máy đang được rao bán trên chợ — khởi động lại, cài lại và xoá 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.
GET

/vpssave/products

Chỉ đọc

Danh mục VPS Giá Rẻ: giá từng chu kỳ (cycles = chu kỳ mua được; amount đã trừ chiết khấu đại lý, amount_original = giá niêm yết), delivery_hours = số giờ bàn giao DỰ KIẾN, features. Gói tạm hết hàng VẪN có trong danh sách với in_stock: false (đặt mua 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/vpssave/products
Tham sốVị tríBắt buộcMô tả
region query không mã khu vực, vd vn · us · de
in_stock query không 1 = chỉ gói còn hàng
Yêu cầu
curl 'https://cloudmoon.net/api/v1/vpssave/products' \
  -H 'X-API-Key: ak_...'
Yêu cầu
import requests

r = requests.get(
    "https://cloudmoon.net/api/v1/vpssave/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/vpssave/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/vpssave/products');
print_r($kq);
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "items": [
            {
                "product_id": 69,
                "product_code": "10402",
                "name": "US104-02",
                "group_name": "us104",
                "region_code": "us",
                "city": "California",
                "cpu": "2 vCPU",
                "gpu": "",
                "ram": "2 GB RAM",
                "disk": "30 GB SSD NVMe",
                "ip": "1",
                "bandwidth": "1 Gbps",
                "traffic": "Unlimited",
                "in_stock": true,
                "cycles": [
                    "onemonth"
                ],
                "pricing": {
                    "onemonth": {
                        "amount": 240000,
                        "amount_original": 240000,
                        "billing_cycle": "1 Tháng"
                    }
                },
                "features": {
                    "restart": true,
                    "reinstall": true,
                    "auto_renew": true,
                    "power": false,
                    "console": false,
                    "upgrade": false,
                    "change_cycle": false,
                    "change_ip": false
                },
                "delivery_hours": 48
            }
        ],
        "total": 1,
        "discount_percent": 0,
        "currency": "VND"
    }
}
GET

/vpssave/os

Chỉ đọc

Hệ điều hành: ?product_id= ⇒ HĐH mua được cho gói · ?order_code= ⇒ HĐH cài lại được cho máy đó. Luôn dùng os_id trả về ở đây.

GET https://cloudmoon.net/api/v1/vpssave/os
Tham sốVị tríBắt buộcMô tả
product_id query không id số trong /vpssave/products (HĐH mua được)
order_code query không mã đơn (HĐH cài lại được)

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/vpssave/os?product_id=69' \
  -H 'X-API-Key: ak_...'
Yêu cầu
import requests

r = requests.get(
    "https://cloudmoon.net/api/v1/vpssave/os",
    headers={"X-API-Key": "ak_..."},
    params={"product_id": "69"},
    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/vpssave/os?product_id=69", {
  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/vpssave/os?product_id=69');
print_r($kq);
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "items": [
            {
                "os_id": 86,
                "os_name": "AlmaLinux 9 x64",
                "os_type": "linux",
                "icon": "/frontend/assets/images/almalinux.png"
            }
        ],
        "total": 1
    }
}
POST

/vpssave/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, os_id?} — CÙNG bộ kiểm với lệnh mua; enough so với available_balance (= số dư − tiền các lệnh mua VPS còn chờ tạo máy). Đơn có sẵn: {order_code, type: renew} ⇒ giá gia hạn kỳ tới + hạn mới.

POST https://cloudmoon.net/api/v1/vpssave/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 — một trong cycles của gói
os_id body không mua mới (tuỳ chọn) — gửi thì kiểm luôn
order_code body không đơn có sẵn
type body không renew (đơn có sẵn)

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/vpssave/quote' \
  -H 'X-API-Key: ak_...' \
  -H 'Content-Type: application/json' \
  -d '{"product_id":69,"billing_cycle":"onemonth","os_id":86}'
Yêu cầu
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/vpssave/quote",
    headers={"X-API-Key": "ak_..."},
    json={"product_id": 69, "billing_cycle": "onemonth", "os_id": 86},
    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/vpssave/quote", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ product_id: 69, billing_cycle: "onemonth", os_id: 86 }),
});
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/vpssave/quote', ['product_id' => 69, 'billing_cycle' => 'onemonth', 'os_id' => 86]);
print_r($kq);
Thân yêu cầu
{
    "product_id": 69,
    "billing_cycle": "onemonth",
    "os_id": 86
}
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "type": "buy",
        "product_id": 69,
        "billing_cycle": "onemonth",
        "os_id": 86,
        "amount": 240000,
        "amount_original": 240000,
        "discount_percent": 0,
        "total": 240000,
        "currency": "VND",
        "balance": 20000000,
        "available_balance": 20000000,
        "enough": true,
        "delivery_hours": 48
    }
}
POST

/vpssave/buy

Toàn quyền

Mua VPS Giá Rẻ — trừ tiền NGAY (giá thuê) và trả HTTP 202 kèm order_code; đơn ở provision_status = provisioning tới khi được bàn giao (thời gian dự kiến ở estimated_ready_at, không phải cam kết). Hỏi /vpssave/info tới khi ready. Không bàn giao được ⇒ đơn bị huỷ, hoàn tiền vào số dư (failed + refunded_amount). Trần đơn chờ bàn giao (gộp Dedicated Server + VPS Giá Rẻ) và lượt mua mỗi giờ: xem mục Giới hạn lệnh mua ở trang Tổng quan (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/vpssave/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 kết quả cũ, không mua hai lần
product_id body có id số trong /vpssave/products
os_id body có từ /vpssave/os?product_id=
billing_cycle body có một trong cycles của gó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ì. Kịch bản lỗi (X-Sandbox-Scenario): INSUFFICIENT_BALANCE (402) · NOT_FOUND (404) · OUT_OF_STOCK (409) · IDEMPOTENCY_PENDING (409) · TOO_MANY_PENDING (429) · RATE_LIMITED (429) · BUSY (429) · SERVICE_DISABLED (503) · FAILED (400) · 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/vpssave/buy' \
  -H 'X-API-Key: ak_...' \
  -H 'Idempotency-Key: 7f9c2e4b-1a2b-4c3d-9e8f-0123456789ab' \
  -H 'Content-Type: application/json' \
  -d '{"product_id":69,"os_id":86,"billing_cycle":"onemonth"}'
Yêu cầu
import uuid
import requests

r = requests.post(
    "https://cloudmoon.net/api/v1/vpssave/buy",
    headers={"X-API-Key": "ak_...", "Idempotency-Key": str(uuid.uuid4())},
    json={"product_id": 69, "os_id": 86, "billing_cycle": "onemonth"},
    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/vpssave/buy", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
    "Idempotency-Key": randomUUID(),
  },
  body: JSON.stringify({ product_id: 69, os_id: 86, billing_cycle: "onemonth" }),
});
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/vpssave/buy', ['product_id' => 69, 'os_id' => 86, 'billing_cycle' => 'onemonth'], bin2hex(random_bytes(16)));
print_r($kq);
Thân yêu cầu
{
    "product_id": 69,
    "os_id": 86,
    "billing_cycle": "onemonth"
}
Phản hồi
{
    "status": "success",
    "msg": "Đã nhận đơn — đang chờ bàn giao",
    "data": {
        "order_code": "101026VPSSVQWERTYUIOPAS",
        "order_status": "pending",
        "provision_status": "provisioning",
        "charged": true,
        "product_id": 69,
        "billing_cycle": "onemonth",
        "os_id": 86,
        "price_buy": 240000,
        "total_charged": 240000,
        "time_expire_moon": "2026-11-09",
        "estimated_ready_at": "2026-10-12T10:00:00+07:00",
        "note": "Đơn đã trừ tiền và đang chờ bàn giao — hỏi GET /vpssave/info?order_code= tới khi provision_status = ready"
    }
}
GET

/vpssave/list

Chỉ đọc

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

GET https://cloudmoon.net/api/v1/vpssave/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/vpssave/list' \
  -H 'X-API-Key: ak_...'
Yêu cầu
import requests

r = requests.get(
    "https://cloudmoon.net/api/v1/vpssave/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/vpssave/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/vpssave/list');
print_r($kq);
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "items": [
            {
                "order_code": "101026VPSSVQWERTYUIOPAS",
                "name": "US104-02",
                "plan": {
                    "product_id": 69,
                    "name": "US104-02",
                    "region": "us"
                },
                "ip": "203.0.113.25",
                "cpu": "2 vCPU",
                "gpu": "",
                "ram": "2 GB RAM",
                "disk": "30 GB SSD NVMe",
                "os_id": 86,
                "os_name": "AlmaLinux 9 x64",
                "os_type": "linux",
                "order_status": "active",
                "provision_status": "ready",
                "estimated_ready_at": null,
                "pending_action": null,
                "price_buy": 240000,
                "price_renew": 240000,
                "billing_cycle": "onemonth",
                "renew_auto": "on",
                "listed_on_marketplace": false,
                "time_buy": "2026-10-10",
                "time_expire_moon": "2026-11-09",
                "refunded_amount": null,
                "features": {
                    "restart": true,
                    "reinstall": true,
                    "auto_renew": true,
                    "power": false,
                    "console": false,
                    "upgrade": false,
                    "change_cycle": false,
                    "change_ip": false
                },
                "allowed_actions": [
                    "renew",
                    "auto_renew",
                    "reboot",
                    "reinstall",
                    "delete"
                ]
            }
        ],
        "page": 1,
        "limit": 50,
        "total": 1
    }
}
GET

/vpssave/info

Chỉ đọc

Chi tiết một VPS Giá Rẻ: provision_status (provisioning · ready · failed · expired · deleted), estimated_ready_at (đơn chờ bàn giao), pending_action (yêu cầu khởi động lại / cài lại đang chờ), refunded_amount (đơn bị huỷ), features + allowed_actions. username/password/port CHỈ kèm khi khoá TOÀN QUYỀN, máy ready và dịch vụ đang hoạt động.

GET https://cloudmoon.net/api/v1/vpssave/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/vpssave/info?order_code=101026VPSSVQWERTYUIOPAS' \
  -H 'X-API-Key: ak_...'
Yêu cầu
import requests

r = requests.get(
    "https://cloudmoon.net/api/v1/vpssave/info",
    headers={"X-API-Key": "ak_..."},
    params={"order_code": "101026VPSSVQWERTYUIOPAS"},
    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/vpssave/info?order_code=101026VPSSVQWERTYUIOPAS", {
  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/vpssave/info?order_code=101026VPSSVQWERTYUIOPAS');
print_r($kq);
Phản hồi
{
    "status": "success",
    "msg": "OK",
    "data": {
        "order_code": "101026VPSSVQWERTYUIOPAS",
        "name": "US104-02",
        "plan": {
            "product_id": 69,
            "name": "US104-02",
            "region": "us"
        },
        "ip": "203.0.113.25",
        "cpu": "2 vCPU",
        "gpu": "",
        "ram": "2 GB RAM",
        "disk": "30 GB SSD NVMe",
        "os_id": 86,
        "os_name": "AlmaLinux 9 x64",
        "os_type": "linux",
        "order_status": "active",
        "provision_status": "ready",
        "estimated_ready_at": null,
        "pending_action": null,
        "price_buy": 240000,
        "price_renew": 240000,
        "billing_cycle": "onemonth",
        "renew_auto": "on",
        "listed_on_marketplace": false,
        "time_buy": "2026-10-10",
        "time_expire_moon": "2026-11-09",
        "refunded_amount": null,
        "features": {
            "restart": true,
            "reinstall": true,
            "auto_renew": true,
            "power": false,
            "console": false,
            "upgrade": false,
            "change_cycle": false,
            "change_ip": false
        },
        "allowed_actions": [
            "renew",
            "auto_renew",
            "reboot",
            "reinstall",
            "delete"
        ],
        "username": "root",
        "password": "S3cret-pass",
        "port": 22,
        "credentials_note": null
    }
}
POST

/vpssave/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 /vpssave/quote {order_code, type: renew}. Dịch vụ tạm ngưng vì quá hạn vẫn gia hạn được; đơn chờ bàn giao · đã huỷ · hết hạn hẳn · đã xoá bị chối. Nhịp: 60 giây/đơn.

POST https://cloudmoon.net/api/v1/vpssave/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) · REBUILDING (409) · ORDER_EXPIRED (409) · ORDER_DELETED (409) · ORDER_CANCELLED (409) · IDEMPOTENCY_PENDING (409) · COOLDOWN (429) · IN_PROGRESS (429) · BUSY (429) · NOT_SUPPORTED (400) · FAILED (400).

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

r = requests.post(
    "https://cloudmoon.net/api/v1/vpssave/renew",
    headers={"X-API-Key": "ak_...", "Idempotency-Key": str(uuid.uuid4())},
    json={"order_code": "101026VPSSVQWERTYUIOPAS"},
    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/vpssave/renew", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
    "Idempotency-Key": randomUUID(),
  },
  body: JSON.stringify({ order_code: "101026VPSSVQWERTYUIOPAS" }),
});
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/vpssave/renew', ['order_code' => '101026VPSSVQWERTYUIOPAS'], bin2hex(random_bytes(16)));
print_r($kq);
Thân yêu cầu
{
    "order_code": "101026VPSSVQWERTYUIOPAS"
}
Phản hồi
{
    "status": "success",
    "msg": "Gia hạn thành công",
    "data": {
        "order_code": "101026VPSSVQWERTYUIOPAS",
        "amount": 240000,
        "billing_cycle": "onemonth",
        "time_expire_moon": "2026-12-09"
    }
}
POST

/vpssave/auto-renew

Toàn quyền

Bật/tắt tự gia hạn (tới hạn hệ thống tự trừ ví, giá động như gia hạn tay). Đặt đúng giá trị đang có vẫn thành công.

POST https://cloudmoon.net/api/v1/vpssave/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): ORDER_EXPIRED (409) · ORDER_DELETED (409) · ORDER_CANCELLED (409) · COOLDOWN (429) · IN_PROGRESS (429) · FAILED (400).

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

r = requests.post(
    "https://cloudmoon.net/api/v1/vpssave/auto-renew",
    headers={"X-API-Key": "ak_..."},
    json={"order_code": "101026VPSSVQWERTYUIOPAS", "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/vpssave/auto-renew", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ order_code: "101026VPSSVQWERTYUIOPAS", 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/vpssave/auto-renew', ['order_code' => '101026VPSSVQWERTYUIOPAS', 'enabled' => false]);
print_r($kq);
Thân yêu cầu
{
    "order_code": "101026VPSSVQWERTYUIOPAS",
    "enabled": false
}
Phản hồi
{
    "status": "success",
    "msg": "Đã tắt tự gia hạn",
    "data": {
        "order_code": "101026VPSSVQWERTYUIOPAS",
        "renew_auto": "off"
    }
}
POST

/vpssave/reboot

Toàn quyền

Gửi YÊU CẦU khởi động lại cho kỹ thuật xử lý ⇒ HTTP 202; theo dõi pending_action ở /vpssave/info. Mỗi lúc chỉ MỘT yêu cầu (khởi động lại hoặc cài lại) đang chờ — gửi thêm ⇒ 409 REQUEST_PENDING.

POST https://cloudmoon.net/api/v1/vpssave/reboot
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): REQUEST_PENDING (409) · REBUILDING (409) · RENEW_REQUIRED (409) · ORDER_EXPIRED (409) · ORDER_DELETED (409) · ORDER_CANCELLED (409) · LISTED_ON_MARKETPLACE (409) · IN_PROGRESS (429) · FAILED (400).

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

r = requests.post(
    "https://cloudmoon.net/api/v1/vpssave/reboot",
    headers={"X-API-Key": "ak_..."},
    json={"order_code": "101026VPSSVQWERTYUIOPAS"},
    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/vpssave/reboot", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ order_code: "101026VPSSVQWERTYUIOPAS" }),
});
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/vpssave/reboot', ['order_code' => '101026VPSSVQWERTYUIOPAS']);
print_r($kq);
Thân yêu cầu
{
    "order_code": "101026VPSSVQWERTYUIOPAS"
}
Phản hồi
{
    "status": "success",
    "msg": "Đã ghi nhận yêu cầu khởi động lại",
    "data": {
        "order_code": "101026VPSSVQWERTYUIOPAS",
        "request": "restart",
        "status": "pending",
        "estimated_done_at": "2026-10-12T10:00:00+07:00",
        "note": "Yêu cầu đã chuyển cho kỹ thuật — hỏi GET /vpssave/info?order_code= (pending_action) tới khi xong"
    }
}
POST

/vpssave/reinstall

Toàn quyền

Gửi YÊU CẦU cài lại hệ điều hành (máy bị XOÁ TRẮNG khi bắt đầu cài — sao lưu trước) ⇒ HTTP 202. os_id lấy từ /vpssave/os?order_code=. Trong lúc chờ máy vẫn chạy với thông tin đăng nhập cũ. Mỗi lúc chỉ MỘT yêu cầu ⇒ 409 REQUEST_PENDING.

POST https://cloudmoon.net/api/v1/vpssave/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ó từ /vpssave/os?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): REQUEST_PENDING (409) · REBUILDING (409) · RENEW_REQUIRED (409) · ORDER_EXPIRED (409) · ORDER_DELETED (409) · ORDER_CANCELLED (409) · LISTED_ON_MARKETPLACE (409) · NOT_SUPPORTED (400) · IN_PROGRESS (429) · FAILED (400).

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

r = requests.post(
    "https://cloudmoon.net/api/v1/vpssave/reinstall",
    headers={"X-API-Key": "ak_..."},
    json={"order_code": "101026VPSSVQWERTYUIOPAS", "os_id": 86},
    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/vpssave/reinstall", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ order_code: "101026VPSSVQWERTYUIOPAS", os_id: 86 }),
});
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/vpssave/reinstall', ['order_code' => '101026VPSSVQWERTYUIOPAS', 'os_id' => 86]);
print_r($kq);
Thân yêu cầu
{
    "order_code": "101026VPSSVQWERTYUIOPAS",
    "os_id": 86
}
Phản hồi
{
    "status": "success",
    "msg": "Đã ghi nhận yêu cầu cài lại hệ điều hành",
    "data": {
        "order_code": "101026VPSSVQWERTYUIOPAS",
        "request": "reinstall",
        "status": "pending",
        "os_id": 86,
        "os_name": "AlmaLinux 9 x64",
        "estimated_done_at": "2026-10-12T10:00:00+07:00",
        "note": "Yêu cầu đã chuyển cho kỹ thuật — hỏi GET /vpssave/info?order_code= (pending_action) tới khi xong"
    }
}
POST

/vpssave/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. Đơn chưa bàn giao không xoá được (409 REBUILDING) — muốn huỷ thì liên hệ hỗ trợ.

POST https://cloudmoon.net/api/v1/vpssave/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) · ORDER_CANCELLED (409) · ORDER_EXPIRED (409) · LISTED_ON_MARKETPLACE (409) · IN_PROGRESS (429) · BUSY (429) · FAILED (400).

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

r = requests.post(
    "https://cloudmoon.net/api/v1/vpssave/delete",
    headers={"X-API-Key": "ak_..."},
    json={"order_code": "101026VPSSVQWERTYUIOPAS", "confirm": "101026VPSSVQWERTYUIOPAS"},
    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/vpssave/delete", {
  method: "POST",
  headers: {
    "X-API-Key": "ak_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ order_code: "101026VPSSVQWERTYUIOPAS", confirm: "101026VPSSVQWERTYUIOPAS" }),
});
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/vpssave/delete', ['order_code' => '101026VPSSVQWERTYUIOPAS', 'confirm' => '101026VPSSVQWERTYUIOPAS']);
print_r($kq);
Thân yêu cầu
{
    "order_code": "101026VPSSVQWERTYUIOPAS",
    "confirm": "101026VPSSVQWERTYUIOPAS"
}
Phản hồi
{
    "status": "success",
    "msg": "Đã xoá dịch vụ",
    "data": {
        "order_code": "101026VPSSVQWERTYUIOPAS",
        "order_status": "deleted",
        "refunded": false
    }
}
Zalo