API HostingMọi thao tác của công cụ cấu hình, qua HTTP.

Bearer token với phạm vi quyền do quý khách tự chọn, tính idempotent trên mọi thao tác ghi, phân trang dạng cursor, và một endpoint kiểm tra trạng thái không cần API key — vì thời điểm quý khách cần truy vấn nhất cũng có thể là lúc chính tài khoản của quý khách đang gặp sự cố.

điểm cuối13

Bắt đầu nhanh

Không cần SDK · Không bất ngờ về phiên bản · Không có giới hạn tốc độ mà quý khách gặp phải

Bắt đầu nhanh

Một máy chủ, từ con số không, chỉ trong hai lệnh gọi.

Tạo một khóa trong khu vực khách hàng, chọn phạm vi quyền của nó, và nó chỉ được hiển thị một lần. Không có khóa chủ (master key) trên tài khoản này và không có cách nào mở rộng quyền của khóa sau khi đã tạo — hãy tạo một khóa mới thay vào đó.

1 — xem những gì quý khách có thể mua

curl -s https://api.dediprivacy.com/v1/plans?family=vps \
  -H "Authorization: Bearer $DP_KEY"

2 — triển khai

curl -s -X POST https://api.dediprivacy.com/v1/servers \
  -H "Authorization: Bearer $DP_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
        "plan":   "vps-4",
        "region": "ams",
        "image":  "debian-13",
        "cycle":  "12"
      }'

Việc cấp phát trừ vào số dư tài khoản. Một yêu cầu khiến số dư âm sẽ thất bại với 402 và mức thiếu hụt chính xác thay vì dựng một nửa máy chủ — không có trạng thái khởi tạo dở dang nào cần dọn dẹp, và không có hóa đơn nào gửi đến sau đó.

Quy ước

Những phần giống nhau ở mọi lệnh gọi, được quyết định một lần để quý khách không phải tra lại lần thứ hai.

URL gốc
https://api.dediprivacy.com/v1 Chỉ TLS, HTTP/2, và không có cổng không mã hóa nào để chuyển hướng từ đó. Một yêu cầu dạng văn bản thuần bị từ chối thay vì được nâng cấp, vì việc nâng cấp có nghĩa là yêu cầu đã đi qua mạng một lần rồi.
Xác thực
Bearer token, theo từng khóa Khóa được tạo trong khu vực khách hàng với phạm vi quý khách chọn, hiển thị một lần duy nhất, và được lưu trữ dưới dạng băm. Không có khóa chủ và không có xác thực bằng mật khẩu trên API này.
Loại nội dung
application/json Áp dụng cho cả yêu cầu và phản hồi. Thời gian theo RFC 3339 tính bằng UTC, tiền được biểu diễn dưới dạng số nguyên đơn vị cent, và không có định dạng phụ thuộc vùng miền nào ở bất kỳ đâu.
Idempotency
Idempotency-Key trên mọi yêu cầu POST Một khóa lặp lại sẽ trả về phản hồi ban đầu thay vì cấp phát hai lần. Khóa được ghi nhớ trong 24 giờ, dài hơn bất kỳ vòng lặp thử lại nào cần chạy.
Giới hạn tốc độ
600 yêu cầu mỗi phút Tính theo từng khóa API, được trả về trong X-RateLimit-Remaining. Các yêu cầu khởi tạo (provisioning) được giới hạn riêng ở mức 60 lần mỗi giờ; hãy liên hệ nếu điều này thực sự gây cản trở cho quý khách.
Phân trang
Con trỏ, không phải số trang Một next_cursor trong mọi phản hồi danh sách. Phân trang theo offset sẽ âm thầm bỏ qua các hàng khi tập dữ liệu nền thay đổi, và chúng tôi không muốn gửi lỗi đó đến quý khách.

Định danh

Được đọc từ cùng một danh mục mà bảng giá công khai và bộ cấu hình được xây dựng. Một khu vực mới được thêm vào hệ thống sẽ xuất hiện ở đây mà không cần ai chỉnh sửa trang này.

khu vực

  • kefReykjavík
  • otpBucharest
  • sofSofia
  • kivChișinău
  • zrhZurich
  • amsAmsterdam
  • ptyPanama City
  • sinSingapore

