Catalog response objects
Use the response fields named by the operation. The catalog API’s subscription object represents a Pricing; a member’s subscription relationship adds dates and renewal choices. See business terms. Types marked stored describe model annotations or stored values. Do not assume a type conversion unless one is stated. Common response rules cover response wrappers and unspecified units/timezones.
Plan
The shared plan fields returned by plan lists/detail and cascade applied_plan. An operation adds the relevant relationship below.
| Field | Type / presence | Meaning and conditions |
|---|---|---|
id | integer | Plan record identifier. |
title, slug, description | string / nullable stored text | Display name, stable label and description. |
full_access | boolean | Plan grants unrestricted content access when applicable; listing it does not grant membership. |
predictive_paywall | stored flag | Predictive access rule enabled for the plan; not explicitly normalized to boolean in this projection. |
predictive_percents | stored numeric value / nullable | Predictive rule percentage; not a purchase price. |
can_own_teams | stored flag | Whether the plan can support team ownership; not normalized here. |
priority | integer | Configured ranking used by some lists; not universal ordering. |
private | boolean | Private visibility flag; the detail operations can still expose private records. |
active | boolean | Configured activation flag; detail and member lists do not necessarily filter it. |
created_at, updated_at | timestamp strings | Record times; timezone unspecified. |
Plan relationships
Relationship keys depend on the call; they are not interchangeable.
| Field | Type / presence | Meaning and conditions |
|---|---|---|
subscriptions | array; public plan list | General Pricings, restricted to active public Pricings or the valid invite’s Pricing. Empty is possible. |
subscriptions | array; plan detail / integration plans | General Pricings, without the list’s active/private restriction. |
subscriptions | array; team plans | General Pricings plus users_limit (stored numeric seat limit). Only eligible active linked Pricings are selected. |
subscription | object; member plans | General Pricing with nested plan removed; adds subscription_start_date (relationship creation time), subscription_end_date (expiration, nullable), subscription_updated_date (relationship update time), autorenew (boolean member choice), is_team_subscription (boolean). Only one relationship is represented per plan. |
General Pricing
Used by plan relationships, Pricing detail, purchases and cascade source_subscription.
| Field | Type / presence | Meaning and conditions |
|---|---|---|
id | integer | Pricing identifier, distinct from a membership relationship. |
slug, title, description | string / null | Pricing label and display text. |
type | string | Stored Pricing type; no complete enum defined here. |
subscriber_type | string / null | Configured subscriber category; no closed enum. |
price | integer | Stored Pricing price; currency units unspecified. |
currency | string / null | Stored currency code; no conversion. |
period | string / null | Configured billing period text, such as 1 month; do not infer a fixed duration in seconds. |
trial_period | stored period value | Configured trial period; omission/nullability not reliably constrained by this projection. |
trial_price | stored numeric value | Trial price; units unspecified, no universal zero/default guarantee. |
trial_iterations | stored numeric value | Configured number of trial iterations; no default guaranteed here. |
is_allowed_autorenew | boolean | Pricing permits automatic renewal; different from a member’s autorenew setting. |
limit_sponsored_slots | integer / null (model annotation) | Configured sponsored slot limit. |
external_source_ids | string / null (model annotation) | Stored external-source mapping; no parsed-object guarantee. |
is_allowed_upgrade_price | stored string / null (model annotation) | Upgrade-price setting; do not assume JSON boolean. |
plan_id | integer | Parent plan ID. |
active, once, private | boolean | Activation, one-time Pricing and private flags. |
is_applied_vat | stored flag / nullable | VAT applicability; no boolean normalization guaranteed by this projection. |
vat_percent | number / nullable | Stored VAT percentage; this read does not calculate taxes. |
extra | decoded JSON value / nullable | Pricing-defined extra data; no closed schema. |
public | boolean | Inverse of private, independent of activation. |
plan | object | Compact plan projection below. |
next_subscription | general Pricing or null | Configured next Pricing. Nested next/downgrade relations stop after this level. |
downgrade_subscription | public Pricing or null | Configured downgrade Pricing uses the public projection, even here. Nested relations stop after this level. |
created_at, updated_at | timestamp strings; admin context only | Pricing record times, absent for ordinary customer context. |
country_vat | array; admin context only | Country VAT records below; empty if none. |
Compact plan
General Pricings use these fields; public Pricings omit private and extra. Each listed field is present in its corresponding projection.
| Field | Type / presence | Meaning and conditions |
|---|---|---|
id | integer | Plan record identifier. |
title, slug, description | string / nullable stored text | Display name, stable label and description. |
full_access | boolean | Plan grants unrestricted content access when applicable; listing it does not grant membership. |
can_own_teams | stored flag | Whether the plan can support team ownership; not normalized here. |
priority | integer | Configured ranking used by some lists; not universal ordering. |
private | boolean | Private visibility flag; the detail operations can still expose private records. |
extra | decoded JSON value / nullable; general only | Plan-defined extra data; no closed schema. |
Public Pricing
Used by the public Pricing list. This projection omits plan_id, active, once, private, VAT, extra and public.
| Field | Type / presence | Meaning and conditions |
|---|---|---|
id | integer | Pricing identifier, distinct from a membership relationship. |
slug, title, description | string / null | Pricing label and display text. |
type | string | Stored Pricing type; no complete enum defined here. |
subscriber_type | string / null | Configured subscriber category; no closed enum. |
price | integer | Stored Pricing price; currency units unspecified. |
currency | string / null | Stored currency code; no conversion. |
period | string / null | Configured billing period text, such as 1 month; do not infer a fixed duration in seconds. |
trial_period | stored period value | Configured trial period; omission/nullability not reliably constrained by this projection. |
trial_price | stored numeric value | Trial price; units unspecified, no universal zero/default guarantee. |
trial_iterations | stored numeric value | Configured number of trial iterations; no default guaranteed here. |
is_allowed_autorenew | boolean | Pricing permits automatic renewal; different from a member’s autorenew setting. |
limit_sponsored_slots | integer / null (model annotation) | Configured sponsored slot limit. |
external_source_ids | string / null (model annotation) | Stored external-source mapping; no parsed-object guarantee. |
is_allowed_upgrade_price | stored string / null (model annotation) | Upgrade-price setting; do not assume JSON boolean. |
plan | object | Compact plan, excluding private and extra. |
next_subscription, downgrade_subscription | public Pricing or empty object | Related public Pricing when configured; otherwise {}. Nested relations stop after one level. |
applied_cascade_access | boolean; public Pricing list only | Current user’s cascade plan matches this Pricing’s plan; false without applicable user context. |
Subscription detail plan
Pricing detail starts with the general Pricing. Its plan can be replaced by this broader projection when the parent plan lookup qualifies. Handle the compact general Pricing plan when it is not replaced.
| Field | Type / presence | Meaning and conditions |
|---|---|---|
id | integer | Plan record identifier. |
title, slug, description | string / nullable stored text | Display name, stable label and description. |
full_access | boolean | Plan grants unrestricted content access when applicable; listing it does not grant membership. |
predictive_paywall | stored flag | Predictive access rule enabled for the plan; not explicitly normalized to boolean in this projection. |
predictive_percents | stored numeric value / nullable | Predictive rule percentage; not a purchase price. |
can_own_teams | stored flag | Whether the plan can support team ownership; not normalized here. |
priority | integer | Configured ranking used by some lists; not universal ordering. |
private | boolean | Private visibility flag; the detail operations can still expose private records. |
active | boolean | Configured activation flag; detail and member lists do not necessarily filter it. |
extra | decoded JSON value / nullable | Plan-defined extra data. |
public | boolean | Inverse of private. |
subscriptions | array | Lightweight Pricings: id (integer), title (string/null), price (integer), currency and period (string/null). This is not the full general Pricing. No active/private restriction here. |
Country VAT
Only conditional admin-context general Pricings include these records.
| Field | Type / presence | Meaning and conditions |
|---|---|---|
id, subscription_id, country_id | stored integer IDs | VAT record, Pricing and country references. |
vat_percent | stored numeric value | Country-specific VAT percentage. |
created_at, updated_at | timestamp strings | Record times. |
country | object / null | Country with id (stored integer), code and title (stored strings); null when reference missing. |