public
POST /v1/public/cart/{token}/plan
Add a hosting plan, or a free trial of one, to an anonymous cart.
Xác thực
Điểm cuối này là công khai. Nó không yêu cầu thông tin xác thực hay tổ chức nào — đây chính là nội dung mà trang web tiếp thị và các công cụ trả lời bằng AI của chúng tôi đọc.
Endpoint này không nhận ID tổ chức. Khóa của bạn đã xác định tổ chức mà nó thuộc về và phản hồi được giới hạn trong phạm vi đó.
Dùng thử
Thay thế bất kỳ nội dung nào trong ngoعل (angle brackets) bằng giá trị của riêng bạn và trình giữ chỗ key bằng một key từ trang tổng quan của bạn.
curl -X POST https://api.zinndigital.com/v1/public/cart/{token}/plan \
-H "Content-Type: application/json" \
-d '{ "plan_version_id": <string>, "interval": <string<monthly, annual>> }'Đã đăng nhập? Bảng điều khiển API trong trang quản lý của bạn sẽ tự điền ID tổ chức thực tế và khóa của riêng bạn, sau đó chạy yêu cầu đối với API trực tiếp để bạn có thể xem phản hồi thực tế. Mở điểm cuối này trong bảng điều khiển API
Chi tiết
Owner ruling D-W15-2: hosting, free trials and domains go through ONE public checkout, so a visitor never has to sign up in the app before they can buy. The price is computed by the server from the pinned plan VERSION in the cart's own currency; anything sent by the client is ignored. A basket holds one plan at a time, because a subscription governs the org rather than a line. `trial: true` prices the line at **zero** and is refused (`422`) on a plan that does not offer a trial — eligibility is read from the catalogue, never taken on trust.
Tham số
| Tên | Loại | Bắt buộc | Nội dung này là gì |
|---|---|---|---|
token (path) | string | Có | The anonymous cart's opaque bearer token (`zgc_…`), as returned by `createPublicCart`. **It is a credential** — anyone holding it can read and modify the cart — and it travels i… |
Nội dung yêu cầu
| Tên | Loại | Bắt buộc | Nội dung này là gì |
|---|---|---|---|
plan_version_id | string | Có | The immutable plan VERSION being bought. Pinning the version rather than the plan is what stops a catalogue edit repricing a basket somebody is part-way through. |
interval | string<monthly, annual> | Có | — |
domain | PublicCartPlanDomain | Không | Which domain this hosting is for. **Optional** — "I will decide later" is a real and common answer, and refusing it would put a wall in front of the purchase this field exists t… |
trial | boolean | Không | Start a free trial of this plan instead of buying it. The line prices at zero and the order completes with no payment step (owner ruling 2026-08-09 — a trial takes no card and s… |
Phản hồi
| Tên | Loại | Bắt buộc | Nội dung này là gì |
|---|---|---|---|
id | Uuid | Có | UUIDv7 identifier — sortable by creation time (docs/02 §8). |
token | string | Không | The bearer token. Returned **only** from `createPublicCart` — it is absent on every subsequent read, because only its digest is stored. |
status | string<open, converted, expired> | Có | — |
currency | CurrencyCode | Có | ISO 4217 currency code (money is minor units + this code — CLAUDE.md §2.8). |
product_line | string | Không | — |
expires_at | string | Có | After this the cart is gone — reads 404 whether or not it has been purged. |
items | PublicCartItem[] | Có | — |
totals | PublicCartTotals | Có | Pre-tax totals. Tax appears on the order, once a billing country exists. |
Các lỗi điểm cuối này có thể trả về
404 · 422 · 429