dòng

  • vpsCloud VPS
  • rdpWindows RDP
  • chuyên dụngMáy chủ riêng
  • gpuGPU Compute
  • private-cloudPrivate Cloud
  • web-hostingLưu trữ web
  • lưu trữLưu trữ Object & Block
  • colocationColocation
  • tùy chỉnhCấu hình tùy chỉnh

chu kỳ

  • 11 tháng
  • 33 thángs, −5 %
  • 1212 thángs, −20 %
  • 2424 thángs, −35 %

Điểm cuối

Danh mục

Mọi thứ có thể đặt hàng, kèm giá theo thời gian thực. Không cần xác thực — đây chính là những con số dùng để xây dựng bảng giá công khai.

GET /regions Danh sách khu vực

Mọi khu vực với mã định danh, thành phố, quốc gia và trạng thái hoạt động hiện tại.

Phản hồi

{
  "data": [
    { "id": "ams", "city": "Amsterdam", "country": "Netherlands",
      "status": "operational", "uplink_gbit": 600 }
  ]
}
GET /plans Danh sách gói

Lọc theo nhóm sản phẩm bằng ?family=vps. Giá tính theo tháng bằng cent, trước khi áp dụng chiết khấu theo chu kỳ.

Phản hồi

{
  "data": [
    { "id": "vps-4", "family": "vps", "cores": 4, "ram_gb": 8,
      "disk_gb": 160, "price_cents": 1100, "regions": ["ams","kef"] }
  ],
  "next_cursor": null
}
GET /images Danh sách hình ảnh

Các bản dựng hệ điều hành có sẵn cho từng dòng, cùng với tình trạng bản quyền của mỗi bản.

Phản hồi

{
  "data": [
    { "id": "debian-13", "name": "Debian 13", "licence": "included" },
    { "id": "win-2025", "name": "Windows Server 2025", "licence": "included" }
  ]
}

Điểm cuối

Máy chủ

Tạo, kiểm tra và điều khiển máy chủ. Việc cấp phát trừ vào số dư tài khoản; một yêu cầu khiến tài khoản bị âm sẽ báo lỗi 402 kèm số tiền thiếu chính xác, thay vì dựng dở dang một thứ gì đó.

POST /servers Triển khai máy chủ

Trả kết quả ngay lập tức với trạng thái "provisioning". Truy vấn lại tài nguyên hoặc dùng webhook.

Yêu cầu

{
  "plan": "vps-4",
  "region": "ams",
  "image": "debian-13",
  "cycle": "12",
  "label": "edge-01",
  "ssh_keys": ["ssh-ed25519 AAAA..."]
}

Phản hồi

{
  "id": "srv_8Kq2",
  "status": "provisioning",
  "region": "ams",
  "ipv4": null,
  "charged_cents": 10560,
  "renews_at": "2027-07-28T00:00:00Z"
}
GET /servers Danh sách máy chủ

Toàn bộ nội dung trong tài khoản, mới nhất trước.

Phản hồi

{
  "data": [
    { "id": "srv_8Kq2", "label": "edge-01", "status": "active",
      "region": "ams", "ipv4": "203.0.113.10",
      "ipv6": "2001:db8:1234:5678::2" }
  ],
  "next_cursor": null
}
GET /servers/{id} Truy xuất máy chủ

Chi tiết đầy đủ bao gồm cấu hình, các địa chỉ và lần gia hạn tiếp theo.

Phản hồi

{
  "id": "srv_8Kq2",
  "status": "active",
  "plan": "vps-4",
  "image": "debian-13",
  "cycle": "12",
  "renews_at": "2027-07-28T00:00:00Z"
}
POST /servers/{id}/actions Thao tác trên máy chủ

Một endpoint, một trường hành động: reboot, shutdown, start, rebuild, resize, rdns.

Yêu cầu

{
  "action": "rebuild",
  "image": "ubuntu-26-04"
}

Phản hồi

{
  "id": "act_3Xf9",
  "action": "rebuild",
  "status": "running"
}
DELETE /servers/{id} Hủy máy chủ

Chạy đến hết kỳ hạn đã thanh toán. Thêm ?immediate=true để hủy ngay lập tức và ngừng tính phí kể từ hôm nay.

Phản hồi

{
  "id": "srv_8Kq2",
  "status": "cancelled",
  "ends_at": "2027-07-28T00:00:00Z"
}

Điểm cuối

