The update endpoint modifies an existing subscription. Use this to change prepaid quantities, cancel subscriptions, or modify plan configuration. For subscribing to a new plan, use attach instead.
If this plan contains prepaid features, use this field to specify the quantity of each prepaid feature. This quantity includes the included amount and billing units defined when setting up the plan.
Invoice mode creates a draft or open invoice and sends it to the customer, instead of charging their card immediately. This uses Stripe's send_invoice collection method.
How to handle proration when updating an existing subscription. 'prorate_immediately' charges/credits prorated amounts now, 'none' skips creating any charges, 'bill_difference' bills the larger of the full-period price difference and the prorated amount (full difference on upgrades, prorated credit on downgrades) now without changing the billing cycle.
Controls when to return a checkout URL. 'always' returns a URL even if payment succeeds, 'if_required' only when payment action is needed, 'never' disables redirects.
A unique ID to identify this subscription. Can be used to target specific subscriptions in update operations when a customer has multiple products with the same plan.
Custom line items that replace the auto-generated proration invoice, or bill a standalone invoice when nothing else changes. Only valid on an existing recurring subscription.
Action to perform for cancellation. 'cancel_immediately' cancels now with prorated refund, 'cancel_end_of_cycle' cancels at period end, 'uncancel' reverses a pending cancellation.
Total seat quantities (inclusive of the license's included count) per license plan offered by this plan. Licenses not listed keep their current paid quantity.
Details about any action required to complete the payment. Present when the payment could not be processed automatically.
Show child attributes
{"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","github":"https://github.com/useautumn","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":"GitHub","icon":"github","href":"https://github.com/useautumn/autumn"},{"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":""},"chroma":{"liveDeploymentHistoryId":"6adf70683d6319f7be04488b","collectionId":"51110cc0-1315-435c-8118-95f0c05e3ce4","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adf70683d6319f7be04488b"},"feedback":{"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6adfc480ca1d3c49d2cf24bc","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"API Reference","count":101},{"language":"default","tag":"Documentation","count":64},{"language":"default","tag":"Billing","count":20},{"language":"default","tag":"Configure Pricing","count":19},{"language":"default","tag":"Additional Resources","count":16},{"language":"default","tag":"Customers","count":15},{"language":"default","tag":"Rewards \u0026 Referrals","count":13},{"language":"default","tag":"Balances","count":10},{"language":"default","tag":"Webhook Events","count":10},{"language":"default","tag":"Invoices","count":8}],"searchSettings":{"tuning":{"anchor":{"titleCoverageRelabel":true}}}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"language-tabs.css","content":""},{"filePath":"style.css","content":".prose>.api-section{display:none!important}"}],"page":{"pagePath":"api-reference/billing/billingUpdate","slug":"/api-reference/billing/billingUpdate","pageMetadata":{"title":"Update Subscription","openapi":"openapi POST /v1/billing.update","description":"Updates an existing subscription. Use to modify feature quantities, cancel, or change plan configuration.\n\nUse this endpoint to update prepaid quantities, cancel a subscription (immediately or at end of cycle), or modify subscription settings.","href":"/api-reference/billing/billingUpdate"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Updates an existing subscription. Use to modify feature quantities, cancel, or change plan configuration.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Use this endpoint to update prepaid quantities, cancel a subscription (immediately or at end of cycle), or modify subscription settings.\"\n })]\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={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,CodeGroup,Expandable,Heading,Note,_MdxComponentBoundary}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(Note,{children:_jsxs(_components.p,{children:[`The update endpoint modifies an existing subscription. Use this to change prepaid quantities, cancel subscriptions, or modify plan configuration. For subscribing to a new plan, use `,_jsx(_components.a,{href:`/api-reference/billing/attach`,children:`attach`}),` instead.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`common-use-cases`,children:`Common Use Cases`}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Update prepaid quantity`,numberOfLines:`5`,language:`typescript`,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:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` response`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` autumn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`billing`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`update`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` customerId:`}),_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:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` planId:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"pro_plan\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` featureQuantities:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [{ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`featureId:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"seats\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`quantity:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 10`}),_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`]})})}),_jsx(CodeBlock,{filename:`Cancel at end of cycle`,numberOfLines:`5`,language:`typescript`,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:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` response`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` autumn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`billing`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`update`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` customerId:`}),_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:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` planId:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"pro_plan\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` cancelAction:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cancel_end_of_cycle\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Uncancel subscription`,numberOfLines:`5`,language:`typescript`,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:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` response`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` autumn`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`billing`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`update`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` customerId:`}),_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:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` planId:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"pro_plan\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` cancelAction:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"uncancel\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`3`,id:`body-parameters`,children:`Body Parameters`}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`customer_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The ID of the customer to attach the plan to.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`entity_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the entity to attach the plan to.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`plan_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the plan to update. Optional if subscription_id is provided, or if the customer has only one product.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`feature_quantities`,type:`object[]`,children:[_jsx(_components.p,{children:`If this plan contains prepaid features, use this field to specify the quantity of each prepaid feature. This quantity includes the included amount and billing units defined when setting up the plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The ID of the feature to set quantity for.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`quantity`,type:`number`,children:_jsx(_components.p,{children:`The quantity of the feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`adjustable`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the customer can adjust the quantity.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`version`,type:`number`,children:_jsx(_components.p,{children:`The version of the plan to attach.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`free_trial`,type:`object | null`,children:[_jsx(_components.p,{children:`Free trial configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`duration_length`,type:`number`,required:true,children:_jsx(_components.p,{children:`Number of duration_type periods the trial lasts.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`duration_type`,type:`'day' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Unit of time for the trial (‘day’, ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`customize`,type:`object`,children:[_jsx(_components.p,{children:`Customize the plan to attach. Can override the price, items, licenses, free trial, or a combination.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Base price configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,required:true,children:_jsx(_components.p,{children:`Base price amount for the plan, in major currency units (e.g. dollars).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,required:true,children:_jsx(_components.p,{children:`Billing interval (e.g. ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`currency`,type:`string`,required:true,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,required:true,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`items`,type:`object[]`,children:[_jsx(_components.p,{children:`Override the items in the plan (PUT-style — replaces all existing items). Mutually exclusive with add_items / remove_items / deprecated update_items.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`threshold`,type:`number`,required:true})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The ID of the feature to configure.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`If true, customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,required:true,children:_jsx(_components.p,{children:`Interval at which balance resets (e.g. ‘month’, ‘year’). For consumable features only.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage. Either ‘amount’ or ‘tiers’ is required.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`currency`,type:`string`,required:true,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,required:true,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing. Either ‘amount’ or ‘tiers’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`to`,type:`number`,required:true})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Per-currency amounts for this tier. Tier boundaries (‘to’) are shared across all currencies.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`currency`,type:`string`,required:true,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,required:true,children:_jsx(_components.p,{children:`Billing interval. For consumable features, should match reset.interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`billing_method`,type:`'prepaid' | 'usage_based'`,required:true,children:_jsx(_components.p,{children:`‘prepaid’ for upfront payment (seats), ‘usage_based’ for pay-as-you-go.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`on_increase`,type:`'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'`,required:true,children:_jsx(_components.p,{children:`Billing behavior when quantity increases mid-cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`on_decrease`,type:`'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'`,required:true,children:_jsx(_components.p,{children:`Credit behavior when quantity decreases mid-cycle.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`max`,type:`number`,children:_jsx(_components.p,{children:`Max rollover units. Omit for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`expiry_duration_type`,type:`'month' | 'forever'`,required:true,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`duration`,type:`'day' | 'week' | 'month' | 'year'`,required:true})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`length`,type:`number`,required:true})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`match.{key}`,type:`string`,required:true,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`to`,type:`number`,required:true,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`credit_cost`,type:`number`,required:true,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`markup`,type:`number`,required:true})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`add_items`,type:`object[]`,children:[_jsx(_components.p,{children:`Items to add to the plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`threshold`,type:`number`,required:true})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The ID of the feature to configure.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`If true, customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,required:true,children:_jsx(_components.p,{children:`Interval at which balance resets (e.g. ‘month’, ‘year’). For consumable features only.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage. Either ‘amount’ or ‘tiers’ is required.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`currency`,type:`string`,required:true,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,required:true,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing. Either ‘amount’ or ‘tiers’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`to`,type:`number`,required:true})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Per-currency amounts for this tier. Tier boundaries (‘to’) are shared across all currencies.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`currency`,type:`string`,required:true,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,required:true,children:_jsx(_components.p,{children:`Billing interval. For consumable features, should match reset.interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`billing_method`,type:`'prepaid' | 'usage_based'`,required:true,children:_jsx(_components.p,{children:`‘prepaid’ for upfront payment (seats), ‘usage_based’ for pay-as-you-go.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`on_increase`,type:`'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'`,required:true,children:_jsx(_components.p,{children:`Billing behavior when quantity increases mid-cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`on_decrease`,type:`'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'`,required:true,children:_jsx(_components.p,{children:`Credit behavior when quantity decreases mid-cycle.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`max`,type:`number`,children:_jsx(_components.p,{children:`Max rollover units. Omit for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`expiry_duration_type`,type:`'month' | 'forever'`,required:true,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`duration`,type:`'day' | 'week' | 'month' | 'year'`,required:true})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`length`,type:`number`,required:true})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`match.{key}`,type:`string`,required:true,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`to`,type:`number`,required:true,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`credit_cost`,type:`number`,required:true,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`markup`,type:`number`,required:true})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Match items linked to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`Match items with this billing method (prepaid or usage_based).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`included`,type:`number`,children:_jsx(_components.p,{children:`Match items whose grant equals this included usage. Omitted is a wildcard.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`free_trial`,type:`object | null`,children:[_jsx(_components.p,{children:`Free trial configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`duration_length`,type:`number`,required:true,children:_jsx(_components.p,{children:`Number of duration_type periods the trial lasts.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`duration_type`,type:`'day' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Unit of time for the trial (‘day’, ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The ID of the feature (credit balance) to auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether auto top-up is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`threshold`,type:`number`,required:true,children:_jsx(_components.p,{children:`When the balance drops below this threshold, an auto top-up will be purchased.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`quantity`,type:`number`,required:true,children:_jsx(_components.p,{children:`Amount of credits to add per auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`purchase_limit`,type:`object`,children:[_jsx(_components.p,{children:`Optional rate limit to cap how often auto top-ups occur. Pass count to set the current window’s consumed top-ups.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'hour' | 'day' | 'week' | 'month'`,required:true,children:_jsx(_components.p,{children:`The time interval for the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals in the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`limit`,type:`number`,required:true,children:_jsx(_components.p,{children:`Maximum number of auto top-ups allowed within the interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Optional feature ID this spend limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the overage spend limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The feature this usage limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`limit`,type:`number`,required:true,children:_jsx(_components.p,{children:`Maximum units allowed per interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'day' | 'week' | 'month' | 'year'`,required:true,children:_jsx(_components.p,{children:`Interval for the cap, aligned to the customer’s billing cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`properties.{key}`,type:`string`,required:true})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`usage_alerts`,type:`object[]`,children:[_jsx(_components.p,{children:`List of usage alert configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this alert applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage alert is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`threshold`,type:`number`,required:true,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 (0-100).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`threshold_type`,type:`'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'`,required:true,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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`properties.{key}`,type:`string`,required:true})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`name`,type:`string`,children:_jsx(_components.p,{children:`Optional user-defined label to distinguish multiple alerts on the same feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The feature ID this overage allowed control applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether overage is allowed for this feature.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`license_plan_id`,type:`string`,required:true})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`version_slug`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`included`,type:`integer`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`prepaid_only`,type:`boolean`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`customize`,type:`object | null`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Base price configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,required:true,children:_jsx(_components.p,{children:`Base price amount for the plan, in major currency units (e.g. dollars).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,required:true,children:_jsx(_components.p,{children:`Billing interval (e.g. ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`currency`,type:`string`,required:true,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,required:true,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`add_items`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`threshold`,type:`number`,required:true})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The ID of the feature to configure.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`If true, customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,required:true,children:_jsx(_components.p,{children:`Interval at which balance resets (e.g. ‘month’, ‘year’). For consumable features only.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage. Either ‘amount’ or ‘tiers’ is required.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`currency`,type:`string`,required:true,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,required:true,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing. Either ‘amount’ or ‘tiers’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`to`,type:`number`,required:true})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Per-currency amounts for this tier. Tier boundaries (‘to’) are shared across all currencies.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`currency`,type:`string`,required:true,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,required:true,children:_jsx(_components.p,{children:`Billing interval. For consumable features, should match reset.interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`billing_method`,type:`'prepaid' | 'usage_based'`,required:true,children:_jsx(_components.p,{children:`‘prepaid’ for upfront payment (seats), ‘usage_based’ for pay-as-you-go.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`on_increase`,type:`'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'`,required:true,children:_jsx(_components.p,{children:`Billing behavior when quantity increases mid-cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`on_decrease`,type:`'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'`,required:true,children:_jsx(_components.p,{children:`Credit behavior when quantity decreases mid-cycle.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`max`,type:`number`,children:_jsx(_components.p,{children:`Max rollover units. Omit for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`expiry_duration_type`,type:`'month' | 'forever'`,required:true,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`duration`,type:`'day' | 'week' | 'month' | 'year'`,required:true})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`length`,type:`number`,required:true})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`match.{key}`,type:`string`,required:true,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`to`,type:`number`,required:true,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`credit_cost`,type:`number`,required:true,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`markup`,type:`number`,required:true})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`remove_items`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Match items linked to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`Match items with this billing method (prepaid or usage_based).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`included`,type:`number`,children:_jsx(_components.p,{children:`Match items whose grant equals this included usage. Omitted is a wildcard.`})})})]})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`metadata`,type:`object`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`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:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`license_plan_id`,type:`string`,required:true})})})]})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`invoice_mode`,type:`object`,children:[_jsx(_components.p,{children:`Invoice mode creates a draft or open invoice and sends it to the customer, instead of charging their card immediately. This uses Stripe’s send_invoice collection method.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`enabled`,type:`boolean`,required:true,children:_jsx(_components.p,{children:`When true, creates an invoice and sends it to the customer instead of charging their card immediately. Uses Stripe’s send_invoice collection method.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`enable_plan_immediately`,type:`boolean`,children:_jsx(_components.p,{children:`If true, enables the plan immediately even though the invoice is not paid yet.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`finalize`,type:`boolean`,children:_jsx(_components.p,{children:`Deprecated: use issue_method. true sends the invoice (issue_method: send), false keeps it as a draft (issue_method: draft). Defaults to true. Ignored when issue_method is set.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`issue_method`,type:`'draft' | 'finalize' | 'send'`,children:_jsx(_components.p,{children:`How far the invoice created now advances. draft leaves it editable for manual review. finalize opens it without Stripe emailing, reminding or charging (auto_advance off), for invoices collected outside Stripe. send opens it and lets Stripe email it. Defaults to send. Requires enabled: true. Renewal invoices follow the subscription.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`invoice_template_id`,type:`string`,children:_jsx(_components.p,{children:`ID of an invoice template (configured in billing settings) whose footer (e.g. bank details) is applied to the invoice.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`net_terms_days`,type:`integer`,children:_jsx(_components.p,{children:`Number of days the customer has to pay the invoice before it is due (Stripe days_until_due).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`payment_method_types`,type:`('card' | 'customer_balance' | 'us_bank_account' | 'sepa_debit' | 'bacs_debit' | 'acss_debit' | 'link')[]`,children:_jsx(_components.p,{children:`Payment method types the customer can pay the invoice with, e.g. card and us_bank_account. Overrides the org’s allowed payment methods.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`proration_behavior`,type:`'prorate_immediately' | 'none' | 'bill_difference'`,children:_jsx(_components.p,{children:`How to handle proration when updating an existing subscription. ‘prorate_immediately’ charges/credits prorated amounts now, ‘none’ skips creating any charges, ‘bill_difference’ bills the larger of the full-period price difference and the prorated amount (full difference on upgrades, prorated credit on downgrades) now without changing the billing cycle.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`redirect_mode`,type:`'always' | 'if_required' | 'never'`,children:_jsx(_components.p,{children:`Controls when to return a checkout URL. ‘always’ returns a URL even if payment succeeds, ‘if_required’ only when payment action is needed, ‘never’ disables redirects.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`subscription_id`,type:`string`,children:_jsx(_components.p,{children:`A unique ID to identify this subscription. Can be used to target specific subscriptions in update operations when a customer has multiple products with the same plan.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`discounts`,type:`object[]`,children:[_jsx(_components.p,{children:`List of discounts to apply. Each discount can be an Autumn reward ID, Stripe coupon ID, or Stripe promotion code.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`reward_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the reward to apply as a discount.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`promotion_code`,type:`string`,children:_jsx(_components.p,{children:`The promotion code to apply as a discount.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`remove_discounts`,type:`object[]`,children:[_jsx(_components.p,{children:`Discounts to remove from the subscription, by reward ID. Discounts not listed are left unchanged.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`reward_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The ID of the reward (or Stripe coupon) to remove.`})})})})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`custom_line_items`,type:`object[]`,children:[_jsx(_components.p,{children:`Custom line items that replace the auto-generated proration invoice, or bill a standalone invoice when nothing else changes. Only valid on an existing recurring subscription.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,required:true,children:_jsx(_components.p,{children:`Amount in dollars for this line item (e.g. 10.50). Can be negative for credits.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`description`,type:`string`,required:true,children:_jsx(_components.p,{children:`Description for the line item.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`remove_lines`,type:`object[]`,children:[_jsx(_components.p,{children:`Lines to remove from the invoice this request creates. Never changes the subscription or later invoices.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`plan_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The plan whose lines to remove: one coming in, going out, or already on the customer and billed by this request.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`entity_id`,type:`string | null`,children:_jsx(_components.p,{children:`The entity the lines are billed to. Omit to inherit the request’s entity_id, or pass null for customer-level.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`direction`,type:`'charge' | 'refund'`,children:_jsx(_components.p,{children:`Only remove charges or only remove refunds (credits). Omit to remove both.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`price`,type:`true`,children:_jsx(_components.p,{children:`Remove the base price line. Pass true, or an object to narrow by interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_quantities`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The feature whose line to remove.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`billing_behavior`,type:`'prepaid' | 'usage_based'`,required:true,children:_jsx(_components.p,{children:`Which of the feature’s prices to match: ‘prepaid’ or ‘usage_based’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Only match the price billed on this interval. Needed when the same price exists on more than one interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval_count`,type:`integer`,children:_jsx(_components.p,{children:`Only match the price billed every this many intervals.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`license_quantities`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`license_plan_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The license plan linked to the parent plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`price`,type:`true`,children:_jsx(_components.p,{children:`Remove the base price line. Pass true, or an object to narrow by interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_quantities`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The feature whose line to remove.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`billing_behavior`,type:`'prepaid' | 'usage_based'`,required:true,children:_jsx(_components.p,{children:`Which of the feature’s prices to match: ‘prepaid’ or ‘usage_based’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Only match the price billed on this interval. Needed when the same price exists on more than one interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`interval_count`,type:`integer`,children:_jsx(_components.p,{children:`Only match the price billed every this many intervals.`})})})]})})})]})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`add_lines`,type:`object[]`,children:[_jsx(_components.p,{children:`Lines to add to the invoice this request creates. Never changes the subscription or later invoices.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`amount`,type:`number`,required:true,children:_jsx(_components.p,{children:`Amount in dollars for this line item (e.g. 10.50). Can be negative for credits.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`description`,type:`string`,required:true,children:_jsx(_components.p,{children:`Description for the line item.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`period_start`,type:`integer`,children:_jsx(_components.p,{children:`Start of the period this charge covers, in milliseconds. Printed on the line only; a custom line never inherits the invoice’s period.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`period_end`,type:`integer`,children:_jsx(_components.p,{children:`End of the period this charge covers, in milliseconds. Given together with period_start.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`cancel_action`,type:`'cancel_immediately' | 'cancel_end_of_cycle' | 'uncancel'`,children:_jsx(_components.p,{children:`Action to perform for cancellation. ‘cancel_immediately’ cancels now with prorated refund, ‘cancel_end_of_cycle’ cancels at period end, ‘uncancel’ reverses a pending cancellation.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`billing_cycle_anchor`,type:`any`,children:_jsx(_components.p,{children:`Reset the billing cycle immediately with ‘now’, or schedule a reset at a future Unix timestamp in milliseconds.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`no_billing_changes`,type:`boolean`,children:_jsx(_components.p,{children:`If true, the subscription is updated internally without applying billing changes in Stripe.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`refund_last_payment`,type:`'prorated' | 'full'`,children:_jsx(_components.p,{children:`Controls how the last payment is refunded on immediate cancellation. ‘prorated’ refunds the unused portion, ‘full’ refunds the entire last payment.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`subscription_params`,type:`object`,children:_jsx(_components.p,{children:`Additional parameters to pass into the Stripe subscription update or cancel call.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`recalculate_balances`,type:`object`,children:[_jsx(_components.p,{children:`Controls whether balances should be recalculated during the subscription update.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`enabled`,type:`boolean`,required:true,children:_jsx(_components.p,{children:`If true, recalculates balances during the subscription update. Only applicable when updating feature quantities.`})})})})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`carry_over_usages`,type:`object`,children:[_jsx(_components.p,{children:`Whether to carry over usages from the previous plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`enabled`,type:`boolean`,required:true,children:_jsx(_components.p,{children:`Whether to carry over usages from the previous plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`feature_ids`,type:`string[]`,children:_jsx(_components.p,{children:`The IDs of the features to carry over usages for. If left undefined, all consumable features will be carried over.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`license_quantities`,type:`object[]`,children:[_jsx(_components.p,{children:`Total seat quantities (inclusive of the license’s included count) per license plan offered by this plan. Licenses not listed keep their current paid quantity.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`license_plan_id`,type:`string`,required:true,children:_jsx(_components.p,{children:`The license plan to set seat quantity for.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`quantity`,type:`integer`,required:true,children:_jsx(_components.p,{children:`Total seats for the license, inclusive of the plan’s included amount — seats beyond it are paid.`})})})]})]})}),`\n`,_jsx(Heading,{level:`3`,id:`response`,children:`Response`}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`customer_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the customer.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`entity_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the entity, if the plan was attached to an entity.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`invoice`,type:`object`,children:[_jsx(_components.p,{children:`Invoice details if an invoice was created. Only present when a charge was made.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`status`,type:`string | null`,children:_jsx(_components.p,{children:`The status of the invoice (e.g., ‘paid’, ‘open’, ‘draft’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`stripe_id`,type:`string`,children:_jsx(_components.p,{children:`The Stripe invoice ID.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`total`,type:`number`,children:_jsx(_components.p,{children:`The total amount of the invoice in cents.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`The three-letter ISO currency code (e.g., ‘usd’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`hosted_invoice_url`,type:`string | null`,children:_jsx(_components.p,{children:`URL to the hosted invoice page where the customer can view and pay the invoice.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`payment_url`,type:`string | null`,children:_jsx(_components.p,{children:`URL to redirect the customer to complete payment. Null if no payment action is required.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`required_action`,type:`object`,children:[_jsx(_components.p,{children:`Details about any action required to complete the payment. Present when the payment could not be processed automatically.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`code`,type:`'3ds_required' | 'payment_method_required' | 'payment_failed' | 'payment_processing'`,children:_jsx(_components.p,{children:`The type of action required to complete the payment.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`reason`,type:`string`,children:_jsx(_components.p,{children:`A human-readable explanation of why this action is required.`})})})]})]})})]})}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":"Update Subscription","openapi":"openapi POST /v1/billing.update","description":"Updates an existing subscription. Use to modify feature quantities, cancel, or change plan configuration.\n\nUse this endpoint to update prepaid quantities, cancel a subscription (immediately or at end of cycle), or modify subscription settings.","href":"/api-reference/billing/billingUpdate"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[158,4333,")=>null;const DynamicResponseField=()=>null;const DynamicParamField=()=>null;fun"],[4519,4523,"ResponseExample,_Mdx"],[4811,4826,"ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!_MdxComponentBo"],[103366,103377,",`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`200`,numberOfLines:`11`,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:`11`,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:` \"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:` \"invoice\"`}),_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:`\"paid\"`}),_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:` \"stripe_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"in_1234\"`}),_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:` \"total\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1500`}),_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:` \"currency\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"usd\"`}),_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:` \"hosted_invoice_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://invoice.stripe.com/...\"`})]}),`\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:` \"payment_url\"`}),_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`]})})})})]})}functio"]]},"mdxExtracts":{"tableOfContents":[{"title":"Common Use Cases","slug":"common-use-cases","depth":3,"children":[]},{"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=\"11\">\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\"> \"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\"> \"invoice\"\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\">\"paid\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"stripe_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"in_1234\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"total\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">1500\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"currency\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"usd\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"hosted_invoice_url\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"https://invoice.stripe.com/...\"\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\"> \"payment_url\"\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":"billingUpdate","description":"Updates an existing subscription. Use to modify feature quantities, cancel, or change plan configuration.\n\nUse this endpoint to update prepaid quantities, cancel a subscription (immediately or at end of cycle), or modify subscription settings.","tags":["billing"],"requestBody":"4d4d5e1a-a550-458a-ba1e-4b616163d8b4","responses":{"200":"3fd1fb5e-7263-4218-b3d3-0ed5a1372922"},"x-speakeasy-name-override":"update","parameters":["be9b2e16-3f54-4f8f-b147-2f3488d2ad2d"],"x-codeSamples":[{"lang":"typescript","label":"Typescript (SDK)","source":"import { Autumn } from 'autumn-js'\n\nconst autumn = new Autumn()\n\nconst result = await autumn.billing.update({\n customerId: \"cus_123\",\n planId: \"pro_plan\",\n featureQuantities: [\n {\n featureId: \"seats\",\n quantity: 10,\n },\n ],\n});"},{"lang":"python","label":"Python (SDK)","source":"from autumn_sdk import Autumn\n\nautumn = Autumn(secret_key=\"am_sk_test...\")\n\nres = autumn.billing.update(\n customer_id=\"cus_123\",\n plan_id=\"pro_plan\",\n feature_quantities=[\n {\n \"feature_id\": \"seats\",\n \"quantity\": 10,\n },\n ],\n redirect_mode=\"if_required\",\n)"}],"method":"post","type":"path","servers":["fe6701f7-be5c-40aa-b244-1a6f83c52f58"],"security":["53876c4e-3cd5-4c7e-b82b-fb98671718cb"],"path":"/v1/billing.update","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.billing.update({\n customerId: \"cus_123\",\n planId: \"pro_plan\",\n featureQuantities: [\n {\n featureId: \"seats\",\n quantity: 10,\n },\n ],\n});"},{"label":"Python (SDK)","lang":"python","source":"from autumn_sdk import Autumn\n\nautumn = Autumn(secret_key=\"am_sk_test...\")\n\nres = autumn.billing.update(\n customer_id=\"cus_123\",\n plan_id=\"pro_plan\",\n feature_quantities=[\n {\n \"feature_id\": \"seats\",\n \"quantity\": 10,\n },\n ],\n redirect_mode=\"if_required\",\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":"11","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":" \"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":"4","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"invoice\""}},{"type":"span","key":"1","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":" \"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":"\"paid\""}},{"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":" \"stripe_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":"\"in_1234\""}},{"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":" \"total\""}},{"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":"1500"}},{"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":" \"currency\""}},{"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":"\"usd\""}},{"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":" \"hosted_invoice_url\""}},{"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":"\"https://invoice.stripe.com/...\""}}]}},"\n",{"type":"span","key":"16","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"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":" \"payment_url\""}},{"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":"20","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":{"be9b2e16-3f54-4f8f-b147-2f3488d2ad2d":{"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":"The ID of the customer to attach the plan to.","isRequired":true,"uniqueKey":"customer_id","typeLabel":"string"},"entity_id":{"type":"string","description":"The ID of the entity to attach the plan to.","uniqueKey":"entity_id","typeLabel":"string"},"plan_id":{"type":"string","description":"The ID of the plan to update. Optional if subscription_id is provided, or if the customer has only one product.","uniqueKey":"plan_id","typeLabel":"string"},"feature_quantities":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature to set quantity for.","isRequired":true,"uniqueKey":"feature_quantities.items.[INDEX].feature_id","typeLabel":"string"},"quantity":{"type":"number","minimum":0,"description":"The quantity of the feature.","uniqueKey":"feature_quantities.items.[INDEX].quantity","typeLabel":"number"},"adjustable":{"type":"boolean","description":"Whether the customer can adjust the quantity.","uniqueKey":"feature_quantities.items.[INDEX].adjustable","typeLabel":"boolean"}},"required":["feature_id"],"title":"FeatureQuantity","description":"Quantity configuration for a prepaid feature.","uniqueKey":"feature_quantities.items.[INDEX]","typeLabel":"FeatureQuantity · object"},"description":"If this plan contains prepaid features, use this field to specify the quantity of each prepaid feature. This quantity includes the included amount and billing units defined when setting up the plan.","uniqueKey":"feature_quantities","typeLabel":"FeatureQuantity · object[]"},"version":{"type":"number","description":"The version of the plan to attach.","uniqueKey":"version","typeLabel":"number"},"free_trial":{"oneOf":[{"type":"object","title":"FreeTrialParams","description":"Free trial for this plan. A shorthand for customize.free_trial, which takes precedence when both are given.","required":["duration_length"],"properties":{"duration_length":{"type":"number","description":"Number of duration_type periods the trial lasts.","isRequired":true,"uniqueKey":"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":"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":"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":"free_trial.oneOf.0.on_end","typeLabel":"enum\u003cstring>"}},"uniqueKey":"free_trial.oneOf.0","typeLabel":"FreeTrialParams · object"},{"type":"null","description":"Free trial for this plan. A shorthand for customize.free_trial, which takes precedence when both are given.","uniqueKey":"free_trial.oneOf.1","typeLabel":"null"}],"uniqueKey":"free_trial","typeLabel":"FreeTrialParams · object | null"},"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":"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":"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":"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":"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":"customize.price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"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":"customize.price.oneOf.0.additional_currencies","typeLabel":"object[]"}},"uniqueKey":"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":"customize.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"customize.price","typeLabel":"BasePrice · object | null"},"items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature to configure.","isRequired":true,"uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"customize.\\items.items.[INDEX].threshold_billing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Bills this many feature units when outstanding overage reaches it.","uniqueKey":"customize.\\items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].included","typeLabel":"number"},"unlimited":{"type":"boolean","description":"If true, customer has unlimited access to this feature.","uniqueKey":"customize.\\items.items.[INDEX].unlimited","typeLabel":"boolean"},"pooled":{"type":"boolean","default":false,"description":"Whether entity-level grants contribute to a shared customer balance.","uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].reset.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals between resets. Defaults to 1.","default":1,"uniqueKey":"customize.\\items.items.[INDEX].reset.interval_count","typeLabel":"number"}},"required":["interval"],"description":"Reset configuration for consumable features. Omit for non-consumable features like seats.","uniqueKey":"customize.\\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 consumable features, should match reset.interval.","isRequired":true,"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].price.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].price.additional_currencies","typeLabel":"object[]"},"tiers":{"type":"array","items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"customize.\\items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"const":"inf","isRequired":true,"uniqueKey":"customize.\\items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"customize.\\items.items.[INDEX].price.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","uniqueKey":"customize.\\items.items.[INDEX].price.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].flat_amount","typeLabel":"number"}},"required":["currency"],"uniqueKey":"customize.\\items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Per-currency amounts for this tier. Tier boundaries ('to') are shared across all currencies.","uniqueKey":"customize.\\items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to"],"uniqueKey":"customize.\\items.items.[INDEX].price.tiers.items.[INDEX]","typeLabel":"object"},"description":"Tiered pricing. Either 'amount' or 'tiers' is required.","uniqueKey":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].price.max_purchase.oneOf.1","typeLabel":"null"}],"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].rollover.expiry_duration_type","typeLabel":"enum\u003cstring>"},"max":{"type":"number","description":"Max rollover units. Omit for unlimited rollover.","uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].rollover.max_percentage","typeLabel":"number"},"expiry_duration_length":{"type":"number","description":"Number of periods before expiry.","uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].rollover","typeLabel":"object"},"expiry":{"type":"object","properties":{"duration":{"enum":["day","week","month","year"],"type":"string","isRequired":true,"uniqueKey":"customize.\\items.items.[INDEX].expiry.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.metered_feature_id","typeLabel":"string"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customize.\\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":"customize.\\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":{"oneOf":[{"type":"string","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"customize.\\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":{"oneOf":[{"type":"string","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"customize.\\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":"customize.\\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":{"oneOf":[{"type":"string","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":{"oneOf":[{"type":"string","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"customize.\\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":{"oneOf":[{"type":"string","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"customize.\\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":"customize.\\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":{"oneOf":[{"type":"string","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.excluded","typeLabel":"any"}},"additionalProperties":false,"uniqueKey":"customize.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"}},"required":["markup"],"uniqueKey":"customize.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"},"input_cost":{"type":"number","minimum":0,"uniqueKey":"customize.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.input_cost","typeLabel":"number"},"output_cost":{"type":"number","minimum":0,"uniqueKey":"customize.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.output_cost","typeLabel":"number"}},"uniqueKey":"customize.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"customize.\\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":"customize.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"customize.\\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":"customize.\\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":"customize.\\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":"customize.\\items.items.[INDEX]","typeLabel":"PlanItem · object"},"description":"Override the items in the plan (PUT-style — replaces all existing items). Mutually exclusive with add_items / remove_items / deprecated update_items.","uniqueKey":"customize.\\items","typeLabel":"PlanItem · object[]"},"add_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature to configure.","isRequired":true,"uniqueKey":"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":"customize.add_items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"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":"customize.add_items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"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":"customize.add_items.items.[INDEX].included","typeLabel":"number"},"unlimited":{"type":"boolean","description":"If true, customer has unlimited access to this feature.","uniqueKey":"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":"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":"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":"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":"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 consumable features, should match reset.interval.","isRequired":true,"uniqueKey":"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":"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":"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":"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":"customize.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"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":"customize.add_items.items.[INDEX].price.additional_currencies","typeLabel":"object[]"},"tiers":{"type":"array","items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"const":"inf","isRequired":true,"uniqueKey":"customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","uniqueKey":"customize.add_items.items.[INDEX].price.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"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":"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":"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":"customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].flat_amount","typeLabel":"number"}},"required":["currency"],"uniqueKey":"customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Per-currency amounts for this tier. Tier boundaries ('to') are shared across all currencies.","uniqueKey":"customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to"],"uniqueKey":"customize.add_items.items.[INDEX].price.tiers.items.[INDEX]","typeLabel":"object"},"description":"Tiered pricing. Either 'amount' or 'tiers' is required.","uniqueKey":"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":"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":"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":"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":"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":"customize.add_items.items.[INDEX].price.max_purchase.oneOf.1","typeLabel":"null"}],"uniqueKey":"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":"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":"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":"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":"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":"customize.add_items.items.[INDEX].rollover.expiry_duration_type","typeLabel":"enum\u003cstring>"},"max":{"type":"number","description":"Max rollover units. Omit for unlimited rollover.","uniqueKey":"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":"customize.add_items.items.[INDEX].rollover.max_percentage","typeLabel":"number"},"expiry_duration_length":{"type":"number","description":"Number of periods before expiry.","uniqueKey":"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":"customize.add_items.items.[INDEX].rollover","typeLabel":"object"},"expiry":{"type":"object","properties":{"duration":{"enum":["day","week","month","year"],"type":"string","isRequired":true,"uniqueKey":"customize.add_items.items.[INDEX].expiry.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"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":"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":"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":"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":"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":"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":"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":"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":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"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":"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":{"oneOf":[{"type":"string","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"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":"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":"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":"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":"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":"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":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"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":{"oneOf":[{"type":"string","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"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":"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":{"oneOf":[{"type":"string","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"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":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"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":"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":"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":"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":{"oneOf":[{"type":"string","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"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":"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":"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":"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":"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":"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":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"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":{"oneOf":[{"type":"string","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"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":"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":{"oneOf":[{"type":"string","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"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":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"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":"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":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.excluded","typeLabel":"any"}},"additionalProperties":false,"uniqueKey":"customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"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":"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":"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":"customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"}},"required":["markup"],"uniqueKey":"customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"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":"customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"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":"customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"},"input_cost":{"type":"number","minimum":0,"uniqueKey":"customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.input_cost","typeLabel":"number"},"output_cost":{"type":"number","minimum":0,"uniqueKey":"customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.output_cost","typeLabel":"number"}},"uniqueKey":"customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"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":"customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"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":"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":"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":"customize.add_items.items.[INDEX]","typeLabel":"PlanItem · object"},"description":"Items to add to the plan.","uniqueKey":"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":"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":"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":"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":"customize.remove_items.items.[INDEX].interval.oneOf.1","typeLabel":"enum\u003cstring>"}],"uniqueKey":"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":"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":"customize.remove_items.items.[INDEX].included","typeLabel":"number"}},"title":"PlanItemFilter","description":"Filter for matching plan items. All provided fields must match (AND).","uniqueKey":"customize.remove_items.items.[INDEX]","typeLabel":"PlanItemFilter · object"},"description":"Filters selecting items to remove from the plan.","uniqueKey":"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":"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":"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":"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":"customize.free_trial.oneOf.0.on_end","typeLabel":"enum\u003cstring>"}},"uniqueKey":"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":"customize.free_trial.oneOf.1","typeLabel":"null"}],"uniqueKey":"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":"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":"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":"customize.billing_controls.auto_topups.items.[INDEX].quantity","typeLabel":"number"},"enabled":{"type":"boolean","default":false,"description":"Whether auto top-up is enabled.","uniqueKey":"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":"customize.billing_controls.auto_topups.items.[INDEX].purchase_limit.interval","typeLabel":"enum\u003cstring>"},"limit":{"type":"number","minimum":1,"description":"Maximum number of auto top-ups allowed within the interval.","isRequired":true,"uniqueKey":"customize.billing_controls.auto_topups.items.[INDEX].purchase_limit.limit","typeLabel":"number"},"interval_count":{"type":"number","minimum":1,"default":1,"description":"Number of intervals in the purchase limit window.","uniqueKey":"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":"customize.billing_controls.auto_topups.items.[INDEX].purchase_limit.count","typeLabel":"number"}},"required":["interval","limit"],"description":"Optional rate limit to cap how often auto top-ups occur. Pass count to set the current window's consumed top-ups.","uniqueKey":"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":"customize.billing_controls.auto_topups.items.[INDEX].invoice_mode","typeLabel":"boolean"}},"required":["feature_id","threshold","quantity"],"uniqueKey":"customize.billing_controls.auto_topups.items.[INDEX]","typeLabel":"object"},"description":"List of auto top-up configurations per feature.","default":[],"uniqueKey":"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":"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":"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":"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":"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":"customize.billing_controls.spend_limits.items.[INDEX].skip_overage_billing","typeLabel":"boolean"}},"uniqueKey":"customize.billing_controls.spend_limits.items.[INDEX]","typeLabel":"object"},"description":"List of overage spend limits per feature (caps overage spend).","default":[],"uniqueKey":"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":"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":"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":"customize.billing_controls.usage_limits.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage limit is enabled.","uniqueKey":"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":"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":{"oneOf":[{"type":"string","maxLength":128,"minLength":1,"uniqueKey":"customize.billing_controls.usage_limits.items.[INDEX].filter.properties.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.billing_controls.usage_limits.items.[INDEX].filter.properties.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.billing_controls.usage_limits.items.[INDEX].filter.properties.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.billing_controls.usage_limits.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string | number | boolean"},"isRequired":true,"uniqueKey":"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":"customize.billing_controls.usage_limits.items.[INDEX].filter","typeLabel":"object"}},"required":["feature_id","limit","interval"],"uniqueKey":"customize.billing_controls.usage_limits.items.[INDEX]","typeLabel":"object"},"description":"List of hard usage caps per feature (max units per interval).","default":[],"uniqueKey":"customize.billing_controls.usage_limits","typeLabel":"object[]"},"usage_alerts":{"type":"array","items":{"type":"object","properties":{"threshold":{"type":"number","minimum":0,"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 (0-100).","isRequired":true,"uniqueKey":"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":"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":"customize.billing_controls.usage_alerts.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage alert is enabled.","uniqueKey":"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":"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":{"oneOf":[{"type":"string","maxLength":128,"minLength":1,"uniqueKey":"customize.billing_controls.usage_alerts.items.[INDEX].filter.properties.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.billing_controls.usage_alerts.items.[INDEX].filter.properties.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.billing_controls.usage_alerts.items.[INDEX].filter.properties.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"customize.billing_controls.usage_alerts.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string | number | boolean"},"isRequired":true,"uniqueKey":"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":"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":"customize.billing_controls.usage_alerts.items.[INDEX].name","typeLabel":"string"}},"required":["threshold","threshold_type"],"uniqueKey":"customize.billing_controls.usage_alerts.items.[INDEX]","typeLabel":"object"},"description":"List of usage alert configurations per feature.","default":[],"uniqueKey":"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":"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":"customize.billing_controls.overage_allowed.items.[INDEX].enabled","typeLabel":"boolean"}},"required":["feature_id"],"uniqueKey":"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":"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":"customize.billing_controls","typeLabel":"object"},"upsert_licenses":{"type":"array","items":{"type":"object","properties":{"license_plan_id":{"type":"string","isRequired":true,"uniqueKey":"customize.upsert_licenses.items.[INDEX].license_plan_id","typeLabel":"string"},"version_slug":{"type":"string","uniqueKey":"customize.upsert_licenses.items.[INDEX].version_slug","typeLabel":"string"},"included":{"type":"integer","minimum":0,"maximum":9007199254740991,"uniqueKey":"customize.upsert_licenses.items.[INDEX].included","typeLabel":"integer"},"prepaid_only":{"type":"boolean","uniqueKey":"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":"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":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies","typeLabel":"object[]"}},"uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0","typeLabel":"BasePrice · object"},{"type":"null","uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"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":"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":"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":"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":"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":"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":"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 consumable features, should match reset.interval.","isRequired":true,"uniqueKey":"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":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"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":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Per-currency amounts for this tier. Tier boundaries ('to') are shared across all currencies.","uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to"],"uniqueKey":"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":"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":"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":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.max_purchase.oneOf.1","typeLabel":"null"}],"uniqueKey":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].expiry.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":{"oneOf":[{"type":"string","uniqueKey":"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.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"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.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"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.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"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 | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":{"oneOf":[{"type":"string","uniqueKey":"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.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"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.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"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.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"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 | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"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":"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":"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":"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":{"oneOf":[{"type":"string","uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"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 | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"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":"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":"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":"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":"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":"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":"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":{"oneOf":[{"type":"string","uniqueKey":"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.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"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.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"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.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"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 | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":{"oneOf":[{"type":"string","uniqueKey":"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.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"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.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"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.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"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 | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"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":"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":"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":"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":{"oneOf":[{"type":"string","uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"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 | number | boolean"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"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":"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":"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":"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":"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":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"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":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"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":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX]","typeLabel":"PlanItem · object"},"uniqueKey":"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":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval.oneOf.1","typeLabel":"enum\u003cstring>"}],"uniqueKey":"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":"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":"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":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX]","typeLabel":"PlanItemFilter · object"},"uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items","typeLabel":"PlanItemFilter · object[]"}},"uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"customize.upsert_licenses.items.[INDEX].customize.oneOf.1","typeLabel":"null"}],"uniqueKey":"customize.upsert_licenses.items.[INDEX].customize","typeLabel":"object | null"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"oneOf":[{}],"uniqueKey":"customize.upsert_licenses.items.[INDEX].metadata.additionalProperties","typeLabel":"any"},"uniqueKey":"customize.upsert_licenses.items.[INDEX].metadata","typeLabel":"object"}},"required":["license_plan_id"],"uniqueKey":"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":"customize.upsert_licenses","typeLabel":"object[]"},"remove_licenses":{"type":"array","items":{"type":"object","properties":{"license_plan_id":{"type":"string","isRequired":true,"uniqueKey":"customize.remove_licenses.items.[INDEX].license_plan_id","typeLabel":"string"}},"required":["license_plan_id"],"uniqueKey":"customize.remove_licenses.items.[INDEX]","typeLabel":"object"},"description":"License links to drop, keyed by license_plan_id. Parallel to remove_items.","uniqueKey":"customize.remove_licenses","typeLabel":"object[]"}},"description":"Customize the plan to attach. Can override the price, items, licenses, free trial, or a combination.","uniqueKey":"customize","typeLabel":"object"},"invoice_mode":{"type":"object","properties":{"enabled":{"type":"boolean","description":"When true, creates an invoice and sends it to the customer instead of charging their card immediately. Uses Stripe's send_invoice collection method.","isRequired":true,"uniqueKey":"invoice_mode.enabled","typeLabel":"boolean"},"enable_plan_immediately":{"type":"boolean","default":false,"description":"If true, enables the plan immediately even though the invoice is not paid yet.","uniqueKey":"invoice_mode.enable_plan_immediately","typeLabel":"boolean"},"finalize":{"type":"boolean","description":"Deprecated: use issue_method. true sends the invoice (issue_method: send), false keeps it as a draft (issue_method: draft). Defaults to true. Ignored when issue_method is set.","uniqueKey":"invoice_mode.finalize","typeLabel":"boolean"},"issue_method":{"enum":["draft","finalize","send"],"type":"string","description":"How far the invoice created now advances. draft leaves it editable for manual review. finalize opens it without Stripe emailing, reminding or charging (auto_advance off), for invoices collected outside Stripe. send opens it and lets Stripe email it. Defaults to send. Requires enabled: true. Renewal invoices follow the subscription.","uniqueKey":"invoice_mode.issue_method","typeLabel":"enum\u003cstring>"},"invoice_template_id":{"type":"string","description":"ID of an invoice template (configured in billing settings) whose footer (e.g. bank details) is applied to the invoice.","uniqueKey":"invoice_mode.invoice_template_id","typeLabel":"string"},"net_terms_days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Number of days the customer has to pay the invoice before it is due (Stripe days_until_due).","uniqueKey":"invoice_mode.net_terms_days","typeLabel":"integer"},"payment_method_types":{"type":"array","minItems":1,"items":{"enum":["card","customer_balance","us_bank_account","sepa_debit","bacs_debit","acss_debit","link"],"type":"string","uniqueKey":"invoice_mode.payment_method_types.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Payment method types the customer can pay the invoice with, e.g. card and us_bank_account. Overrides the org's allowed payment methods.","uniqueKey":"invoice_mode.payment_method_types","typeLabel":"enum\u003cstring>[]"}},"required":["enabled"],"description":"Invoice mode creates a draft or open invoice and sends it to the customer, instead of charging their card immediately. This uses Stripe's send_invoice collection method.","uniqueKey":"invoice_mode","typeLabel":"object"},"proration_behavior":{"enum":["prorate_immediately","none","bill_difference"],"type":"string","description":"How to handle proration when updating an existing subscription. 'prorate_immediately' charges/credits prorated amounts now, 'none' skips creating any charges, 'bill_difference' bills the larger of the full-period price difference and the prorated amount (full difference on upgrades, prorated credit on downgrades) now without changing the billing cycle.","uniqueKey":"proration_behavior","typeLabel":"enum\u003cstring>"},"redirect_mode":{"enum":["always","if_required","never"],"type":"string","description":"Controls when to return a checkout URL. 'always' returns a URL even if payment succeeds, 'if_required' only when payment action is needed, 'never' disables redirects.","default":"if_required","uniqueKey":"redirect_mode","typeLabel":"enum\u003cstring>"},"subscription_id":{"type":"string","description":"A unique ID to identify this subscription. Can be used to target specific subscriptions in update operations when a customer has multiple products with the same plan.","uniqueKey":"subscription_id","typeLabel":"string"},"discounts":{"type":"array","items":{"type":"object","properties":{"reward_id":{"type":"string","description":"The ID of the reward to apply as a discount.","uniqueKey":"discounts.items.[INDEX].reward_id","typeLabel":"string"},"promotion_code":{"type":"string","description":"The promotion code to apply as a discount.","uniqueKey":"discounts.items.[INDEX].promotion_code","typeLabel":"string"}},"title":"AttachDiscount","description":"A discount to apply. Can be either a reward ID or a promotion code.","uniqueKey":"discounts.items.[INDEX]","typeLabel":"AttachDiscount · object"},"description":"List of discounts to apply. Each discount can be an Autumn reward ID, Stripe coupon ID, or Stripe promotion code.","uniqueKey":"discounts","typeLabel":"AttachDiscount · object[]"},"remove_discounts":{"type":"array","items":{"type":"object","properties":{"reward_id":{"type":"string","description":"The ID of the reward (or Stripe coupon) to remove.","isRequired":true,"uniqueKey":"remove_discounts.items.[INDEX].reward_id","typeLabel":"string"}},"required":["reward_id"],"additionalProperties":false,"title":"RemoveDiscount","description":"A discount to remove from the subscription. Discounts that are no longer applied are ignored.","uniqueKey":"remove_discounts.items.[INDEX]","typeLabel":"RemoveDiscount · object"},"description":"Discounts to remove from the subscription, by reward ID. Discounts not listed are left unchanged.","uniqueKey":"remove_discounts","typeLabel":"RemoveDiscount · object[]"},"custom_line_items":{"type":"array","minItems":1,"items":{"type":"object","properties":{"amount":{"type":"number","description":"Amount in dollars for this line item (e.g. 10.50). Can be negative for credits.","isRequired":true,"uniqueKey":"custom_line_items.items.[INDEX].amount","typeLabel":"number"},"description":{"type":"string","description":"Description for the line item.","isRequired":true,"uniqueKey":"custom_line_items.items.[INDEX].description","typeLabel":"string"}},"required":["amount","description"],"uniqueKey":"custom_line_items.items.[INDEX]","typeLabel":"object"},"description":"Custom line items that replace the auto-generated proration invoice, or bill a standalone invoice when nothing else changes. Only valid on an existing recurring subscription.","uniqueKey":"custom_line_items","typeLabel":"object[]"},"remove_lines":{"type":"array","minItems":1,"items":{"type":"object","properties":{"plan_id":{"type":"string","description":"The plan whose lines to remove: one coming in, going out, or already on the customer and billed by this request.","isRequired":true,"uniqueKey":"remove_lines.items.[INDEX].plan_id","typeLabel":"string"},"entity_id":{"oneOf":[{"type":"string","description":"The entity the lines are billed to. Omit to inherit the request's entity_id, or pass null for customer-level.","minLength":1,"uniqueKey":"remove_lines.items.[INDEX].entity_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The entity the lines are billed to. Omit to inherit the request's entity_id, or pass null for customer-level.","uniqueKey":"remove_lines.items.[INDEX].entity_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"remove_lines.items.[INDEX].entity_id","typeLabel":"string | null"},"direction":{"enum":["charge","refund"],"type":"string","description":"Only remove charges or only remove refunds (credits). Omit to remove both.","uniqueKey":"remove_lines.items.[INDEX].direction","typeLabel":"enum\u003cstring>"},"price":{"oneOf":[{"description":"Remove the base price line. Pass true, or an object to narrow by interval.","const":true,"uniqueKey":"remove_lines.items.[INDEX].price.oneOf.0","typeLabel":"any"},{"type":"object","description":"Remove the base price line. Pass true, or an object to narrow by interval.","properties":{"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Only match the price billed on this interval. Needed when the same price exists on more than one interval.","uniqueKey":"remove_lines.items.[INDEX].price.oneOf.1.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Only match the price billed every this many intervals.","uniqueKey":"remove_lines.items.[INDEX].price.oneOf.1.interval_count","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"remove_lines.items.[INDEX].price.oneOf.1","typeLabel":"object"}],"uniqueKey":"remove_lines.items.[INDEX].price","typeLabel":"any | object"},"feature_quantities":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature whose line to remove.","isRequired":true,"uniqueKey":"remove_lines.items.[INDEX].feature_quantities.items.[INDEX].feature_id","typeLabel":"string"},"billing_behavior":{"enum":["prepaid","usage_based"],"type":"string","description":"Which of the feature's prices to match: 'prepaid' or 'usage_based'.","isRequired":true,"uniqueKey":"remove_lines.items.[INDEX].feature_quantities.items.[INDEX].billing_behavior","typeLabel":"enum\u003cstring>"},"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Only match the price billed on this interval. Needed when the same price exists on more than one interval.","uniqueKey":"remove_lines.items.[INDEX].feature_quantities.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Only match the price billed every this many intervals.","uniqueKey":"remove_lines.items.[INDEX].feature_quantities.items.[INDEX].interval_count","typeLabel":"integer"}},"required":["feature_id","billing_behavior"],"additionalProperties":false,"uniqueKey":"remove_lines.items.[INDEX].feature_quantities.items.[INDEX]","typeLabel":"object"},"uniqueKey":"remove_lines.items.[INDEX].feature_quantities","typeLabel":"object[]"},"license_quantities":{"type":"array","items":{"type":"object","properties":{"license_plan_id":{"type":"string","description":"The license plan linked to the parent plan.","isRequired":true,"uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].license_plan_id","typeLabel":"string"},"price":{"oneOf":[{"description":"Remove the base price line. Pass true, or an object to narrow by interval.","const":true,"uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].price.oneOf.0","typeLabel":"any"},{"type":"object","description":"Remove the base price line. Pass true, or an object to narrow by interval.","properties":{"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Only match the price billed on this interval. Needed when the same price exists on more than one interval.","uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].price.oneOf.1.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Only match the price billed every this many intervals.","uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].price.oneOf.1.interval_count","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].price.oneOf.1","typeLabel":"object"}],"uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].price","typeLabel":"any | object"},"feature_quantities":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature whose line to remove.","isRequired":true,"uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].feature_quantities.items.[INDEX].feature_id","typeLabel":"string"},"billing_behavior":{"enum":["prepaid","usage_based"],"type":"string","description":"Which of the feature's prices to match: 'prepaid' or 'usage_based'.","isRequired":true,"uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].feature_quantities.items.[INDEX].billing_behavior","typeLabel":"enum\u003cstring>"},"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Only match the price billed on this interval. Needed when the same price exists on more than one interval.","uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].feature_quantities.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Only match the price billed every this many intervals.","uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].feature_quantities.items.[INDEX].interval_count","typeLabel":"integer"}},"required":["feature_id","billing_behavior"],"additionalProperties":false,"uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].feature_quantities.items.[INDEX]","typeLabel":"object"},"uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX].feature_quantities","typeLabel":"object[]"}},"required":["license_plan_id"],"additionalProperties":false,"uniqueKey":"remove_lines.items.[INDEX].license_quantities.items.[INDEX]","typeLabel":"object"},"uniqueKey":"remove_lines.items.[INDEX].license_quantities","typeLabel":"object[]"}},"required":["plan_id"],"additionalProperties":false,"title":"RemoveLine","description":"Removes lines Autumn generated for this invoice. With no price, feature_quantities or license_quantities, every line of the plan is removed.","uniqueKey":"remove_lines.items.[INDEX]","typeLabel":"RemoveLine · object"},"description":"Lines to remove from the invoice this request creates. Never changes the subscription or later invoices.","uniqueKey":"remove_lines","typeLabel":"RemoveLine · object[]"},"add_lines":{"type":"array","minItems":1,"items":{"type":"object","properties":{"amount":{"type":"number","description":"Amount in dollars for this line item (e.g. 10.50). Can be negative for credits.","isRequired":true,"uniqueKey":"add_lines.items.[INDEX].amount","typeLabel":"number"},"description":{"type":"string","description":"Description for the line item.","isRequired":true,"uniqueKey":"add_lines.items.[INDEX].description","typeLabel":"string"},"period_start":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Start of the period this charge covers, in milliseconds. Printed on the line only; a custom line never inherits the invoice's period.","uniqueKey":"add_lines.items.[INDEX].period_start","typeLabel":"integer"},"period_end":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"End of the period this charge covers, in milliseconds. Given together with period_start.","uniqueKey":"add_lines.items.[INDEX].period_end","typeLabel":"integer"}},"required":["amount","description"],"title":"AddLine","description":"A line added to this invoice. The amount is billed as passed; the period is only printed on the line.","uniqueKey":"add_lines.items.[INDEX]","typeLabel":"AddLine · object"},"description":"Lines to add to the invoice this request creates. Never changes the subscription or later invoices.","uniqueKey":"add_lines","typeLabel":"AddLine · object[]"},"cancel_action":{"enum":["cancel_immediately","cancel_end_of_cycle","uncancel"],"type":"string","description":"Action to perform for cancellation. 'cancel_immediately' cancels now with prorated refund, 'cancel_end_of_cycle' cancels at period end, 'uncancel' reverses a pending cancellation.","uniqueKey":"cancel_action","typeLabel":"enum\u003cstring>"},"billing_cycle_anchor":{"oneOf":[{"description":"Reset the billing cycle immediately with 'now', or schedule a reset at a future Unix timestamp in milliseconds.","const":"now","uniqueKey":"billing_cycle_anchor.oneOf.0","typeLabel":"any"},{"type":"integer","description":"Reset the billing cycle immediately with 'now', or schedule a reset at a future Unix timestamp in milliseconds.","maximum":9007199254740991,"minimum":0,"uniqueKey":"billing_cycle_anchor.oneOf.1","typeLabel":"integer"}],"uniqueKey":"billing_cycle_anchor","typeLabel":"any | integer"},"no_billing_changes":{"type":"boolean","description":"If true, the subscription is updated internally without applying billing changes in Stripe.","uniqueKey":"no_billing_changes","typeLabel":"boolean"},"refund_last_payment":{"enum":["prorated","full"],"type":"string","title":"RefundLastPayment","description":"Controls how the last payment is refunded on immediate cancellation. 'prorated' refunds the unused portion, 'full' refunds the entire last payment.","uniqueKey":"refund_last_payment","typeLabel":"enum\u003cstring>"},"subscription_params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"oneOf":[{}],"uniqueKey":"subscription_params.additionalProperties","typeLabel":"any"},"title":"SubscriptionParams","description":"Additional parameters to pass into the Stripe subscription update or cancel call.","uniqueKey":"subscription_params","typeLabel":"SubscriptionParams · object"},"recalculate_balances":{"type":"object","properties":{"enabled":{"type":"boolean","description":"If true, recalculates balances during the subscription update. Only applicable when updating feature quantities.","isRequired":true,"uniqueKey":"recalculate_balances.enabled","typeLabel":"boolean"}},"required":["enabled"],"description":"Controls whether balances should be recalculated during the subscription update.","uniqueKey":"recalculate_balances","typeLabel":"object"},"carry_over_usages":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to carry over usages from the previous plan.","isRequired":true,"uniqueKey":"carry_over_usages.enabled","typeLabel":"boolean"},"feature_ids":{"type":"array","items":{"type":"string","uniqueKey":"carry_over_usages.feature_ids.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the features to carry over usages for. If left undefined, all consumable features will be carried over.","uniqueKey":"carry_over_usages.feature_ids","typeLabel":"string[]"}},"required":["enabled"],"description":"Whether to carry over usages from the previous plan.","uniqueKey":"carry_over_usages","typeLabel":"object"},"license_quantities":{"type":"array","items":{"type":"object","properties":{"license_plan_id":{"type":"string","description":"The license plan to set seat quantity for.","isRequired":true,"uniqueKey":"license_quantities.items.[INDEX].license_plan_id","typeLabel":"string"},"quantity":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total seats for the license, inclusive of the plan's included amount — seats beyond it are paid.","isRequired":true,"uniqueKey":"license_quantities.items.[INDEX].quantity","typeLabel":"integer"}},"required":["license_plan_id","quantity"],"uniqueKey":"license_quantities.items.[INDEX]","typeLabel":"object"},"description":"Total seat quantities (inclusive of the license's included count) per license plan offered by this plan. Licenses not listed keep their current paid quantity.","uniqueKey":"license_quantities","typeLabel":"object[]"}},"required":["customer_id"],"title":"UpdateSubscriptionParams","examples":[{"customer_id":"cus_123","plan_id":"pro_plan","feature_quantities":[{"feature_id":"seats","quantity":10}]}],"uniqueKey":"","typeLabel":"UpdateSubscriptionParams · object"},"example":{"customer_id":"cus_123","plan_id":"pro_plan","feature_quantities":[{"feature_id":"seats","quantity":10}]},"examples":{"Example":{"title":"Example","value":{"customer_id":"cus_123","plan_id":"pro_plan","feature_quantities":[{"feature_id":"seats","quantity":10}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"3fd1fb5e-7263-4218-b3d3-0ed5a1372922":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"customer_id":{"type":"string","description":"The ID of the customer.","isRequired":true,"uniqueKey":"customer_id","typeLabel":"string"},"payment_url":{"oneOf":[{"type":"string","description":"URL to redirect the customer to complete payment. Null if no payment action is required.","isRequired":true,"uniqueKey":"payment_url.oneOf.0","typeLabel":"string"},{"type":"null","description":"URL to redirect the customer to complete payment. Null if no payment action is required.","isRequired":true,"uniqueKey":"payment_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"payment_url","typeLabel":"string | null"},"entity_id":{"type":"string","description":"The ID of the entity, if the plan was attached to an entity.","uniqueKey":"entity_id","typeLabel":"string"},"invoice":{"type":"object","properties":{"status":{"oneOf":[{"type":"string","description":"The status of the invoice (e.g., 'paid', 'open', 'draft').","isRequired":true,"uniqueKey":"invoice.status.oneOf.0","typeLabel":"string"},{"type":"null","description":"The status of the invoice (e.g., 'paid', 'open', 'draft').","isRequired":true,"uniqueKey":"invoice.status.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"invoice.status","typeLabel":"string | null"},"stripe_id":{"type":"string","description":"The Stripe invoice ID.","isRequired":true,"uniqueKey":"invoice.stripe_id","typeLabel":"string"},"total":{"type":"number","description":"The total amount of the invoice in cents.","isRequired":true,"uniqueKey":"invoice.total","typeLabel":"number"},"currency":{"type":"string","description":"The three-letter ISO currency code (e.g., 'usd').","isRequired":true,"uniqueKey":"invoice.currency","typeLabel":"string"},"hosted_invoice_url":{"oneOf":[{"type":"string","description":"URL to the hosted invoice page where the customer can view and pay the invoice.","isRequired":true,"uniqueKey":"invoice.hosted_invoice_url.oneOf.0","typeLabel":"string"},{"type":"null","description":"URL to the hosted invoice page where the customer can view and pay the invoice.","isRequired":true,"uniqueKey":"invoice.hosted_invoice_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"invoice.hosted_invoice_url","typeLabel":"string | null"}},"required":["status","stripe_id","total","currency","hosted_invoice_url"],"description":"Invoice details if an invoice was created. Only present when a charge was made.","uniqueKey":"invoice","typeLabel":"object"},"required_action":{"type":"object","properties":{"code":{"enum":["3ds_required","payment_method_required","payment_failed","payment_processing"],"type":"string","description":"The type of action required to complete the payment.","isRequired":true,"uniqueKey":"required_action.code","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","description":"A human-readable explanation of why this action is required.","isRequired":true,"uniqueKey":"required_action.reason","typeLabel":"string"}},"required":["code","reason"],"description":"Details about any action required to complete the payment. Present when the payment could not be processed automatically.","uniqueKey":"required_action","typeLabel":"object"}},"required":["customer_id","payment_url"],"examples":[{"customer_id":"cus_123","invoice":{"status":"paid","stripe_id":"in_1234","total":1500,"currency":"usd","hosted_invoice_url":"https://invoice.stripe.com/..."},"payment_url":null}],"uniqueKey":"","typeLabel":"object"},"example":{"customer_id":"cus_123","invoice":{"status":"paid","stripe_id":"in_1234","total":1500,"currency":"usd","hosted_invoice_url":"https://invoice.stripe.com/..."},"payment_url":null},"examples":{"Example":{"title":"Example","value":{"customer_id":"cus_123","invoice":{"status":"paid","stripe_id":"in_1234","total":1500,"currency":"usd","hosted_invoice_url":"https://invoice.stripe.com/..."},"payment_url":null}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"53876c4e-3cd5-4c7e-b82b-fb98671718cb":{"secretKey":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"secretKey"}}},"servers":{"fe6701f7-be5c-40aa-b244-1a6f83c52f58":{"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":"Update Subscription - Autumn","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-15T19:18:04.109Z","originalFileLocation":"api-reference/billing/billingUpdate.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=\"Updates an existing subscription. Use to modify feature quantities, cancel, or change plan configuration. Use this endpoint to update prepaid quantities, cancel a subscription (immediately or at end of cycle), or modify subscription settings.\">\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=\"Update Subscription - Autumn\">\u003cmeta data-mint-head property=\"og:description\" content=\"Updates an existing subscription. Use to modify feature quantities, cancel, or change plan configuration. Use this endpoint to update prepaid quantities, cancel a subscription (immediately or at end of cycle), or modify subscription settings.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Autumn\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.useautumn.com/api-reference/billing/billingUpdate\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://autumn-b9b4c0fb.mintlify.app/_mintlify/api/og/v2?division=Billing\u0026amp;title=Update+Subscription\u0026amp;description=Updates+an+existing+subscription.+Use+to+modify+feature+quantities%2C+cancel%2C+or+change+plan+configuration.%0A%0AUse+this+endpoint+to+update+prepaid+quantities%2C+cance\u0026amp;theme=3bf7e6d15826cac91d0b643c\u0026amp;signature=69de9681326d1b3d0b27d60ed052e200347821cdc33af33d0bac324f4f99312b\">\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=\"Update Subscription - Autumn\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Updates an existing subscription. Use to modify feature quantities, cancel, or change plan configuration. Use this endpoint to update prepaid quantities, cancel a subscription (immediately or at end of cycle), or modify subscription settings.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://autumn-b9b4c0fb.mintlify.app/_mintlify/api/og/v2?division=Billing\u0026amp;title=Update+Subscription\u0026amp;description=Updates+an+existing+subscription.+Use+to+modify+feature+quantities%2C+cancel%2C+or+change+plan+configuration.%0A%0AUse+this+endpoint+to+update+prepaid+quantities%2C+cance\u0026amp;theme=3bf7e6d15826cac91d0b643c\u0026amp;signature=69de9681326d1b3d0b27d60ed052e200347821cdc33af33d0bac324f4f99312b\">\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/billing/billingUpdate\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/billing/billingUpdate.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/billing/billingUpdate#webpage\",\"url\":\"https://docs.useautumn.com/api-reference/billing/billingUpdate\",\"name\":\"Update Subscription\",\"description\":\"Updates an existing subscription. Use to modify feature quantities, cancel, or change plan configuration. Use this endpoint to update prepaid quantities, cancel a subscription (immediately or at end of cycle), or modify subscription settings.\",\"dateModified\":\"2026-10-15T19:18:04.109Z\",\"isPartOf\":{\"@id\":\"https://docs.useautumn.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.useautumn.com/api-reference/billing/billingUpdate#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.useautumn.com/api-reference/billing/billingUpdate#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Billing\",\"item\":\"https://docs.useautumn.com/api-reference/billing/attach\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Update Subscription\",\"item\":\"https://docs.useautumn.com/api-reference/billing/billingUpdate\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.useautumn.com/api-reference/billing/billingUpdate#apireference\",\"headline\":\"Update Subscription\",\"name\":\"Update Subscription\",\"description\":\"Updates an existing subscription. Use to modify feature quantities, cancel, or change plan configuration. Use this endpoint to update prepaid quantities, cancel a subscription (immediately or at end of cycle), or modify subscription settings.\",\"url\":\"https://docs.useautumn.com/api-reference/billing/billingUpdate\",\"mainEntityOfPage\":{\"@id\":\"https://docs.useautumn.com/api-reference/billing/billingUpdate#webpage\"},\"dateModified\":\"2026-10-15T19:18:04.109Z\",\"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\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Autumn","nav":{"global":{"anchors":[{"anchor":"Discord","icon":"discord","href":"https://discord.gg/STqxY92zuS"},{"anchor":"GitHub","icon":"github","href":"https://github.com/useautumn/autumn"},{"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","description":"Attaches a plan to a customer. Handles new subscriptions, upgrades and downgrades.\n\nUse this endpoint to subscribe a customer to a plan, upgrade/downgrade between plans, or add an add-on product.","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","description":"Create a billing portal session for a customer to manage their subscription.","href":"/api-reference/billing/openCustomerPortal"},{"title":"Setup Payment","openapi":"openapi POST /v1/billing.setup_payment","href":"/api-reference/billing/setupPayment"},{"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":"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","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","href":"/api-reference/customers/updateCustomer"},{"title":"Delete Customer","openapi":"openapi POST /v1/customers.delete","href":"/api-reference/customers/deleteCustomer"}]},{"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":"Events","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"}]},{"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":"Changelog","icon":"list-ol","pages":[{"title":"Changelog","href":"/changelog/changelog"}]}]},"title":"Update Subscription - Autumn","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-rfhihCWU.js","utils-BmH1XFxk.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BcNsxPKB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BAES3tkd.js","snippetPresets-DCMQBKLP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D6l_bzE9.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BOktbnNh.js","shallow-BCs8SgM7.js","getApiPlaygroundDisplay-DEmW5bJB.js","CodeSnippet-CpZOpB9C.js","CodeSnippets-BOBDqibl.js","Page-D5fEM6aW.js","getPastedJson-DH2JBvmr.js","icon-BBJH-kKh.js","MethodPill-D2Sd5NLC.js","DuplicateIcon-CGgfL2qN.js","createIcon-BKudBBzi.js","DynamicMarkdown-85clUA0i.js","SectionHeading-D0JiMgDx.js","axios-vUo_bRtp.js","Markdown-Cfiy0xZO.js","clsx-rL8ZCCw4.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-aeztFa9U.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BywkCr5C.js"]}