Lists one-off plan purchases across customers, live or expired. Filter by customer, entity, plan, or status. Pages may hold fewer than limit rows while has_more is true.
POST
/
v1
/
purchases.list
Typescript (SDK)
import { Autumn } from 'autumn-js'const autumn = new Autumn()const result = await autumn.customers.listPurchases({ customerId: "cus_123", statuses: [ "active", "expired", ],});
from autumn_sdk import Autumn
autumn = Autumn(secret_key="am_sk_test...")
res = autumn.customers.list_purchases(
customer_id="cus_123",
limit=50,
start_cursor="",
statuses=[
"active",
"expired",
],
)
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
x-api-version
string
default:2.6.0
required
Body
application/json
customer_id
string
Only return rows for this customer. Omit to list across every customer.
entity_id
string
Only return rows for this entity. Requires customer_id.
limit
integer
default:50
Number of items to return. Default 50, hard ceiling 200.
Required range: 1 <= x <= 200
start_cursor
string
default:""
Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.
statuses
enum<string>[]
Statuses to include. Defaults to active and scheduled. past_due matches plans with overdue payments, which read as status active with past_due true.
Minimum array length: 1
Available options:
active,
scheduled,
past_due,
expired
plan_id
string
Only return rows for this plan.
Response
200 - application/json
OK
list
object[]
required
Rows on this page.
Show child attributes
has_more
boolean
required
Whether more results exist. A page may hold fewer than limit items (even zero) while has_more is true, so paginate until has_more is false.
next_cursor
string | null
required
Pass as start_cursor to fetch the next page. Null when has_more is false.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Autumn","colors":{"primary":"#8838ff","light":"#9b5cff","dark":"#8838ff"},"logo":{"light":"https://mintcdn.com/autumn-b9b4c0fb/BOEMpWFJsAdGcii1/assets/logo/autumn-dark.svg?fit=max\u0026auto=format\u0026n=BOEMpWFJsAdGcii1\u0026q=85\u0026s=720bd2227c435e77f2c91cbfcbccd274","dark":"https://mintcdn.com/autumn-b9b4c0fb/BOEMpWFJsAdGcii1/assets/logo/autumn-light.svg?fit=max\u0026auto=format\u0026n=BOEMpWFJsAdGcii1\u0026q=85\u0026s=f700b862e5d0ada8c89a5976d27863fe"},"favicon":"https://mintcdn.com/autumn-b9b4c0fb/ihHX49Ug6NamJ10t/favicon.svg?fit=max\u0026auto=format\u0026n=ihHX49Ug6NamJ10t\u0026q=85\u0026s=b1fd8b3e3086e5a3855a8cf8c45dd57a","api":{"playground":{"display":"interactive"},"examples":{"languages":["typescript","python","bash"]}},"appearance":{"default":"system","strict":false},"background":{"color":{"light":"#FFFFFF","dark":"#0A0A0A"}},"navbar":{"primary":{"type":"button","label":"Dashboard","href":"https://app.useautumn.com"}},"footer":{"socials":{"x":"https://x.com/autumnpricing","linkedin":"https://linkedin.com/company/useautumn"}},"fonts":{"heading":{"family":"Inter"},"body":{"family":"Inter"}},"contextual":{"options":["copy","cursor","view"],"display":"header"},"interaction":{"drilldown":true},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Discord","icon":"discord","href":"https://discord.gg/STqxY92zuS"},{"anchor":"Website","icon":"globe","href":"https://useautumn.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"autumn-b9b4c0fb","hasAudioNarration":false,"actualSubdomain":"autumn-b9b4c0fb","customDomains":["docs.useautumn.com"],"gitSource":{"type":"github","owner":"useautumn","repo":"autumn","deployBranch":"main","contentDirectory":"apps/docs/mintlify","isPrivate":true,"mountPath":"","label":""},"feedback":{"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af767b5fdfd9a78271c801a","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API Reference","count":107},{"language":"default","tag":"Documentation","count":61},{"language":"default","tag":"Billing","count":21},{"language":"default","tag":"Configure Pricing","count":19},{"language":"default","tag":"Lakehouse","count":18},{"language":"default","tag":"Customers","count":16},{"language":"default","tag":"Rewards \u0026 Referrals","count":13},{"language":"default","tag":"Additional Resources","count":13},{"language":"default","tag":"Balances","count":12},{"language":"default","tag":"Webhook Events","count":10}],"searchSettings":{"tuning":{"anchor":{"titleCoverageRelabel":true}}}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"language-tabs.css","content":"[data-testid=\"code-sample-language-select\"],.code-sample-language-select,[aria-haspopup=\"listbox\"]{}"},{"filePath":"style.css","content":".prose>.api-section{display:none!important}"}],"page":{"pagePath":"api-reference/customers/listPurchases","slug":"/api-reference/customers/listPurchases","pageMetadata":{"title":"List Purchases","openapi":"openapi POST /v1/purchases.list","description":"Lists one-off plan purchases across customers, live or expired. Filter by customer, entity, plan, or status. Pages may hold fewer than `limit` rows while `has_more` is true.","href":"/api-reference/customers/listPurchases"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Lists one-off plan purchases across customers, live or expired. Filter by customer, entity, plan, or status. Pages may hold fewer than \", _jsx(_components.code, {\n children: \"limit\"\n }), \" rows while \", _jsx(_components.code, {\n children: \"has_more\"\n }), \" is true.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const DynamicResponseExample=({json,statusCode=`200`})=>{const{CodeBlock,ResponseExample}=_provideComponents()||{};if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);const toCamelCase=str=>{return str.replace(/_([a-z])/g,(_,c)=>c.toUpperCase())};const convertKeysToCamelCase=obj=>{if(Array.isArray(obj)){return obj.map(item=>convertKeysToCamelCase(item))}if(obj!==null\u0026\u0026typeof obj===`object`){return Object.keys(obj).reduce((acc,key)=>{const camelKey=toCamelCase(key);acc[camelKey]=convertKeysToCamelCase(obj[key]);return acc},{})}return obj};const[isTypeScript,setIsTypeScript]=useState(()=>{if(typeof window!==`undefined`){try{const lang=localStorage.getItem(`code`);return JSON.parse(lang)===`typescript`}catch{return true}}return true});useEffect(()=>{const onMintlifyStorage=event=>{if(event.detail?.key===`code`){try{const value=JSON.parse(event.detail.value);setIsTypeScript(value===`typescript`)}catch{}}};const pollInterval=setInterval(()=>{try{const lang=localStorage.getItem(`code`);const value=JSON.parse(lang);setIsTypeScript(value===`typescript`)}catch{}},300);document.addEventListener(`mintlify-localstorage`,onMintlifyStorage);return()=>{document.removeEventListener(`mintlify-localstorage`,onMintlifyStorage);clearInterval(pollInterval)}},[]);const camelCaseJson=useMemo(()=>convertKeysToCamelCase(json),[json]);const snakeCaseString=JSON.stringify(json,null,2);const camelCaseString=JSON.stringify(camelCaseJson,null,2);return _jsx(ResponseExample,{children:isTypeScript?_jsx(CodeBlock,{language:`json`,filename:statusCode,children:camelCaseString}):_jsx(CodeBlock,{language:`json`,filename:statusCode,children:snakeCaseString})})};const DynamicResponseField=({children,name,...props})=>{const{ResponseField}=_provideComponents()||{};if(!ResponseField)_missingMdxReference(`ResponseField`,true);const convertToCamelCase=str=>{if(typeof str!==`string`)return str;return str.replace(/[_-](\\w)/g,(_,c)=>c.toUpperCase())};const[lang,setLang]=useState(()=>{if(typeof window!==`undefined`){const stored=localStorage.getItem(`code`);return stored||`\"typescript\"`}return`\"typescript\"`});useEffect(()=>{const onMintlifyStorage=event=>{const key=event.detail?.key;if(key===`code`){setLang(event.detail.value)}};const pollInterval=setInterval(()=>{const current=localStorage.getItem(`code`);if(current\u0026\u0026current!==lang){setLang(current)}},500);document.addEventListener(`mintlify-localstorage`,onMintlifyStorage);return()=>{document.removeEventListener(`mintlify-localstorage`,onMintlifyStorage);clearInterval(pollInterval)}},[lang]);const resolvedName=useMemo(()=>{try{const value=JSON.parse(lang);const useCamelCase=value===`typescript`;return useCamelCase?convertToCamelCase(name):name}catch{return name}},[name,lang]);return _jsx(ResponseField,{name:resolvedName,...props,children})};const DynamicParamField=({children,body,path,...props})=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);const convertToCamelCase=str=>{if(typeof str!==`string`)return str;return str.replace(/[_-](\\w)/g,(_,c)=>c.toUpperCase())};const[lang,setLang]=useState(()=>{if(typeof window!==`undefined`){const stored=localStorage.getItem(`code`);return stored||`\"typescript\"`}return`\"typescript\"`});useEffect(()=>{const onMintlifyStorage=event=>{const key=event.detail?.key;if(key===`code`){setLang(event.detail.value)}};const pollInterval=setInterval(()=>{const current=localStorage.getItem(`code`);if(current\u0026\u0026current!==lang){setLang(current)}},500);document.addEventListener(`mintlify-localstorage`,onMintlifyStorage);return()=>{document.removeEventListener(`mintlify-localstorage`,onMintlifyStorage);clearInterval(pollInterval)}},[lang]);const resolvedBody=useMemo(()=>{try{const value=JSON.parse(lang);const useCamelCase=value===`typescript`;return useCamelCase?convertToCamelCase(body):body}catch{return body}},[body,lang]);const resolvedPath=useMemo(()=>{try{const value=JSON.parse(lang);const useCamelCase=value===`typescript`;return useCamelCase?convertToCamelCase(path):path}catch{return path}},[path,lang]);return _jsx(ParamField,{body:resolvedBody,path:resolvedPath,...props,children})};function _createMdxContent(props){const _components={code:`code`,p:`p`,..._provideComponents(),...props.components},{Expandable,Heading,Note,_MdxComponentBoundary}=_components;if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Lists one-off plan purchases. By default only live purchases are returned; pass `,_jsx(_components.code,{children:`statuses: [\"expired\"]`}),` to see purchases that have ended.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`A page can hold fewer than `,_jsx(_components.code,{children:`limit`}),` rows (even zero) while `,_jsx(_components.code,{children:`has_more`}),` is `,_jsx(_components.code,{children:`true`}),`. Keep paginating until `,_jsx(_components.code,{children:`has_more`}),` is `,_jsx(_components.code,{children:`false`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`body-parameters`,children:`Body Parameters`}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`customer_id`,type:`string`,children:_jsx(_components.p,{children:`Only return rows for this customer. Omit to list across every customer.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`entity_id`,type:`string`,children:_jsx(_components.p,{children:`Only return rows for this entity. Requires customer_id.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`limit`,type:`integer`,children:_jsx(_components.p,{children:`Number of items to return. Default 50, hard ceiling 200.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`start_cursor`,type:`string`,children:_jsx(_components.p,{children:`Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`statuses`,type:`('active' | 'scheduled' | 'past_due' | 'expired')[]`,children:_jsx(_components.p,{children:`Statuses to include. Defaults to active and scheduled. past_due matches plans with overdue payments, which read as status active with past_due true.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`plan_id`,type:`string`,children:_jsx(_components.p,{children:`Only return rows for this plan.`})})}),`\n`,_jsx(Heading,{level:`3`,id:`response`,children:`Response`}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`list`,type:`object[]`,children:[_jsx(_components.p,{children:`Rows on this page.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`plan_id`,type:`string`,children:_jsx(_components.p,{children:`The unique identifier of the purchased plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expires_at`,type:`number | null`,children:_jsx(_components.p,{children:`Timestamp when the purchase expires, or null for lifetime access.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`started_at`,type:`number`,children:_jsx(_components.p,{children:`Timestamp when the purchase was made.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`,children:_jsx(_components.p,{children:`Number of units purchased.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`scope`,type:`'customer' | 'entity'`,children:_jsx(_components.p,{children:`Whether this purchase is attached at the customer level or entity level.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`plan`,type:`object`,children:[_jsx(_components.p,{children:`The plan as this customer has it, including any customised items and prices.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`id`,type:`string`,children:_jsx(_components.p,{children:`Unique identifier for the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string`,children:_jsx(_components.p,{children:`Display name of the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`description`,type:`string | null`,children:_jsx(_components.p,{children:`Optional description of the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`group`,type:`string | null`,children:_jsx(_components.p,{children:`Group identifier for organizing related plans. Plans in the same group are mutually exclusive.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`version`,type:`number`,children:_jsx(_components.p,{children:`Version number of the plan. Incremented when plan configuration changes.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`version_slug`,type:`string | null`,children:_jsx(_components.p,{children:`User-facing version identity. Defaults to v{n} when the version is minted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`active`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this is the active version of the plan. At most one version is active.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add_on`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this is an add-on plan that can be attached alongside a main plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`auto_enable`,type:`boolean`,children:_jsx(_components.p,{children:`If true, this plan is automatically attached when a customer is created. Used for free plans.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Base recurring price for the plan. Null for free plans or usage-only plans.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Base price amount for the plan, in major currency units (e.g. dollars).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Base price amounts in additional currencies. The base ‘amount’ is in the org’s default currency.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval (e.g. ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`display`,type:`object`,children:[_jsx(_components.p,{children:`Display text for showing this price in pricing pages.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`primary_text`,type:`string`,children:_jsx(_components.p,{children:`Main display text (e.g. ‘$10’ or ‘100 messages’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`secondary_text`,type:`string`,children:_jsx(_components.p,{children:`Secondary display text (e.g. ‘per month’ or ‘then $0.5 per 100’).`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`processors`,type:`object`,children:[_jsx(_components.p,{children:`Payment processors this base price is connected to. Omitted when unset.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`stripe`,type:`object | null`,children:_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`price_id`,type:`string`,children:_jsx(_components.p,{children:`Stripe price ID. For prepaid with included > 0 this is the V2 price.`})})})})})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`items`,type:`object[]`,children:[_jsx(_components.p,{children:`Feature configurations included in this plan. Each item defines included units, pricing, and reset behavior for a feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`threshold_billing`,type:`object | null`,children:[_jsx(_components.p,{children:`Bills this many feature units when outstanding overage reaches it.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature this item configures.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature`,type:`object`,children:[_jsx(_components.p,{children:`The full feature object if expanded.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature, used to refer to it in other API calls like /track or /check.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string | null`,children:_jsx(_components.p,{children:`The name of the feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`type`,type:`'static' | 'boolean' | 'single_use' | 'continuous_use' | 'credit_system' | 'ai_credit_system'`,children:_jsx(_components.p,{children:`The type of the feature`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`display`,type:`object | null`,children:[_jsx(_components.p,{children:`Singular and plural display names for the feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`singular`,type:`string`,children:_jsx(_components.p,{children:`The singular display name for the feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`plural`,type:`string`,children:_jsx(_components.p,{children:`The plural display name for the feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object[] | null`,children:[_jsx(_components.p,{children:`Credit cost schema for credit system features.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the metered feature (should be a single_use feature).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`The credit cost of the metered feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`archived`,type:`boolean | null`,children:_jsx(_components.p,{children:`Whether or not the feature is archived.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Number of free units included. For consumable features, balance resets to this number each interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`reset`,type:`object | null`,children:[_jsx(_components.p,{children:`Reset configuration for consumable features. Null for non-consumable features like seats where usage persists across billing cycles.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`The interval at which the feature balance resets (e.g. ‘month’, ‘year’). For consumable features, usage resets to 0 and included units are restored.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Pricing configuration for usage beyond included units. Null if feature is entirely free.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage is consumed. Mutually exclusive with tiers.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Amounts in additional currencies for this flat price. The base ‘amount’ is in the org’s default currency. Only valid with ‘amount’, not ‘tiers’ (tiered prices carry per-currency amounts on each tier).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing configuration. Each tier’s ‘to’ INCLUDES the included amount. Either ‘tiers’ or ‘amount’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`,children:_jsx(_components.p,{children:`Flat amount for this tier in this currency, if the tier uses one.`})})})]})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`'graduated' | 'volume'`,children:_jsx(_components.p,{children:`How tiers price usage. ‘graduated’ (default) charges each unit at the rate of the tier it falls in. ‘volume’ picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier’s rate plus its flat_amount.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval for this price. For usage-based features, should match reset.interval, unless the price has graduated tiers and reset.interval is a whole multiple of it: each invoice then bills only the newly owed usage, at the tier the reset period has reached.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of units per price increment. Usage is rounded UP to the nearest billing_units when billed (e.g. billing_units=100 means 101 usage rounds to 200).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`‘prepaid’ for features like seats where customers pay upfront, ‘usage_based’ for pay-as-you-go after included usage.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_purchase`,type:`number | null`,children:_jsx(_components.p,{children:`Maximum units a customer can purchase beyond included. E.g. if included=100 and max_purchase=300, customer can use up to 400 total before usage is capped. Null for no limit.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`processors`,type:`object`,children:[_jsx(_components.p,{children:`Payment processors this item price is connected to. Omitted when unset.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`stripe`,type:`object | null`,children:_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`price_id`,type:`string`,children:_jsx(_components.p,{children:`Stripe price ID. For prepaid with included > 0 this is the V2 price.`})})})})})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`display`,type:`object`,children:[_jsx(_components.p,{children:`Display text for showing this item in pricing pages.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`primary_text`,type:`string`,children:_jsx(_components.p,{children:`Main display text (e.g. ‘$10’ or ‘100 messages’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`secondary_text`,type:`string`,children:_jsx(_components.p,{children:`Secondary display text (e.g. ‘per month’ or ‘then $0.5 per 100’).`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`rollover`,type:`object`,children:[_jsx(_components.p,{children:`Rollover configuration for unused units. If set, unused included units roll over to the next period.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max`,type:`number | null`,children:_jsx(_components.p,{children:`Maximum rollover units. Null for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_percentage`,type:`number | null`,children:_jsx(_components.p,{children:`Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_type`,type:`'month' | 'forever'`,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`expiry`,type:`object | null`,children:[_jsx(_components.p,{children:`Purchased units expire this long after each purchase. One-off prepaid consumable items only.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration`,type:`'day' | 'week' | 'month' | 'year'`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`length`,type:`number`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_override`,type:`object`,children:[_jsx(_components.p,{children:`Overrides fields of this item’s feature for customers on this plan (e.g. a credit system’s credit_schema).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object | object | object[]`,children:[_jsxs(_components.p,{children:[`For credit system features: merges into the feature’s credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `,_jsx(_components.code,{children:`excluded: true`}),` removes it, and unlisted features keep the credit system’s rate.`]}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`dimensions.{key}`,type:`object | object`,children:_jsx(_components.p,{children:`Named rates chosen by event properties. The most specific match sets the rate; with no match the item’s own rate applies.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`multipliers.{key}`,type:`object`,children:[_jsx(_components.p,{children:`Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`match.{key}`,type:`string`,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add`,type:`number`,children:_jsx(_components.p,{children:`Added to the rate after every factor is applied, in credits per billing-unit group.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`excluded`,type:`true`,children:_jsx(_components.p,{children:`Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`markups`,type:`object`,children:[_jsx(_components.p,{children:`For AI credit system features: replaces the feature’s markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature’s.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`default_markup`,type:`number`,children:_jsx(_components.p,{children:`Default percentage markup for customers on this plan. Use -100 to make usage free.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`provider_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-provider markup percentages for customers on this plan.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`model_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-model markup overrides for customers on this plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`processors`,type:`object`,children:[_jsx(_components.p,{children:`Payment processors this plan is connected to. Omitted when unset.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`stripe`,type:`object | null`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`product_id`,type:`string`,children:_jsx(_components.p,{children:`Stripe product ID this plan is billed under.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_product_ids`,type:`string[]`,children:_jsx(_components.p,{children:`Extra Stripe product IDs aliased to this plan.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`revenuecat`,type:`object | null`,children:_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`products`,type:`object[]`,children:[_jsx(_components.p,{children:`Every RevenueCat product that maps to this plan. Replaces the current set.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`product_id`,type:`string`,children:_jsx(_components.p,{children:`RevenueCat product ID that grants this plan when purchased.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_quantities`,type:`object[]`,children:[_jsx(_components.p,{children:`Prepaid quantities granted when this specific RevenueCat product is purchased, in feature units.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`})})]})]})})]})]})})})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`free_trial`,type:`object`,children:[_jsx(_components.p,{children:`Free trial configuration. If set, new customers can try this plan before being charged.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of duration_type periods the trial lasts.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_type`,type:`'day' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Unit of time for the trial duration (‘day’, ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`card_required`,type:`boolean`,children:_jsx(_components.p,{children:`Whether a payment method is required to start the trial. If true, customer will be charged after trial ends.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_end`,type:`'bill' | 'revert'`,children:_jsx(_components.p,{children:`Behavior when the trial ends. ‘bill’ charges the customer (default). ‘revert’ expires the trial and restores the customer’s previous plan.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`created_at`,type:`number`,children:_jsx(_components.p,{children:`Unix timestamp (ms) when the plan was created.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`env`,type:`'sandbox' | 'live'`,children:_jsx(_components.p,{children:`Environment this plan belongs to (‘sandbox’ or ‘live’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`archived`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the plan is archived. Archived plans cannot be attached to new customers.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`config`,type:`object`,children:[_jsx(_components.p,{children:`Miscellaneous plan-level configuration flags.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`ignore_past_due`,type:`boolean`,children:_jsx(_components.p,{children:`If true, entitlements attached to this plan will still reset on schedule even when the customer’s product is in a past_due state.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`anchor_to_month_start`,type:`boolean`,children:_jsx(_components.p,{children:`Anchor billing and reset cycles to the 1st of the month (UTC).`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`billing_controls`,type:`object`,children:[_jsx(_components.p,{children:`Plan-level billing controls used as customer defaults.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`auto_topups`,type:`object[]`,children:[_jsx(_components.p,{children:`List of auto top-up configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature (credit balance) to auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether auto top-up is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`When the balance drops below this threshold, an auto top-up will be purchased.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`,children:_jsx(_components.p,{children:`Amount of credits to add per auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`purchase_limit`,type:`object`,children:[_jsx(_components.p,{children:`Optional limit on auto top-ups per window, by number of top-ups or amount charged.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit_type`,type:`'count' | 'amount'`,children:_jsxs(_components.p,{children:[`What `,_jsx(_components.code,{children:`limit`}),` caps: the number of auto top-ups (`,_jsx(_components.code,{children:`count`}),`, default) or the total amount charged for them, in the customer’s currency (`,_jsx(_components.code,{children:`amount`}),`).`]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'hour' | 'day' | 'week' | 'month'`,children:_jsx(_components.p,{children:`The time interval for the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals in the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum allowed within the interval: a number of auto top-ups when limit_type is count, or a total charge (e.g. 500 for $500, pre-tax) when limit_type is amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`invoice_mode`,type:`boolean`,children:_jsx(_components.p,{children:`When true, auto top-up creates a send_invoice invoice instead of auto-charging.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`spend_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage spend limits per feature (caps overage spend).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Optional feature ID this spend limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the overage spend limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit_type`,type:`'absolute' | 'usage_percentage'`,children:_jsx(_components.p,{children:`How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`overage_limit`,type:`number`,children:_jsx(_components.p,{children:`Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`skip_overage_billing`,type:`boolean`,children:_jsx(_components.p,{children:`When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of hard usage caps per feature (max units per interval).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature this usage limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum units allowed per interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'day' | 'week' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Interval for the cap, aligned to the customer’s billing cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`anchor`,type:`'billing_cycle' | 'utc'`,children:_jsx(_components.p,{children:`Window alignment. ‘billing_cycle’ phases the interval to the customer’s renewal time; ‘utc’ aligns to the UTC calendar.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_alerts`,type:`object[]`,children:[_jsx(_components.p,{children:`List of usage alert configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this alert applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage alert is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage_percentage or remaining_percentage, this is a percentage. remaining and remaining_percentage accept negative values with basis balance, to alert once the balance is overdrawn.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold_type`,type:`'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'`,children:_jsx(_components.p,{children:`Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`basis`,type:`'balance' | 'included' | 'recurring' | 'usage_limit'`,children:_jsx(_components.p,{children:`What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string`,children:_jsx(_components.p,{children:`Optional user-defined label to distinguish multiple alerts on the same feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`overage_allowed`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage allowed controls per feature. When enabled, usage can exceed balance.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this overage allowed control applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether overage is allowed for this feature.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metadata`,type:`object`,children:_jsx(_components.p,{children:`Arbitrary key-value metadata defined by you for your own use. Shared across all versions of the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`customer_eligibility`,type:`object`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`trial_available`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the trial on this plan is available to this customer. For example, if the customer used the trial in the past, this will be false.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`status`,type:`'active' | 'scheduled'`,children:_jsx(_components.p,{children:`The customer’s current status with this plan. ‘active’ if attached, ‘scheduled’ if pending activation.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`canceling`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the customer’s active instance of this plan is set to cancel.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`trialing`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the customer is currently on a free trial of this plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`attach_action`,type:`'activate' | 'upgrade' | 'downgrade' | 'none' | 'purchase'`,children:_jsx(_components.p,{children:`The action that would occur if this plan were attached to the customer.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`base_variant_id`,type:`string | null`,deprecated:true,children:_jsx(_components.p,{children:`Deprecated. Use variant_details.base_plan_id instead. If this is a variant, the ID of the base plan it was created from.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`variant_details`,type:`object`,children:[_jsx(_components.p,{children:`Details about how this variant relates to its latest base plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`base_plan_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the base plan this variant was derived from.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`customize`,type:`object`,children:[_jsx(_components.p,{children:`The customization that transforms the base plan into this variant.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Base price configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Base price amount for the plan, in major currency units (e.g. dollars).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval (e.g. ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Base price amounts in additional currencies. The base ‘amount’ is in the org’s default currency.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`add_items`,type:`object[]`,children:[_jsx(_components.p,{children:`Items to add to the plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`threshold_billing`,type:`object | null`,children:[_jsx(_components.p,{children:`Bills this many feature units when outstanding overage reaches it.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature to configure.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Number of free units included. Balance resets to this each interval for consumable features.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`If true, customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`reset`,type:`object`,children:[_jsx(_components.p,{children:`Reset configuration for consumable features. Omit for non-consumable features like seats.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Interval at which balance resets (e.g. ‘month’, ‘year’). For consumable features only.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object`,children:[_jsx(_components.p,{children:`Pricing for usage beyond included units. Omit for free features.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage. Either ‘amount’ or ‘tiers’ is required.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Amounts in additional currencies for this flat price. The base ‘amount’ is in the org’s default currency. Only valid with ‘amount’, not ‘tiers’.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing. Either ‘amount’ or ‘tiers’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`,children:_jsx(_components.p,{children:`Flat amount for this tier in this currency, if the tier uses one.`})})})]})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`'graduated' | 'volume'`,children:_jsx(_components.p,{children:`How tiers price usage. ‘graduated’ (default) charges each unit at the rate of the tier it falls in. ‘volume’ picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier’s rate plus its flat_amount.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval. For usage-based features, should match reset.interval, unless the price has graduated tiers and reset.interval is a whole multiple of it: each invoice then bills only the newly owed usage, at the tier the reset period has reached.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`‘prepaid’ for upfront payment (seats), ‘usage_based’ for pay-as-you-go.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_purchase`,type:`number | null`,children:_jsx(_components.p,{children:`Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`proration`,type:`object`,children:[_jsx(_components.p,{children:`Proration settings for prepaid features. Controls mid-cycle quantity change billing.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_increase`,type:`'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'`,children:_jsx(_components.p,{children:`Billing behavior when quantity increases mid-cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_decrease`,type:`'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'`,children:_jsx(_components.p,{children:`Credit behavior when quantity decreases mid-cycle.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`rollover`,type:`object`,children:[_jsx(_components.p,{children:`Rollover config for unused units. If set, unused included units carry over.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max`,type:`number`,children:_jsx(_components.p,{children:`Max rollover units. Omit for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_percentage`,type:`number`,children:_jsx(_components.p,{children:`Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_type`,type:`'month' | 'forever'`,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`expiry`,type:`object`,children:[_jsx(_components.p,{children:`Purchased units expire this long after each purchase. One-off prepaid consumable items only.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration`,type:`'day' | 'week' | 'month' | 'year'`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`length`,type:`number`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_override`,type:`object`,children:[_jsx(_components.p,{children:`Overrides fields of this item’s feature for customers on this plan (e.g. a credit system’s credit_schema).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object | object | object[]`,children:[_jsxs(_components.p,{children:[`For credit system features: merges into the feature’s credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `,_jsx(_components.code,{children:`excluded: true`}),` removes it, and unlisted features keep the credit system’s rate.`]}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`dimensions.{key}`,type:`object | object`,children:_jsx(_components.p,{children:`Named rates chosen by event properties. The most specific match sets the rate; with no match the item’s own rate applies.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`multipliers.{key}`,type:`object`,children:[_jsx(_components.p,{children:`Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`match.{key}`,type:`string`,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add`,type:`number`,children:_jsx(_components.p,{children:`Added to the rate after every factor is applied, in credits per billing-unit group.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`excluded`,type:`true`,children:_jsx(_components.p,{children:`Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`markups`,type:`object`,children:[_jsx(_components.p,{children:`For AI credit system features: replaces the feature’s markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature’s.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`default_markup`,type:`number`,children:_jsx(_components.p,{children:`Default percentage markup for customers on this plan. Use -100 to make usage free.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`provider_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-provider markup percentages for customers on this plan.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`model_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-model markup overrides for customers on this plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`remove_items`,type:`object[]`,children:[_jsx(_components.p,{children:`Filters selecting items to remove from the plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Match items linked to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`Match items with this billing method (prepaid or usage_based).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`integer`,children:_jsx(_components.p,{children:`Match items with this interval_count. Disambiguates between items that share an interval but differ in count.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Match items whose grant equals this included usage. Omitted is a wildcard.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`free_trial`,type:`object | null`,children:[_jsx(_components.p,{children:`Free trial configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of duration_type periods the trial lasts.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_type`,type:`'day' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Unit of time for the trial (‘day’, ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`card_required`,type:`boolean`,children:_jsx(_components.p,{children:`If true, a payment method is required to start the trial and the customer is charged when it ends. Defaults to false.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_end`,type:`'bill' | 'revert'`,children:_jsx(_components.p,{children:`Behavior when the trial ends. ‘bill’ charges the customer (default). ‘revert’ expires the trial and restores the customer’s previous plan.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`billing_controls`,type:`object`,children:[_jsx(_components.p,{children:`Override the plan’s billing controls (auto top-ups, spend limits, usage limits, usage alerts, overage allowed) for this customer.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`auto_topups`,type:`object[]`,children:[_jsx(_components.p,{children:`List of auto top-up configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature (credit balance) to auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether auto top-up is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`When the balance drops below this threshold, an auto top-up will be purchased.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`,children:_jsx(_components.p,{children:`Amount of credits to add per auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`purchase_limit`,type:`object`,children:[_jsx(_components.p,{children:`Optional rate limit to cap how often auto top-ups occur. Pass count or amount to set the current window’s consumed top-ups or charged amount.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit_type`,type:`'count' | 'amount'`,children:_jsxs(_components.p,{children:[`What `,_jsx(_components.code,{children:`limit`}),` caps: the number of auto top-ups (`,_jsx(_components.code,{children:`count`}),`, default) or the total amount charged for them, in the customer’s currency (`,_jsx(_components.code,{children:`amount`}),`).`]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'hour' | 'day' | 'week' | 'month'`,children:_jsx(_components.p,{children:`The time interval for the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals in the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum allowed within the interval: a number of auto top-ups when limit_type is count, or a total charge (e.g. 500 for $500, pre-tax) when limit_type is amount.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`count`,type:`number`,children:_jsx(_components.p,{children:`Set the current window’s consumed auto top-up count. Omit to leave runtime state unchanged.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Set the amount already charged by auto top-ups in the current window. Omit to leave runtime state unchanged.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`invoice_mode`,type:`boolean`,children:_jsx(_components.p,{children:`When true, auto top-up creates a send_invoice invoice instead of auto-charging.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`spend_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage spend limits per feature (caps overage spend).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Optional feature ID this spend limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the overage spend limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit_type`,type:`'absolute' | 'usage_percentage'`,children:_jsx(_components.p,{children:`How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`overage_limit`,type:`number`,children:_jsx(_components.p,{children:`Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`skip_overage_billing`,type:`boolean`,children:_jsx(_components.p,{children:`When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of hard usage caps per feature (max units per interval).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature this usage limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum units allowed per interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'day' | 'week' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Interval for the cap, aligned to the customer’s billing cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`anchor`,type:`'billing_cycle' | 'utc'`,children:_jsx(_components.p,{children:`Window alignment. ‘billing_cycle’ phases the interval to the customer’s renewal time; ‘utc’ aligns to the UTC calendar.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_alerts`,type:`object[]`,children:[_jsx(_components.p,{children:`List of usage alert configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this alert applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage alert is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage_percentage or remaining_percentage, this is a percentage. remaining and remaining_percentage accept negative values with basis balance, to alert once the balance is overdrawn.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold_type`,type:`'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'`,children:_jsx(_components.p,{children:`Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`basis`,type:`'balance' | 'included' | 'recurring' | 'usage_limit'`,children:_jsx(_components.p,{children:`What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string`,children:_jsx(_components.p,{children:`Optional user-defined label to distinguish multiple alerts on the same feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`overage_allowed`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage allowed controls per feature. When enabled, usage can exceed balance.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this overage allowed control applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether overage is allowed for this feature.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`upsert_licenses`,type:`object[]`,children:[_jsx(_components.p,{children:`License links to add or override for this customer, keyed by license_plan_id. Omitted fields inherit the plan catalog link (included defaults to 1 when the license is not in the catalog). A bare entry restores the license to pure catalog inheritance.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`license_plan_id`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`version_slug`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`integer`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`prepaid_only`,type:`boolean`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`customize`,type:`object | null`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Base price configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Base price amount for the plan, in major currency units (e.g. dollars).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval (e.g. ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Base price amounts in additional currencies. The base ‘amount’ is in the org’s default currency.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add_items`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`threshold_billing`,type:`object | null`,children:[_jsx(_components.p,{children:`Bills this many feature units when outstanding overage reaches it.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature to configure.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Number of free units included. Balance resets to this each interval for consumable features.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`If true, customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`reset`,type:`object`,children:[_jsx(_components.p,{children:`Reset configuration for consumable features. Omit for non-consumable features like seats.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Interval at which balance resets (e.g. ‘month’, ‘year’). For consumable features only.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object`,children:[_jsx(_components.p,{children:`Pricing for usage beyond included units. Omit for free features.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage. Either ‘amount’ or ‘tiers’ is required.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Amounts in additional currencies for this flat price. The base ‘amount’ is in the org’s default currency. Only valid with ‘amount’, not ‘tiers’.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing. Either ‘amount’ or ‘tiers’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`,children:_jsx(_components.p,{children:`Flat amount for this tier in this currency, if the tier uses one.`})})})]})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`'graduated' | 'volume'`,children:_jsx(_components.p,{children:`How tiers price usage. ‘graduated’ (default) charges each unit at the rate of the tier it falls in. ‘volume’ picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier’s rate plus its flat_amount.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval. For usage-based features, should match reset.interval, unless the price has graduated tiers and reset.interval is a whole multiple of it: each invoice then bills only the newly owed usage, at the tier the reset period has reached.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`‘prepaid’ for upfront payment (seats), ‘usage_based’ for pay-as-you-go.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_purchase`,type:`number | null`,children:_jsx(_components.p,{children:`Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`proration`,type:`object`,children:[_jsx(_components.p,{children:`Proration settings for prepaid features. Controls mid-cycle quantity change billing.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_increase`,type:`'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'`,children:_jsx(_components.p,{children:`Billing behavior when quantity increases mid-cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_decrease`,type:`'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'`,children:_jsx(_components.p,{children:`Credit behavior when quantity decreases mid-cycle.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`rollover`,type:`object`,children:[_jsx(_components.p,{children:`Rollover config for unused units. If set, unused included units carry over.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max`,type:`number`,children:_jsx(_components.p,{children:`Max rollover units. Omit for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_percentage`,type:`number`,children:_jsx(_components.p,{children:`Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_type`,type:`'month' | 'forever'`,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`expiry`,type:`object`,children:[_jsx(_components.p,{children:`Purchased units expire this long after each purchase. One-off prepaid consumable items only.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration`,type:`'day' | 'week' | 'month' | 'year'`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`length`,type:`number`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_override`,type:`object`,children:[_jsx(_components.p,{children:`Overrides fields of this item’s feature for customers on this plan (e.g. a credit system’s credit_schema).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object | object | object[]`,children:[_jsxs(_components.p,{children:[`For credit system features: merges into the feature’s credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `,_jsx(_components.code,{children:`excluded: true`}),` removes it, and unlisted features keep the credit system’s rate.`]}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`dimensions.{key}`,type:`object | object`,children:_jsx(_components.p,{children:`Named rates chosen by event properties. The most specific match sets the rate; with no match the item’s own rate applies.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`multipliers.{key}`,type:`object`,children:[_jsx(_components.p,{children:`Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`match.{key}`,type:`string`,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add`,type:`number`,children:_jsx(_components.p,{children:`Added to the rate after every factor is applied, in credits per billing-unit group.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`excluded`,type:`true`,children:_jsx(_components.p,{children:`Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`markups`,type:`object`,children:[_jsx(_components.p,{children:`For AI credit system features: replaces the feature’s markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature’s.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`default_markup`,type:`number`,children:_jsx(_components.p,{children:`Default percentage markup for customers on this plan. Use -100 to make usage free.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`provider_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-provider markup percentages for customers on this plan.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`model_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-model markup overrides for customers on this plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`remove_items`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Match items linked to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`Match items with this billing method (prepaid or usage_based).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`integer`,children:_jsx(_components.p,{children:`Match items with this interval_count. Disambiguates between items that share an interval but differ in count.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Match items whose grant equals this included usage. Omitted is a wildcard.`})})})]})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metadata`,type:`object`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`remove_licenses`,type:`object[]`,children:[_jsx(_components.p,{children:`License links to drop, keyed by license_plan_id. Parallel to remove_items.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`license_plan_id`,type:`string`})})})]})})]})]})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`id`,type:`string`,children:_jsx(_components.p,{children:`The unique identifier of this purchase. Falls back to the internal ID when none was provided.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`status`,type:`'active' | 'scheduled' | 'expired'`,children:_jsx(_components.p,{children:`Current status of the purchase.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`customer_id`,type:`string`,children:_jsx(_components.p,{children:`The customer this row belongs to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`entity_id`,type:`string | null`,children:_jsx(_components.p,{children:`The entity this row is scoped to, or null.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`created_at`,type:`number`,children:_jsx(_components.p,{children:`Timestamp when this row was created.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`has_more`,type:`boolean`,children:_jsxs(_components.p,{children:[`Whether more results exist. A page may hold fewer than `,_jsx(_components.code,{children:`limit`}),` items (even zero) while `,_jsx(_components.code,{children:`has_more`}),` is true, so paginate until `,_jsx(_components.code,{children:`has_more`}),` is false.`]})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`next_cursor`,type:`string | null`,children:_jsx(_components.p,{children:`Pass as start_cursor to fetch the next page. Null when has_more is false.`})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{DynamicResponseExample,DynamicResponseField,DynamicParamField,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"List Purchases","openapi":"openapi POST /v1/purchases.list","description":"Lists one-off plan purchases across customers, live or expired. Filter by customer, entity, plan, or status. Pages may hold fewer than `limit` rows while `has_more` is true.","href":"/api-reference/customers/listPurchases"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[158,4333,")=>null;const DynamicResponseField=()=>null;const DynamicParamField=()=>null;fun"],[4401,4520,"pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Expandable,Heading,Note,ResponseExample,_MdxComponentBoundary}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Expandable"],[4657,4672,"ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!_MdxComponentBo"],[106821,107311,",`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`200`,numberOfLines:`18`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`18`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"list\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cus_prod_123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"plan_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"credit_pack\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"expired\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"expires_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"started_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1768817161016`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"quantity\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"scope\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"customer\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"customer_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cus_123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"entity_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"created_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1768817161016`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"has_more\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"next_cursor\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{DynamicResponseExample,DynamicResponseField,DynamicParamField,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}"]]},"mdxExtracts":{"tableOfContents":[{"title":"Body Parameters","slug":"body-parameters","depth":3,"children":[]},{"title":"Response","slug":"response","depth":3,"children":[]}],"codeExamples":{"response":{"type":"ResponseExample","children":[{"filename":"200","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"18\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"list\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"cus_prod_123\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"plan_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"credit_pack\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"status\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"expired\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"expires_at\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"started_at\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">1768817161016\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"quantity\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">1\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"scope\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"customer\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"customer_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"cus_123\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"entity_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"created_at\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">1768817161016\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> ],\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"has_more\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">false\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"next_cursor\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]}}},"jsLinks":["/_mintlify/custom/autumn-b9b4c0fb/d78b8c063824141d/dynamic-response.js"],"openApiReferenceData":{"operation":{"operationId":"listPurchases","description":"Lists one-off plan purchases across customers, live or expired. Filter by customer, entity, plan, or status. Pages may hold fewer than `limit` rows while `has_more` is true.","tags":["customers"],"requestBody":"70c3f9eb-a5c9-4859-8a85-d2206c73ba6e","responses":{"200":"22c6d59d-171d-4dfc-b91f-cd4c1bf9de55"},"x-speakeasy-name-override":"listPurchases","parameters":["7123d661-9073-44ae-8527-7138bf699884"],"x-codeSamples":[{"lang":"typescript","label":"Typescript (SDK)","source":"import { Autumn } from 'autumn-js'\n\nconst autumn = new Autumn()\n\nconst result = await autumn.customers.listPurchases({\n customerId: \"cus_123\",\n statuses: [\n \"active\",\n \"expired\",\n ],\n});"},{"lang":"python","label":"Python (SDK)","source":"from autumn_sdk import Autumn\n\nautumn = Autumn(secret_key=\"am_sk_test...\")\n\nres = autumn.customers.list_purchases(\n customer_id=\"cus_123\",\n limit=50,\n start_cursor=\"\",\n statuses=[\n \"active\",\n \"expired\",\n ],\n)"}],"method":"post","type":"path","servers":["b9fee243-0982-4b51-8fd6-8c1f2e4bbf8c"],"security":["9f880561-074d-4109-814c-8263d4520527"],"path":"/v1/purchases.list","baseUrlOptions":["https://api.useautumn.com"],"title":"","codeSamples":[{"label":"Typescript (SDK)","lang":"typescript","source":"import { Autumn } from 'autumn-js'\n\nconst autumn = new Autumn()\n\nconst result = await autumn.customers.listPurchases({\n customerId: \"cus_123\",\n statuses: [\n \"active\",\n \"expired\",\n ],\n});"},{"label":"Python (SDK)","lang":"python","source":"from autumn_sdk import Autumn\n\nautumn = Autumn(secret_key=\"am_sk_test...\")\n\nres = autumn.customers.list_purchases(\n customer_id=\"cus_123\",\n limit=50,\n start_cursor=\"\",\n statuses=[\n \"active\",\n \"expired\",\n ],\n)"}],"requestExampleLanguages":["typescript","python","bash"],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExamples":[{"dropdown":false,"language":"json","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"json","children":{"type":"code","key":null,"ref":null,"props":{"language":"json","numberOfLines":"18","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"{"}}}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"list\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": ["}}]}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" {"}}}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"cus_prod_123\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"plan_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"credit_pack\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"status\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"expired\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"12","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"expires_at\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"null"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"14","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"started_at\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"1768817161016"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"16","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"quantity\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"1"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"18","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"scope\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"customer\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"20","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"customer_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"cus_123\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"22","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"entity_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"null"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"24","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"created_at\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"1768817161016"}}]}},"\n",{"type":"span","key":"26","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }"}}}},"\n",{"type":"span","key":"28","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" ],"}}}},"\n",{"type":"span","key":"30","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"has_more\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"false"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"32","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"next_cursor\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"null"}}]}},"\n",{"type":"span","key":"34","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"}"}}}},"\n"]}}}},"filename":"200"}],"responseExampleType":"mdx"},"dependencies":{"parameters":{"7123d661-9073-44ae-8527-7138bf699884":{"name":"x-api-version","in":"header","required":true,"schema":{"type":"string","default":"2.6.0","isRequired":true,"uniqueKey":"","typeLabel":"string"},"x-speakeasy-globals-hidden":true}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"customer_id":{"type":"string","description":"Only return rows for this customer. Omit to list across every customer.","uniqueKey":"customer_id","typeLabel":"string"},"entity_id":{"type":"string","description":"Only return rows for this entity. Requires customer_id.","uniqueKey":"entity_id","typeLabel":"string"},"limit":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"Number of items to return. Default 50, hard ceiling 200.","uniqueKey":"limit","typeLabel":"integer"},"start_cursor":{"type":"string","default":"","description":"Opaque pagination cursor. Empty string (default) requests the first page; use next_cursor from a prior response for subsequent pages.","uniqueKey":"start_cursor","typeLabel":"string"},"statuses":{"type":"array","minItems":1,"items":{"enum":["active","scheduled","past_due","expired"],"type":"string","uniqueKey":"statuses.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statuses to include. Defaults to active and scheduled. past_due matches plans with overdue payments, which read as status active with past_due true.","uniqueKey":"statuses","typeLabel":"enum\u003cstring>[]"},"plan_id":{"type":"string","description":"Only return rows for this plan.","uniqueKey":"plan_id","typeLabel":"string"}},"title":"ListPurchasesParams","examples":[{"customer_id":"cus_123","statuses":["active","expired"]}],"uniqueKey":"","typeLabel":"ListPurchasesParams · object"},"example":{"customer_id":"cus_123","statuses":["active","expired"]},"examples":{"Example":{"title":"Example","value":{"customer_id":"cus_123","statuses":["active","expired"]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"22c6d59d-171d-4dfc-b91f-cd4c1bf9de55":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"list":{"type":"array","items":{"type":"object","properties":{"plan_id":{"type":"string","description":"The unique identifier of the purchased plan.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan_id","typeLabel":"string"},"expires_at":{"oneOf":[{"type":"number","description":"Timestamp when the purchase expires, or null for lifetime access.","isRequired":true,"uniqueKey":"list.items.[INDEX].expires_at.oneOf.0","typeLabel":"number"},{"type":"null","description":"Timestamp when the purchase expires, or null for lifetime access.","isRequired":true,"uniqueKey":"list.items.[INDEX].expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].expires_at","typeLabel":"number | null"},"started_at":{"type":"number","description":"Timestamp when the purchase was made.","isRequired":true,"uniqueKey":"list.items.[INDEX].started_at","typeLabel":"number"},"quantity":{"type":"number","description":"Number of units purchased.","isRequired":true,"uniqueKey":"list.items.[INDEX].quantity","typeLabel":"number"},"id":{"type":"string","description":"The unique identifier of this purchase. Falls back to the internal ID when none was provided.","isRequired":true,"uniqueKey":"list.items.[INDEX].id","typeLabel":"string"},"status":{"enum":["active","scheduled","expired"],"type":"string","description":"Current status of the purchase.","isRequired":true,"uniqueKey":"list.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"customer_id":{"type":"string","description":"The customer this row belongs to.","isRequired":true,"uniqueKey":"list.items.[INDEX].customer_id","typeLabel":"string"},"entity_id":{"oneOf":[{"type":"string","description":"The entity this row is scoped to, or null.","isRequired":true,"uniqueKey":"list.items.[INDEX].entity_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The entity this row is scoped to, or null.","isRequired":true,"uniqueKey":"list.items.[INDEX].entity_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].entity_id","typeLabel":"string | null"},"created_at":{"type":"number","description":"Timestamp when this row was created.","isRequired":true,"uniqueKey":"list.items.[INDEX].created_at","typeLabel":"number"},"scope":{"enum":["customer","entity"],"type":"string","description":"Whether this purchase is attached at the customer level or entity level.","uniqueKey":"list.items.[INDEX].scope","typeLabel":"enum\u003cstring>"},"plan":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the plan.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.id","typeLabel":"string"},"name":{"type":"string","description":"Display name of the plan.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.name","typeLabel":"string"},"description":{"oneOf":[{"type":"string","description":"Optional description of the plan.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional description of the plan.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.description","typeLabel":"string | null"},"group":{"oneOf":[{"type":"string","description":"Group identifier for organizing related plans. Plans in the same group are mutually exclusive.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.group.oneOf.0","typeLabel":"string"},{"type":"null","description":"Group identifier for organizing related plans. Plans in the same group are mutually exclusive.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.group.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.group","typeLabel":"string | null"},"version":{"type":"number","description":"Version number of the plan. Incremented when plan configuration changes.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.version","typeLabel":"number"},"add_on":{"type":"boolean","description":"Whether this is an add-on plan that can be attached alongside a main plan.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.add_on","typeLabel":"boolean"},"auto_enable":{"type":"boolean","description":"If true, this plan is automatically attached when a customer is created. Used for free plans.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.auto_enable","typeLabel":"boolean"},"price":{"oneOf":[{"type":"object","description":"Base recurring price for the plan. Null for free plans or usage-only plans.","required":["amount","interval"],"properties":{"amount":{"type":"number","description":"Base price amount for the plan, in major currency units (e.g. dollars).","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.amount","typeLabel":"number"},"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval (e.g. 'month', 'year').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Base price amounts in additional currencies. The base 'amount' is in the org's default currency.","uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.additional_currencies","typeLabel":"object[]"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.interval_count","typeLabel":"number"},"display":{"type":"object","properties":{"primary_text":{"type":"string","description":"Main display text (e.g. '$10' or '100 messages').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.display.primary_text","typeLabel":"string"},"secondary_text":{"type":"string","description":"Secondary display text (e.g. 'per month' or 'then $0.5 per 100').","uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.display.secondary_text","typeLabel":"string"}},"required":["primary_text"],"description":"Display text for showing this price in pricing pages.","uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.display","typeLabel":"object"},"processors":{"type":"object","properties":{"stripe":{"oneOf":[{"type":"object","required":["price_id"],"properties":{"price_id":{"type":"string","description":"Stripe price ID. For prepaid with included > 0 this is the V2 price.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.processors.stripe.oneOf.0.price_id","typeLabel":"string"}},"uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.processors.stripe.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.processors.stripe.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.processors.stripe","typeLabel":"object | null"}},"x-atmn-mapping":true,"description":"Payment processors this base price is connected to. Omitted when unset.","uniqueKey":"list.items.[INDEX].plan.price.oneOf.0.processors","typeLabel":"object"}},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.price.oneOf.0","typeLabel":"object"},{"type":"null","description":"Base recurring price for the plan. Null for free plans or usage-only plans.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.price.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.price","typeLabel":"object | null"},"items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature this item configures.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_id","typeLabel":"string"},"included":{"type":"number","description":"Number of free units included. For consumable features, balance resets to this number each interval.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].included","typeLabel":"number"},"unlimited":{"type":"boolean","description":"Whether the customer has unlimited access to this feature.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].unlimited","typeLabel":"boolean"},"reset":{"oneOf":[{"type":"object","description":"Reset configuration for consumable features. Null for non-consumable features like seats where usage persists across billing cycles.","required":["interval"],"properties":{"interval":{"enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"type":"string","description":"The interval at which the feature balance resets (e.g. 'month', 'year'). For consumable features, usage resets to 0 and included units are restored.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals between resets. Defaults to 1.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.0.interval_count","typeLabel":"number"}},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.0","typeLabel":"object"},{"type":"null","description":"Reset configuration for consumable features. Null for non-consumable features like seats where usage persists across billing cycles.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].reset","typeLabel":"object | null"},"price":{"oneOf":[{"type":"object","description":"Pricing configuration for usage beyond included units. Null if feature is entirely free.","required":["interval","billing_units","billing_method","max_purchase"],"properties":{"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval for this price. For usage-based features, should match reset.interval, unless the price has graduated tiers and reset.interval is a whole multiple of it: each invoice then bills only the newly owed usage, at the tier the reset period has reached.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"billing_units":{"type":"number","description":"Number of units per price increment. Usage is rounded UP to the nearest billing_units when billed (e.g. billing_units=100 means 101 usage rounds to 200).","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.billing_units","typeLabel":"number"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"'prepaid' for features like seats where customers pay upfront, 'usage_based' for pay-as-you-go after included usage.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.billing_method","typeLabel":"enum\u003cstring>"},"max_purchase":{"oneOf":[{"type":"number","description":"Maximum units a customer can purchase beyond included. E.g. if included=100 and max_purchase=300, customer can use up to 400 total before usage is capped. Null for no limit.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.max_purchase.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum units a customer can purchase beyond included. E.g. if included=100 and max_purchase=300, customer can use up to 400 total before usage is capped. Null for no limit.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.max_purchase.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.max_purchase","typeLabel":"number | null"},"amount":{"type":"number","description":"Price per billing_units after included usage is consumed. Mutually exclusive with tiers.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers' (tiered prices carry per-currency amounts on each tier).","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies","typeLabel":"object[]"},"tiers":{"type":"array","items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"const":"inf","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].flat_amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Per-unit amount for this tier in this currency.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","description":"Flat amount for this tier in this currency, if the tier uses one.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX].flat_amount","typeLabel":"number"}},"required":["currency"],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to","amount"],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"description":"Tiered pricing configuration. Each tier's 'to' INCLUDES the included amount. Either 'tiers' or 'amount' is required.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers","typeLabel":"object[]"},"tier_behavior":{"enum":["graduated","volume"],"type":"string","description":"How tiers price usage. 'graduated' (default) charges each unit at the rate of the tier it falls in. 'volume' picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier's rate plus its flat_amount.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tier_behavior","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.interval_count","typeLabel":"number"},"processors":{"type":"object","properties":{"stripe":{"oneOf":[{"type":"object","required":["price_id"],"properties":{"price_id":{"type":"string","description":"Stripe price ID. For prepaid with included > 0 this is the V2 price.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe.oneOf.0.price_id","typeLabel":"string"}},"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe","typeLabel":"object | null"}},"x-atmn-mapping":true,"description":"Payment processors this item price is connected to. Omitted when unset.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors","typeLabel":"object"}},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0","typeLabel":"object"},{"type":"null","description":"Pricing configuration for usage beyond included units. Null if feature is entirely free.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].price","typeLabel":"object | null"},"threshold_billing":{"oneOf":[{"type":"object","description":"Bills this many feature units when outstanding overage reaches it.","required":["threshold"],"properties":{"threshold":{"type":"number","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Bills this many feature units when outstanding overage reaches it.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing","typeLabel":"object | null"},"feature":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the feature, used to refer to it in other API calls like /track or /check.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.id","typeLabel":"string"},"type":{"enum":["static","boolean","single_use","continuous_use","credit_system","ai_credit_system"],"type":"string","description":"The type of the feature","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.type","typeLabel":"enum\u003cstring>"},"name":{"oneOf":[{"type":"string","description":"The name of the feature.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name of the feature.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.name","typeLabel":"string | null"},"display":{"oneOf":[{"type":"object","description":"Singular and plural display names for the feature.","required":["singular","plural"],"properties":{"singular":{"type":"string","description":"The singular display name for the feature.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.0.singular","typeLabel":"string"},"plural":{"type":"string","description":"The plural display name for the feature.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.0.plural","typeLabel":"string"}},"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.0","typeLabel":"object"},{"type":"null","description":"Singular and plural display names for the feature.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.display","typeLabel":"object | null"},"credit_schema":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"metered_feature_id":{"type":"string","description":"The ID of the metered feature (should be a single_use feature).","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0.items.[INDEX].metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","description":"The credit cost of the metered feature.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["metered_feature_id","credit_cost"],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Credit cost schema for credit system features.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Credit cost schema for credit system features.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema","typeLabel":"object[] | null"},"archived":{"oneOf":[{"type":"boolean","description":"Whether or not the feature is archived.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.archived.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether or not the feature is archived.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.archived.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature.archived","typeLabel":"boolean | null"}},"required":["id","type"],"description":"The full feature object if expanded.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature","typeLabel":"object"},"pooled":{"type":"boolean","default":false,"description":"Whether entity-level grants contribute to a shared customer balance.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].pooled","typeLabel":"boolean"},"display":{"type":"object","properties":{"primary_text":{"type":"string","description":"Main display text (e.g. '$10' or '100 messages').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].display.primary_text","typeLabel":"string"},"secondary_text":{"type":"string","description":"Secondary display text (e.g. 'per month' or 'then $0.5 per 100').","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].display.secondary_text","typeLabel":"string"}},"required":["primary_text"],"description":"Display text for showing this item in pricing pages.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].display","typeLabel":"object"},"rollover":{"type":"object","properties":{"max":{"oneOf":[{"type":"number","description":"Maximum rollover units. Null for unlimited rollover.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].rollover.max.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum rollover units. Null for unlimited rollover.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].rollover.max.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].rollover.max","typeLabel":"number | null"},"expiry_duration_type":{"enum":["month","forever"],"type":"string","description":"When rolled over units expire.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].rollover.expiry_duration_type","typeLabel":"enum\u003cstring>"},"max_percentage":{"oneOf":[{"type":"number","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].rollover.max_percentage.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].rollover.max_percentage.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].rollover.max_percentage","typeLabel":"number | null"},"expiry_duration_length":{"type":"number","description":"Number of periods before expiry.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].rollover.expiry_duration_length","typeLabel":"number"}},"required":["max","expiry_duration_type"],"description":"Rollover configuration for unused units. If set, unused included units roll over to the next period.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].rollover","typeLabel":"object"},"expiry":{"oneOf":[{"type":"object","description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","required":["duration","length"],"properties":{"duration":{"enum":["day","week","month","year"],"type":"string","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.0.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.0.length","typeLabel":"number"}},"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.0","typeLabel":"object"},{"type":"null","description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].expiry","typeLabel":"object | null"},"feature_override":{"type":"object","properties":{"credit_schema":{"type":"array","items":{"oneOf":[{"type":"object","required":["metered_feature_id","tier_behavior","tiers"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.metered_feature_id","typeLabel":"string"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers","typeLabel":"object[]"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["metered_feature_id","credit_cost"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.credit_cost","typeLabel":"number"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["metered_feature_id","excluded"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature to remove from the credit system.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.metered_feature_id","typeLabel":"string"},"excluded":{"const":true,"description":"Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.excluded","typeLabel":"any"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX]","typeLabel":"object"},"description":"For credit system features: merges into the feature's credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `excluded: true` removes it, and unlisted features keep the credit system's rate.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema","typeLabel":"object[]"},"markups":{"type":"object","properties":{"default_markup":{"type":"number","minimum":-100,"description":"Default percentage markup for customers on this plan. Use -100 to make usage free.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.default_markup","typeLabel":"number"},"provider_markups":{"oneOf":[{"type":"object","description":"Per-provider markup percentages for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"}},"required":["markup"],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-provider markup percentages for customers on this plan.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups","typeLabel":"object | null"},"model_markups":{"oneOf":[{"type":"object","description":"Per-model markup overrides for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"},"input_cost":{"type":"number","minimum":0,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.input_cost","typeLabel":"number"},"output_cost":{"type":"number","minimum":0,"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.output_cost","typeLabel":"number"}},"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-model markup overrides for customers on this plan.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups","typeLabel":"object | null"}},"additionalProperties":false,"description":"For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups","typeLabel":"object"}},"additionalProperties":false,"description":"Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit_schema).","uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX].feature_override","typeLabel":"object"}},"required":["feature_id","included","unlimited","reset","price"],"uniqueKey":"list.items.[INDEX].plan.\\items.items.[INDEX]","typeLabel":"object"},"description":"Feature configurations included in this plan. Each item defines included units, pricing, and reset behavior for a feature.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.\\items","typeLabel":"object[]"},"created_at":{"type":"number","description":"Unix timestamp (ms) when the plan was created.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.created_at","typeLabel":"number"},"env":{"enum":["sandbox","live"],"type":"string","description":"Environment this plan belongs to ('sandbox' or 'live').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.env","typeLabel":"enum\u003cstring>"},"archived":{"type":"boolean","description":"Whether the plan is archived. Archived plans cannot be attached to new customers.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.archived","typeLabel":"boolean"},"config":{"type":"object","properties":{"ignore_past_due":{"type":"boolean","default":false,"description":"If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.","uniqueKey":"list.items.[INDEX].plan.config.ignore_past_due","typeLabel":"boolean"},"anchor_to_month_start":{"type":"boolean","description":"Anchor billing and reset cycles to the 1st of the month (UTC).","default":false,"uniqueKey":"list.items.[INDEX].plan.config.anchor_to_month_start","typeLabel":"boolean"}},"description":"Miscellaneous plan-level configuration flags.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.config","typeLabel":"object"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"oneOf":[{}],"uniqueKey":"list.items.[INDEX].plan.metadata.additionalProperties","typeLabel":"any"},"description":"Arbitrary key-value metadata defined by you for your own use. Shared across all versions of the plan.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.metadata","typeLabel":"object"},"base_variant_id":{"oneOf":[{"type":"string","description":"Deprecated. Use variant_details.base_plan_id instead. If this is a variant, the ID of the base plan it was created from.","deprecated":true,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.base_variant_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Deprecated. Use variant_details.base_plan_id instead. If this is a variant, the ID of the base plan it was created from.","deprecated":true,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.base_variant_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.base_variant_id","typeLabel":"string | null"},"version_slug":{"oneOf":[{"type":"string","description":"User-facing version identity. Defaults to v{n} when the version is minted.","uniqueKey":"list.items.[INDEX].plan.version_slug.oneOf.0","typeLabel":"string"},{"type":"null","description":"User-facing version identity. Defaults to v{n} when the version is minted.","uniqueKey":"list.items.[INDEX].plan.version_slug.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.version_slug","typeLabel":"string | null"},"active":{"type":"boolean","description":"Whether this is the active version of the plan. At most one version is active.","uniqueKey":"list.items.[INDEX].plan.active","typeLabel":"boolean"},"processors":{"type":"object","properties":{"stripe":{"oneOf":[{"type":"object","required":["product_id"],"properties":{"product_id":{"type":"string","description":"Stripe product ID this plan is billed under.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.processors.stripe.oneOf.0.product_id","typeLabel":"string"},"additional_product_ids":{"type":"array","items":{"type":"string","uniqueKey":"list.items.[INDEX].plan.processors.stripe.oneOf.0.additional_product_ids.items.[INDEX]","typeLabel":"string"},"description":"Extra Stripe product IDs aliased to this plan.","uniqueKey":"list.items.[INDEX].plan.processors.stripe.oneOf.0.additional_product_ids","typeLabel":"string[]"}},"uniqueKey":"list.items.[INDEX].plan.processors.stripe.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"list.items.[INDEX].plan.processors.stripe.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.processors.stripe","typeLabel":"object | null"},"revenuecat":{"oneOf":[{"type":"object","required":["products"],"properties":{"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"RevenueCat product ID that grants this plan when purchased.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].product_id","typeLabel":"string"},"feature_quantities":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities.items.[INDEX].feature_id","typeLabel":"string"},"quantity":{"type":"number","minimum":0,"uniqueKey":"list.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities.items.[INDEX].quantity","typeLabel":"number"}},"required":["feature_id"],"uniqueKey":"list.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities.items.[INDEX]","typeLabel":"object"},"description":"Prepaid quantities granted when this specific RevenueCat product is purchased, in feature units.","uniqueKey":"list.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities","typeLabel":"object[]"}},"required":["product_id"],"uniqueKey":"list.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX]","typeLabel":"object"},"description":"Every RevenueCat product that maps to this plan. Replaces the current set.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.processors.revenuecat.oneOf.0.products","typeLabel":"object[]"}},"uniqueKey":"list.items.[INDEX].plan.processors.revenuecat.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"list.items.[INDEX].plan.processors.revenuecat.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.processors.revenuecat","typeLabel":"object | null"}},"x-atmn-mapping":true,"description":"Payment processors this plan is connected to. Omitted when unset.","uniqueKey":"list.items.[INDEX].plan.processors","typeLabel":"object"},"free_trial":{"type":"object","properties":{"duration_length":{"type":"number","description":"Number of duration_type periods the trial lasts.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.free_trial.duration_length","typeLabel":"number"},"duration_type":{"enum":["day","month","year"],"type":"string","description":"Unit of time for the trial duration ('day', 'month', 'year').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.free_trial.duration_type","typeLabel":"enum\u003cstring>"},"card_required":{"type":"boolean","description":"Whether a payment method is required to start the trial. If true, customer will be charged after trial ends.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.free_trial.card_required","typeLabel":"boolean"},"on_end":{"oneOf":[{"type":"string","description":"Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.","enum":["bill","revert"],"uniqueKey":"list.items.[INDEX].plan.free_trial.on_end.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.","uniqueKey":"list.items.[INDEX].plan.free_trial.on_end.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.free_trial.on_end","typeLabel":"enum\u003cstring> | null"}},"required":["duration_length","duration_type","card_required"],"description":"Free trial configuration. If set, new customers can try this plan before being charged.","uniqueKey":"list.items.[INDEX].plan.free_trial","typeLabel":"object"},"billing_controls":{"type":"object","properties":{"auto_topups":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature (credit balance) to auto top-up.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].feature_id","typeLabel":"string"},"threshold":{"type":"number","description":"When the balance drops below this threshold, an auto top-up will be purchased.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].threshold","typeLabel":"number"},"quantity":{"type":"number","minimum":1,"description":"Amount of credits to add per auto top-up.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].quantity","typeLabel":"number"},"enabled":{"type":"boolean","default":false,"description":"Whether auto top-up is enabled.","uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].enabled","typeLabel":"boolean"},"purchase_limit":{"type":"object","properties":{"interval":{"enum":["hour","day","week","month"],"type":"string","description":"The time interval for the purchase limit window.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].purchase_limit.interval","typeLabel":"enum\u003cstring>"},"limit":{"type":"number","exclusiveMinimum":0,"description":"Maximum allowed within the interval: a number of auto top-ups when limit_type is count, or a total charge (e.g. 500 for $500, pre-tax) when limit_type is amount.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].purchase_limit.limit","typeLabel":"number"},"limit_type":{"enum":["count","amount"],"type":"string","description":"What `limit` caps: the number of auto top-ups (`count`, default) or the total amount charged for them, in the customer's currency (`amount`).","uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].purchase_limit.limit_type","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","minimum":1,"default":1,"description":"Number of intervals in the purchase limit window.","uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].purchase_limit.interval_count","typeLabel":"number"}},"required":["interval","limit"],"description":"Optional limit on auto top-ups per window, by number of top-ups or amount charged.","uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].purchase_limit","typeLabel":"object"},"invoice_mode":{"type":"boolean","description":"When true, auto top-up creates a send_invoice invoice instead of auto-charging.","uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].invoice_mode","typeLabel":"boolean"}},"required":["feature_id","threshold","quantity"],"uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX]","typeLabel":"object"},"description":"List of auto top-up configurations per feature.","uniqueKey":"list.items.[INDEX].plan.billing_controls.auto_topups","typeLabel":"object[]"},"spend_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Optional feature ID this spend limit applies to.","uniqueKey":"list.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether the overage spend limit is enabled.","uniqueKey":"list.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].enabled","typeLabel":"boolean"},"limit_type":{"enum":["absolute","usage_percentage"],"type":"string","description":"How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.","uniqueKey":"list.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].limit_type","typeLabel":"enum\u003cstring>"},"overage_limit":{"type":"number","minimum":0,"description":"Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.","uniqueKey":"list.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].overage_limit","typeLabel":"number"},"skip_overage_billing":{"type":"boolean","description":"When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.","uniqueKey":"list.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].skip_overage_billing","typeLabel":"boolean"}},"uniqueKey":"list.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX]","typeLabel":"object"},"description":"List of overage spend limits per feature (caps overage spend).","uniqueKey":"list.items.[INDEX].plan.billing_controls.spend_limits","typeLabel":"object[]"},"usage_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature this usage limit applies to.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].feature_id","typeLabel":"string"},"limit":{"type":"number","minimum":0,"description":"Maximum units allowed per interval.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].limit","typeLabel":"number"},"interval":{"enum":["day","week","month","year"],"type":"string","description":"Interval for the cap, aligned to the customer's billing cycle.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage limit is enabled.","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].enabled","typeLabel":"boolean"},"anchor":{"enum":["billing_cycle","utc"],"type":"string","description":"Window alignment. 'billing_cycle' phases the interval to the customer's renewal time; 'utc' aligns to the UTC calendar.","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].anchor","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].filter","typeLabel":"object"}},"required":["feature_id","limit","interval"],"uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX]","typeLabel":"object"},"description":"List of hard usage caps per feature (max units per interval).","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_limits","typeLabel":"object[]"},"usage_alerts":{"type":"array","items":{"type":"object","properties":{"threshold":{"type":"number","description":"The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage_percentage or remaining_percentage, this is a percentage. remaining and remaining_percentage accept negative values with basis balance, to alert once the balance is overdrawn.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].threshold","typeLabel":"number"},"threshold_type":{"enum":["usage","usage_percentage","remaining","remaining_percentage"],"type":"string","description":"Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].threshold_type","typeLabel":"enum\u003cstring>"},"feature_id":{"type":"string","description":"The feature ID this alert applies to.","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage alert is enabled.","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].enabled","typeLabel":"boolean"},"basis":{"enum":["balance","included","recurring","usage_limit"],"type":"string","default":"balance","description":"What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].basis","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].filter","typeLabel":"object"},"name":{"type":"string","description":"Optional user-defined label to distinguish multiple alerts on the same feature.","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].name","typeLabel":"string"}},"required":["threshold","threshold_type"],"uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX]","typeLabel":"object"},"description":"List of usage alert configurations per feature.","uniqueKey":"list.items.[INDEX].plan.billing_controls.usage_alerts","typeLabel":"object[]"},"overage_allowed":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature ID this overage allowed control applies to.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.billing_controls.overage_allowed.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether overage is allowed for this feature.","uniqueKey":"list.items.[INDEX].plan.billing_controls.overage_allowed.items.[INDEX].enabled","typeLabel":"boolean"}},"required":["feature_id"],"uniqueKey":"list.items.[INDEX].plan.billing_controls.overage_allowed.items.[INDEX]","typeLabel":"object"},"description":"List of overage allowed controls per feature. When enabled, usage can exceed balance.","uniqueKey":"list.items.[INDEX].plan.billing_controls.overage_allowed","typeLabel":"object[]"}},"description":"Plan-level billing controls used as customer defaults.","uniqueKey":"list.items.[INDEX].plan.billing_controls","typeLabel":"object"},"customer_eligibility":{"type":"object","properties":{"attach_action":{"enum":["activate","upgrade","downgrade","none","purchase"],"type":"string","description":"The action that would occur if this plan were attached to the customer.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.customer_eligibility.attach_action","typeLabel":"enum\u003cstring>"},"trial_available":{"type":"boolean","description":"Whether the trial on this plan is available to this customer. For example, if the customer used the trial in the past, this will be false.","uniqueKey":"list.items.[INDEX].plan.customer_eligibility.trial_available","typeLabel":"boolean"},"status":{"enum":["active","scheduled"],"type":"string","description":"The customer's current status with this plan. 'active' if attached, 'scheduled' if pending activation.","uniqueKey":"list.items.[INDEX].plan.customer_eligibility.status","typeLabel":"enum\u003cstring>"},"canceling":{"type":"boolean","description":"Whether the customer's active instance of this plan is set to cancel.","uniqueKey":"list.items.[INDEX].plan.customer_eligibility.canceling","typeLabel":"boolean"},"trialing":{"type":"boolean","description":"Whether the customer is currently on a free trial of this plan.","uniqueKey":"list.items.[INDEX].plan.customer_eligibility.trialing","typeLabel":"boolean"}},"required":["attach_action"],"uniqueKey":"list.items.[INDEX].plan.customer_eligibility","typeLabel":"object"},"variant_details":{"type":"object","properties":{"base_plan_id":{"type":"string","description":"The ID of the base plan this variant was derived from.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.base_plan_id","typeLabel":"string"},"customize":{"type":"object","properties":{"price":{"oneOf":[{"type":"object","title":"BasePrice","description":"Override the base price of the plan. Pass null to remove the base price.","required":["amount","interval"],"properties":{"amount":{"type":"number","description":"Base price amount for the plan, in major currency units (e.g. dollars).","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.price.oneOf.0.amount","typeLabel":"number"},"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval (e.g. 'month', 'year').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.price.oneOf.0.interval_count","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Base price amounts in additional currencies. The base 'amount' is in the org's default currency.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies","typeLabel":"object[]"}},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.price.oneOf.0","typeLabel":"BasePrice · object"},{"type":"null","description":"Override the base price of the plan. Pass null to remove the base price.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.price","typeLabel":"BasePrice · object | null"},"add_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature to configure.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_id","typeLabel":"string"},"threshold_billing":{"oneOf":[{"type":"object","description":"Bills this many feature units when outstanding overage reaches it.","required":["threshold"],"properties":{"threshold":{"type":"number","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Bills this many feature units when outstanding overage reaches it.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing","typeLabel":"object | null"},"included":{"type":"number","maximum":10000000000000,"description":"Number of free units included. Balance resets to this each interval for consumable features.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].included","typeLabel":"number"},"unlimited":{"type":"boolean","description":"If true, customer has unlimited access to this feature.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].unlimited","typeLabel":"boolean"},"pooled":{"type":"boolean","default":false,"description":"Whether entity-level grants contribute to a shared customer balance.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].pooled","typeLabel":"boolean"},"reset":{"type":"object","properties":{"interval":{"enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"type":"string","description":"Interval at which balance resets (e.g. 'month', 'year'). For consumable features only.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].reset.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals between resets. Defaults to 1.","default":1,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].reset.interval_count","typeLabel":"number"}},"required":["interval"],"description":"Reset configuration for consumable features. Omit for non-consumable features like seats.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].reset","typeLabel":"object"},"price":{"type":"object","properties":{"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval. For usage-based features, should match reset.interval, unless the price has graduated tiers and reset.interval is a whole multiple of it: each invoice then bills only the newly owed usage, at the tier the reset period has reached.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.interval","typeLabel":"enum\u003cstring>"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"'prepaid' for upfront payment (seats), 'usage_based' for pay-as-you-go.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.billing_method","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"Price per billing_units after included usage. Either 'amount' or 'tiers' is required.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers'.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies","typeLabel":"object[]"},"tiers":{"type":"array","items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"const":"inf","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].flat_amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Per-unit amount for this tier in this currency.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","description":"Flat amount for this tier in this currency, if the tier uses one.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].flat_amount","typeLabel":"number"}},"required":["currency"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to","amount"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX]","typeLabel":"object"},"description":"Tiered pricing. Either 'amount' or 'tiers' is required.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers","typeLabel":"object[]"},"tier_behavior":{"enum":["graduated","volume"],"type":"string","description":"How tiers price usage. 'graduated' (default) charges each unit at the rate of the tier it falls in. 'volume' picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier's rate plus its flat_amount.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tier_behavior","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.interval_count","typeLabel":"number"},"billing_units":{"type":"number","default":1,"description":"Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.billing_units","typeLabel":"number"},"max_purchase":{"oneOf":[{"type":"number","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.max_purchase.oneOf.0","typeLabel":"number"},{"type":"null","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.max_purchase.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.max_purchase","typeLabel":"number | null"}},"required":["interval","billing_method"],"description":"Pricing for usage beyond included units. Omit for free features.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price","typeLabel":"object"},"proration":{"type":"object","properties":{"on_increase":{"enum":["bill_immediately","prorate_immediately","prorate_next_cycle","bill_next_cycle"],"type":"string","description":"Billing behavior when quantity increases mid-cycle.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].proration.on_increase","typeLabel":"enum\u003cstring>"},"on_decrease":{"enum":["prorate","prorate_immediately","prorate_next_cycle","none","no_prorations"],"type":"string","description":"Credit behavior when quantity decreases mid-cycle.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].proration.on_decrease","typeLabel":"enum\u003cstring>"}},"required":["on_increase","on_decrease"],"description":"Proration settings for prepaid features. Controls mid-cycle quantity change billing.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].proration","typeLabel":"object"},"rollover":{"type":"object","properties":{"expiry_duration_type":{"enum":["month","forever"],"type":"string","description":"When rolled over units expire.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.expiry_duration_type","typeLabel":"enum\u003cstring>"},"max":{"type":"number","description":"Max rollover units. Omit for unlimited rollover.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.max","typeLabel":"number"},"max_percentage":{"type":"number","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.max_percentage","typeLabel":"number"},"expiry_duration_length":{"type":"number","description":"Number of periods before expiry.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.expiry_duration_length","typeLabel":"number"}},"required":["expiry_duration_type"],"description":"Rollover config for unused units. If set, unused included units carry over.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover","typeLabel":"object"},"expiry":{"type":"object","properties":{"duration":{"enum":["day","week","month","year"],"type":"string","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].expiry.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].expiry.length","typeLabel":"number"}},"required":["duration","length"],"description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].expiry","typeLabel":"object"},"feature_override":{"type":"object","properties":{"credit_schema":{"type":"array","items":{"oneOf":[{"type":"object","required":["metered_feature_id","tier_behavior","tiers"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.metered_feature_id","typeLabel":"string"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers","typeLabel":"object[]"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["metered_feature_id","credit_cost"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.credit_cost","typeLabel":"number"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["metered_feature_id","excluded"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature to remove from the credit system.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.metered_feature_id","typeLabel":"string"},"excluded":{"const":true,"description":"Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.excluded","typeLabel":"any"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX]","typeLabel":"object"},"description":"For credit system features: merges into the feature's credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `excluded: true` removes it, and unlisted features keep the credit system's rate.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema","typeLabel":"object[]"},"markups":{"type":"object","properties":{"default_markup":{"type":"number","minimum":-100,"description":"Default percentage markup for customers on this plan. Use -100 to make usage free.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.default_markup","typeLabel":"number"},"provider_markups":{"oneOf":[{"type":"object","description":"Per-provider markup percentages for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"}},"required":["markup"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-provider markup percentages for customers on this plan.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups","typeLabel":"object | null"},"model_markups":{"oneOf":[{"type":"object","description":"Per-model markup overrides for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"},"input_cost":{"type":"number","minimum":0,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.input_cost","typeLabel":"number"},"output_cost":{"type":"number","minimum":0,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.output_cost","typeLabel":"number"}},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-model markup overrides for customers on this plan.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups","typeLabel":"object | null"}},"additionalProperties":false,"description":"For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups","typeLabel":"object"}},"additionalProperties":false,"description":"Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit_schema).","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override","typeLabel":"object"}},"required":["feature_id"],"title":"PlanItem","description":"Configuration for a feature item in a plan, including usage limits, pricing, and rollover settings.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX]","typeLabel":"PlanItem · object"},"description":"Items to add to the plan.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.add_items","typeLabel":"PlanItem · object[]"},"remove_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Match items linked to this feature.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].feature_id","typeLabel":"string"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"Match items with this billing method (prepaid or usage_based).","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].billing_method","typeLabel":"enum\u003cstring>"},"interval":{"oneOf":[{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","week","month","quarter","semi_annual","year"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval.oneOf.1","typeLabel":"enum\u003cstring>"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Match items with this interval_count. Disambiguates between items that share an interval but differ in count.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval_count","typeLabel":"integer"},"included":{"type":"number","maximum":10000000000000,"description":"Match items whose grant equals this included usage. Omitted is a wildcard.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].included","typeLabel":"number"}},"title":"PlanItemFilter","description":"Filter for matching plan items. All provided fields must match (AND).","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX]","typeLabel":"PlanItemFilter · object"},"description":"Filters selecting items to remove from the plan.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_items","typeLabel":"PlanItemFilter · object[]"},"free_trial":{"oneOf":[{"type":"object","title":"FreeTrialParams","description":"Override the plan's default free trial. Pass an object to set a custom trial, or null to remove the trial entirely.","required":["duration_length"],"properties":{"duration_length":{"type":"number","description":"Number of duration_type periods the trial lasts.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.duration_length","typeLabel":"number"},"duration_type":{"enum":["day","month","year"],"type":"string","default":"month","description":"Unit of time for the trial ('day', 'month', 'year').","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.duration_type","typeLabel":"enum\u003cstring>"},"card_required":{"type":"boolean","default":false,"description":"If true, a payment method is required to start the trial and the customer is charged when it ends. Defaults to false.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.card_required","typeLabel":"boolean"},"on_end":{"enum":["bill","revert"],"type":"string","description":"Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.","default":"bill","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.on_end","typeLabel":"enum\u003cstring>"}},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0","typeLabel":"FreeTrialParams · object"},{"type":"null","description":"Override the plan's default free trial. Pass an object to set a custom trial, or null to remove the trial entirely.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.free_trial","typeLabel":"FreeTrialParams · object | null"},"billing_controls":{"type":"object","properties":{"auto_topups":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature (credit balance) to auto top-up.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].feature_id","typeLabel":"string"},"threshold":{"type":"number","description":"When the balance drops below this threshold, an auto top-up will be purchased.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].threshold","typeLabel":"number"},"quantity":{"type":"number","minimum":1,"description":"Amount of credits to add per auto top-up.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].quantity","typeLabel":"number"},"enabled":{"type":"boolean","default":false,"description":"Whether auto top-up is enabled.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].enabled","typeLabel":"boolean"},"purchase_limit":{"type":"object","properties":{"interval":{"enum":["hour","day","week","month"],"type":"string","description":"The time interval for the purchase limit window.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].purchase_limit.interval","typeLabel":"enum\u003cstring>"},"limit":{"type":"number","exclusiveMinimum":0,"description":"Maximum allowed within the interval: a number of auto top-ups when limit_type is count, or a total charge (e.g. 500 for $500, pre-tax) when limit_type is amount.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].purchase_limit.limit","typeLabel":"number"},"limit_type":{"enum":["count","amount"],"type":"string","description":"What `limit` caps: the number of auto top-ups (`count`, default) or the total amount charged for them, in the customer's currency (`amount`).","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].purchase_limit.limit_type","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","minimum":1,"default":1,"description":"Number of intervals in the purchase limit window.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].purchase_limit.interval_count","typeLabel":"number"},"count":{"type":"number","minimum":0,"description":"Set the current window's consumed auto top-up count. Omit to leave runtime state unchanged.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].purchase_limit.count","typeLabel":"number"},"amount":{"type":"number","minimum":0,"description":"Set the amount already charged by auto top-ups in the current window. Omit to leave runtime state unchanged.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].purchase_limit.amount","typeLabel":"number"}},"required":["interval","limit"],"description":"Optional rate limit to cap how often auto top-ups occur. Pass count or amount to set the current window's consumed top-ups or charged amount.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].purchase_limit","typeLabel":"object"},"invoice_mode":{"type":"boolean","description":"When true, auto top-up creates a send_invoice invoice instead of auto-charging.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].invoice_mode","typeLabel":"boolean"}},"required":["feature_id","threshold","quantity"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX]","typeLabel":"object"},"description":"List of auto top-up configurations per feature.","default":[],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups","typeLabel":"object[]"},"spend_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Optional feature ID this spend limit applies to.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether the overage spend limit is enabled.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].enabled","typeLabel":"boolean"},"limit_type":{"enum":["absolute","usage_percentage"],"type":"string","description":"How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].limit_type","typeLabel":"enum\u003cstring>"},"overage_limit":{"type":"number","minimum":0,"description":"Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].overage_limit","typeLabel":"number"},"skip_overage_billing":{"type":"boolean","description":"When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].skip_overage_billing","typeLabel":"boolean"}},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX]","typeLabel":"object"},"description":"List of overage spend limits per feature (caps overage spend).","default":[],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits","typeLabel":"object[]"},"usage_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature this usage limit applies to.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].feature_id","typeLabel":"string"},"limit":{"type":"number","minimum":0,"description":"Maximum units allowed per interval.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].limit","typeLabel":"number"},"interval":{"enum":["day","week","month","year"],"type":"string","description":"Interval for the cap, aligned to the customer's billing cycle.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage limit is enabled.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].enabled","typeLabel":"boolean"},"anchor":{"enum":["billing_cycle","utc"],"type":"string","description":"Window alignment. 'billing_cycle' phases the interval to the customer's renewal time; 'utc' aligns to the UTC calendar.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].anchor","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].filter","typeLabel":"object"}},"required":["feature_id","limit","interval"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX]","typeLabel":"object"},"description":"List of hard usage caps per feature (max units per interval).","default":[],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits","typeLabel":"object[]"},"usage_alerts":{"type":"array","items":{"type":"object","properties":{"threshold":{"type":"number","description":"The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage_percentage or remaining_percentage, this is a percentage. remaining and remaining_percentage accept negative values with basis balance, to alert once the balance is overdrawn.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].threshold","typeLabel":"number"},"threshold_type":{"enum":["usage","usage_percentage","remaining","remaining_percentage"],"type":"string","description":"Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].threshold_type","typeLabel":"enum\u003cstring>"},"feature_id":{"type":"string","description":"The feature ID this alert applies to.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage alert is enabled.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].enabled","typeLabel":"boolean"},"basis":{"enum":["balance","included","recurring","usage_limit"],"type":"string","default":"balance","description":"What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].basis","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].filter","typeLabel":"object"},"name":{"type":"string","description":"Optional user-defined label to distinguish multiple alerts on the same feature.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].name","typeLabel":"string"}},"required":["threshold","threshold_type"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX]","typeLabel":"object"},"description":"List of usage alert configurations per feature.","default":[],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts","typeLabel":"object[]"},"overage_allowed":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature ID this overage allowed control applies to.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether overage is allowed for this feature.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed.items.[INDEX].enabled","typeLabel":"boolean"}},"required":["feature_id"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed.items.[INDEX]","typeLabel":"object"},"description":"List of overage allowed controls per feature. When enabled, usage can exceed balance.","default":[],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed","typeLabel":"object[]"}},"description":"Override the plan's billing controls (auto top-ups, spend limits, usage limits, usage alerts, overage allowed) for this customer.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.billing_controls","typeLabel":"object"},"upsert_licenses":{"type":"array","items":{"type":"object","properties":{"license_plan_id":{"type":"string","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].license_plan_id","typeLabel":"string"},"version_slug":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].version_slug","typeLabel":"string"},"included":{"type":"integer","minimum":0,"maximum":9007199254740991,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].included","typeLabel":"integer"},"prepaid_only":{"type":"boolean","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].prepaid_only","typeLabel":"boolean"},"customize":{"oneOf":[{"type":"object","properties":{"price":{"oneOf":[{"type":"object","title":"BasePrice","description":"Base price configuration for a plan.","required":["amount","interval"],"properties":{"amount":{"type":"number","description":"Base price amount for the plan, in major currency units (e.g. dollars).","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.amount","typeLabel":"number"},"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval (e.g. 'month', 'year').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.interval_count","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Base price amounts in additional currencies. The base 'amount' is in the org's default currency.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies","typeLabel":"object[]"}},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0","typeLabel":"BasePrice · object"},{"type":"null","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price","typeLabel":"BasePrice · object | null"},"add_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature to configure.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_id","typeLabel":"string"},"threshold_billing":{"oneOf":[{"type":"object","description":"Bills this many feature units when outstanding overage reaches it.","required":["threshold"],"properties":{"threshold":{"type":"number","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Bills this many feature units when outstanding overage reaches it.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing","typeLabel":"object | null"},"included":{"type":"number","maximum":10000000000000,"description":"Number of free units included. Balance resets to this each interval for consumable features.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].included","typeLabel":"number"},"unlimited":{"type":"boolean","description":"If true, customer has unlimited access to this feature.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].unlimited","typeLabel":"boolean"},"pooled":{"type":"boolean","default":false,"description":"Whether entity-level grants contribute to a shared customer balance.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].pooled","typeLabel":"boolean"},"reset":{"type":"object","properties":{"interval":{"enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"type":"string","description":"Interval at which balance resets (e.g. 'month', 'year'). For consumable features only.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].reset.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals between resets. Defaults to 1.","default":1,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].reset.interval_count","typeLabel":"number"}},"required":["interval"],"description":"Reset configuration for consumable features. Omit for non-consumable features like seats.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].reset","typeLabel":"object"},"price":{"type":"object","properties":{"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval. For usage-based features, should match reset.interval, unless the price has graduated tiers and reset.interval is a whole multiple of it: each invoice then bills only the newly owed usage, at the tier the reset period has reached.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.interval","typeLabel":"enum\u003cstring>"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"'prepaid' for upfront payment (seats), 'usage_based' for pay-as-you-go.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.billing_method","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"Price per billing_units after included usage. Either 'amount' or 'tiers' is required.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers'.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies","typeLabel":"object[]"},"tiers":{"type":"array","items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"const":"inf","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].flat_amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Per-unit amount for this tier in this currency.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","description":"Flat amount for this tier in this currency, if the tier uses one.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].flat_amount","typeLabel":"number"}},"required":["currency"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to","amount"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX]","typeLabel":"object"},"description":"Tiered pricing. Either 'amount' or 'tiers' is required.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers","typeLabel":"object[]"},"tier_behavior":{"enum":["graduated","volume"],"type":"string","description":"How tiers price usage. 'graduated' (default) charges each unit at the rate of the tier it falls in. 'volume' picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier's rate plus its flat_amount.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tier_behavior","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.interval_count","typeLabel":"number"},"billing_units":{"type":"number","default":1,"description":"Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.billing_units","typeLabel":"number"},"max_purchase":{"oneOf":[{"type":"number","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.max_purchase.oneOf.0","typeLabel":"number"},{"type":"null","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.max_purchase.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.max_purchase","typeLabel":"number | null"}},"required":["interval","billing_method"],"description":"Pricing for usage beyond included units. Omit for free features.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price","typeLabel":"object"},"proration":{"type":"object","properties":{"on_increase":{"enum":["bill_immediately","prorate_immediately","prorate_next_cycle","bill_next_cycle"],"type":"string","description":"Billing behavior when quantity increases mid-cycle.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].proration.on_increase","typeLabel":"enum\u003cstring>"},"on_decrease":{"enum":["prorate","prorate_immediately","prorate_next_cycle","none","no_prorations"],"type":"string","description":"Credit behavior when quantity decreases mid-cycle.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].proration.on_decrease","typeLabel":"enum\u003cstring>"}},"required":["on_increase","on_decrease"],"description":"Proration settings for prepaid features. Controls mid-cycle quantity change billing.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].proration","typeLabel":"object"},"rollover":{"type":"object","properties":{"expiry_duration_type":{"enum":["month","forever"],"type":"string","description":"When rolled over units expire.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.expiry_duration_type","typeLabel":"enum\u003cstring>"},"max":{"type":"number","description":"Max rollover units. Omit for unlimited rollover.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.max","typeLabel":"number"},"max_percentage":{"type":"number","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.max_percentage","typeLabel":"number"},"expiry_duration_length":{"type":"number","description":"Number of periods before expiry.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.expiry_duration_length","typeLabel":"number"}},"required":["expiry_duration_type"],"description":"Rollover config for unused units. If set, unused included units carry over.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover","typeLabel":"object"},"expiry":{"type":"object","properties":{"duration":{"enum":["day","week","month","year"],"type":"string","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].expiry.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].expiry.length","typeLabel":"number"}},"required":["duration","length"],"description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].expiry","typeLabel":"object"},"feature_override":{"type":"object","properties":{"credit_schema":{"type":"array","items":{"oneOf":[{"type":"object","required":["metered_feature_id","tier_behavior","tiers"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.metered_feature_id","typeLabel":"string"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers","typeLabel":"object[]"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["metered_feature_id","credit_cost"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.credit_cost","typeLabel":"number"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["metered_feature_id","excluded"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature to remove from the credit system.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.metered_feature_id","typeLabel":"string"},"excluded":{"const":true,"description":"Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.excluded","typeLabel":"any"}},"additionalProperties":false,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX]","typeLabel":"object"},"description":"For credit system features: merges into the feature's credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `excluded: true` removes it, and unlisted features keep the credit system's rate.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema","typeLabel":"object[]"},"markups":{"type":"object","properties":{"default_markup":{"type":"number","minimum":-100,"description":"Default percentage markup for customers on this plan. Use -100 to make usage free.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.default_markup","typeLabel":"number"},"provider_markups":{"oneOf":[{"type":"object","description":"Per-provider markup percentages for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"}},"required":["markup"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-provider markup percentages for customers on this plan.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups","typeLabel":"object | null"},"model_markups":{"oneOf":[{"type":"object","description":"Per-model markup overrides for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"},"input_cost":{"type":"number","minimum":0,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.input_cost","typeLabel":"number"},"output_cost":{"type":"number","minimum":0,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.output_cost","typeLabel":"number"}},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-model markup overrides for customers on this plan.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups","typeLabel":"object | null"}},"additionalProperties":false,"description":"For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups","typeLabel":"object"}},"additionalProperties":false,"description":"Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit_schema).","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override","typeLabel":"object"}},"required":["feature_id"],"title":"PlanItem","description":"Configuration for a feature item in a plan, including usage limits, pricing, and rollover settings.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX]","typeLabel":"PlanItem · object"},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items","typeLabel":"PlanItem · object[]"},"remove_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Match items linked to this feature.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].feature_id","typeLabel":"string"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"Match items with this billing method (prepaid or usage_based).","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].billing_method","typeLabel":"enum\u003cstring>"},"interval":{"oneOf":[{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","week","month","quarter","semi_annual","year"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval.oneOf.1","typeLabel":"enum\u003cstring>"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Match items with this interval_count. Disambiguates between items that share an interval but differ in count.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval_count","typeLabel":"integer"},"included":{"type":"number","maximum":10000000000000,"description":"Match items whose grant equals this included usage. Omitted is a wildcard.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].included","typeLabel":"number"}},"title":"PlanItemFilter","description":"Filter for matching plan items. All provided fields must match (AND).","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX]","typeLabel":"PlanItemFilter · object"},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items","typeLabel":"PlanItemFilter · object[]"}},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.1","typeLabel":"null"}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize","typeLabel":"object | null"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"oneOf":[{}],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].metadata.additionalProperties","typeLabel":"any"},"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].metadata","typeLabel":"object"}},"required":["license_plan_id"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX]","typeLabel":"object"},"description":"License links to add or override for this customer, keyed by license_plan_id. Omitted fields inherit the plan catalog link (included defaults to 1 when the license is not in the catalog). A bare entry restores the license to pure catalog inheritance.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.upsert_licenses","typeLabel":"object[]"},"remove_licenses":{"type":"array","items":{"type":"object","properties":{"license_plan_id":{"type":"string","isRequired":true,"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_licenses.items.[INDEX].license_plan_id","typeLabel":"string"}},"required":["license_plan_id"],"uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_licenses.items.[INDEX]","typeLabel":"object"},"description":"License links to drop, keyed by license_plan_id. Parallel to remove_items.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize.remove_licenses","typeLabel":"object[]"}},"additionalProperties":false,"description":"The customization that transforms the base plan into this variant.","uniqueKey":"list.items.[INDEX].plan.variant_details.customize","typeLabel":"object"}},"required":["base_plan_id"],"description":"Details about how this variant relates to its latest base plan.","uniqueKey":"list.items.[INDEX].plan.variant_details","typeLabel":"object"}},"required":["id","name","description","group","version","add_on","auto_enable","price","items","created_at","env","archived","config","metadata","base_variant_id"],"description":"The plan as this customer has it, including any customised items and prices.","uniqueKey":"list.items.[INDEX].plan","typeLabel":"object"}},"required":["plan_id","expires_at","started_at","quantity","id","status","customer_id","entity_id","created_at"],"uniqueKey":"list.items.[INDEX]","typeLabel":"object"},"description":"Rows on this page.","isRequired":true,"uniqueKey":"list","typeLabel":"object[]"},"has_more":{"type":"boolean","description":"Whether more results exist. A page may hold fewer than `limit` items (even zero) while `has_more` is true, so paginate until `has_more` is false.","isRequired":true,"uniqueKey":"has_more","typeLabel":"boolean"},"next_cursor":{"oneOf":[{"type":"string","description":"Pass as start_cursor to fetch the next page. Null when has_more is false.","isRequired":true,"uniqueKey":"next_cursor.oneOf.0","typeLabel":"string"},{"type":"null","description":"Pass as start_cursor to fetch the next page. Null when has_more is false.","isRequired":true,"uniqueKey":"next_cursor.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"next_cursor","typeLabel":"string | null"}},"required":["list","has_more","next_cursor"],"examples":[{"list":[{"id":"cus_prod_123","plan_id":"credit_pack","status":"expired","expires_at":null,"started_at":1768817161016,"quantity":1,"scope":"customer","customer_id":"cus_123","entity_id":null,"created_at":1768817161016}],"has_more":false,"next_cursor":null}],"uniqueKey":"","typeLabel":"object"},"example":{"list":[{"id":"cus_prod_123","plan_id":"credit_pack","status":"expired","expires_at":null,"started_at":1768817161016,"quantity":1,"scope":"customer","customer_id":"cus_123","entity_id":null,"created_at":1768817161016}],"has_more":false,"next_cursor":null},"examples":{"Example":{"title":"Example","value":{"list":[{"id":"cus_prod_123","plan_id":"credit_pack","status":"expired","expires_at":null,"started_at":1768817161016,"quantity":1,"scope":"customer","customer_id":"cus_123","entity_id":null,"created_at":1768817161016}],"has_more":false,"next_cursor":null}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"9f880561-074d-4109-814c-8263d4520527":{"secretKey":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"secretKey"}}},"servers":{"b9fee243-0982-4b51-8fd6-8c1f2e4bbf8c":{"url":"https://api.useautumn.com","description":"Production server"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"secretKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"secretKey","name":"Authorization"}],"title":"secretKey"}]},"originalFileLocation":"api/openapi.yml"},"subdomain":"autumn-b9b4c0fb","siteName":"Autumn","title":"List Purchases - Autumn","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-13T19:30:20.402Z","originalFileLocation":"api-reference/customers/listPurchases.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Lists one-off plan purchases across customers, live or expired. Filter by customer, entity, plan, or status. Pages may hold fewer than limit rows while has_more is true.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Autumn\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/autumn-b9b4c0fb/LQO5vXfVIKEXnzb8/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/autumn-b9b4c0fb/LQO5vXfVIKEXnzb8/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/autumn-b9b4c0fb/LQO5vXfVIKEXnzb8/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/autumn-b9b4c0fb/LQO5vXfVIKEXnzb8/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/autumn-b9b4c0fb/LQO5vXfVIKEXnzb8/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/autumn-b9b4c0fb/LQO5vXfVIKEXnzb8/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/autumn-b9b4c0fb/LQO5vXfVIKEXnzb8/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/autumn-b9b4c0fb/LQO5vXfVIKEXnzb8/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/autumn-b9b4c0fb/LQO5vXfVIKEXnzb8/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"List Purchases - Autumn\">\u003cmeta data-mint-head property=\"og:description\" content=\"Lists one-off plan purchases across customers, live or expired. Filter by customer, entity, plan, or status. Pages may hold fewer than limit rows while has_more is true.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Autumn\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.useautumn.com/api-reference/customers/listPurchases\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://autumn-b9b4c0fb.mintlify.site/_mintlify/api/og/v2?division=Customers\u0026amp;title=List+Purchases\u0026amp;description=Lists+one-off+plan+purchases+across+customers%2C+live+or+expired.+Filter+by+customer%2C+entity%2C+plan%2C+or+status.+Pages+may+hold+fewer+than+%60limit%60+rows+while+%60has_m\u0026amp;theme=b0d9fe0672df3d1498e7d4e9\u0026amp;signature=13726513a67b7ca29fad5512944ff830270d0eca0c8ee1508a79efa0b6efb670\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"List Purchases - Autumn\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Lists one-off plan purchases across customers, live or expired. Filter by customer, entity, plan, or status. Pages may hold fewer than limit rows while has_more is true.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://autumn-b9b4c0fb.mintlify.site/_mintlify/api/og/v2?division=Customers\u0026amp;title=List+Purchases\u0026amp;description=Lists+one-off+plan+purchases+across+customers%2C+live+or+expired.+Filter+by+customer%2C+entity%2C+plan%2C+or+status.+Pages+may+hold+fewer+than+%60limit%60+rows+while+%60has_m\u0026amp;theme=b0d9fe0672df3d1498e7d4e9\u0026amp;signature=13726513a67b7ca29fad5512944ff830270d0eca0c8ee1508a79efa0b6efb670\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/autumn-b9b4c0fb/LQO5vXfVIKEXnzb8/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Autumn\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#8838ff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.useautumn.com/api-reference/customers/listPurchases\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/customers/listPurchases.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.useautumn.com/#organization\",\"name\":\"Autumn\",\"url\":\"https://docs.useautumn.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/autumn-b9b4c0fb/BOEMpWFJsAdGcii1/assets/logo/autumn-dark.svg?fit=max\u0026auto=format\u0026n=BOEMpWFJsAdGcii1\u0026q=85\u0026s=720bd2227c435e77f2c91cbfcbccd274\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.useautumn.com#website\",\"name\":\"Autumn\",\"url\":\"https://docs.useautumn.com\",\"publisher\":{\"@id\":\"https://docs.useautumn.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.useautumn.com/api-reference/customers/listPurchases#webpage\",\"url\":\"https://docs.useautumn.com/api-reference/customers/listPurchases\",\"name\":\"List Purchases\",\"description\":\"Lists one-off plan purchases across customers, live or expired. Filter by customer, entity, plan, or status. Pages may hold fewer than limit rows while has_more is true.\",\"dateModified\":\"2026-11-13T19:30:20.402Z\",\"isPartOf\":{\"@id\":\"https://docs.useautumn.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.useautumn.com/api-reference/customers/listPurchases#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.useautumn.com/api-reference/customers/listPurchases#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Customers\",\"item\":\"https://docs.useautumn.com/api-reference/customers/getOrCreateCustomer\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"List Purchases\",\"item\":\"https://docs.useautumn.com/api-reference/customers/listPurchases\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.useautumn.com/api-reference/customers/listPurchases#apireference\",\"headline\":\"List Purchases\",\"name\":\"List Purchases\",\"description\":\"Lists one-off plan purchases across customers, live or expired. Filter by customer, entity, plan, or status. Pages may hold fewer than limit rows while has_more is true.\",\"url\":\"https://docs.useautumn.com/api-reference/customers/listPurchases\",\"mainEntityOfPage\":{\"@id\":\"https://docs.useautumn.com/api-reference/customers/listPurchases#webpage\"},\"dateModified\":\"2026-11-13T19:30:20.402Z\",\"publisher\":{\"@id\":\"https://docs.useautumn.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.useautumn.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Autumn\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Autumn\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/customers/listPurchases.md","siteName":"Autumn","nav":{"global":{"anchors":[{"anchor":"Discord","icon":"discord","href":"https://discord.gg/STqxY92zuS"},{"anchor":"Website","icon":"globe","href":"https://useautumn.com"}]},"tabs":[{"tab":"Documentation","icon":"folder-open","pages":[{"title":"Documentation","href":"/welcome"}]},{"tab":"Examples","icon":"graduation-cap","pages":[{"title":"Examples","href":"/examples/monetary-credits"}]},{"tab":"CLI","icon":"square-terminal","pages":[{"title":"CLI","href":"/cli/getting-started"}]},{"tab":"API Reference","icon":"display-code","groups":[{"group":"Billing","pages":[{"title":"Attach","openapi":"openapi POST /v1/billing.attach","href":"/api-reference/billing/attach"},{"title":"Update Subscription","openapi":"openapi POST /v1/billing.update","href":"/api-reference/billing/billingUpdate"},{"title":"Open Customer Portal","openapi":"openapi POST /v1/billing.open_customer_portal","href":"/api-reference/billing/openCustomerPortal"},{"title":"Setup Payment","openapi":"openapi POST /v1/billing.setup_payment","href":"/api-reference/billing/setupPayment"},{"title":"Transfer Plan","openapi":"openapi POST /v1/billing.transfer","href":"/api-reference/billing/billingTransfer"},{"title":"Multi Attach","openapi":"openapi POST /v1/billing.multi_attach","href":"/api-reference/billing/multiAttach"},{"title":"Multi Update","openapi":"openapi POST /v1/billing.multi_update","href":"/api-reference/billing/multiUpdate"},{"title":"Create Schedule","openapi":"openapi POST /v1/billing.create_schedule","href":"/api-reference/billing/createSchedule"},{"title":"Verify","openapi":"openapi POST /v1/billing.verify","href":"/api-reference/billing/verify"},{"title":"Import","openapi":"openapi POST /v1/billing.import","href":"/api-reference/billing/import"},{"group":"Previews","pages":[{"title":"Preview Attach","openapi":"openapi POST /v1/billing.preview_attach","href":"/api-reference/billing/previewAttach"},{"title":"Preview Update","openapi":"openapi POST /v1/billing.preview_update","href":"/api-reference/billing/previewUpdate"},{"title":"Preview Multi Attach","openapi":"openapi POST /v1/billing.preview_multi_attach","href":"/api-reference/billing/previewMultiAttach"},{"title":"Preview Multi Update","openapi":"openapi POST /v1/billing.preview_multi_update","href":"/api-reference/billing/previewMultiUpdate"}]},{"group":"Licenses","pages":[{"title":"Attach License","openapi":"openapi POST /v1/licenses.attach","href":"/api-reference/licenses/attachLicense"},{"title":"Release License","openapi":"openapi POST /v1/licenses.release","href":"/api-reference/licenses/releaseLicense"},{"title":"List Licenses","openapi":"openapi POST /v1/licenses.list","href":"/api-reference/licenses/listLicenses"},{"title":"List License Assignments","openapi":"openapi POST /v1/licenses.list_assignments","href":"/api-reference/licenses/listLicenseAssignments"}]}]},{"group":"Balances","pages":[{"title":"Check Permissions","openapi":"openapi POST /v1/balances.check","href":"/api-reference/core/check"},{"title":"Track Usage","openapi":"openapi POST /v1/balances.track","href":"/api-reference/core/track"},{"title":"Batch Track Usage","openapi":"openapi POST /v1/balances.batch_track","href":"/api-reference/core/batchTrack"},{"title":"List Balances","openapi":"openapi POST /v1/balances.list","href":"/api-reference/balances/listBalances"},{"title":"List Balance Ledger","openapi":"openapi POST /v1/balances.list_ledger","href":"/api-reference/balances/listBalanceLedger"},{"title":"Aggregate Balance Ledger","openapi":"openapi POST /v1/balances.aggregate_ledger","href":"/api-reference/balances/aggregateBalanceLedger"},{"title":"Create Balance","openapi":"openapi POST /v1/balances.create","href":"/api-reference/balances/createBalance"},{"title":"Update Balance","openapi":"openapi POST /v1/balances.update","href":"/api-reference/balances/updateBalance"},{"title":"Delete Balance","openapi":"openapi POST /v1/balances.delete","href":"/api-reference/balances/deleteBalance"},{"title":"Finalize Lock","openapi":"openapi POST /v1/balances.finalize","href":"/api-reference/balances/finalizeLock"}]},{"group":"Customers","pages":[{"title":"Get or Create Customer","openapi":"openapi POST /v1/customers.get_or_create","href":"/api-reference/customers/getOrCreateCustomer"},{"title":"Get Customer","openapi":"openapi POST /v1/customers.get","href":"/api-reference/customers/getCustomer"},{"title":"List Customers","openapi":"openapi POST /v1/customers.list","href":"/api-reference/customers/listCustomers"},{"title":"List Subscriptions","openapi":"openapi POST /v1/subscriptions.list","description":"Lists recurring plans (including add-ons) across customers, live or expired. Filter by customer, entity, plan, or status. Pages may hold fewer than `limit` rows while `has_more` is true.","href":"/api-reference/customers/listSubscriptions"},{"title":"List Purchases","openapi":"openapi POST /v1/purchases.list","href":"/api-reference/customers/listPurchases"},{"title":"Update Customer","openapi":"openapi POST /v1/customers.update","description":"Updates an existing customer by ID.","href":"/api-reference/customers/updateCustomer"},{"title":"Delete Customer","openapi":"openapi POST /v1/customers.delete","href":"/api-reference/customers/deleteCustomer"},{"title":"Swap Customer IDs","openapi":"openapi POST /v1/customers.swap","href":"/api-reference/customers/swapCustomers"}]},{"group":"Invoices","pages":[{"title":"List Invoices","openapi":"openapi POST /v1/invoices.list","href":"/api-reference/invoices/listInvoices"},{"title":"Create Invoice","openapi":"openapi POST /v1/invoices.create","href":"/api-reference/invoices/createInvoice"},{"title":"Mark Invoice as Paid","openapi":"openapi POST /v1/invoices.pay","href":"/api-reference/invoices/payInvoice"},{"title":"Void Invoice","openapi":"openapi POST /v1/invoices.void","href":"/api-reference/invoices/voidInvoice"},{"title":"Reissue Invoice","openapi":"openapi POST /v1/invoices.reissue","href":"/api-reference/invoices/reissueInvoice"},{"title":"Issue Credit Note","openapi":"openapi POST /v1/invoices.issue_credit_note","href":"/api-reference/invoices/issueCreditNote"},{"title":"Backfill Invoices","openapi":"openapi POST /v1/invoices.insert","href":"/api-reference/invoices/insertInvoices"},{"title":"List Invoice Templates","openapi":"openapi POST /v1/invoices.listTemplates","href":"/api-reference/invoices/listInvoiceTemplates"}]},{"group":"Authorization","pages":[{"title":"Mint","openapi":"openapi POST /v1/keys.mint","href":"/api-reference/keys/mintKey"},{"title":"Refresh","openapi":"openapi POST /v1/keys.refresh","href":"/api-reference/keys/refreshKey"},{"title":"Revoke","openapi":"openapi POST /v1/keys.revoke","href":"/api-reference/keys/revokeKey"}]},{"group":"Analytics","pages":[{"title":"List Events","openapi":"openapi POST /v1/events.list","href":"/api-reference/events/listEvents"},{"title":"Aggregate Events","openapi":"openapi POST /v1/events.aggregate","href":"/api-reference/events/aggregateEvents"},{"title":"Query events in SQL","openapi":"openapi POST /v1/events.query","href":"/api-reference/events/queryEvents"},{"title":"Query data in SQL","openapi":"openapi POST /v1/analytics.query","href":"/api-reference/analytics/queryAnalytics"}]},{"group":"Logs","pages":[{"title":"Search Request Logs","openapi":"openapi POST /v1/logs.search","href":"/api-reference/logs/searchRequestLogs"}]},{"group":"Entities","pages":[{"title":"Get Entity","openapi":"openapi POST /v1/entities.get","href":"/api-reference/entities/getEntity"},{"title":"List Entities","openapi":"openapi POST /v1/entities.list","href":"/api-reference/entities/listEntities"},{"title":"Create Entity","openapi":"openapi POST /v1/entities.create","href":"/api-reference/entities/createEntity"},{"title":"Update Entity","openapi":"openapi POST /v1/entities.update","href":"/api-reference/entities/updateEntity"},{"title":"Delete Entity","openapi":"openapi POST /v1/entities.delete","href":"/api-reference/entities/deleteEntity"}]},{"group":"Accounts","pages":[{"title":"Get Account","openapi":"openapi POST /v1/accounts.get","href":"/api-reference/accounts/getAccount"},{"title":"Update Account","openapi":"openapi POST /v1/accounts.update","href":"/api-reference/accounts/updateAccount"}]},{"group":"Plans","pages":[{"title":"Get a plan","openapi":"openapi POST /v1/plans.get","href":"/api-reference/plans/getPlan"},{"title":"List all plans","openapi":"openapi POST /v1/plans.list","href":"/api-reference/plans/listPlans"},{"title":"Create a plan","openapi":"openapi POST /v1/plans.create","href":"/api-reference/plans/createPlan"},{"title":"Update a plan","openapi":"openapi POST /v1/plans.update","href":"/api-reference/plans/updatePlan"},{"title":"Delete a plan","openapi":"openapi POST /v1/plans.delete","href":"/api-reference/plans/deletePlan"}]},{"group":"Features","pages":[{"title":"Get Feature","openapi":"openapi POST /v1/features.get","href":"/api-reference/features/getFeature"},{"title":"List Features","openapi":"openapi POST /v1/features.list","href":"/api-reference/features/listFeatures"},{"title":"Create Feature","openapi":"openapi POST /v1/features.create","href":"/api-reference/features/createFeature"},{"title":"Update Feature","openapi":"openapi POST /v1/features.update","href":"/api-reference/features/updateFeature"},{"title":"Delete Feature","openapi":"openapi POST /v1/features.delete","href":"/api-reference/features/deleteFeature"}]},{"group":"Rewards \u0026 Referrals","pages":[{"title":"Create Referral Program","openapi":"openapi POST /v1/referral_programs.create","href":"/api-reference/referrals/createReferralProgram"},{"title":"List Referral Programs","openapi":"openapi POST /v1/referral_programs.list","href":"/api-reference/referrals/listReferralPrograms"},{"title":"Get Referral Program","openapi":"openapi POST /v1/referral_programs.get","href":"/api-reference/referrals/getReferralProgram"},{"title":"Update Referral Program","openapi":"openapi POST /v1/referral_programs.update","href":"/api-reference/referrals/updateReferralProgram"},{"title":"Delete Referral Program","openapi":"openapi POST /v1/referral_programs.delete","href":"/api-reference/referrals/deleteReferralProgram"},{"title":"Create Referral Code","openapi":"openapi POST /v1/referrals.create_code","href":"/api-reference/referrals/createReferralCode"},{"title":"Redeem Referral Code","openapi":"openapi POST /v1/referrals.redeem_code","href":"/api-reference/referrals/redeemReferralCode"},{"title":"Create Reward","openapi":"openapi POST /v1/rewards.create","href":"/api-reference/rewards/createReward"},{"title":"List Rewards","openapi":"openapi POST /v1/rewards.list","href":"/api-reference/rewards/listRewards"},{"title":"Get Reward","openapi":"openapi POST /v1/rewards.get","href":"/api-reference/rewards/getReward"},{"title":"Update Reward","openapi":"openapi POST /v1/rewards.update","href":"/api-reference/rewards/updateReward"},{"title":"Delete Reward","openapi":"openapi POST /v1/rewards.delete","href":"/api-reference/rewards/deleteReward"},{"title":"Redeem Reward Code","openapi":"openapi POST /v1/rewards.redeem","href":"/api-reference/rewards/redeemRewardCode"}]},{"group":"Webhooks","pages":[{"title":"Get Webhook","openapi":"openapi POST /v1/webhooks.get","href":"/api-reference/webhooks/getWebhook"},{"title":"List Webhooks","openapi":"openapi POST /v1/webhooks.list","href":"/api-reference/webhooks/listWebhooks"},{"title":"Create Webhook","openapi":"openapi POST /v1/webhooks.create","href":"/api-reference/webhooks/createWebhook"},{"title":"Update Webhook","openapi":"openapi POST /v1/webhooks.update","href":"/api-reference/webhooks/updateWebhook"},{"title":"Delete Webhook","openapi":"openapi POST /v1/webhooks.delete","href":"/api-reference/webhooks/deleteWebhook"},{"title":"Sync Webhooks","openapi":"openapi POST /v1/webhooks.sync","href":"/api-reference/webhooks/syncWebhooks"},{"group":"Previews","pages":[{"title":"Preview Sync Webhooks","openapi":"openapi POST /v1/webhooks.preview_sync","href":"/api-reference/webhooks/previewSyncWebhooks"}]}]},{"group":"Webhook Events","pages":[{"group":"Balances","pages":[{"title":"Usage Alert Triggered","openapi":"api/openapi.yml webhook balances.usage_alert_triggered","href":"/api-reference/webhooks/balancesUsageAlertTriggered"},{"title":"Limit Reached","openapi":"api/openapi.yml webhook balances.limit_reached","href":"/api-reference/webhooks/balancesLimitReached"}]},{"group":"Billing","pages":[{"title":"Auto Top-Up Failed","openapi":"api/openapi.yml webhook billing.auto_topup_failed","href":"/api-reference/webhooks/billingAutoTopupFailed"},{"title":"Auto Top-Up Succeeded","openapi":"api/openapi.yml webhook billing.auto_topup_succeeded","href":"/api-reference/webhooks/billingAutoTopupSucceeded"},{"title":"Plans Updated","openapi":"api/openapi.yml webhook billing.updated","href":"/api-reference/webhooks/billingUpdated"}]},{"group":"Invoice","pages":[{"title":"Invoice Finalized","openapi":"api/openapi.yml webhook invoice.finalized","href":"/api-reference/webhooks/invoiceFinalized"}]},{"group":"Vercel","pages":[{"title":"Resource Deleted","openapi":"api/openapi.yml webhook vercel.resources.deleted","href":"/api-reference/webhooks/vercelResourcesDeleted"},{"title":"Resource Provisioned","openapi":"api/openapi.yml webhook vercel.resources.provisioned","href":"/api-reference/webhooks/vercelResourcesProvisioned"},{"title":"Rotate Secrets","openapi":"api/openapi.yml webhook vercel.resources.rotate_secrets","href":"/api-reference/webhooks/vercelResourcesRotateSecrets"},{"title":"Webhook Event","openapi":"api/openapi.yml webhook vercel.webhooks.event","href":"/api-reference/webhooks/vercelWebhooksEvent"}]}]},{"group":"Platform (Beta)","pages":[{"title":"Overview","href":"/api-reference/platform/overview"},{"title":"Create Organization","openapi":"platform POST /platform/organizations","href":"/api-reference/platform/create-organization"},{"title":"Generate Stripe OAuth URL","openapi":"platform POST /platform/oauth_url","href":"/api-reference/platform/oauth-url"},{"title":"Get Stripe Connection","openapi":"openapi POST /v1/platform.get_stripe_connection","href":"/api-reference/platform/getStripeConnection"},{"title":"Disconnect Stripe","openapi":"openapi POST /v1/platform.disconnect_stripe","href":"/api-reference/platform/disconnectStripe"},{"title":"Update Connected Stripe Account","openapi":"platform POST /platform/organizations/stripe","href":"/api-reference/platform/update-stripe"},{"title":"List Users","openapi":"platform GET /platform/users","href":"/api-reference/platform/list-users"},{"title":"List Organizations","openapi":"platform GET /platform/organizations","href":"/api-reference/platform/list-orgs"}]}]},{"tab":"Lakehouse","icon":"database","dropdowns":[{"dropdown":"v2.6 (latest)","icon":"database","groups":[{"group":"Lakehouse","pages":[{"title":"Lakehouse Overview","sidebarTitle":"Overview","href":"/documentation/lakehouse/v2-6/overview"},{"title":"Connecting","sidebarTitle":"Connecting","href":"/documentation/lakehouse/v2-6/connecting"},{"title":"Schema Reference","sidebarTitle":"Schema Reference","href":"/documentation/lakehouse/v2-6/schema"},{"title":"Migrating from v2.3","sidebarTitle":"Migrating from v2.3","href":"/documentation/lakehouse/v2-6/migrating-from-v2-3"}]},{"group":"Guides","pages":[{"title":"Working with balances","sidebarTitle":"Working with balances","href":"/documentation/lakehouse/v2-6/balances"},{"title":"Working with invoices","sidebarTitle":"Working with invoices","href":"/documentation/lakehouse/v2-6/working-with-invoices"},{"title":"Querying","sidebarTitle":"Querying","href":"/documentation/lakehouse/v2-6/querying"},{"title":"Rebuild a customer or entity","sidebarTitle":"Rebuild a customer or entity","href":"/documentation/lakehouse/v2-6/rebuild-customer-and-entity"}]}]},{"dropdown":"v2.3 (legacy)","icon":"clock-rotate-left","groups":[{"group":"Lakehouse v2.3 (legacy)","pages":[{"title":"Lakehouse Overview","sidebarTitle":"Overview","href":"/documentation/lakehouse/v2-3/overview"},{"title":"Connecting","sidebarTitle":"Connecting","href":"/documentation/lakehouse/v2-3/connecting"},{"title":"Schema Reference","sidebarTitle":"Schema Reference","href":"/documentation/lakehouse/v2-3/schema"},{"title":"Working with balances","sidebarTitle":"Working with balances","href":"/documentation/lakehouse/v2-3/balance-semantics"},{"title":"Working with invoices","sidebarTitle":"Working with invoices","href":"/documentation/lakehouse/v2-3/working-with-invoices"},{"title":"Querying","sidebarTitle":"Querying","href":"/documentation/lakehouse/v2-3/querying"}]}]}]},{"tab":"Changelog","icon":"list-ol","pages":[{"title":"Changelog","href":"/changelog/changelog"}]}]},"basePath":"","title":"List Purchases - Autumn","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DdEMm2kG.js","utils-BMo572L7.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C-4m9KAx.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DPLK2Oq9.js","snippetPresets-BKjfJMC9.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-DTsgtCEj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C8vmhyQM.js","shallow-r9w8LQGS.js","getApiPlaygroundDisplay-DjPI64HQ.js","CodeSnippet-C8Bvhl16.js","CodeSnippets-BtWUwcMy.js","Page-BIYvYBgk.js","getPastedJson-Dcm_3Pgl.js","icon-BXwrTpjc.js","MethodPill-CcjfVmmy.js","DuplicateIcon-BuKIbXAQ.js","createIcon-DaL9yXsO.js","DynamicMarkdown-Co5nikxh.js","SectionHeading-P4UNTsMZ.js","axios-vUo_bRtp.js","Markdown-CEfymfIH.js","clsx-Dq9TQuNi.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-D2J8knkn.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BgZ2ThuU.js"]}