catalog

GET /v1/catalog/plans

List the sellable plans with their prices.

Бүх catalog төгсгөлийн цэгүүд

Баталгаажуулалт

Энэ эцсийн цэг нь нийтийнх юм. Энэ нь ямар нэгэн итгэмжлэл болон байгууллагын мэдээлэл шаарддаггүй бөгөөд манай өөрийн маркетингийн сайт болон хиймэл интеллектийн хариултын системүүдийн уншдаг зүйл юм.

Энэ төгсгөл цэг нь ямар ч байгууллагын ID шаардахгүй. Таны түлхүүр аль хэдийн харьяалагдах байгууллагыг тодорхойлж байгаа бөгөөд хариу нь тухайн байгууллагын хүрээнд хязгаарлагдана.

Туршиж үзэх

Өнцөг хаалтанд байгаа бүх зүйлийг өөрийн утгаар солиж, түлхүүр санамж байрлуулагчийг хяналтын самбарынхаа түлхүүрээр сольж оруулна уу.

curl -X GET https://api.zinndigital.com/v1/catalog/plans

Та нэвтэрсэн байна уу? Таны хяналтын самбар дахь API консол нь таны бодит байгууллагын ID болон өөрийн түлхүүрийг автоматаар бөглөж, шууд ажиллаж буй API рүү хүсэлт илгээх тул та бодит хариуг харах боломжтой болно. Энэ төгсгөлийн цэгийг API консол дээр нээх

Дэлгэрэнгүй

Returns every active plan with its current version's **resolved entitlements** (product-line defaults overlaid with the plan's own) and its list prices, in the stored currency and interval. Prices are integer minor units + an ISO currency code (CLAUDE.md §2.8); USD is the base, and a derived, charm-rounded row is served for every enabled currency once the FX refresh has run (docs/29 §2). **Public** (docs/35 #19). **`prices` is a multi-row array, one entry per (interval, currency)** — never a single pre-converted row. A client selects the entry matching the customer's chosen currency AND interval, and must render **nothing** rather than fall back to an amount in a different currency: a number in the wrong currency, or the right number under the wrong symbol, is worse than an absent price (#471). **Each plan carries `plan_version_id`, the identifier that makes it purchasable.** A `hosting_plan` cart line pins a plan *version*, not a plan, so before this field existed a customer could browse the catalogue and had no way to buy anything in it (#463). The full self-serve path is `POST /v1/carts` → `POST /v1/carts/{cartId}/lines` with `{kind: hosting_plan, plan_version_id, metadata: {interval}}` → `POST /v1/carts/{cartId}/checkout`. An **internal** plan is never listed here and the cart refuses it, so the unlimited staff plan cannot be self-served. Returned **whole, not cursor-paginated** — a deliberate, documented deviation matching `getTranslationBundle`: the catalogue is our own bounded content, and a pricing page or the pricing slider needs every tier at once, not 50 at a time. The response is bounded by a hard server-side cap; a catalogue that would exceed it is a `422` (it never silently truncates), which cannot happen with today's catalogue and exists only so unbounded future growth fails loudly. Cacheable exactly like `listProductLines` (strong `ETag` + `max-age=60`).

Параметрүүд

НэрТөрөлЗаавал шаардлагатайЭнэ юу вэ
product_line (query)stringҮгүйRestrict to one product line by its code (e.g. `footprint_free`). Unknown code → empty list.
currency (query)stringҮгүйNarrow each plan's `prices` array to a single ISO 4217 currency. **Optional and additive**: omitting it returns every currency exactly as before, so no existing client changes b…
If-None-Match (header)stringҮгүйA previously returned `ETag`; a match responds `304`.

Хариу үйлдэл

НэрТөрөлЗаавал шаардлагатайЭнэ юу вэ
dataCatalogPlan[]Тийм

Энэ төгсгөл цэгээс буцааж болох алдаанууд

422 · 429