Thanh toán

Một số dư tài trợ cho mọi thứ. Không có đối tượng hóa đơn nào vì không có gì phải truy theo — một dịch vụ được trừ từ số dư vào ngày gia hạn của nó.

GET /balance Truy xuất số dư

Số dư hiện tại, khoản đã cam kết cho việc gia hạn, và thời gian số dư đó còn dùng được với tốc độ tiêu hao hiện tại.

Phản hồi

{
  "balance_cents": 48250,
  "committed_cents": 12400,
  "runway_days": 117
}
POST /topups Mở yêu cầu nạp tiền

Trả về một địa chỉ thanh toán cho loại tài sản đã chọn. Mọi khoản thưởng được áp dụng ngay khi thanh toán được xác nhận.

Yêu cầu

{
  "amount_cents": 100000,
  "asset": "XMR"
}

Phản hồi

{
  "id": "top_5Wc1",
  "asset": "XMR",
  "address": "4A...",
  "amount": "3.417",
  "bonus_cents": 30000,
  "expires_at": "2026-07-28T18:00:00Z"
}
GET /ledger Danh sách mục sổ cái

Mọi khoản ghi có và ghi nợ, cùng dịch vụ tương ứng. Đây là toàn bộ những gì chúng tôi lưu giữ về thanh toán của quý khách.

Phản hồi

{
  "data": [
    { "at": "2026-07-28T16:04:00Z", "cents": -1100,
      "kind": "renewal", "ref": "srv_8Kq2" }
  ]
}

Điểm cuối

Trạng thái

Công khai và không cần xác thực, nhờ đó có thể được truy vấn bởi thứ gì đó không nắm giữ khóa của quý khách — và vẫn phản hồi ngay cả khi chính tài khoản của quý khách gặp trục trặc.

GET /status Trạng thái hiện tại

Các số liệu giống như trang trạng thái, được tính từ cùng một hồ sơ sự cố.

Phản hồi

{
  "state": "operational",
  "open_incidents": 0,
  "uptime_90d": 99.9971,
  "regions": { "ams": "operational", "kef": "operational" }
}
GET /incidents Danh sách sự cố

Bản thân hồ sơ, có thể lọc theo khu vực và ngày.

Phản hồi

{
  "data": [
    { "id": "inc_71", "region": "otp", "severity": "partial",
      "started_at": "2026-06-07T02:14:00Z",
      "unreachable_seconds": 1080 }
  ]
}

Lỗi

Mỗi lỗi đều mang một mã và một thông điệp được viết cho con người. Khớp theo mã; thông điệp thì được phép cải thiện.

400 invalid_request Nội dung không thể phân tích, hoặc một trường có kiểu dữ liệu sai. Thông báo nêu rõ tên trường đó.
401 chưa xác thực Không có khóa, khóa sai định dạng, hoặc khóa đã bị thu hồi.
403 scope_missing Khóa hợp lệ nhưng không được tạo với phạm vi (scope) mà lệnh gọi này cần. Phạm vi được chọn riêng cho từng khóa và không thể mở rộng sau khi đã tạo.
402 insufficient_funds Số dư sẽ không đủ để chi trả. Phản hồi mang theo required_cents và balance_cents để quý khách có thể xử lý mà không cần gọi lần thứ hai.
404 not_found Không có tài nguyên như vậy trên tài khoản này. Cố tình giống hệt phản hồi dành cho tài nguyên thuộc tài khoản người khác.
409 xung đột Tài nguyên đang bận — thường là do đã có một thao tác đang chạy trên máy chủ đó.
422 không khả dụng Hợp lệ, nhưng hiện chưa thể thực hiện: gói đó đã hết hàng tại khu vực này, hoặc hình ảnh hệ thống không được cung cấp cho dòng máy đó.
429 rate_limited Retry-After được đặt, và giá trị đó chính xác chứ không phải một số cố định.
5xx server_error Của chúng tôi. An toàn khi thử lại với cùng một Idempotency-Key — đó chính xác là mục đích của nó.

A 404 đối với một tài nguyên thuộc tài khoản của người khác giống hệt từng byte với phản hồi cho một tài nguyên chưa từng tồn tại. Đây là chủ ý: các phản hồi có thể phân biệt sẽ biến một API thành công cụ để dò tìm hạ tầng của người khác.