EntitlementsCatalog field in PublicPoliciesProduct (parity with TS / Rust / Python 0.3.0)

Mirrors keysat 0014 + the v0.3.0 cuts of the other three SDKs. New
EntitlementDef type with Slug + Name + Description; PublicPoliciesProduct
gains EntitlementsCatalog []EntitlementDef. SDK consumers' in-app
tier pickers can render display names + tooltip descriptions instead
of raw slugs. Empty slice on legacy products without a catalog.
No breaking change.
This commit is contained in:
Grant
2026-05-10 07:59:00 -05:00
parent bf4ffddbf1
commit 76f0d1dabe
+16 -4
View File
@@ -247,13 +247,25 @@ type PublicPolicy struct {
TrialDays int64 `json:"trial_days"`
}
// EntitlementDef is one entry in a product's entitlements catalog
// (Keysat migration 0014). Operator declares the closed list once per
// product; policies pick from this list. Use Name as the human-readable
// label when rendering an in-app tier picker (e.g. "AI summaries"
// instead of the raw "ai_summaries" slug).
type EntitlementDef struct {
Slug string `json:"slug"`
Name string `json:"name"`
Description string `json:"description"`
}
// PublicPoliciesProduct is the product-level fields on the public
// policies response.
type PublicPoliciesProduct struct {
Slug string `json:"slug"`
Name string `json:"name"`
Description string `json:"description"`
BasePriceSats int64 `json:"base_price_sats"`
Slug string `json:"slug"`
Name string `json:"name"`
Description string `json:"description"`
BasePriceSats int64 `json:"base_price_sats"`
EntitlementsCatalog []EntitlementDef `json:"entitlements_catalog"`
}
// PublicPoliciesResponse is the response from GET /v1/products/<slug>/policies.