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.
Tax preview for the immediate charge. Contact us to enable the tax flag on your organisation. Shows only with flag enabled, a Stripe customer exists and has a location.
{"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":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"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/previewUpdate","slug":"/api-reference/billing/previewUpdate","pageMetadata":{"title":"Preview Update","openapi":"openapi POST /v1/billing.preview_update","description":"Previews the billing changes that would occur when updating a subscription, without actually making any changes.\n\nUse this endpoint to show customers prorated charges or refunds before confirming subscription modifications.","href":"/api-reference/billing/previewUpdate"},"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: \"Previews the billing changes that would occur when updating a subscription, without actually making any changes.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Use this endpoint to show customers prorated charges or refunds before confirming subscription modifications.\"\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={code:`code`,p:`p`,..._provideComponents(),...props.components},{Expandable,Heading,_MdxComponentBoundary}=_components;if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_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:_jsxs(DynamicResponseField,{name:`line_items`,type:`object[]`,children:[_jsx(_components.p,{children:`List of line items for the current billing period.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`display_name`,type:`string`,children:_jsx(_components.p,{children:`The name of the line item to display to the customer if you’re building a UI. It will either be the plan name or the feature name.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`description`,type:`string`,children:_jsx(_components.p,{children:`A detailed description of the line item.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`subtotal`,type:`number`,children:_jsx(_components.p,{children:`The amount before discounts and tax for this line item.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`total`,type:`number`,children:_jsx(_components.p,{children:`The final amount after discounts and tax for this line item.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`discounts`,type:`object[]`,children:[_jsx(_components.p,{children:`List of discounts applied to this line item.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount_off`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`percent_off`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`reward_id`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`reward_name`,type:`string`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`plan_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the plan that this line item belongs to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string | null`,children:_jsx(_components.p,{children:`The ID of the feature that this line item belongs to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`period`,type:`object`,children:[_jsx(_components.p,{children:`The period of time that this line item is being charged for.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`start`,type:`number`,children:_jsx(_components.p,{children:`The start of the period in milliseconds since the Unix epoch.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`end`,type:`number`,children:_jsx(_components.p,{children:`The end of the period in milliseconds since the Unix epoch.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`,children:_jsx(_components.p,{children:`The quantity of the line item.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`subtotal`,type:`number`,children:_jsx(_components.p,{children:`The total amount before discounts and tax for the current billing period.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`total`,type:`number`,children:_jsx(_components.p,{children:`The final amount after discounts and tax for the current billing period.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`The three-letter ISO currency code. All amounts are in the currency’s major unit (e.g., dollars for USD).`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`immediate_invoice`,type:`object`,children:[_jsx(_components.p,{children:`The invoice this change creates right away, if any. Renewals are described by next_cycle.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`type`,type:`'none' | 'zero_amount' | 'charge' | 'credit'`,children:_jsx(_components.p,{children:`What the invoice created now bills. ‘none’ when the change creates no invoice now. ‘zero_amount’ when an invoice is created but nothing was billed, such as a trial or a usage-only plan. ‘charge’ when something was billed, even if discounts or credits bring the amount due to zero. ‘credit’ when the invoice total is negative and becomes customer credit.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`issue_method`,type:`'draft' | 'finalize' | 'send' | 'charge_automatically'`,children:_jsx(_components.p,{children:`How the invoice is issued, matching invoice_mode.issue_method: ‘draft’, ‘finalize’ or ‘send’. ‘charge_automatically’ when the card on file is charged, or the customer pays at checkout. Null when type is ‘none’.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`resets_usage`,type:`boolean`,children:_jsx(_components.p,{children:`True when this change clears the customer’s usage balances, so the approver can see usage will reset.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`next_cycle`,type:`object`,children:[_jsx(_components.p,{children:`Preview of the next billing cycle, if applicable. This shows what the customer will be charged in subsequent cycles.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`starts_at`,type:`number`,children:_jsx(_components.p,{children:`Unix timestamp (milliseconds) when the next billing cycle starts.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`subtotal`,type:`number`,children:_jsx(_components.p,{children:`The total amount before discounts and tax for the next cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`total`,type:`number`,children:_jsx(_components.p,{children:`The final amount after discounts and tax for the next cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`line_items`,type:`object[]`,children:[_jsx(_components.p,{children:`List of line items for the next billing cycle.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`display_name`,type:`string`,children:_jsx(_components.p,{children:`The name of the line item to display to the customer if you’re building a UI. It will either be the plan name or the feature name.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`description`,type:`string`,children:_jsx(_components.p,{children:`A detailed description of the line item.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`subtotal`,type:`number`,children:_jsx(_components.p,{children:`The amount before discounts and tax for this line item.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`total`,type:`number`,children:_jsx(_components.p,{children:`The final amount after discounts and tax for this line item.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`discounts`,type:`object[]`,children:[_jsx(_components.p,{children:`List of discounts applied to this line item.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount_off`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`percent_off`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`reward_id`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`reward_name`,type:`string`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`plan_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the plan that this line item belongs to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string | null`,children:_jsx(_components.p,{children:`The ID of the feature that this line item belongs to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`period`,type:`object`,children:[_jsx(_components.p,{children:`The period of time that this line item is being charged for.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`start`,type:`number`,children:_jsx(_components.p,{children:`The start of the period in milliseconds since the Unix epoch.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`end`,type:`number`,children:_jsx(_components.p,{children:`The end of the period in milliseconds since the Unix epoch.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`,children:_jsx(_components.p,{children:`The quantity of the line item.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_line_items`,type:`object[]`,children:[_jsx(_components.p,{children:`List of line items for usage-based features in the next cycle.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`display_name`,type:`string`,children:_jsx(_components.p,{children:`The name of the line item to display to the customer if you’re building a UI. It will either be the plan name or the feature name.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`plan_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the plan that this line item belongs to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string | null`,children:_jsx(_components.p,{children:`The ID of the feature that this line item belongs to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`period`,type:`object`,children:[_jsx(_components.p,{children:`The period of time that this line item is being charged for.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`start`,type:`number`,children:_jsx(_components.p,{children:`The start of the period in milliseconds since the Unix epoch.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`end`,type:`number`,children:_jsx(_components.p,{children:`The end of the period in milliseconds since the Unix epoch.`})})})]})]})})]})]})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expand`,type:`string[]`,children:_jsx(_components.p,{children:`Expand the response with additional data.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`incoming`,type:`object[]`,children:[_jsx(_components.p,{children:`Products or subscription changes being added or updated.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`plan_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the plan affected by this preview change.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`plan`,type:`object`,children:[_jsx(_components.p,{children:`The full plan object if it was expanded in the response.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`id`,type:`string`,children:_jsx(_components.p,{children:`Unique identifier for the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string`,children:_jsx(_components.p,{children:`Display name of the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`description`,type:`string | null`,children:_jsx(_components.p,{children:`Optional description of the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`group`,type:`string | null`,children:_jsx(_components.p,{children:`Group identifier for organizing related plans. Plans in the same group are mutually exclusive.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`version`,type:`number`,children:_jsx(_components.p,{children:`Version number of the plan. Incremented when plan configuration changes.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`version_slug`,type:`string | null`,children:_jsx(_components.p,{children:`User-facing version identity. Defaults to v{n} when the version is minted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`active`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this is the active version of the plan. At most one version is active.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add_on`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this is an add-on plan that can be attached alongside a main plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`auto_enable`,type:`boolean`,children:_jsx(_components.p,{children:`If true, this plan is automatically attached when a customer is created. Used for free plans.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Base recurring price for the plan. Null for free plans or usage-only plans.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Base price amount for the plan, in major currency units (e.g. dollars).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Base price amounts in additional currencies. The base ‘amount’ is in the org’s default currency.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval (e.g. ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`display`,type:`object`,children:[_jsx(_components.p,{children:`Display text for showing this price in pricing pages.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`primary_text`,type:`string`,children:_jsx(_components.p,{children:`Main display text (e.g. ‘$10’ or ‘100 messages’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`secondary_text`,type:`string`,children:_jsx(_components.p,{children:`Secondary display text (e.g. ‘per month’ or ‘then $0.5 per 100’).`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`processors`,type:`object`,children:[_jsx(_components.p,{children:`Payment processors this base price is connected to. Omitted when unset.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`stripe`,type:`object | null`,children:_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`price_id`,type:`string`,children:_jsx(_components.p,{children:`Stripe price ID. For prepaid with included > 0 this is the V2 price.`})})})})})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`items`,type:`object[]`,children:[_jsx(_components.p,{children:`Feature configurations included in this plan. Each item defines included units, pricing, and reset behavior for a feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`threshold_billing`,type:`object | null`,children:[_jsx(_components.p,{children:`Bills this many feature units when outstanding overage reaches it.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature this item configures.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature`,type:`object`,children:[_jsx(_components.p,{children:`The full feature object if expanded.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature, used to refer to it in other API calls like /track or /check.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string | null`,children:_jsx(_components.p,{children:`The name of the feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`type`,type:`'static' | 'boolean' | 'single_use' | 'continuous_use' | 'credit_system' | 'ai_credit_system'`,children:_jsx(_components.p,{children:`The type of the feature`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`display`,type:`object | null`,children:[_jsx(_components.p,{children:`Singular and plural display names for the feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`singular`,type:`string`,children:_jsx(_components.p,{children:`The singular display name for the feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`plural`,type:`string`,children:_jsx(_components.p,{children:`The plural display name for the feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object[] | null`,children:[_jsx(_components.p,{children:`Credit cost schema for credit system features.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the metered feature (should be a single_use feature).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`The credit cost of the metered feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`archived`,type:`boolean | null`,children:_jsx(_components.p,{children:`Whether or not the feature is archived.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Number of free units included. For consumable features, balance resets to this number each interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`reset`,type:`object | null`,children:[_jsx(_components.p,{children:`Reset configuration for consumable features. Null for non-consumable features like seats where usage persists across billing cycles.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`The interval at which the feature balance resets (e.g. ‘month’, ‘year’). For consumable features, usage resets to 0 and included units are restored.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Pricing configuration for usage beyond included units. Null if feature is entirely free.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage is consumed. Mutually exclusive with tiers.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Amounts in additional currencies for this flat price. The base ‘amount’ is in the org’s default currency. Only valid with ‘amount’, not ‘tiers’ (tiered prices carry per-currency amounts on each tier).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing configuration. Each tier’s ‘to’ INCLUDES the included amount. Either ‘tiers’ or ‘amount’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`,children:_jsx(_components.p,{children:`Flat amount for this tier in this currency, if the tier uses one.`})})})]})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`'graduated' | 'volume'`,children:_jsx(_components.p,{children:`How tiers price usage. ‘graduated’ (default) charges each unit at the rate of the tier it falls in. ‘volume’ picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier’s rate plus its flat_amount.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval for this price. For consumable features, should match reset.interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of units per price increment. Usage is rounded UP to the nearest billing_units when billed (e.g. billing_units=100 means 101 usage rounds to 200).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`‘prepaid’ for features like seats where customers pay upfront, ‘usage_based’ for pay-as-you-go after included usage.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_purchase`,type:`number | null`,children:_jsx(_components.p,{children:`Maximum units a customer can purchase beyond included. E.g. if included=100 and max_purchase=300, customer can use up to 400 total before usage is capped. Null for no limit.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`processors`,type:`object`,children:[_jsx(_components.p,{children:`Payment processors this item price is connected to. Omitted when unset.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`stripe`,type:`object | null`,children:_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`price_id`,type:`string`,children:_jsx(_components.p,{children:`Stripe price ID. For prepaid with included > 0 this is the V2 price.`})})})})})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`display`,type:`object`,children:[_jsx(_components.p,{children:`Display text for showing this item in pricing pages.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`primary_text`,type:`string`,children:_jsx(_components.p,{children:`Main display text (e.g. ‘$10’ or ‘100 messages’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`secondary_text`,type:`string`,children:_jsx(_components.p,{children:`Secondary display text (e.g. ‘per month’ or ‘then $0.5 per 100’).`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`rollover`,type:`object`,children:[_jsx(_components.p,{children:`Rollover configuration for unused units. If set, unused included units roll over to the next period.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max`,type:`number | null`,children:_jsx(_components.p,{children:`Maximum rollover units. Null for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_percentage`,type:`number | null`,children:_jsx(_components.p,{children:`Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_type`,type:`'month' | 'forever'`,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`expiry`,type:`object | null`,children:[_jsx(_components.p,{children:`Purchased units expire this long after each purchase. One-off prepaid consumable items only.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration`,type:`'day' | 'week' | 'month' | 'year'`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`length`,type:`number`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_override`,type:`object`,children:[_jsx(_components.p,{children:`Overrides fields of this item’s feature for customers on this plan (e.g. a credit system’s credit_schema).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object | object | object[]`,children:[_jsxs(_components.p,{children:[`For credit system features: merges into the feature’s credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `,_jsx(_components.code,{children:`excluded: true`}),` removes it, and unlisted features keep the credit system’s rate.`]}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`dimensions.{key}`,type:`object | object`,children:_jsx(_components.p,{children:`Named rates chosen by event properties. The most specific match sets the rate; with no match the item’s own rate applies.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`multipliers.{key}`,type:`object`,children:[_jsx(_components.p,{children:`Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`match.{key}`,type:`string`,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add`,type:`number`,children:_jsx(_components.p,{children:`Added to the rate after every factor is applied, in credits per billing-unit group.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`excluded`,type:`true`,children:_jsx(_components.p,{children:`Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`markups`,type:`object`,children:[_jsx(_components.p,{children:`For AI credit system features: replaces the feature’s markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature’s.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`default_markup`,type:`number`,children:_jsx(_components.p,{children:`Default percentage markup for customers on this plan. Use -100 to make usage free.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`provider_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-provider markup percentages for customers on this plan.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`model_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-model markup overrides for customers on this plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`processors`,type:`object`,children:[_jsx(_components.p,{children:`Payment processors this plan is connected to. Omitted when unset.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`stripe`,type:`object | null`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`product_id`,type:`string`,children:_jsx(_components.p,{children:`Stripe product ID this plan is billed under.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_product_ids`,type:`string[]`,children:_jsx(_components.p,{children:`Extra Stripe product IDs aliased to this plan.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`revenuecat`,type:`object | null`,children:_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`products`,type:`object[]`,children:[_jsx(_components.p,{children:`Every RevenueCat product that maps to this plan. Replaces the current set.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`product_id`,type:`string`,children:_jsx(_components.p,{children:`RevenueCat product ID that grants this plan when purchased.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_quantities`,type:`object[]`,children:[_jsx(_components.p,{children:`Prepaid quantities granted when this specific RevenueCat product is purchased, in feature units.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`})})]})]})})]})]})})})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`free_trial`,type:`object`,children:[_jsx(_components.p,{children:`Free trial configuration. If set, new customers can try this plan before being charged.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of duration_type periods the trial lasts.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_type`,type:`'day' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Unit of time for the trial duration (‘day’, ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`card_required`,type:`boolean`,children:_jsx(_components.p,{children:`Whether a payment method is required to start the trial. If true, customer will be charged after trial ends.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_end`,type:`'bill' | 'revert'`,children:_jsx(_components.p,{children:`Behavior when the trial ends. ‘bill’ charges the customer (default). ‘revert’ expires the trial and restores the customer’s previous plan.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`created_at`,type:`number`,children:_jsx(_components.p,{children:`Unix timestamp (ms) when the plan was created.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`env`,type:`'sandbox' | 'live'`,children:_jsx(_components.p,{children:`Environment this plan belongs to (‘sandbox’ or ‘live’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`archived`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the plan is archived. Archived plans cannot be attached to new customers.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`config`,type:`object`,children:[_jsx(_components.p,{children:`Miscellaneous plan-level configuration flags.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`ignore_past_due`,type:`boolean`,children:_jsx(_components.p,{children:`If true, entitlements attached to this plan will still reset on schedule even when the customer’s product is in a past_due state.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`anchor_to_month_start`,type:`boolean`,children:_jsx(_components.p,{children:`Anchor billing and reset cycles to the 1st of the month (UTC).`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`billing_controls`,type:`object`,children:[_jsx(_components.p,{children:`Plan-level billing controls used as customer defaults.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`auto_topups`,type:`object[]`,children:[_jsx(_components.p,{children:`List of auto top-up configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature (credit balance) to auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether auto top-up is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`When the balance drops below this threshold, an auto top-up will be purchased.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`,children:_jsx(_components.p,{children:`Amount of credits to add per auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`purchase_limit`,type:`object`,children:[_jsx(_components.p,{children:`Optional rate limit to cap how often auto top-ups occur.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'hour' | 'day' | 'week' | 'month'`,children:_jsx(_components.p,{children:`The time interval for the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals in the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum number of auto top-ups allowed within the interval.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`invoice_mode`,type:`boolean`,children:_jsx(_components.p,{children:`When true, auto top-up creates a send_invoice invoice instead of auto-charging.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`spend_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage spend limits per feature (caps overage spend).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Optional feature ID this spend limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the overage spend limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit_type`,type:`'absolute' | 'usage_percentage'`,children:_jsx(_components.p,{children:`How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`overage_limit`,type:`number`,children:_jsx(_components.p,{children:`Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`skip_overage_billing`,type:`boolean`,children:_jsx(_components.p,{children:`When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of hard usage caps per feature (max units per interval).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature this usage limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum units allowed per interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'day' | 'week' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Interval for the cap, aligned to the customer’s billing cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`anchor`,type:`'billing_cycle' | 'utc'`,children:_jsx(_components.p,{children:`Window alignment. ‘billing_cycle’ phases the interval to the customer’s renewal time; ‘utc’ aligns to the UTC calendar.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_alerts`,type:`object[]`,children:[_jsx(_components.p,{children:`List of usage alert configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this alert applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage alert is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage_percentage or remaining_percentage, this is a percentage (0-100).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold_type`,type:`'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'`,children:_jsx(_components.p,{children:`Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`basis`,type:`'balance' | 'included' | 'recurring' | 'usage_limit'`,children:_jsx(_components.p,{children:`What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string`,children:_jsx(_components.p,{children:`Optional user-defined label to distinguish multiple alerts on the same feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`overage_allowed`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage allowed controls per feature. When enabled, usage can exceed balance.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this overage allowed control applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether overage is allowed for this feature.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metadata`,type:`object`,children:_jsx(_components.p,{children:`Arbitrary key-value metadata defined by you for your own use. Shared across all versions of the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`customer_eligibility`,type:`object`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`trial_available`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the trial on this plan is available to this customer. For example, if the customer used the trial in the past, this will be false.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`status`,type:`'active' | 'scheduled'`,children:_jsx(_components.p,{children:`The customer’s current status with this plan. ‘active’ if attached, ‘scheduled’ if pending activation.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`canceling`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the customer’s active instance of this plan is set to cancel.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`trialing`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the customer is currently on a free trial of this plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`attach_action`,type:`'activate' | 'upgrade' | 'downgrade' | 'none' | 'purchase'`,children:_jsx(_components.p,{children:`The action that would occur if this plan were attached to the customer.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`base_variant_id`,type:`string | null`,children:_jsx(_components.p,{children:`Deprecated. Use variant_details.base_plan_id instead. If this is a variant, the ID of the base plan it was created from.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`variant_details`,type:`object`,children:[_jsx(_components.p,{children:`Details about how this variant relates to its latest base plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`base_plan_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the base plan this variant was derived from.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`customize`,type:`object`,children:[_jsx(_components.p,{children:`The customization that transforms the base plan into this variant.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Base price configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Base price amount for the plan, in major currency units (e.g. dollars).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval (e.g. ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Base price amounts in additional currencies. The base ‘amount’ is in the org’s default currency.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`add_items`,type:`object[]`,children:[_jsx(_components.p,{children:`Items to add to the plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`threshold_billing`,type:`object | null`,children:[_jsx(_components.p,{children:`Bills this many feature units when outstanding overage reaches it.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature to configure.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Number of free units included. Balance resets to this each interval for consumable features.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`If true, customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`reset`,type:`object`,children:[_jsx(_components.p,{children:`Reset configuration for consumable features. Omit for non-consumable features like seats.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Interval at which balance resets (e.g. ‘month’, ‘year’). For consumable features only.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object`,children:[_jsx(_components.p,{children:`Pricing for usage beyond included units. Omit for free features.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage. Either ‘amount’ or ‘tiers’ is required.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Amounts in additional currencies for this flat price. The base ‘amount’ is in the org’s default currency. Only valid with ‘amount’, not ‘tiers’.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing. Either ‘amount’ or ‘tiers’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`,children:_jsx(_components.p,{children:`Flat amount for this tier in this currency, if the tier uses one.`})})})]})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`'graduated' | 'volume'`,children:_jsx(_components.p,{children:`How tiers price usage. ‘graduated’ (default) charges each unit at the rate of the tier it falls in. ‘volume’ picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier’s rate plus its flat_amount.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval. For consumable features, should match reset.interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`‘prepaid’ for upfront payment (seats), ‘usage_based’ for pay-as-you-go.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_purchase`,type:`number | null`,children:_jsx(_components.p,{children:`Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`proration`,type:`object`,children:[_jsx(_components.p,{children:`Proration settings for prepaid features. Controls mid-cycle quantity change billing.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_increase`,type:`'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'`,children:_jsx(_components.p,{children:`Billing behavior when quantity increases mid-cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_decrease`,type:`'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'`,children:_jsx(_components.p,{children:`Credit behavior when quantity decreases mid-cycle.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`rollover`,type:`object`,children:[_jsx(_components.p,{children:`Rollover config for unused units. If set, unused included units carry over.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max`,type:`number`,children:_jsx(_components.p,{children:`Max rollover units. Omit for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_percentage`,type:`number`,children:_jsx(_components.p,{children:`Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_type`,type:`'month' | 'forever'`,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`expiry`,type:`object`,children:[_jsx(_components.p,{children:`Purchased units expire this long after each purchase. One-off prepaid consumable items only.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration`,type:`'day' | 'week' | 'month' | 'year'`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`length`,type:`number`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_override`,type:`object`,children:[_jsx(_components.p,{children:`Overrides fields of this item’s feature for customers on this plan (e.g. a credit system’s credit_schema).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object | object | object[]`,children:[_jsxs(_components.p,{children:[`For credit system features: merges into the feature’s credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `,_jsx(_components.code,{children:`excluded: true`}),` removes it, and unlisted features keep the credit system’s rate.`]}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`dimensions.{key}`,type:`object | object`,children:_jsx(_components.p,{children:`Named rates chosen by event properties. The most specific match sets the rate; with no match the item’s own rate applies.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`multipliers.{key}`,type:`object`,children:[_jsx(_components.p,{children:`Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`match.{key}`,type:`string`,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add`,type:`number`,children:_jsx(_components.p,{children:`Added to the rate after every factor is applied, in credits per billing-unit group.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`excluded`,type:`true`,children:_jsx(_components.p,{children:`Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`markups`,type:`object`,children:[_jsx(_components.p,{children:`For AI credit system features: replaces the feature’s markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature’s.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`default_markup`,type:`number`,children:_jsx(_components.p,{children:`Default percentage markup for customers on this plan. Use -100 to make usage free.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`provider_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-provider markup percentages for customers on this plan.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`model_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-model markup overrides for customers on this plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`remove_items`,type:`object[]`,children:[_jsx(_components.p,{children:`Filters selecting items to remove from the plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Match items linked to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`Match items with this billing method (prepaid or usage_based).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`integer`,children:_jsx(_components.p,{children:`Match items with this interval_count. Disambiguates between items that share an interval but differ in count.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Match items whose grant equals this included usage. Omitted is a wildcard.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`free_trial`,type:`object | null`,children:[_jsx(_components.p,{children:`Free trial configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of duration_type periods the trial lasts.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_type`,type:`'day' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Unit of time for the trial (‘day’, ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`card_required`,type:`boolean`,children:_jsx(_components.p,{children:`If true, a payment method is required to start the trial and the customer is charged when it ends. Defaults to false.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_end`,type:`'bill' | 'revert'`,children:_jsx(_components.p,{children:`Behavior when the trial ends. ‘bill’ charges the customer (default). ‘revert’ expires the trial and restores the customer’s previous plan.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`billing_controls`,type:`object`,children:[_jsx(_components.p,{children:`Override the plan’s billing controls (auto top-ups, spend limits, usage limits, usage alerts, overage allowed) for this customer.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`auto_topups`,type:`object[]`,children:[_jsx(_components.p,{children:`List of auto top-up configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature (credit balance) to auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether auto top-up is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`When the balance drops below this threshold, an auto top-up will be purchased.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`,children:_jsx(_components.p,{children:`Amount of credits to add per auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`purchase_limit`,type:`object`,children:[_jsx(_components.p,{children:`Optional rate limit to cap how often auto top-ups occur. Pass count to set the current window’s consumed top-ups.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'hour' | 'day' | 'week' | 'month'`,children:_jsx(_components.p,{children:`The time interval for the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals in the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum number of auto top-ups allowed within the interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`count`,type:`number`,children:_jsx(_components.p,{children:`Set the current window’s consumed auto top-up count. Omit to leave runtime state unchanged.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`invoice_mode`,type:`boolean`,children:_jsx(_components.p,{children:`When true, auto top-up creates a send_invoice invoice instead of auto-charging.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`spend_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage spend limits per feature (caps overage spend).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Optional feature ID this spend limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the overage spend limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit_type`,type:`'absolute' | 'usage_percentage'`,children:_jsx(_components.p,{children:`How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`overage_limit`,type:`number`,children:_jsx(_components.p,{children:`Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`skip_overage_billing`,type:`boolean`,children:_jsx(_components.p,{children:`When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of hard usage caps per feature (max units per interval).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature this usage limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum units allowed per interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'day' | 'week' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Interval for the cap, aligned to the customer’s billing cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`anchor`,type:`'billing_cycle' | 'utc'`,children:_jsx(_components.p,{children:`Window alignment. ‘billing_cycle’ phases the interval to the customer’s renewal time; ‘utc’ aligns to the UTC calendar.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_alerts`,type:`object[]`,children:[_jsx(_components.p,{children:`List of usage alert configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this alert applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage alert is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage_percentage or remaining_percentage, this is a percentage (0-100).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold_type`,type:`'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'`,children:_jsx(_components.p,{children:`Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`basis`,type:`'balance' | 'included' | 'recurring' | 'usage_limit'`,children:_jsx(_components.p,{children:`What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string`,children:_jsx(_components.p,{children:`Optional user-defined label to distinguish multiple alerts on the same feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`overage_allowed`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage allowed controls per feature. When enabled, usage can exceed balance.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this overage allowed control applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether overage is allowed for this feature.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`upsert_licenses`,type:`object[]`,children:[_jsx(_components.p,{children:`License links to add or override for this customer, keyed by license_plan_id. Omitted fields inherit the plan catalog link (included defaults to 1 when the license is not in the catalog). A bare entry restores the license to pure catalog inheritance.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`license_plan_id`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`version_slug`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`integer`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`prepaid_only`,type:`boolean`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`customize`,type:`object | null`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Base price configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Base price amount for the plan, in major currency units (e.g. dollars).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval (e.g. ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Base price amounts in additional currencies. The base ‘amount’ is in the org’s default currency.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add_items`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`threshold_billing`,type:`object | null`,children:[_jsx(_components.p,{children:`Bills this many feature units when outstanding overage reaches it.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature to configure.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Number of free units included. Balance resets to this each interval for consumable features.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`If true, customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`reset`,type:`object`,children:[_jsx(_components.p,{children:`Reset configuration for consumable features. Omit for non-consumable features like seats.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Interval at which balance resets (e.g. ‘month’, ‘year’). For consumable features only.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object`,children:[_jsx(_components.p,{children:`Pricing for usage beyond included units. Omit for free features.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage. Either ‘amount’ or ‘tiers’ is required.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Amounts in additional currencies for this flat price. The base ‘amount’ is in the org’s default currency. Only valid with ‘amount’, not ‘tiers’.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing. Either ‘amount’ or ‘tiers’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`,children:_jsx(_components.p,{children:`Flat amount for this tier in this currency, if the tier uses one.`})})})]})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`'graduated' | 'volume'`,children:_jsx(_components.p,{children:`How tiers price usage. ‘graduated’ (default) charges each unit at the rate of the tier it falls in. ‘volume’ picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier’s rate plus its flat_amount.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval. For consumable features, should match reset.interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`‘prepaid’ for upfront payment (seats), ‘usage_based’ for pay-as-you-go.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_purchase`,type:`number | null`,children:_jsx(_components.p,{children:`Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`proration`,type:`object`,children:[_jsx(_components.p,{children:`Proration settings for prepaid features. Controls mid-cycle quantity change billing.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_increase`,type:`'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'`,children:_jsx(_components.p,{children:`Billing behavior when quantity increases mid-cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_decrease`,type:`'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'`,children:_jsx(_components.p,{children:`Credit behavior when quantity decreases mid-cycle.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`rollover`,type:`object`,children:[_jsx(_components.p,{children:`Rollover config for unused units. If set, unused included units carry over.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max`,type:`number`,children:_jsx(_components.p,{children:`Max rollover units. Omit for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_percentage`,type:`number`,children:_jsx(_components.p,{children:`Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_type`,type:`'month' | 'forever'`,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`expiry`,type:`object`,children:[_jsx(_components.p,{children:`Purchased units expire this long after each purchase. One-off prepaid consumable items only.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration`,type:`'day' | 'week' | 'month' | 'year'`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`length`,type:`number`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_override`,type:`object`,children:[_jsx(_components.p,{children:`Overrides fields of this item’s feature for customers on this plan (e.g. a credit system’s credit_schema).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object | object | object[]`,children:[_jsxs(_components.p,{children:[`For credit system features: merges into the feature’s credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `,_jsx(_components.code,{children:`excluded: true`}),` removes it, and unlisted features keep the credit system’s rate.`]}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`dimensions.{key}`,type:`object | object`,children:_jsx(_components.p,{children:`Named rates chosen by event properties. The most specific match sets the rate; with no match the item’s own rate applies.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`multipliers.{key}`,type:`object`,children:[_jsx(_components.p,{children:`Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`match.{key}`,type:`string`,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add`,type:`number`,children:_jsx(_components.p,{children:`Added to the rate after every factor is applied, in credits per billing-unit group.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`excluded`,type:`true`,children:_jsx(_components.p,{children:`Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`markups`,type:`object`,children:[_jsx(_components.p,{children:`For AI credit system features: replaces the feature’s markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature’s.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`default_markup`,type:`number`,children:_jsx(_components.p,{children:`Default percentage markup for customers on this plan. Use -100 to make usage free.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`provider_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-provider markup percentages for customers on this plan.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`model_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-model markup overrides for customers on this plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`remove_items`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Match items linked to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`Match items with this billing method (prepaid or usage_based).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`integer`,children:_jsx(_components.p,{children:`Match items with this interval_count. Disambiguates between items that share an interval but differ in count.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Match items whose grant equals this included usage. Omitted is a wildcard.`})})})]})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metadata`,type:`object`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`remove_licenses`,type:`object[]`,children:[_jsx(_components.p,{children:`License links to drop, keyed by license_plan_id. Parallel to remove_items.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`license_plan_id`,type:`string`})})})]})})]})]})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_quantities`,type:`object[]`,children:[_jsx(_components.p,{children:`The feature quantity selections associated with this plan change.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the adjustable feature included in this change.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`,children:_jsx(_components.p,{children:`The quantity that will apply for this feature in the change.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`effective_at`,type:`number | null`,children:_jsx(_components.p,{children:`When this change takes effect, in milliseconds since the Unix epoch, or null if it applies immediately.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`canceled_at`,type:`number | null`,children:_jsx(_components.p,{children:`When this plan was canceled, in milliseconds since the Unix epoch, or null if it is not canceled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expires_at`,type:`number | null`,children:_jsx(_components.p,{children:`When this plan expires, in milliseconds since the Unix epoch, or null if it does not expire.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`outgoing`,type:`object[]`,children:[_jsx(_components.p,{children:`Products or subscription changes being removed or ended.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`plan_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the plan affected by this preview change.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`plan`,type:`object`,children:[_jsx(_components.p,{children:`The full plan object if it was expanded in the response.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`id`,type:`string`,children:_jsx(_components.p,{children:`Unique identifier for the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string`,children:_jsx(_components.p,{children:`Display name of the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`description`,type:`string | null`,children:_jsx(_components.p,{children:`Optional description of the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`group`,type:`string | null`,children:_jsx(_components.p,{children:`Group identifier for organizing related plans. Plans in the same group are mutually exclusive.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`version`,type:`number`,children:_jsx(_components.p,{children:`Version number of the plan. Incremented when plan configuration changes.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`version_slug`,type:`string | null`,children:_jsx(_components.p,{children:`User-facing version identity. Defaults to v{n} when the version is minted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`active`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this is the active version of the plan. At most one version is active.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add_on`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this is an add-on plan that can be attached alongside a main plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`auto_enable`,type:`boolean`,children:_jsx(_components.p,{children:`If true, this plan is automatically attached when a customer is created. Used for free plans.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Base recurring price for the plan. Null for free plans or usage-only plans.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Base price amount for the plan, in major currency units (e.g. dollars).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Base price amounts in additional currencies. The base ‘amount’ is in the org’s default currency.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval (e.g. ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`display`,type:`object`,children:[_jsx(_components.p,{children:`Display text for showing this price in pricing pages.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`primary_text`,type:`string`,children:_jsx(_components.p,{children:`Main display text (e.g. ‘$10’ or ‘100 messages’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`secondary_text`,type:`string`,children:_jsx(_components.p,{children:`Secondary display text (e.g. ‘per month’ or ‘then $0.5 per 100’).`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`processors`,type:`object`,children:[_jsx(_components.p,{children:`Payment processors this base price is connected to. Omitted when unset.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`stripe`,type:`object | null`,children:_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`price_id`,type:`string`,children:_jsx(_components.p,{children:`Stripe price ID. For prepaid with included > 0 this is the V2 price.`})})})})})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`items`,type:`object[]`,children:[_jsx(_components.p,{children:`Feature configurations included in this plan. Each item defines included units, pricing, and reset behavior for a feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`threshold_billing`,type:`object | null`,children:[_jsx(_components.p,{children:`Bills this many feature units when outstanding overage reaches it.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature this item configures.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature`,type:`object`,children:[_jsx(_components.p,{children:`The full feature object if expanded.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature, used to refer to it in other API calls like /track or /check.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string | null`,children:_jsx(_components.p,{children:`The name of the feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`type`,type:`'static' | 'boolean' | 'single_use' | 'continuous_use' | 'credit_system' | 'ai_credit_system'`,children:_jsx(_components.p,{children:`The type of the feature`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`display`,type:`object | null`,children:[_jsx(_components.p,{children:`Singular and plural display names for the feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`singular`,type:`string`,children:_jsx(_components.p,{children:`The singular display name for the feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`plural`,type:`string`,children:_jsx(_components.p,{children:`The plural display name for the feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object[] | null`,children:[_jsx(_components.p,{children:`Credit cost schema for credit system features.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the metered feature (should be a single_use feature).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`The credit cost of the metered feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`archived`,type:`boolean | null`,children:_jsx(_components.p,{children:`Whether or not the feature is archived.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Number of free units included. For consumable features, balance resets to this number each interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`reset`,type:`object | null`,children:[_jsx(_components.p,{children:`Reset configuration for consumable features. Null for non-consumable features like seats where usage persists across billing cycles.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`The interval at which the feature balance resets (e.g. ‘month’, ‘year’). For consumable features, usage resets to 0 and included units are restored.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Pricing configuration for usage beyond included units. Null if feature is entirely free.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage is consumed. Mutually exclusive with tiers.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Amounts in additional currencies for this flat price. The base ‘amount’ is in the org’s default currency. Only valid with ‘amount’, not ‘tiers’ (tiered prices carry per-currency amounts on each tier).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing configuration. Each tier’s ‘to’ INCLUDES the included amount. Either ‘tiers’ or ‘amount’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`,children:_jsx(_components.p,{children:`Flat amount for this tier in this currency, if the tier uses one.`})})})]})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`'graduated' | 'volume'`,children:_jsx(_components.p,{children:`How tiers price usage. ‘graduated’ (default) charges each unit at the rate of the tier it falls in. ‘volume’ picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier’s rate plus its flat_amount.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval for this price. For consumable features, should match reset.interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of units per price increment. Usage is rounded UP to the nearest billing_units when billed (e.g. billing_units=100 means 101 usage rounds to 200).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`‘prepaid’ for features like seats where customers pay upfront, ‘usage_based’ for pay-as-you-go after included usage.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_purchase`,type:`number | null`,children:_jsx(_components.p,{children:`Maximum units a customer can purchase beyond included. E.g. if included=100 and max_purchase=300, customer can use up to 400 total before usage is capped. Null for no limit.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`processors`,type:`object`,children:[_jsx(_components.p,{children:`Payment processors this item price is connected to. Omitted when unset.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`stripe`,type:`object | null`,children:_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`price_id`,type:`string`,children:_jsx(_components.p,{children:`Stripe price ID. For prepaid with included > 0 this is the V2 price.`})})})})})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`display`,type:`object`,children:[_jsx(_components.p,{children:`Display text for showing this item in pricing pages.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`primary_text`,type:`string`,children:_jsx(_components.p,{children:`Main display text (e.g. ‘$10’ or ‘100 messages’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`secondary_text`,type:`string`,children:_jsx(_components.p,{children:`Secondary display text (e.g. ‘per month’ or ‘then $0.5 per 100’).`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`rollover`,type:`object`,children:[_jsx(_components.p,{children:`Rollover configuration for unused units. If set, unused included units roll over to the next period.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max`,type:`number | null`,children:_jsx(_components.p,{children:`Maximum rollover units. Null for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_percentage`,type:`number | null`,children:_jsx(_components.p,{children:`Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_type`,type:`'month' | 'forever'`,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`expiry`,type:`object | null`,children:[_jsx(_components.p,{children:`Purchased units expire this long after each purchase. One-off prepaid consumable items only.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration`,type:`'day' | 'week' | 'month' | 'year'`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`length`,type:`number`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_override`,type:`object`,children:[_jsx(_components.p,{children:`Overrides fields of this item’s feature for customers on this plan (e.g. a credit system’s credit_schema).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object | object | object[]`,children:[_jsxs(_components.p,{children:[`For credit system features: merges into the feature’s credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `,_jsx(_components.code,{children:`excluded: true`}),` removes it, and unlisted features keep the credit system’s rate.`]}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`dimensions.{key}`,type:`object | object`,children:_jsx(_components.p,{children:`Named rates chosen by event properties. The most specific match sets the rate; with no match the item’s own rate applies.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`multipliers.{key}`,type:`object`,children:[_jsx(_components.p,{children:`Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`match.{key}`,type:`string`,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add`,type:`number`,children:_jsx(_components.p,{children:`Added to the rate after every factor is applied, in credits per billing-unit group.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`excluded`,type:`true`,children:_jsx(_components.p,{children:`Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`markups`,type:`object`,children:[_jsx(_components.p,{children:`For AI credit system features: replaces the feature’s markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature’s.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`default_markup`,type:`number`,children:_jsx(_components.p,{children:`Default percentage markup for customers on this plan. Use -100 to make usage free.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`provider_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-provider markup percentages for customers on this plan.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`model_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-model markup overrides for customers on this plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`processors`,type:`object`,children:[_jsx(_components.p,{children:`Payment processors this plan is connected to. Omitted when unset.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`stripe`,type:`object | null`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`product_id`,type:`string`,children:_jsx(_components.p,{children:`Stripe product ID this plan is billed under.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_product_ids`,type:`string[]`,children:_jsx(_components.p,{children:`Extra Stripe product IDs aliased to this plan.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`revenuecat`,type:`object | null`,children:_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`products`,type:`object[]`,children:[_jsx(_components.p,{children:`Every RevenueCat product that maps to this plan. Replaces the current set.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`product_id`,type:`string`,children:_jsx(_components.p,{children:`RevenueCat product ID that grants this plan when purchased.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_quantities`,type:`object[]`,children:[_jsx(_components.p,{children:`Prepaid quantities granted when this specific RevenueCat product is purchased, in feature units.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`})})]})]})})]})]})})})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`free_trial`,type:`object`,children:[_jsx(_components.p,{children:`Free trial configuration. If set, new customers can try this plan before being charged.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of duration_type periods the trial lasts.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_type`,type:`'day' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Unit of time for the trial duration (‘day’, ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`card_required`,type:`boolean`,children:_jsx(_components.p,{children:`Whether a payment method is required to start the trial. If true, customer will be charged after trial ends.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_end`,type:`'bill' | 'revert'`,children:_jsx(_components.p,{children:`Behavior when the trial ends. ‘bill’ charges the customer (default). ‘revert’ expires the trial and restores the customer’s previous plan.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`created_at`,type:`number`,children:_jsx(_components.p,{children:`Unix timestamp (ms) when the plan was created.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`env`,type:`'sandbox' | 'live'`,children:_jsx(_components.p,{children:`Environment this plan belongs to (‘sandbox’ or ‘live’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`archived`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the plan is archived. Archived plans cannot be attached to new customers.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`config`,type:`object`,children:[_jsx(_components.p,{children:`Miscellaneous plan-level configuration flags.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`ignore_past_due`,type:`boolean`,children:_jsx(_components.p,{children:`If true, entitlements attached to this plan will still reset on schedule even when the customer’s product is in a past_due state.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`anchor_to_month_start`,type:`boolean`,children:_jsx(_components.p,{children:`Anchor billing and reset cycles to the 1st of the month (UTC).`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`billing_controls`,type:`object`,children:[_jsx(_components.p,{children:`Plan-level billing controls used as customer defaults.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`auto_topups`,type:`object[]`,children:[_jsx(_components.p,{children:`List of auto top-up configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature (credit balance) to auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether auto top-up is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`When the balance drops below this threshold, an auto top-up will be purchased.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`,children:_jsx(_components.p,{children:`Amount of credits to add per auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`purchase_limit`,type:`object`,children:[_jsx(_components.p,{children:`Optional rate limit to cap how often auto top-ups occur.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'hour' | 'day' | 'week' | 'month'`,children:_jsx(_components.p,{children:`The time interval for the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals in the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum number of auto top-ups allowed within the interval.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`invoice_mode`,type:`boolean`,children:_jsx(_components.p,{children:`When true, auto top-up creates a send_invoice invoice instead of auto-charging.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`spend_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage spend limits per feature (caps overage spend).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Optional feature ID this spend limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the overage spend limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit_type`,type:`'absolute' | 'usage_percentage'`,children:_jsx(_components.p,{children:`How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`overage_limit`,type:`number`,children:_jsx(_components.p,{children:`Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`skip_overage_billing`,type:`boolean`,children:_jsx(_components.p,{children:`When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of hard usage caps per feature (max units per interval).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature this usage limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum units allowed per interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'day' | 'week' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Interval for the cap, aligned to the customer’s billing cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`anchor`,type:`'billing_cycle' | 'utc'`,children:_jsx(_components.p,{children:`Window alignment. ‘billing_cycle’ phases the interval to the customer’s renewal time; ‘utc’ aligns to the UTC calendar.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_alerts`,type:`object[]`,children:[_jsx(_components.p,{children:`List of usage alert configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this alert applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage alert is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage_percentage or remaining_percentage, this is a percentage (0-100).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold_type`,type:`'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'`,children:_jsx(_components.p,{children:`Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`basis`,type:`'balance' | 'included' | 'recurring' | 'usage_limit'`,children:_jsx(_components.p,{children:`What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string`,children:_jsx(_components.p,{children:`Optional user-defined label to distinguish multiple alerts on the same feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`overage_allowed`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage allowed controls per feature. When enabled, usage can exceed balance.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this overage allowed control applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether overage is allowed for this feature.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metadata`,type:`object`,children:_jsx(_components.p,{children:`Arbitrary key-value metadata defined by you for your own use. Shared across all versions of the plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`customer_eligibility`,type:`object`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`trial_available`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the trial on this plan is available to this customer. For example, if the customer used the trial in the past, this will be false.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`status`,type:`'active' | 'scheduled'`,children:_jsx(_components.p,{children:`The customer’s current status with this plan. ‘active’ if attached, ‘scheduled’ if pending activation.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`canceling`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the customer’s active instance of this plan is set to cancel.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`trialing`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the customer is currently on a free trial of this plan.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`attach_action`,type:`'activate' | 'upgrade' | 'downgrade' | 'none' | 'purchase'`,children:_jsx(_components.p,{children:`The action that would occur if this plan were attached to the customer.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`base_variant_id`,type:`string | null`,children:_jsx(_components.p,{children:`Deprecated. Use variant_details.base_plan_id instead. If this is a variant, the ID of the base plan it was created from.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`variant_details`,type:`object`,children:[_jsx(_components.p,{children:`Details about how this variant relates to its latest base plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`base_plan_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the base plan this variant was derived from.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`customize`,type:`object`,children:[_jsx(_components.p,{children:`The customization that transforms the base plan into this variant.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Base price configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Base price amount for the plan, in major currency units (e.g. dollars).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval (e.g. ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Base price amounts in additional currencies. The base ‘amount’ is in the org’s default currency.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`add_items`,type:`object[]`,children:[_jsx(_components.p,{children:`Items to add to the plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`threshold_billing`,type:`object | null`,children:[_jsx(_components.p,{children:`Bills this many feature units when outstanding overage reaches it.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature to configure.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Number of free units included. Balance resets to this each interval for consumable features.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`If true, customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`reset`,type:`object`,children:[_jsx(_components.p,{children:`Reset configuration for consumable features. Omit for non-consumable features like seats.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Interval at which balance resets (e.g. ‘month’, ‘year’). For consumable features only.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object`,children:[_jsx(_components.p,{children:`Pricing for usage beyond included units. Omit for free features.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage. Either ‘amount’ or ‘tiers’ is required.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Amounts in additional currencies for this flat price. The base ‘amount’ is in the org’s default currency. Only valid with ‘amount’, not ‘tiers’.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing. Either ‘amount’ or ‘tiers’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`,children:_jsx(_components.p,{children:`Flat amount for this tier in this currency, if the tier uses one.`})})})]})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`'graduated' | 'volume'`,children:_jsx(_components.p,{children:`How tiers price usage. ‘graduated’ (default) charges each unit at the rate of the tier it falls in. ‘volume’ picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier’s rate plus its flat_amount.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval. For consumable features, should match reset.interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`‘prepaid’ for upfront payment (seats), ‘usage_based’ for pay-as-you-go.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_purchase`,type:`number | null`,children:_jsx(_components.p,{children:`Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`proration`,type:`object`,children:[_jsx(_components.p,{children:`Proration settings for prepaid features. Controls mid-cycle quantity change billing.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_increase`,type:`'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'`,children:_jsx(_components.p,{children:`Billing behavior when quantity increases mid-cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_decrease`,type:`'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'`,children:_jsx(_components.p,{children:`Credit behavior when quantity decreases mid-cycle.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`rollover`,type:`object`,children:[_jsx(_components.p,{children:`Rollover config for unused units. If set, unused included units carry over.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max`,type:`number`,children:_jsx(_components.p,{children:`Max rollover units. Omit for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_percentage`,type:`number`,children:_jsx(_components.p,{children:`Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_type`,type:`'month' | 'forever'`,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`expiry`,type:`object`,children:[_jsx(_components.p,{children:`Purchased units expire this long after each purchase. One-off prepaid consumable items only.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration`,type:`'day' | 'week' | 'month' | 'year'`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`length`,type:`number`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_override`,type:`object`,children:[_jsx(_components.p,{children:`Overrides fields of this item’s feature for customers on this plan (e.g. a credit system’s credit_schema).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object | object | object[]`,children:[_jsxs(_components.p,{children:[`For credit system features: merges into the feature’s credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `,_jsx(_components.code,{children:`excluded: true`}),` removes it, and unlisted features keep the credit system’s rate.`]}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`dimensions.{key}`,type:`object | object`,children:_jsx(_components.p,{children:`Named rates chosen by event properties. The most specific match sets the rate; with no match the item’s own rate applies.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`multipliers.{key}`,type:`object`,children:[_jsx(_components.p,{children:`Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`match.{key}`,type:`string`,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add`,type:`number`,children:_jsx(_components.p,{children:`Added to the rate after every factor is applied, in credits per billing-unit group.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`excluded`,type:`true`,children:_jsx(_components.p,{children:`Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`markups`,type:`object`,children:[_jsx(_components.p,{children:`For AI credit system features: replaces the feature’s markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature’s.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`default_markup`,type:`number`,children:_jsx(_components.p,{children:`Default percentage markup for customers on this plan. Use -100 to make usage free.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`provider_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-provider markup percentages for customers on this plan.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`model_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-model markup overrides for customers on this plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`remove_items`,type:`object[]`,children:[_jsx(_components.p,{children:`Filters selecting items to remove from the plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Match items linked to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`Match items with this billing method (prepaid or usage_based).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`integer`,children:_jsx(_components.p,{children:`Match items with this interval_count. Disambiguates between items that share an interval but differ in count.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Match items whose grant equals this included usage. Omitted is a wildcard.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`free_trial`,type:`object | null`,children:[_jsx(_components.p,{children:`Free trial configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of duration_type periods the trial lasts.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration_type`,type:`'day' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Unit of time for the trial (‘day’, ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`card_required`,type:`boolean`,children:_jsx(_components.p,{children:`If true, a payment method is required to start the trial and the customer is charged when it ends. Defaults to false.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_end`,type:`'bill' | 'revert'`,children:_jsx(_components.p,{children:`Behavior when the trial ends. ‘bill’ charges the customer (default). ‘revert’ expires the trial and restores the customer’s previous plan.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`billing_controls`,type:`object`,children:[_jsx(_components.p,{children:`Override the plan’s billing controls (auto top-ups, spend limits, usage limits, usage alerts, overage allowed) for this customer.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`auto_topups`,type:`object[]`,children:[_jsx(_components.p,{children:`List of auto top-up configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature (credit balance) to auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether auto top-up is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`When the balance drops below this threshold, an auto top-up will be purchased.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`,children:_jsx(_components.p,{children:`Amount of credits to add per auto top-up.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`purchase_limit`,type:`object`,children:[_jsx(_components.p,{children:`Optional rate limit to cap how often auto top-ups occur. Pass count to set the current window’s consumed top-ups.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'hour' | 'day' | 'week' | 'month'`,children:_jsx(_components.p,{children:`The time interval for the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals in the purchase limit window.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum number of auto top-ups allowed within the interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`count`,type:`number`,children:_jsx(_components.p,{children:`Set the current window’s consumed auto top-up count. Omit to leave runtime state unchanged.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`invoice_mode`,type:`boolean`,children:_jsx(_components.p,{children:`When true, auto top-up creates a send_invoice invoice instead of auto-charging.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`spend_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage spend limits per feature (caps overage spend).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Optional feature ID this spend limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether the overage spend limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit_type`,type:`'absolute' | 'usage_percentage'`,children:_jsx(_components.p,{children:`How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`overage_limit`,type:`number`,children:_jsx(_components.p,{children:`Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`skip_overage_billing`,type:`boolean`,children:_jsx(_components.p,{children:`When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_limits`,type:`object[]`,children:[_jsx(_components.p,{children:`List of hard usage caps per feature (max units per interval).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature this usage limit applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage limit is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`limit`,type:`number`,children:_jsx(_components.p,{children:`Maximum units allowed per interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'day' | 'week' | 'month' | 'year'`,children:_jsx(_components.p,{children:`Interval for the cap, aligned to the customer’s billing cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`anchor`,type:`'billing_cycle' | 'utc'`,children:_jsx(_components.p,{children:`Window alignment. ‘billing_cycle’ phases the interval to the customer’s renewal time; ‘utc’ aligns to the UTC calendar.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`usage_alerts`,type:`object[]`,children:[_jsx(_components.p,{children:`List of usage alert configurations per feature.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this alert applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether this usage alert is enabled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`,children:_jsx(_components.p,{children:`The threshold value that triggers the alert. For usage or remaining, this is an absolute count. For usage_percentage or remaining_percentage, this is a percentage (0-100).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold_type`,type:`'usage' | 'usage_percentage' | 'remaining' | 'remaining_percentage'`,children:_jsx(_components.p,{children:`Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`basis`,type:`'balance' | 'included' | 'recurring' | 'usage_limit'`,children:_jsx(_components.p,{children:`What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`filter`,type:`object`,children:[_jsx(_components.p,{children:`Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`properties.{key}`,type:`string`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`name`,type:`string`,children:_jsx(_components.p,{children:`Optional user-defined label to distinguish multiple alerts on the same feature.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`overage_allowed`,type:`object[]`,children:[_jsx(_components.p,{children:`List of overage allowed controls per feature. When enabled, usage can exceed balance.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The feature ID this overage allowed control applies to.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`enabled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether overage is allowed for this feature.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`upsert_licenses`,type:`object[]`,children:[_jsx(_components.p,{children:`License links to add or override for this customer, keyed by license_plan_id. Omitted fields inherit the plan catalog link (included defaults to 1 when the license is not in the catalog). A bare entry restores the license to pure catalog inheritance.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`license_plan_id`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`version_slug`,type:`string`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`integer`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`prepaid_only`,type:`boolean`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`customize`,type:`object | null`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object | null`,children:[_jsx(_components.p,{children:`Base price configuration for a plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Base price amount for the plan, in major currency units (e.g. dollars).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval (e.g. ‘month’, ‘year’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Base price amounts in additional currencies. The base ‘amount’ is in the org’s default currency.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add_items`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`threshold_billing`,type:`object | null`,children:[_jsx(_components.p,{children:`Bills this many feature units when outstanding overage reaches it.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`threshold`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the feature to configure.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Number of free units included. Balance resets to this each interval for consumable features.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`unlimited`,type:`boolean`,children:_jsx(_components.p,{children:`If true, customer has unlimited access to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`pooled`,type:`boolean`,children:_jsx(_components.p,{children:`Whether entity-level grants contribute to a shared customer balance.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`reset`,type:`object`,children:[_jsx(_components.p,{children:`Reset configuration for consumable features. Omit for non-consumable features like seats.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Interval at which balance resets (e.g. ‘month’, ‘year’). For consumable features only.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals between resets. Defaults to 1.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`price`,type:`object`,children:[_jsx(_components.p,{children:`Pricing for usage beyond included units. Omit for free features.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price per billing_units after included usage. Either ‘amount’ or ‘tiers’ is required.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:[_jsx(_components.p,{children:`Amounts in additional currencies for this flat price. The base ‘amount’ is in the org’s default currency. Only valid with ‘amount’, not ‘tiers’.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Price amount in this currency. Set explicitly per currency, not converted from the base amount.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`tiers`,type:`object[]`,children:[_jsx(_components.p,{children:`Tiered pricing. Either ‘amount’ or ‘tiers’ is required.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`additional_currencies`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter Stripe-supported currency code (e.g. ‘eur’, ‘gbp’).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount`,type:`number`,children:_jsx(_components.p,{children:`Per-unit amount for this tier in this currency.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`flat_amount`,type:`number`,children:_jsx(_components.p,{children:`Flat amount for this tier in this currency, if the tier uses one.`})})})]})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`'graduated' | 'volume'`,children:_jsx(_components.p,{children:`How tiers price usage. ‘graduated’ (default) charges each unit at the rate of the tier it falls in. ‘volume’ picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier’s rate plus its flat_amount.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Billing interval. For consumable features, should match reset.interval.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`number`,children:_jsx(_components.p,{children:`Number of intervals per billing cycle. Defaults to 1.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`‘prepaid’ for upfront payment (seats), ‘usage_based’ for pay-as-you-go.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_purchase`,type:`number | null`,children:_jsx(_components.p,{children:`Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`proration`,type:`object`,children:[_jsx(_components.p,{children:`Proration settings for prepaid features. Controls mid-cycle quantity change billing.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_increase`,type:`'bill_immediately' | 'prorate_immediately' | 'prorate_next_cycle' | 'bill_next_cycle'`,children:_jsx(_components.p,{children:`Billing behavior when quantity increases mid-cycle.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`on_decrease`,type:`'prorate' | 'prorate_immediately' | 'prorate_next_cycle' | 'none' | 'no_prorations'`,children:_jsx(_components.p,{children:`Credit behavior when quantity decreases mid-cycle.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`rollover`,type:`object`,children:[_jsx(_components.p,{children:`Rollover config for unused units. If set, unused included units carry over.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max`,type:`number`,children:_jsx(_components.p,{children:`Max rollover units. Omit for unlimited rollover.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`max_percentage`,type:`number`,children:_jsx(_components.p,{children:`Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_type`,type:`'month' | 'forever'`,children:_jsx(_components.p,{children:`When rolled over units expire.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expiry_duration_length`,type:`number`,children:_jsx(_components.p,{children:`Number of periods before expiry.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`expiry`,type:`object`,children:[_jsx(_components.p,{children:`Purchased units expire this long after each purchase. One-off prepaid consumable items only.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`duration`,type:`'day' | 'week' | 'month' | 'year'`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`length`,type:`number`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_override`,type:`object`,children:[_jsx(_components.p,{children:`Overrides fields of this item’s feature for customers on this plan (e.g. a credit system’s credit_schema).`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`credit_schema`,type:`object | object | object[]`,children:[_jsxs(_components.p,{children:[`For credit system features: merges into the feature’s credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `,_jsx(_components.code,{children:`excluded: true`}),` removes it, and unlisted features keep the credit system’s rate.`]}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metered_feature_id`,type:`string`,children:_jsx(_components.p,{children:`ID of the metered feature that draws from this credit system.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_units`,type:`number`,children:_jsx(_components.p,{children:`Number of metered-feature units priced together. Defaults to one when omitted.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`dimensions.{key}`,type:`object | object`,children:_jsx(_components.p,{children:`Named rates chosen by event properties. The most specific match sets the rate; with no match the item’s own rate applies.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`multipliers.{key}`,type:`object`,children:[_jsx(_components.p,{children:`Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`match.{key}`,type:`string`,children:_jsx(_components.p,{children:`Event properties this entry applies to. Every key must equal the tracked property, compared as strings.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`factor`,type:`number`,children:_jsx(_components.p,{children:`Multiplies the matched rate. All matching multipliers stack.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`add`,type:`number`,children:_jsx(_components.p,{children:`Added to the rate after every factor is applied, in credits per billing-unit group.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tier_behavior`,type:`any`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`tiers`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`to`,type:`number`,children:_jsx(_components.p,{children:`Inclusive upper usage boundary for this graduated tier. The final tier must be ‘inf’.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group within this tier.`})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`credit_cost`,type:`number`,children:_jsx(_components.p,{children:`Credits consumed per billing-unit group.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`excluded`,type:`true`,children:_jsx(_components.p,{children:`Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`markups`,type:`object`,children:[_jsx(_components.p,{children:`For AI credit system features: replaces the feature’s markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature’s.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`default_markup`,type:`number`,children:_jsx(_components.p,{children:`Default percentage markup for customers on this plan. Use -100 to make usage free.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`provider_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-provider markup percentages for customers on this plan.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`model_markups.{key}`,type:`object | null`,children:[_jsx(_components.p,{children:`Per-model markup overrides for customers on this plan.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`markup`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`input_cost`,type:`number`})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`output_cost`,type:`number`})})]})]})})]})]})})]})]})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`remove_items`,type:`object[]`,children:_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`Match items linked to this feature.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`billing_method`,type:`'prepaid' | 'usage_based'`,children:_jsx(_components.p,{children:`Match items with this billing method (prepaid or usage_based).`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval`,type:`'one_off' | 'week' | 'month' | 'quarter' | 'semi_annual' | 'year'`,children:_jsx(_components.p,{children:`Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`interval_count`,type:`integer`,children:_jsx(_components.p,{children:`Match items with this interval_count. Disambiguates between items that share an interval but differ in count.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`included`,type:`number`,children:_jsx(_components.p,{children:`Match items whose grant equals this included usage. Omitted is a wildcard.`})})})]})})})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`metadata`,type:`object`})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`remove_licenses`,type:`object[]`,children:[_jsx(_components.p,{children:`License links to drop, keyed by license_plan_id. Parallel to remove_items.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`license_plan_id`,type:`string`})})})]})})]})]})})]})]})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`feature_quantities`,type:`object[]`,children:[_jsx(_components.p,{children:`The feature quantity selections associated with this plan change.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`feature_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the adjustable feature included in this change.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`quantity`,type:`number`,children:_jsx(_components.p,{children:`The quantity that will apply for this feature in the change.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`effective_at`,type:`number | null`,children:_jsx(_components.p,{children:`When this change takes effect, in milliseconds since the Unix epoch, or null if it applies immediately.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`canceled_at`,type:`number | null`,children:_jsx(_components.p,{children:`When this plan was canceled, in milliseconds since the Unix epoch, or null if it is not canceled.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`expires_at`,type:`number | null`,children:_jsx(_components.p,{children:`When this plan expires, in milliseconds since the Unix epoch, or null if it does not expire.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`intent`,type:`'update_plan' | 'update_quantity' | 'cancel_immediately' | 'cancel_end_of_cycle' | 'uncancel' | 'none'`})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`tax`,type:`object`,children:[_jsx(_components.p,{children:`Tax preview for the immediate charge. Contact us to enable the tax flag on your organisation. Shows only with flag enabled, a Stripe customer exists and has a location.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`total`,type:`number`,children:_jsx(_components.p,{children:`Total tax amount in major currency units.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount_inclusive`,type:`number`,children:_jsx(_components.p,{children:`Tax included in line item subtotals.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`amount_exclusive`,type:`number`,children:_jsx(_components.p,{children:`Tax added on top of subtotals.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter currency code.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`status`,type:`'complete' | 'incomplete' | 'requires_location'`,children:_jsx(_components.p,{children:`Calculation status. ‘complete’ when tax was calculated, ‘incomplete’ when the calculation errored, ‘requires_location’ when the customer has no billing address to tax against.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsxs(DynamicResponseField,{name:`invoice_credits`,type:`object`,children:[_jsx(_components.p,{children:`Stripe customer invoice credits preview.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`balance`,type:`number`,children:_jsx(_components.p,{children:`Stripe customer credit balance available, expressed as a positive number in major currency units.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`applied`,type:`number`,children:_jsx(_components.p,{children:`How much of that balance this invoice consumes, capped at its total. The rest stays on the customer.`})})}),_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`currency`,type:`string`,children:_jsx(_components.p,{children:`Three-letter currency code.`})})})]})]})})]})}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":"Preview Update","openapi":"openapi POST /v1/billing.preview_update","description":"Previews the billing changes that would occur when updating a subscription, without actually making any changes.\n\nUse this endpoint to show customers prorated charges or refunds before confirming subscription modifications.","href":"/api-reference/billing/previewUpdate"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[158,4333,")=>null;const DynamicResponseField=()=>null;const DynamicParamField=()=>null;fun"],[4401,4500,"pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Expandable,Heading,ResponseExample,_MdxComponentBoundary}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true)"],[4609,4624,"ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!_MdxComponentBo"],[300063,300553,",`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`200`,numberOfLines:`15`,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:`15`,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:` \"customerId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"charles\"`}),_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:` \"lineItems\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"display_name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Pro seed\"`}),_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:` \"description\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Pro seed (from 18 Feb 2026 to 18 Mar 2026)\"`}),_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:` \"subtotal\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`20`}),_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:`20`}),_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:` \"discounts\"`}),_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(_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:` \"subtotal\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`20`}),_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:`20`}),_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\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{DynamicResponseExample,DynamicResponseField,DynamicParamField,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}"]]},"mdxExtracts":{"tableOfContents":[{"title":"Body Parameters","slug":"body-parameters","depth":3,"children":[]},{"title":"Response","slug":"response","depth":3,"children":[]}],"codeExamples":{"response":{"type":"ResponseExample","children":[{"filename":"200","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"15\">\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\"> \"customerId\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"charles\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"lineItems\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"display_name\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Pro seed\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"description\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Pro seed (from 18 Feb 2026 to 18 Mar 2026)\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"subtotal\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">20\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\">20\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"discounts\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: []\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> ],\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"subtotal\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">20\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\">20\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>\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":"previewUpdate","description":"Previews the billing changes that would occur when updating a subscription, without actually making any changes.\n\nUse this endpoint to show customers prorated charges or refunds before confirming subscription modifications.","tags":["billing"],"requestBody":"37d566d9-8b05-4e7f-8d78-588e0c8680b7","responses":{"200":"77f33b25-7dcb-48b5-9489-ac7634fc47d1"},"x-speakeasy-name-override":"previewUpdate","parameters":["0773c026-28ac-4861-b5b9-6dec7e2ed2b6"],"x-codeSamples":[{"lang":"typescript","label":"Typescript (SDK)","source":"import { Autumn } from 'autumn-js'\n\nconst autumn = new Autumn()\n\nconst result = await autumn.billing.previewUpdate({\n customerId: \"cus_123\",\n planId: \"pro_plan\",\n featureQuantities: [\n {\n featureId: \"seats\",\n quantity: 15,\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.preview_update(\n customer_id=\"cus_123\",\n plan_id=\"pro_plan\",\n feature_quantities=[\n {\n \"feature_id\": \"seats\",\n \"quantity\": 15,\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.preview_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.previewUpdate({\n customerId: \"cus_123\",\n planId: \"pro_plan\",\n featureQuantities: [\n {\n featureId: \"seats\",\n quantity: 15,\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.preview_update(\n customer_id=\"cus_123\",\n plan_id=\"pro_plan\",\n feature_quantities=[\n {\n \"feature_id\": \"seats\",\n \"quantity\": 15,\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":"15","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":" \"customerId\""}},{"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":"\"charles\""}},{"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":" \"lineItems\""}},{"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":null,"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":" \"display_name\""}},{"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":"\"Pro seed\""}},{"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":" \"description\""}},{"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":"\"Pro seed (from 18 Feb 2026 to 18 Mar 2026)\""}},{"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":" \"subtotal\""}},{"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":"20"}},{"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":" \"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":"20"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"16","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"discounts\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": []"}}]}},"\n",{"type":"span","key":"18","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }"}}}},"\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",{"type":"span","key":"22","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"subtotal\""}},{"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":"20"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"24","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"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":"20"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"26","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\""}}]}},"\n",{"type":"span","key":"28","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"}"}}}},"\n"]}}}},"filename":"200"}],"responseExampleType":"mdx"},"dependencies":{"parameters":{"0773c026-28ac-4861-b5b9-6dec7e2ed2b6":{"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":"PreviewUpdateParams","examples":[{"customer_id":"cus_123","plan_id":"pro_plan","feature_quantities":[{"feature_id":"seats","quantity":15}]}],"uniqueKey":"","typeLabel":"PreviewUpdateParams · object"},"example":{"customer_id":"cus_123","plan_id":"pro_plan","feature_quantities":[{"feature_id":"seats","quantity":15}]},"examples":{"Example":{"title":"Example","value":{"customer_id":"cus_123","plan_id":"pro_plan","feature_quantities":[{"feature_id":"seats","quantity":15}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"77f33b25-7dcb-48b5-9489-ac7634fc47d1":{"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"},"line_items":{"type":"array","items":{"type":"object","properties":{"display_name":{"type":"string","description":"The name of the line item to display to the customer if you're building a UI. It will either be the plan name or the feature name.","isRequired":true,"uniqueKey":"line_items.items.[INDEX].display_name","typeLabel":"string"},"description":{"type":"string","description":"A detailed description of the line item.","isRequired":true,"uniqueKey":"line_items.items.[INDEX].description","typeLabel":"string"},"subtotal":{"type":"number","description":"The amount before discounts and tax for this line item.","isRequired":true,"uniqueKey":"line_items.items.[INDEX].subtotal","typeLabel":"number"},"total":{"type":"number","description":"The final amount after discounts and tax for this line item.","isRequired":true,"uniqueKey":"line_items.items.[INDEX].total","typeLabel":"number"},"plan_id":{"type":"string","description":"The ID of the plan that this line item belongs to.","isRequired":true,"uniqueKey":"line_items.items.[INDEX].plan_id","typeLabel":"string"},"feature_id":{"oneOf":[{"type":"string","description":"The ID of the feature that this line item belongs to.","isRequired":true,"uniqueKey":"line_items.items.[INDEX].feature_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The ID of the feature that this line item belongs to.","isRequired":true,"uniqueKey":"line_items.items.[INDEX].feature_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"line_items.items.[INDEX].feature_id","typeLabel":"string | null"},"quantity":{"type":"number","description":"The quantity of the line item.","isRequired":true,"uniqueKey":"line_items.items.[INDEX].quantity","typeLabel":"number"},"discounts":{"type":"array","items":{"type":"object","properties":{"amount_off":{"type":"number","isRequired":true,"uniqueKey":"line_items.items.[INDEX].discounts.items.[INDEX].amount_off","typeLabel":"number"},"percent_off":{"type":"number","uniqueKey":"line_items.items.[INDEX].discounts.items.[INDEX].percent_off","typeLabel":"number"},"reward_id":{"type":"string","uniqueKey":"line_items.items.[INDEX].discounts.items.[INDEX].reward_id","typeLabel":"string"},"reward_name":{"type":"string","uniqueKey":"line_items.items.[INDEX].discounts.items.[INDEX].reward_name","typeLabel":"string"}},"required":["amount_off"],"uniqueKey":"line_items.items.[INDEX].discounts.items.[INDEX]","typeLabel":"object"},"default":[],"description":"List of discounts applied to this line item.","uniqueKey":"line_items.items.[INDEX].discounts","typeLabel":"object[]"},"period":{"type":"object","properties":{"start":{"type":"number","description":"The start of the period in milliseconds since the Unix epoch.","isRequired":true,"uniqueKey":"line_items.items.[INDEX].period.start","typeLabel":"number"},"end":{"type":"number","description":"The end of the period in milliseconds since the Unix epoch.","isRequired":true,"uniqueKey":"line_items.items.[INDEX].period.end","typeLabel":"number"}},"required":["start","end"],"description":"The period of time that this line item is being charged for.","uniqueKey":"line_items.items.[INDEX].period","typeLabel":"object"}},"required":["display_name","description","subtotal","total","plan_id","feature_id","quantity"],"uniqueKey":"line_items.items.[INDEX]","typeLabel":"object"},"description":"List of line items for the current billing period.","isRequired":true,"uniqueKey":"line_items","typeLabel":"object[]"},"subtotal":{"type":"number","description":"The total amount before discounts and tax for the current billing period.","isRequired":true,"uniqueKey":"subtotal","typeLabel":"number"},"total":{"type":"number","description":"The final amount after discounts and tax for the current billing period.","isRequired":true,"uniqueKey":"total","typeLabel":"number"},"currency":{"type":"string","description":"The three-letter ISO currency code. All amounts are in the currency's major unit (e.g., dollars for USD).","isRequired":true,"uniqueKey":"currency","typeLabel":"string"},"immediate_invoice":{"type":"object","properties":{"type":{"enum":["none","zero_amount","charge","credit"],"type":"string","description":"What the invoice created now bills. 'none' when the change creates no invoice now. 'zero_amount' when an invoice is created but nothing was billed, such as a trial or a usage-only plan. 'charge' when something was billed, even if discounts or credits bring the amount due to zero. 'credit' when the invoice total is negative and becomes customer credit.","isRequired":true,"uniqueKey":"immediate_invoice.type","typeLabel":"enum\u003cstring>"},"issue_method":{"oneOf":[{"type":"string","description":"How the invoice is issued, matching invoice_mode.issue_method: 'draft', 'finalize' or 'send'. 'charge_automatically' when the card on file is charged, or the customer pays at checkout. Null when type is 'none'.","enum":["draft","finalize","send","charge_automatically"],"isRequired":true,"uniqueKey":"immediate_invoice.issue_method.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"How the invoice is issued, matching invoice_mode.issue_method: 'draft', 'finalize' or 'send'. 'charge_automatically' when the card on file is charged, or the customer pays at checkout. Null when type is 'none'.","isRequired":true,"uniqueKey":"immediate_invoice.issue_method.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"immediate_invoice.issue_method","typeLabel":"enum\u003cstring> | null"}},"required":["type","issue_method"],"title":"PreviewImmediateInvoice","description":"The invoice this change creates right away, if any. Renewals are described by next_cycle.","isRequired":true,"uniqueKey":"immediate_invoice","typeLabel":"PreviewImmediateInvoice · object"},"incoming":{"type":"array","items":{"type":"object","properties":{"plan_id":{"type":"string","description":"The ID of the plan affected by this preview change.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan_id","typeLabel":"string"},"feature_quantities":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the adjustable feature included in this change.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].feature_quantities.items.[INDEX].feature_id","typeLabel":"string"},"quantity":{"type":"number","description":"The quantity that will apply for this feature in the change.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].feature_quantities.items.[INDEX].quantity","typeLabel":"number"}},"required":["feature_id","quantity"],"uniqueKey":"incoming.items.[INDEX].feature_quantities.items.[INDEX]","typeLabel":"object"},"description":"The feature quantity selections associated with this plan change.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].feature_quantities","typeLabel":"object[]"},"effective_at":{"oneOf":[{"type":"number","description":"When this change takes effect, in milliseconds since the Unix epoch, or null if it applies immediately.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].effective_at.oneOf.0","typeLabel":"number"},{"type":"null","description":"When this change takes effect, in milliseconds since the Unix epoch, or null if it applies immediately.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].effective_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].effective_at","typeLabel":"number | null"},"canceled_at":{"oneOf":[{"type":"number","description":"When this plan was canceled, in milliseconds since the Unix epoch, or null if it is not canceled.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].canceled_at.oneOf.0","typeLabel":"number"},{"type":"null","description":"When this plan was canceled, in milliseconds since the Unix epoch, or null if it is not canceled.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].canceled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].canceled_at","typeLabel":"number | null"},"expires_at":{"oneOf":[{"type":"number","description":"When this plan expires, in milliseconds since the Unix epoch, or null if it does not expire.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].expires_at.oneOf.0","typeLabel":"number"},{"type":"null","description":"When this plan expires, in milliseconds since the Unix epoch, or null if it does not expire.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].expires_at","typeLabel":"number | null"},"plan":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the plan.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.id","typeLabel":"string"},"name":{"type":"string","description":"Display name of the plan.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.name","typeLabel":"string"},"description":{"oneOf":[{"type":"string","description":"Optional description of the plan.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional description of the plan.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.description","typeLabel":"string | null"},"group":{"oneOf":[{"type":"string","description":"Group identifier for organizing related plans. Plans in the same group are mutually exclusive.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.group.oneOf.0","typeLabel":"string"},{"type":"null","description":"Group identifier for organizing related plans. Plans in the same group are mutually exclusive.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.group.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.group","typeLabel":"string | null"},"version":{"type":"number","description":"Version number of the plan. Incremented when plan configuration changes.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.version","typeLabel":"number"},"add_on":{"type":"boolean","description":"Whether this is an add-on plan that can be attached alongside a main plan.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.add_on","typeLabel":"boolean"},"auto_enable":{"type":"boolean","description":"If true, this plan is automatically attached when a customer is created. Used for free plans.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.auto_enable","typeLabel":"boolean"},"price":{"oneOf":[{"type":"object","description":"Base recurring price for the plan. Null for free plans or usage-only plans.","required":["amount","interval"],"properties":{"amount":{"type":"number","description":"Base price amount for the plan, in major currency units (e.g. dollars).","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.amount","typeLabel":"number"},"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval (e.g. 'month', 'year').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Base price amounts in additional currencies. The base 'amount' is in the org's default currency.","uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.additional_currencies","typeLabel":"object[]"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.interval_count","typeLabel":"number"},"display":{"type":"object","properties":{"primary_text":{"type":"string","description":"Main display text (e.g. '$10' or '100 messages').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.display.primary_text","typeLabel":"string"},"secondary_text":{"type":"string","description":"Secondary display text (e.g. 'per month' or 'then $0.5 per 100').","uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.display.secondary_text","typeLabel":"string"}},"required":["primary_text"],"description":"Display text for showing this price in pricing pages.","uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.display","typeLabel":"object"},"processors":{"type":"object","properties":{"stripe":{"oneOf":[{"type":"object","required":["price_id"],"properties":{"price_id":{"type":"string","description":"Stripe price ID. For prepaid with included > 0 this is the V2 price.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.processors.stripe.oneOf.0.price_id","typeLabel":"string"}},"uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.processors.stripe.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.processors.stripe.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.processors.stripe","typeLabel":"object | null"}},"x-atmn-mapping":true,"description":"Payment processors this base price is connected to. Omitted when unset.","uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0.processors","typeLabel":"object"}},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.0","typeLabel":"object"},{"type":"null","description":"Base recurring price for the plan. Null for free plans or usage-only plans.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.price.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.price","typeLabel":"object | null"},"items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature this item configures.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_id","typeLabel":"string"},"included":{"type":"number","description":"Number of free units included. For consumable features, balance resets to this number each interval.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].included","typeLabel":"number"},"unlimited":{"type":"boolean","description":"Whether the customer has unlimited access to this feature.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].unlimited","typeLabel":"boolean"},"reset":{"oneOf":[{"type":"object","description":"Reset configuration for consumable features. Null for non-consumable features like seats where usage persists across billing cycles.","required":["interval"],"properties":{"interval":{"enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"type":"string","description":"The interval at which the feature balance resets (e.g. 'month', 'year'). For consumable features, usage resets to 0 and included units are restored.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals between resets. Defaults to 1.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.0.interval_count","typeLabel":"number"}},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.0","typeLabel":"object"},{"type":"null","description":"Reset configuration for consumable features. Null for non-consumable features like seats where usage persists across billing cycles.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].reset","typeLabel":"object | null"},"price":{"oneOf":[{"type":"object","description":"Pricing configuration for usage beyond included units. Null if feature is entirely free.","required":["interval","billing_units","billing_method","max_purchase"],"properties":{"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval for this price. For consumable features, should match reset.interval.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"billing_units":{"type":"number","description":"Number of units per price increment. Usage is rounded UP to the nearest billing_units when billed (e.g. billing_units=100 means 101 usage rounds to 200).","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.billing_units","typeLabel":"number"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"'prepaid' for features like seats where customers pay upfront, 'usage_based' for pay-as-you-go after included usage.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.billing_method","typeLabel":"enum\u003cstring>"},"max_purchase":{"oneOf":[{"type":"number","description":"Maximum units a customer can purchase beyond included. E.g. if included=100 and max_purchase=300, customer can use up to 400 total before usage is capped. Null for no limit.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.max_purchase.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum units a customer can purchase beyond included. E.g. if included=100 and max_purchase=300, customer can use up to 400 total before usage is capped. Null for no limit.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.max_purchase.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.max_purchase","typeLabel":"number | null"},"amount":{"type":"number","description":"Price per billing_units after included usage is consumed. Mutually exclusive with tiers.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers' (tiered prices carry per-currency amounts on each tier).","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies","typeLabel":"object[]"},"tiers":{"type":"array","items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"const":"inf","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].flat_amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Per-unit amount for this tier in this currency.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","description":"Flat amount for this tier in this currency, if the tier uses one.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX].flat_amount","typeLabel":"number"}},"required":["currency"],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to","amount"],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"description":"Tiered pricing configuration. Each tier's 'to' INCLUDES the included amount. Either 'tiers' or 'amount' is required.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers","typeLabel":"object[]"},"tier_behavior":{"enum":["graduated","volume"],"type":"string","description":"How tiers price usage. 'graduated' (default) charges each unit at the rate of the tier it falls in. 'volume' picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier's rate plus its flat_amount.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tier_behavior","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.interval_count","typeLabel":"number"},"processors":{"type":"object","properties":{"stripe":{"oneOf":[{"type":"object","required":["price_id"],"properties":{"price_id":{"type":"string","description":"Stripe price ID. For prepaid with included > 0 this is the V2 price.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe.oneOf.0.price_id","typeLabel":"string"}},"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe","typeLabel":"object | null"}},"x-atmn-mapping":true,"description":"Payment processors this item price is connected to. Omitted when unset.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors","typeLabel":"object"}},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0","typeLabel":"object"},{"type":"null","description":"Pricing configuration for usage beyond included units. Null if feature is entirely free.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].price","typeLabel":"object | null"},"threshold_billing":{"oneOf":[{"type":"object","description":"Bills this many feature units when outstanding overage reaches it.","required":["threshold"],"properties":{"threshold":{"type":"number","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Bills this many feature units when outstanding overage reaches it.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing","typeLabel":"object | null"},"feature":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the feature, used to refer to it in other API calls like /track or /check.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.id","typeLabel":"string"},"type":{"enum":["static","boolean","single_use","continuous_use","credit_system","ai_credit_system"],"type":"string","description":"The type of the feature","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.type","typeLabel":"enum\u003cstring>"},"name":{"oneOf":[{"type":"string","description":"The name of the feature.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name of the feature.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.name","typeLabel":"string | null"},"display":{"oneOf":[{"type":"object","description":"Singular and plural display names for the feature.","required":["singular","plural"],"properties":{"singular":{"type":"string","description":"The singular display name for the feature.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.0.singular","typeLabel":"string"},"plural":{"type":"string","description":"The plural display name for the feature.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.0.plural","typeLabel":"string"}},"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.0","typeLabel":"object"},{"type":"null","description":"Singular and plural display names for the feature.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.display","typeLabel":"object | null"},"credit_schema":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"metered_feature_id":{"type":"string","description":"The ID of the metered feature (should be a single_use feature).","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0.items.[INDEX].metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","description":"The credit cost of the metered feature.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["metered_feature_id","credit_cost"],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Credit cost schema for credit system features.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Credit cost schema for credit system features.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema","typeLabel":"object[] | null"},"archived":{"oneOf":[{"type":"boolean","description":"Whether or not the feature is archived.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.archived.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether or not the feature is archived.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.archived.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature.archived","typeLabel":"boolean | null"}},"required":["id","type"],"description":"The full feature object if expanded.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature","typeLabel":"object"},"pooled":{"type":"boolean","default":false,"description":"Whether entity-level grants contribute to a shared customer balance.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].pooled","typeLabel":"boolean"},"display":{"type":"object","properties":{"primary_text":{"type":"string","description":"Main display text (e.g. '$10' or '100 messages').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].display.primary_text","typeLabel":"string"},"secondary_text":{"type":"string","description":"Secondary display text (e.g. 'per month' or 'then $0.5 per 100').","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].display.secondary_text","typeLabel":"string"}},"required":["primary_text"],"description":"Display text for showing this item in pricing pages.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].display","typeLabel":"object"},"rollover":{"type":"object","properties":{"max":{"oneOf":[{"type":"number","description":"Maximum rollover units. Null for unlimited rollover.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].rollover.max.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum rollover units. Null for unlimited rollover.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].rollover.max.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].rollover.max","typeLabel":"number | null"},"expiry_duration_type":{"enum":["month","forever"],"type":"string","description":"When rolled over units expire.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].rollover.expiry_duration_type","typeLabel":"enum\u003cstring>"},"max_percentage":{"oneOf":[{"type":"number","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].rollover.max_percentage.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].rollover.max_percentage.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].rollover.max_percentage","typeLabel":"number | null"},"expiry_duration_length":{"type":"number","description":"Number of periods before expiry.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].rollover.expiry_duration_length","typeLabel":"number"}},"required":["max","expiry_duration_type"],"description":"Rollover configuration for unused units. If set, unused included units roll over to the next period.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].rollover","typeLabel":"object"},"expiry":{"oneOf":[{"type":"object","description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","required":["duration","length"],"properties":{"duration":{"enum":["day","week","month","year"],"type":"string","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.0.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.0.length","typeLabel":"number"}},"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.0","typeLabel":"object"},{"type":"null","description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].expiry","typeLabel":"object | null"},"feature_override":{"type":"object","properties":{"credit_schema":{"type":"array","items":{"oneOf":[{"type":"object","required":["metered_feature_id","tier_behavior","tiers"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.metered_feature_id","typeLabel":"string"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers","typeLabel":"object[]"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["metered_feature_id","credit_cost"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.credit_cost","typeLabel":"number"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["metered_feature_id","excluded"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature to remove from the credit system.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.metered_feature_id","typeLabel":"string"},"excluded":{"const":true,"description":"Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.excluded","typeLabel":"any"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX]","typeLabel":"object"},"description":"For credit system features: merges into the feature's credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `excluded: true` removes it, and unlisted features keep the credit system's rate.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema","typeLabel":"object[]"},"markups":{"type":"object","properties":{"default_markup":{"type":"number","minimum":-100,"description":"Default percentage markup for customers on this plan. Use -100 to make usage free.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.default_markup","typeLabel":"number"},"provider_markups":{"oneOf":[{"type":"object","description":"Per-provider markup percentages for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"}},"required":["markup"],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-provider markup percentages for customers on this plan.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups","typeLabel":"object | null"},"model_markups":{"oneOf":[{"type":"object","description":"Per-model markup overrides for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"},"input_cost":{"type":"number","minimum":0,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.input_cost","typeLabel":"number"},"output_cost":{"type":"number","minimum":0,"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.output_cost","typeLabel":"number"}},"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-model markup overrides for customers on this plan.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups","typeLabel":"object | null"}},"additionalProperties":false,"description":"For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups","typeLabel":"object"}},"additionalProperties":false,"description":"Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit_schema).","uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX].feature_override","typeLabel":"object"}},"required":["feature_id","included","unlimited","reset","price"],"uniqueKey":"incoming.items.[INDEX].plan.\\items.items.[INDEX]","typeLabel":"object"},"description":"Feature configurations included in this plan. Each item defines included units, pricing, and reset behavior for a feature.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.\\items","typeLabel":"object[]"},"created_at":{"type":"number","description":"Unix timestamp (ms) when the plan was created.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.created_at","typeLabel":"number"},"env":{"enum":["sandbox","live"],"type":"string","description":"Environment this plan belongs to ('sandbox' or 'live').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.env","typeLabel":"enum\u003cstring>"},"archived":{"type":"boolean","description":"Whether the plan is archived. Archived plans cannot be attached to new customers.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.archived","typeLabel":"boolean"},"config":{"type":"object","properties":{"ignore_past_due":{"type":"boolean","default":false,"description":"If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.","uniqueKey":"incoming.items.[INDEX].plan.config.ignore_past_due","typeLabel":"boolean"},"anchor_to_month_start":{"type":"boolean","description":"Anchor billing and reset cycles to the 1st of the month (UTC).","default":false,"uniqueKey":"incoming.items.[INDEX].plan.config.anchor_to_month_start","typeLabel":"boolean"}},"description":"Miscellaneous plan-level configuration flags.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.config","typeLabel":"object"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"oneOf":[{}],"uniqueKey":"incoming.items.[INDEX].plan.metadata.additionalProperties","typeLabel":"any"},"description":"Arbitrary key-value metadata defined by you for your own use. Shared across all versions of the plan.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.metadata","typeLabel":"object"},"base_variant_id":{"oneOf":[{"type":"string","description":"Deprecated. Use variant_details.base_plan_id instead. If this is a variant, the ID of the base plan it was created from.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.base_variant_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Deprecated. Use variant_details.base_plan_id instead. If this is a variant, the ID of the base plan it was created from.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.base_variant_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.base_variant_id","typeLabel":"string | null"},"version_slug":{"oneOf":[{"type":"string","description":"User-facing version identity. Defaults to v{n} when the version is minted.","uniqueKey":"incoming.items.[INDEX].plan.version_slug.oneOf.0","typeLabel":"string"},{"type":"null","description":"User-facing version identity. Defaults to v{n} when the version is minted.","uniqueKey":"incoming.items.[INDEX].plan.version_slug.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.version_slug","typeLabel":"string | null"},"active":{"type":"boolean","description":"Whether this is the active version of the plan. At most one version is active.","uniqueKey":"incoming.items.[INDEX].plan.active","typeLabel":"boolean"},"processors":{"type":"object","properties":{"stripe":{"oneOf":[{"type":"object","required":["product_id"],"properties":{"product_id":{"type":"string","description":"Stripe product ID this plan is billed under.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.processors.stripe.oneOf.0.product_id","typeLabel":"string"},"additional_product_ids":{"type":"array","items":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.processors.stripe.oneOf.0.additional_product_ids.items.[INDEX]","typeLabel":"string"},"description":"Extra Stripe product IDs aliased to this plan.","uniqueKey":"incoming.items.[INDEX].plan.processors.stripe.oneOf.0.additional_product_ids","typeLabel":"string[]"}},"uniqueKey":"incoming.items.[INDEX].plan.processors.stripe.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"incoming.items.[INDEX].plan.processors.stripe.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.processors.stripe","typeLabel":"object | null"},"revenuecat":{"oneOf":[{"type":"object","required":["products"],"properties":{"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"RevenueCat product ID that grants this plan when purchased.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].product_id","typeLabel":"string"},"feature_quantities":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities.items.[INDEX].feature_id","typeLabel":"string"},"quantity":{"type":"number","minimum":0,"uniqueKey":"incoming.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities.items.[INDEX].quantity","typeLabel":"number"}},"required":["feature_id"],"uniqueKey":"incoming.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities.items.[INDEX]","typeLabel":"object"},"description":"Prepaid quantities granted when this specific RevenueCat product is purchased, in feature units.","uniqueKey":"incoming.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities","typeLabel":"object[]"}},"required":["product_id"],"uniqueKey":"incoming.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX]","typeLabel":"object"},"description":"Every RevenueCat product that maps to this plan. Replaces the current set.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.processors.revenuecat.oneOf.0.products","typeLabel":"object[]"}},"uniqueKey":"incoming.items.[INDEX].plan.processors.revenuecat.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"incoming.items.[INDEX].plan.processors.revenuecat.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.processors.revenuecat","typeLabel":"object | null"}},"x-atmn-mapping":true,"description":"Payment processors this plan is connected to. Omitted when unset.","uniqueKey":"incoming.items.[INDEX].plan.processors","typeLabel":"object"},"free_trial":{"type":"object","properties":{"duration_length":{"type":"number","description":"Number of duration_type periods the trial lasts.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.free_trial.duration_length","typeLabel":"number"},"duration_type":{"enum":["day","month","year"],"type":"string","description":"Unit of time for the trial duration ('day', 'month', 'year').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.free_trial.duration_type","typeLabel":"enum\u003cstring>"},"card_required":{"type":"boolean","description":"Whether a payment method is required to start the trial. If true, customer will be charged after trial ends.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.free_trial.card_required","typeLabel":"boolean"},"on_end":{"oneOf":[{"type":"string","description":"Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.","enum":["bill","revert"],"uniqueKey":"incoming.items.[INDEX].plan.free_trial.on_end.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.","uniqueKey":"incoming.items.[INDEX].plan.free_trial.on_end.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.free_trial.on_end","typeLabel":"enum\u003cstring> | null"}},"required":["duration_length","duration_type","card_required"],"description":"Free trial configuration. If set, new customers can try this plan before being charged.","uniqueKey":"incoming.items.[INDEX].plan.free_trial","typeLabel":"object"},"billing_controls":{"type":"object","properties":{"auto_topups":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature (credit balance) to auto top-up.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].feature_id","typeLabel":"string"},"threshold":{"type":"number","description":"When the balance drops below this threshold, an auto top-up will be purchased.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].threshold","typeLabel":"number"},"quantity":{"type":"number","minimum":1,"description":"Amount of credits to add per auto top-up.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].quantity","typeLabel":"number"},"enabled":{"type":"boolean","default":false,"description":"Whether auto top-up is enabled.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].enabled","typeLabel":"boolean"},"purchase_limit":{"type":"object","properties":{"interval":{"enum":["hour","day","week","month"],"type":"string","description":"The time interval for the purchase limit window.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.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":"incoming.items.[INDEX].plan.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":"incoming.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].purchase_limit.interval_count","typeLabel":"number"}},"required":["interval","limit"],"description":"Optional rate limit to cap how often auto top-ups occur.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].purchase_limit","typeLabel":"object"},"invoice_mode":{"type":"boolean","description":"When true, auto top-up creates a send_invoice invoice instead of auto-charging.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].invoice_mode","typeLabel":"boolean"}},"required":["feature_id","threshold","quantity"],"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX]","typeLabel":"object"},"description":"List of auto top-up configurations per feature.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.auto_topups","typeLabel":"object[]"},"spend_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Optional feature ID this spend limit applies to.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether the overage spend limit is enabled.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].enabled","typeLabel":"boolean"},"limit_type":{"enum":["absolute","usage_percentage"],"type":"string","description":"How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].limit_type","typeLabel":"enum\u003cstring>"},"overage_limit":{"type":"number","minimum":0,"description":"Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].overage_limit","typeLabel":"number"},"skip_overage_billing":{"type":"boolean","description":"When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].skip_overage_billing","typeLabel":"boolean"}},"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX]","typeLabel":"object"},"description":"List of overage spend limits per feature (caps overage spend).","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.spend_limits","typeLabel":"object[]"},"usage_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature this usage limit applies to.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].feature_id","typeLabel":"string"},"limit":{"type":"number","minimum":0,"description":"Maximum units allowed per interval.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].limit","typeLabel":"number"},"interval":{"enum":["day","week","month","year"],"type":"string","description":"Interval for the cap, aligned to the customer's billing cycle.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage limit is enabled.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].enabled","typeLabel":"boolean"},"anchor":{"enum":["billing_cycle","utc"],"type":"string","description":"Window alignment. 'billing_cycle' phases the interval to the customer's renewal time; 'utc' aligns to the UTC calendar.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].anchor","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].filter","typeLabel":"object"}},"required":["feature_id","limit","interval"],"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX]","typeLabel":"object"},"description":"List of hard usage caps per feature (max units per interval).","uniqueKey":"incoming.items.[INDEX].plan.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":"incoming.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].threshold","typeLabel":"number"},"threshold_type":{"enum":["usage","usage_percentage","remaining","remaining_percentage"],"type":"string","description":"Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].threshold_type","typeLabel":"enum\u003cstring>"},"feature_id":{"type":"string","description":"The feature ID this alert applies to.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage alert is enabled.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].enabled","typeLabel":"boolean"},"basis":{"enum":["balance","included","recurring","usage_limit"],"type":"string","default":"balance","description":"What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].basis","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].filter","typeLabel":"object"},"name":{"type":"string","description":"Optional user-defined label to distinguish multiple alerts on the same feature.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].name","typeLabel":"string"}},"required":["threshold","threshold_type"],"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX]","typeLabel":"object"},"description":"List of usage alert configurations per feature.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.usage_alerts","typeLabel":"object[]"},"overage_allowed":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature ID this overage allowed control applies to.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.overage_allowed.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether overage is allowed for this feature.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.overage_allowed.items.[INDEX].enabled","typeLabel":"boolean"}},"required":["feature_id"],"uniqueKey":"incoming.items.[INDEX].plan.billing_controls.overage_allowed.items.[INDEX]","typeLabel":"object"},"description":"List of overage allowed controls per feature. When enabled, usage can exceed balance.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls.overage_allowed","typeLabel":"object[]"}},"description":"Plan-level billing controls used as customer defaults.","uniqueKey":"incoming.items.[INDEX].plan.billing_controls","typeLabel":"object"},"customer_eligibility":{"type":"object","properties":{"attach_action":{"enum":["activate","upgrade","downgrade","none","purchase"],"type":"string","description":"The action that would occur if this plan were attached to the customer.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.customer_eligibility.attach_action","typeLabel":"enum\u003cstring>"},"trial_available":{"type":"boolean","description":"Whether the trial on this plan is available to this customer. For example, if the customer used the trial in the past, this will be false.","uniqueKey":"incoming.items.[INDEX].plan.customer_eligibility.trial_available","typeLabel":"boolean"},"status":{"enum":["active","scheduled"],"type":"string","description":"The customer's current status with this plan. 'active' if attached, 'scheduled' if pending activation.","uniqueKey":"incoming.items.[INDEX].plan.customer_eligibility.status","typeLabel":"enum\u003cstring>"},"canceling":{"type":"boolean","description":"Whether the customer's active instance of this plan is set to cancel.","uniqueKey":"incoming.items.[INDEX].plan.customer_eligibility.canceling","typeLabel":"boolean"},"trialing":{"type":"boolean","description":"Whether the customer is currently on a free trial of this plan.","uniqueKey":"incoming.items.[INDEX].plan.customer_eligibility.trialing","typeLabel":"boolean"}},"required":["attach_action"],"uniqueKey":"incoming.items.[INDEX].plan.customer_eligibility","typeLabel":"object"},"variant_details":{"type":"object","properties":{"base_plan_id":{"type":"string","description":"The ID of the base plan this variant was derived from.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.base_plan_id","typeLabel":"string"},"customize":{"type":"object","properties":{"price":{"oneOf":[{"type":"object","title":"BasePrice","description":"Override the base price of the plan. Pass null to remove the base price.","required":["amount","interval"],"properties":{"amount":{"type":"number","description":"Base price amount for the plan, in major currency units (e.g. dollars).","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.price.oneOf.0.amount","typeLabel":"number"},"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval (e.g. 'month', 'year').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.price.oneOf.0.interval_count","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Base price amounts in additional currencies. The base 'amount' is in the org's default currency.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies","typeLabel":"object[]"}},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.price.oneOf.0","typeLabel":"BasePrice · object"},{"type":"null","description":"Override the base price of the plan. Pass null to remove the base price.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.price","typeLabel":"BasePrice · object | null"},"add_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature to configure.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_id","typeLabel":"string"},"threshold_billing":{"oneOf":[{"type":"object","description":"Bills this many feature units when outstanding overage reaches it.","required":["threshold"],"properties":{"threshold":{"type":"number","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Bills this many feature units when outstanding overage reaches it.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing","typeLabel":"object | null"},"included":{"type":"number","maximum":10000000000000,"description":"Number of free units included. Balance resets to this each interval for consumable features.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].included","typeLabel":"number"},"unlimited":{"type":"boolean","description":"If true, customer has unlimited access to this feature.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].unlimited","typeLabel":"boolean"},"pooled":{"type":"boolean","default":false,"description":"Whether entity-level grants contribute to a shared customer balance.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].pooled","typeLabel":"boolean"},"reset":{"type":"object","properties":{"interval":{"enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"type":"string","description":"Interval at which balance resets (e.g. 'month', 'year'). For consumable features only.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].reset.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals between resets. Defaults to 1.","default":1,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].reset.interval_count","typeLabel":"number"}},"required":["interval"],"description":"Reset configuration for consumable features. Omit for non-consumable features like seats.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].reset","typeLabel":"object"},"price":{"type":"object","properties":{"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval. For consumable features, should match reset.interval.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.interval","typeLabel":"enum\u003cstring>"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"'prepaid' for upfront payment (seats), 'usage_based' for pay-as-you-go.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.billing_method","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"Price per billing_units after included usage. Either 'amount' or 'tiers' is required.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers'.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies","typeLabel":"object[]"},"tiers":{"type":"array","items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"const":"inf","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].flat_amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Per-unit amount for this tier in this currency.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","description":"Flat amount for this tier in this currency, if the tier uses one.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].flat_amount","typeLabel":"number"}},"required":["currency"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to","amount"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX]","typeLabel":"object"},"description":"Tiered pricing. Either 'amount' or 'tiers' is required.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers","typeLabel":"object[]"},"tier_behavior":{"enum":["graduated","volume"],"type":"string","description":"How tiers price usage. 'graduated' (default) charges each unit at the rate of the tier it falls in. 'volume' picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier's rate plus its flat_amount.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tier_behavior","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.interval_count","typeLabel":"number"},"billing_units":{"type":"number","default":1,"description":"Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.billing_units","typeLabel":"number"},"max_purchase":{"oneOf":[{"type":"number","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.max_purchase.oneOf.0","typeLabel":"number"},{"type":"null","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.max_purchase.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.max_purchase","typeLabel":"number | null"}},"required":["interval","billing_method"],"description":"Pricing for usage beyond included units. Omit for free features.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price","typeLabel":"object"},"proration":{"type":"object","properties":{"on_increase":{"enum":["bill_immediately","prorate_immediately","prorate_next_cycle","bill_next_cycle"],"type":"string","description":"Billing behavior when quantity increases mid-cycle.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].proration.on_increase","typeLabel":"enum\u003cstring>"},"on_decrease":{"enum":["prorate","prorate_immediately","prorate_next_cycle","none","no_prorations"],"type":"string","description":"Credit behavior when quantity decreases mid-cycle.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].proration.on_decrease","typeLabel":"enum\u003cstring>"}},"required":["on_increase","on_decrease"],"description":"Proration settings for prepaid features. Controls mid-cycle quantity change billing.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].proration","typeLabel":"object"},"rollover":{"type":"object","properties":{"expiry_duration_type":{"enum":["month","forever"],"type":"string","description":"When rolled over units expire.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.expiry_duration_type","typeLabel":"enum\u003cstring>"},"max":{"type":"number","description":"Max rollover units. Omit for unlimited rollover.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.max","typeLabel":"number"},"max_percentage":{"type":"number","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.max_percentage","typeLabel":"number"},"expiry_duration_length":{"type":"number","description":"Number of periods before expiry.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.expiry_duration_length","typeLabel":"number"}},"required":["expiry_duration_type"],"description":"Rollover config for unused units. If set, unused included units carry over.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover","typeLabel":"object"},"expiry":{"type":"object","properties":{"duration":{"enum":["day","week","month","year"],"type":"string","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].expiry.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].expiry.length","typeLabel":"number"}},"required":["duration","length"],"description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].expiry","typeLabel":"object"},"feature_override":{"type":"object","properties":{"credit_schema":{"type":"array","items":{"oneOf":[{"type":"object","required":["metered_feature_id","tier_behavior","tiers"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.metered_feature_id","typeLabel":"string"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers","typeLabel":"object[]"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["metered_feature_id","credit_cost"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.credit_cost","typeLabel":"number"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["metered_feature_id","excluded"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature to remove from the credit system.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.metered_feature_id","typeLabel":"string"},"excluded":{"const":true,"description":"Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.excluded","typeLabel":"any"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX]","typeLabel":"object"},"description":"For credit system features: merges into the feature's credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `excluded: true` removes it, and unlisted features keep the credit system's rate.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema","typeLabel":"object[]"},"markups":{"type":"object","properties":{"default_markup":{"type":"number","minimum":-100,"description":"Default percentage markup for customers on this plan. Use -100 to make usage free.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.default_markup","typeLabel":"number"},"provider_markups":{"oneOf":[{"type":"object","description":"Per-provider markup percentages for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"}},"required":["markup"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-provider markup percentages for customers on this plan.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups","typeLabel":"object | null"},"model_markups":{"oneOf":[{"type":"object","description":"Per-model markup overrides for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"},"input_cost":{"type":"number","minimum":0,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.input_cost","typeLabel":"number"},"output_cost":{"type":"number","minimum":0,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.output_cost","typeLabel":"number"}},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-model markup overrides for customers on this plan.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups","typeLabel":"object | null"}},"additionalProperties":false,"description":"For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups","typeLabel":"object"}},"additionalProperties":false,"description":"Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit_schema).","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override","typeLabel":"object"}},"required":["feature_id"],"title":"PlanItem","description":"Configuration for a feature item in a plan, including usage limits, pricing, and rollover settings.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX]","typeLabel":"PlanItem · object"},"description":"Items to add to the plan.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.add_items","typeLabel":"PlanItem · object[]"},"remove_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Match items linked to this feature.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].feature_id","typeLabel":"string"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"Match items with this billing method (prepaid or usage_based).","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].billing_method","typeLabel":"enum\u003cstring>"},"interval":{"oneOf":[{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","week","month","quarter","semi_annual","year"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval.oneOf.1","typeLabel":"enum\u003cstring>"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Match items with this interval_count. Disambiguates between items that share an interval but differ in count.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval_count","typeLabel":"integer"},"included":{"type":"number","maximum":10000000000000,"description":"Match items whose grant equals this included usage. Omitted is a wildcard.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].included","typeLabel":"number"}},"title":"PlanItemFilter","description":"Filter for matching plan items. All provided fields must match (AND).","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX]","typeLabel":"PlanItemFilter · object"},"description":"Filters selecting items to remove from the plan.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_items","typeLabel":"PlanItemFilter · object[]"},"free_trial":{"oneOf":[{"type":"object","title":"FreeTrialParams","description":"Override the plan's default free trial. Pass an object to set a custom trial, or null to remove the trial entirely.","required":["duration_length"],"properties":{"duration_length":{"type":"number","description":"Number of duration_type periods the trial lasts.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.duration_length","typeLabel":"number"},"duration_type":{"enum":["day","month","year"],"type":"string","default":"month","description":"Unit of time for the trial ('day', 'month', 'year').","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.duration_type","typeLabel":"enum\u003cstring>"},"card_required":{"type":"boolean","default":false,"description":"If true, a payment method is required to start the trial and the customer is charged when it ends. Defaults to false.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.card_required","typeLabel":"boolean"},"on_end":{"enum":["bill","revert"],"type":"string","description":"Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.","default":"bill","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.on_end","typeLabel":"enum\u003cstring>"}},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0","typeLabel":"FreeTrialParams · object"},{"type":"null","description":"Override the plan's default free trial. Pass an object to set a custom trial, or null to remove the trial entirely.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.free_trial","typeLabel":"FreeTrialParams · object | null"},"billing_controls":{"type":"object","properties":{"auto_topups":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature (credit balance) to auto top-up.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].feature_id","typeLabel":"string"},"threshold":{"type":"number","description":"When the balance drops below this threshold, an auto top-up will be purchased.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].threshold","typeLabel":"number"},"quantity":{"type":"number","minimum":1,"description":"Amount of credits to add per auto top-up.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].quantity","typeLabel":"number"},"enabled":{"type":"boolean","default":false,"description":"Whether auto top-up is enabled.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].enabled","typeLabel":"boolean"},"purchase_limit":{"type":"object","properties":{"interval":{"enum":["hour","day","week","month"],"type":"string","description":"The time interval for the purchase limit window.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.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":"incoming.items.[INDEX].plan.variant_details.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":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].purchase_limit.interval_count","typeLabel":"number"},"count":{"type":"number","minimum":0,"description":"Set the current window's consumed auto top-up count. Omit to leave runtime state unchanged.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.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":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].purchase_limit","typeLabel":"object"},"invoice_mode":{"type":"boolean","description":"When true, auto top-up creates a send_invoice invoice instead of auto-charging.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].invoice_mode","typeLabel":"boolean"}},"required":["feature_id","threshold","quantity"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX]","typeLabel":"object"},"description":"List of auto top-up configurations per feature.","default":[],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups","typeLabel":"object[]"},"spend_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Optional feature ID this spend limit applies to.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether the overage spend limit is enabled.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].enabled","typeLabel":"boolean"},"limit_type":{"enum":["absolute","usage_percentage"],"type":"string","description":"How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].limit_type","typeLabel":"enum\u003cstring>"},"overage_limit":{"type":"number","minimum":0,"description":"Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].overage_limit","typeLabel":"number"},"skip_overage_billing":{"type":"boolean","description":"When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].skip_overage_billing","typeLabel":"boolean"}},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX]","typeLabel":"object"},"description":"List of overage spend limits per feature (caps overage spend).","default":[],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits","typeLabel":"object[]"},"usage_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature this usage limit applies to.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].feature_id","typeLabel":"string"},"limit":{"type":"number","minimum":0,"description":"Maximum units allowed per interval.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].limit","typeLabel":"number"},"interval":{"enum":["day","week","month","year"],"type":"string","description":"Interval for the cap, aligned to the customer's billing cycle.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage limit is enabled.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].enabled","typeLabel":"boolean"},"anchor":{"enum":["billing_cycle","utc"],"type":"string","description":"Window alignment. 'billing_cycle' phases the interval to the customer's renewal time; 'utc' aligns to the UTC calendar.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].anchor","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].filter","typeLabel":"object"}},"required":["feature_id","limit","interval"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX]","typeLabel":"object"},"description":"List of hard usage caps per feature (max units per interval).","default":[],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.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":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].threshold","typeLabel":"number"},"threshold_type":{"enum":["usage","usage_percentage","remaining","remaining_percentage"],"type":"string","description":"Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].threshold_type","typeLabel":"enum\u003cstring>"},"feature_id":{"type":"string","description":"The feature ID this alert applies to.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage alert is enabled.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].enabled","typeLabel":"boolean"},"basis":{"enum":["balance","included","recurring","usage_limit"],"type":"string","default":"balance","description":"What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].basis","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].filter","typeLabel":"object"},"name":{"type":"string","description":"Optional user-defined label to distinguish multiple alerts on the same feature.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].name","typeLabel":"string"}},"required":["threshold","threshold_type"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX]","typeLabel":"object"},"description":"List of usage alert configurations per feature.","default":[],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts","typeLabel":"object[]"},"overage_allowed":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature ID this overage allowed control applies to.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether overage is allowed for this feature.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed.items.[INDEX].enabled","typeLabel":"boolean"}},"required":["feature_id"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed.items.[INDEX]","typeLabel":"object"},"description":"List of overage allowed controls per feature. When enabled, usage can exceed balance.","default":[],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed","typeLabel":"object[]"}},"description":"Override the plan's billing controls (auto top-ups, spend limits, usage limits, usage alerts, overage allowed) for this customer.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.billing_controls","typeLabel":"object"},"upsert_licenses":{"type":"array","items":{"type":"object","properties":{"license_plan_id":{"type":"string","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].license_plan_id","typeLabel":"string"},"version_slug":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].version_slug","typeLabel":"string"},"included":{"type":"integer","minimum":0,"maximum":9007199254740991,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].included","typeLabel":"integer"},"prepaid_only":{"type":"boolean","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].prepaid_only","typeLabel":"boolean"},"customize":{"oneOf":[{"type":"object","properties":{"price":{"oneOf":[{"type":"object","title":"BasePrice","description":"Base price configuration for a plan.","required":["amount","interval"],"properties":{"amount":{"type":"number","description":"Base price amount for the plan, in major currency units (e.g. dollars).","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.amount","typeLabel":"number"},"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval (e.g. 'month', 'year').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.interval_count","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Base price amounts in additional currencies. The base 'amount' is in the org's default currency.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies","typeLabel":"object[]"}},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0","typeLabel":"BasePrice · object"},{"type":"null","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price","typeLabel":"BasePrice · object | null"},"add_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature to configure.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_id","typeLabel":"string"},"threshold_billing":{"oneOf":[{"type":"object","description":"Bills this many feature units when outstanding overage reaches it.","required":["threshold"],"properties":{"threshold":{"type":"number","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Bills this many feature units when outstanding overage reaches it.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing","typeLabel":"object | null"},"included":{"type":"number","maximum":10000000000000,"description":"Number of free units included. Balance resets to this each interval for consumable features.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].included","typeLabel":"number"},"unlimited":{"type":"boolean","description":"If true, customer has unlimited access to this feature.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].unlimited","typeLabel":"boolean"},"pooled":{"type":"boolean","default":false,"description":"Whether entity-level grants contribute to a shared customer balance.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].pooled","typeLabel":"boolean"},"reset":{"type":"object","properties":{"interval":{"enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"type":"string","description":"Interval at which balance resets (e.g. 'month', 'year'). For consumable features only.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].reset.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals between resets. Defaults to 1.","default":1,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].reset.interval_count","typeLabel":"number"}},"required":["interval"],"description":"Reset configuration for consumable features. Omit for non-consumable features like seats.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].reset","typeLabel":"object"},"price":{"type":"object","properties":{"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval. For consumable features, should match reset.interval.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.interval","typeLabel":"enum\u003cstring>"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"'prepaid' for upfront payment (seats), 'usage_based' for pay-as-you-go.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.billing_method","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"Price per billing_units after included usage. Either 'amount' or 'tiers' is required.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers'.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies","typeLabel":"object[]"},"tiers":{"type":"array","items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"const":"inf","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].flat_amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Per-unit amount for this tier in this currency.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","description":"Flat amount for this tier in this currency, if the tier uses one.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].flat_amount","typeLabel":"number"}},"required":["currency"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to","amount"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX]","typeLabel":"object"},"description":"Tiered pricing. Either 'amount' or 'tiers' is required.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers","typeLabel":"object[]"},"tier_behavior":{"enum":["graduated","volume"],"type":"string","description":"How tiers price usage. 'graduated' (default) charges each unit at the rate of the tier it falls in. 'volume' picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier's rate plus its flat_amount.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tier_behavior","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.interval_count","typeLabel":"number"},"billing_units":{"type":"number","default":1,"description":"Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.billing_units","typeLabel":"number"},"max_purchase":{"oneOf":[{"type":"number","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.max_purchase.oneOf.0","typeLabel":"number"},{"type":"null","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.max_purchase.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.max_purchase","typeLabel":"number | null"}},"required":["interval","billing_method"],"description":"Pricing for usage beyond included units. Omit for free features.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price","typeLabel":"object"},"proration":{"type":"object","properties":{"on_increase":{"enum":["bill_immediately","prorate_immediately","prorate_next_cycle","bill_next_cycle"],"type":"string","description":"Billing behavior when quantity increases mid-cycle.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].proration.on_increase","typeLabel":"enum\u003cstring>"},"on_decrease":{"enum":["prorate","prorate_immediately","prorate_next_cycle","none","no_prorations"],"type":"string","description":"Credit behavior when quantity decreases mid-cycle.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].proration.on_decrease","typeLabel":"enum\u003cstring>"}},"required":["on_increase","on_decrease"],"description":"Proration settings for prepaid features. Controls mid-cycle quantity change billing.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].proration","typeLabel":"object"},"rollover":{"type":"object","properties":{"expiry_duration_type":{"enum":["month","forever"],"type":"string","description":"When rolled over units expire.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.expiry_duration_type","typeLabel":"enum\u003cstring>"},"max":{"type":"number","description":"Max rollover units. Omit for unlimited rollover.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.max","typeLabel":"number"},"max_percentage":{"type":"number","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.max_percentage","typeLabel":"number"},"expiry_duration_length":{"type":"number","description":"Number of periods before expiry.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.expiry_duration_length","typeLabel":"number"}},"required":["expiry_duration_type"],"description":"Rollover config for unused units. If set, unused included units carry over.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover","typeLabel":"object"},"expiry":{"type":"object","properties":{"duration":{"enum":["day","week","month","year"],"type":"string","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].expiry.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].expiry.length","typeLabel":"number"}},"required":["duration","length"],"description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].expiry","typeLabel":"object"},"feature_override":{"type":"object","properties":{"credit_schema":{"type":"array","items":{"oneOf":[{"type":"object","required":["metered_feature_id","tier_behavior","tiers"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.metered_feature_id","typeLabel":"string"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers","typeLabel":"object[]"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["metered_feature_id","credit_cost"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.credit_cost","typeLabel":"number"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["metered_feature_id","excluded"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature to remove from the credit system.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.metered_feature_id","typeLabel":"string"},"excluded":{"const":true,"description":"Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.excluded","typeLabel":"any"}},"additionalProperties":false,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX]","typeLabel":"object"},"description":"For credit system features: merges into the feature's credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `excluded: true` removes it, and unlisted features keep the credit system's rate.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema","typeLabel":"object[]"},"markups":{"type":"object","properties":{"default_markup":{"type":"number","minimum":-100,"description":"Default percentage markup for customers on this plan. Use -100 to make usage free.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.default_markup","typeLabel":"number"},"provider_markups":{"oneOf":[{"type":"object","description":"Per-provider markup percentages for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"}},"required":["markup"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-provider markup percentages for customers on this plan.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups","typeLabel":"object | null"},"model_markups":{"oneOf":[{"type":"object","description":"Per-model markup overrides for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"},"input_cost":{"type":"number","minimum":0,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.input_cost","typeLabel":"number"},"output_cost":{"type":"number","minimum":0,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.output_cost","typeLabel":"number"}},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-model markup overrides for customers on this plan.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups","typeLabel":"object | null"}},"additionalProperties":false,"description":"For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups","typeLabel":"object"}},"additionalProperties":false,"description":"Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit_schema).","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override","typeLabel":"object"}},"required":["feature_id"],"title":"PlanItem","description":"Configuration for a feature item in a plan, including usage limits, pricing, and rollover settings.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX]","typeLabel":"PlanItem · object"},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items","typeLabel":"PlanItem · object[]"},"remove_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Match items linked to this feature.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].feature_id","typeLabel":"string"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"Match items with this billing method (prepaid or usage_based).","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].billing_method","typeLabel":"enum\u003cstring>"},"interval":{"oneOf":[{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","week","month","quarter","semi_annual","year"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval.oneOf.1","typeLabel":"enum\u003cstring>"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Match items with this interval_count. Disambiguates between items that share an interval but differ in count.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval_count","typeLabel":"integer"},"included":{"type":"number","maximum":10000000000000,"description":"Match items whose grant equals this included usage. Omitted is a wildcard.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].included","typeLabel":"number"}},"title":"PlanItemFilter","description":"Filter for matching plan items. All provided fields must match (AND).","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX]","typeLabel":"PlanItemFilter · object"},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items","typeLabel":"PlanItemFilter · object[]"}},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.1","typeLabel":"null"}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize","typeLabel":"object | null"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"oneOf":[{}],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].metadata.additionalProperties","typeLabel":"any"},"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].metadata","typeLabel":"object"}},"required":["license_plan_id"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX]","typeLabel":"object"},"description":"License links to add or override for this customer, keyed by license_plan_id. Omitted fields inherit the plan catalog link (included defaults to 1 when the license is not in the catalog). A bare entry restores the license to pure catalog inheritance.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.upsert_licenses","typeLabel":"object[]"},"remove_licenses":{"type":"array","items":{"type":"object","properties":{"license_plan_id":{"type":"string","isRequired":true,"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_licenses.items.[INDEX].license_plan_id","typeLabel":"string"}},"required":["license_plan_id"],"uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_licenses.items.[INDEX]","typeLabel":"object"},"description":"License links to drop, keyed by license_plan_id. Parallel to remove_items.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize.remove_licenses","typeLabel":"object[]"}},"additionalProperties":false,"description":"The customization that transforms the base plan into this variant.","uniqueKey":"incoming.items.[INDEX].plan.variant_details.customize","typeLabel":"object"}},"required":["base_plan_id"],"description":"Details about how this variant relates to its latest base plan.","uniqueKey":"incoming.items.[INDEX].plan.variant_details","typeLabel":"object"}},"required":["id","name","description","group","version","add_on","auto_enable","price","items","created_at","env","archived","config","metadata","base_variant_id"],"description":"The full plan object if it was expanded in the response.","uniqueKey":"incoming.items.[INDEX].plan","typeLabel":"object"}},"required":["plan_id","feature_quantities","effective_at","canceled_at","expires_at"],"uniqueKey":"incoming.items.[INDEX]","typeLabel":"object"},"description":"Products or subscription changes being added or updated.","isRequired":true,"uniqueKey":"incoming","typeLabel":"object[]"},"outgoing":{"type":"array","items":{"type":"object","properties":{"plan_id":{"type":"string","description":"The ID of the plan affected by this preview change.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan_id","typeLabel":"string"},"feature_quantities":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the adjustable feature included in this change.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].feature_quantities.items.[INDEX].feature_id","typeLabel":"string"},"quantity":{"type":"number","description":"The quantity that will apply for this feature in the change.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].feature_quantities.items.[INDEX].quantity","typeLabel":"number"}},"required":["feature_id","quantity"],"uniqueKey":"outgoing.items.[INDEX].feature_quantities.items.[INDEX]","typeLabel":"object"},"description":"The feature quantity selections associated with this plan change.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].feature_quantities","typeLabel":"object[]"},"effective_at":{"oneOf":[{"type":"number","description":"When this change takes effect, in milliseconds since the Unix epoch, or null if it applies immediately.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].effective_at.oneOf.0","typeLabel":"number"},{"type":"null","description":"When this change takes effect, in milliseconds since the Unix epoch, or null if it applies immediately.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].effective_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].effective_at","typeLabel":"number | null"},"canceled_at":{"oneOf":[{"type":"number","description":"When this plan was canceled, in milliseconds since the Unix epoch, or null if it is not canceled.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].canceled_at.oneOf.0","typeLabel":"number"},{"type":"null","description":"When this plan was canceled, in milliseconds since the Unix epoch, or null if it is not canceled.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].canceled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].canceled_at","typeLabel":"number | null"},"expires_at":{"oneOf":[{"type":"number","description":"When this plan expires, in milliseconds since the Unix epoch, or null if it does not expire.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].expires_at.oneOf.0","typeLabel":"number"},{"type":"null","description":"When this plan expires, in milliseconds since the Unix epoch, or null if it does not expire.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].expires_at","typeLabel":"number | null"},"plan":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the plan.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.id","typeLabel":"string"},"name":{"type":"string","description":"Display name of the plan.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.name","typeLabel":"string"},"description":{"oneOf":[{"type":"string","description":"Optional description of the plan.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional description of the plan.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.description","typeLabel":"string | null"},"group":{"oneOf":[{"type":"string","description":"Group identifier for organizing related plans. Plans in the same group are mutually exclusive.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.group.oneOf.0","typeLabel":"string"},{"type":"null","description":"Group identifier for organizing related plans. Plans in the same group are mutually exclusive.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.group.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.group","typeLabel":"string | null"},"version":{"type":"number","description":"Version number of the plan. Incremented when plan configuration changes.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.version","typeLabel":"number"},"add_on":{"type":"boolean","description":"Whether this is an add-on plan that can be attached alongside a main plan.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.add_on","typeLabel":"boolean"},"auto_enable":{"type":"boolean","description":"If true, this plan is automatically attached when a customer is created. Used for free plans.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.auto_enable","typeLabel":"boolean"},"price":{"oneOf":[{"type":"object","description":"Base recurring price for the plan. Null for free plans or usage-only plans.","required":["amount","interval"],"properties":{"amount":{"type":"number","description":"Base price amount for the plan, in major currency units (e.g. dollars).","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.amount","typeLabel":"number"},"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval (e.g. 'month', 'year').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Base price amounts in additional currencies. The base 'amount' is in the org's default currency.","uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.additional_currencies","typeLabel":"object[]"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.interval_count","typeLabel":"number"},"display":{"type":"object","properties":{"primary_text":{"type":"string","description":"Main display text (e.g. '$10' or '100 messages').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.display.primary_text","typeLabel":"string"},"secondary_text":{"type":"string","description":"Secondary display text (e.g. 'per month' or 'then $0.5 per 100').","uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.display.secondary_text","typeLabel":"string"}},"required":["primary_text"],"description":"Display text for showing this price in pricing pages.","uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.display","typeLabel":"object"},"processors":{"type":"object","properties":{"stripe":{"oneOf":[{"type":"object","required":["price_id"],"properties":{"price_id":{"type":"string","description":"Stripe price ID. For prepaid with included > 0 this is the V2 price.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.processors.stripe.oneOf.0.price_id","typeLabel":"string"}},"uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.processors.stripe.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.processors.stripe.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.processors.stripe","typeLabel":"object | null"}},"x-atmn-mapping":true,"description":"Payment processors this base price is connected to. Omitted when unset.","uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0.processors","typeLabel":"object"}},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.0","typeLabel":"object"},{"type":"null","description":"Base recurring price for the plan. Null for free plans or usage-only plans.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.price.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.price","typeLabel":"object | null"},"items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature this item configures.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_id","typeLabel":"string"},"included":{"type":"number","description":"Number of free units included. For consumable features, balance resets to this number each interval.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].included","typeLabel":"number"},"unlimited":{"type":"boolean","description":"Whether the customer has unlimited access to this feature.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].unlimited","typeLabel":"boolean"},"reset":{"oneOf":[{"type":"object","description":"Reset configuration for consumable features. Null for non-consumable features like seats where usage persists across billing cycles.","required":["interval"],"properties":{"interval":{"enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"type":"string","description":"The interval at which the feature balance resets (e.g. 'month', 'year'). For consumable features, usage resets to 0 and included units are restored.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals between resets. Defaults to 1.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.0.interval_count","typeLabel":"number"}},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.0","typeLabel":"object"},{"type":"null","description":"Reset configuration for consumable features. Null for non-consumable features like seats where usage persists across billing cycles.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].reset.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].reset","typeLabel":"object | null"},"price":{"oneOf":[{"type":"object","description":"Pricing configuration for usage beyond included units. Null if feature is entirely free.","required":["interval","billing_units","billing_method","max_purchase"],"properties":{"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval for this price. For consumable features, should match reset.interval.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"billing_units":{"type":"number","description":"Number of units per price increment. Usage is rounded UP to the nearest billing_units when billed (e.g. billing_units=100 means 101 usage rounds to 200).","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.billing_units","typeLabel":"number"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"'prepaid' for features like seats where customers pay upfront, 'usage_based' for pay-as-you-go after included usage.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.billing_method","typeLabel":"enum\u003cstring>"},"max_purchase":{"oneOf":[{"type":"number","description":"Maximum units a customer can purchase beyond included. E.g. if included=100 and max_purchase=300, customer can use up to 400 total before usage is capped. Null for no limit.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.max_purchase.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum units a customer can purchase beyond included. E.g. if included=100 and max_purchase=300, customer can use up to 400 total before usage is capped. Null for no limit.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.max_purchase.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.max_purchase","typeLabel":"number | null"},"amount":{"type":"number","description":"Price per billing_units after included usage is consumed. Mutually exclusive with tiers.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers' (tiered prices carry per-currency amounts on each tier).","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.additional_currencies","typeLabel":"object[]"},"tiers":{"type":"array","items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"const":"inf","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].flat_amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Per-unit amount for this tier in this currency.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","description":"Flat amount for this tier in this currency, if the tier uses one.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX].flat_amount","typeLabel":"number"}},"required":["currency"],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to","amount"],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"description":"Tiered pricing configuration. Each tier's 'to' INCLUDES the included amount. Either 'tiers' or 'amount' is required.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tiers","typeLabel":"object[]"},"tier_behavior":{"enum":["graduated","volume"],"type":"string","description":"How tiers price usage. 'graduated' (default) charges each unit at the rate of the tier it falls in. 'volume' picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier's rate plus its flat_amount.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.tier_behavior","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.interval_count","typeLabel":"number"},"processors":{"type":"object","properties":{"stripe":{"oneOf":[{"type":"object","required":["price_id"],"properties":{"price_id":{"type":"string","description":"Stripe price ID. For prepaid with included > 0 this is the V2 price.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe.oneOf.0.price_id","typeLabel":"string"}},"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors.stripe","typeLabel":"object | null"}},"x-atmn-mapping":true,"description":"Payment processors this item price is connected to. Omitted when unset.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0.processors","typeLabel":"object"}},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.0","typeLabel":"object"},{"type":"null","description":"Pricing configuration for usage beyond included units. Null if feature is entirely free.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].price","typeLabel":"object | null"},"threshold_billing":{"oneOf":[{"type":"object","description":"Bills this many feature units when outstanding overage reaches it.","required":["threshold"],"properties":{"threshold":{"type":"number","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Bills this many feature units when outstanding overage reaches it.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].threshold_billing","typeLabel":"object | null"},"feature":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the feature, used to refer to it in other API calls like /track or /check.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.id","typeLabel":"string"},"type":{"enum":["static","boolean","single_use","continuous_use","credit_system","ai_credit_system"],"type":"string","description":"The type of the feature","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.type","typeLabel":"enum\u003cstring>"},"name":{"oneOf":[{"type":"string","description":"The name of the feature.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.name.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name of the feature.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.name.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.name","typeLabel":"string | null"},"display":{"oneOf":[{"type":"object","description":"Singular and plural display names for the feature.","required":["singular","plural"],"properties":{"singular":{"type":"string","description":"The singular display name for the feature.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.0.singular","typeLabel":"string"},"plural":{"type":"string","description":"The plural display name for the feature.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.0.plural","typeLabel":"string"}},"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.0","typeLabel":"object"},{"type":"null","description":"Singular and plural display names for the feature.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.display.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.display","typeLabel":"object | null"},"credit_schema":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"metered_feature_id":{"type":"string","description":"The ID of the metered feature (should be a single_use feature).","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0.items.[INDEX].metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","description":"The credit cost of the metered feature.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["metered_feature_id","credit_cost"],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Credit cost schema for credit system features.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Credit cost schema for credit system features.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.credit_schema","typeLabel":"object[] | null"},"archived":{"oneOf":[{"type":"boolean","description":"Whether or not the feature is archived.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.archived.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether or not the feature is archived.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.archived.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature.archived","typeLabel":"boolean | null"}},"required":["id","type"],"description":"The full feature object if expanded.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature","typeLabel":"object"},"pooled":{"type":"boolean","default":false,"description":"Whether entity-level grants contribute to a shared customer balance.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].pooled","typeLabel":"boolean"},"display":{"type":"object","properties":{"primary_text":{"type":"string","description":"Main display text (e.g. '$10' or '100 messages').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].display.primary_text","typeLabel":"string"},"secondary_text":{"type":"string","description":"Secondary display text (e.g. 'per month' or 'then $0.5 per 100').","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].display.secondary_text","typeLabel":"string"}},"required":["primary_text"],"description":"Display text for showing this item in pricing pages.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].display","typeLabel":"object"},"rollover":{"type":"object","properties":{"max":{"oneOf":[{"type":"number","description":"Maximum rollover units. Null for unlimited rollover.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].rollover.max.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum rollover units. Null for unlimited rollover.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].rollover.max.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].rollover.max","typeLabel":"number | null"},"expiry_duration_type":{"enum":["month","forever"],"type":"string","description":"When rolled over units expire.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].rollover.expiry_duration_type","typeLabel":"enum\u003cstring>"},"max_percentage":{"oneOf":[{"type":"number","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].rollover.max_percentage.oneOf.0","typeLabel":"number"},{"type":"null","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].rollover.max_percentage.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].rollover.max_percentage","typeLabel":"number | null"},"expiry_duration_length":{"type":"number","description":"Number of periods before expiry.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].rollover.expiry_duration_length","typeLabel":"number"}},"required":["max","expiry_duration_type"],"description":"Rollover configuration for unused units. If set, unused included units roll over to the next period.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].rollover","typeLabel":"object"},"expiry":{"oneOf":[{"type":"object","description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","required":["duration","length"],"properties":{"duration":{"enum":["day","week","month","year"],"type":"string","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.0.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.0.length","typeLabel":"number"}},"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.0","typeLabel":"object"},{"type":"null","description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].expiry.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].expiry","typeLabel":"object | null"},"feature_override":{"type":"object","properties":{"credit_schema":{"type":"array","items":{"oneOf":[{"type":"object","required":["metered_feature_id","tier_behavior","tiers"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.metered_feature_id","typeLabel":"string"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers","typeLabel":"object[]"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["metered_feature_id","credit_cost"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.credit_cost","typeLabel":"number"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["metered_feature_id","excluded"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature to remove from the credit system.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.metered_feature_id","typeLabel":"string"},"excluded":{"const":true,"description":"Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.excluded","typeLabel":"any"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema.items.[INDEX]","typeLabel":"object"},"description":"For credit system features: merges into the feature's credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `excluded: true` removes it, and unlisted features keep the credit system's rate.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.credit_schema","typeLabel":"object[]"},"markups":{"type":"object","properties":{"default_markup":{"type":"number","minimum":-100,"description":"Default percentage markup for customers on this plan. Use -100 to make usage free.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.default_markup","typeLabel":"number"},"provider_markups":{"oneOf":[{"type":"object","description":"Per-provider markup percentages for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"}},"required":["markup"],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-provider markup percentages for customers on this plan.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.provider_markups","typeLabel":"object | null"},"model_markups":{"oneOf":[{"type":"object","description":"Per-model markup overrides for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"},"input_cost":{"type":"number","minimum":0,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.input_cost","typeLabel":"number"},"output_cost":{"type":"number","minimum":0,"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.output_cost","typeLabel":"number"}},"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-model markup overrides for customers on this plan.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups.model_markups","typeLabel":"object | null"}},"additionalProperties":false,"description":"For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override.markups","typeLabel":"object"}},"additionalProperties":false,"description":"Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit_schema).","uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX].feature_override","typeLabel":"object"}},"required":["feature_id","included","unlimited","reset","price"],"uniqueKey":"outgoing.items.[INDEX].plan.\\items.items.[INDEX]","typeLabel":"object"},"description":"Feature configurations included in this plan. Each item defines included units, pricing, and reset behavior for a feature.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.\\items","typeLabel":"object[]"},"created_at":{"type":"number","description":"Unix timestamp (ms) when the plan was created.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.created_at","typeLabel":"number"},"env":{"enum":["sandbox","live"],"type":"string","description":"Environment this plan belongs to ('sandbox' or 'live').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.env","typeLabel":"enum\u003cstring>"},"archived":{"type":"boolean","description":"Whether the plan is archived. Archived plans cannot be attached to new customers.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.archived","typeLabel":"boolean"},"config":{"type":"object","properties":{"ignore_past_due":{"type":"boolean","default":false,"description":"If true, entitlements attached to this plan will still reset on schedule even when the customer's product is in a past_due state.","uniqueKey":"outgoing.items.[INDEX].plan.config.ignore_past_due","typeLabel":"boolean"},"anchor_to_month_start":{"type":"boolean","description":"Anchor billing and reset cycles to the 1st of the month (UTC).","default":false,"uniqueKey":"outgoing.items.[INDEX].plan.config.anchor_to_month_start","typeLabel":"boolean"}},"description":"Miscellaneous plan-level configuration flags.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.config","typeLabel":"object"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"oneOf":[{}],"uniqueKey":"outgoing.items.[INDEX].plan.metadata.additionalProperties","typeLabel":"any"},"description":"Arbitrary key-value metadata defined by you for your own use. Shared across all versions of the plan.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.metadata","typeLabel":"object"},"base_variant_id":{"oneOf":[{"type":"string","description":"Deprecated. Use variant_details.base_plan_id instead. If this is a variant, the ID of the base plan it was created from.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.base_variant_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Deprecated. Use variant_details.base_plan_id instead. If this is a variant, the ID of the base plan it was created from.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.base_variant_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.base_variant_id","typeLabel":"string | null"},"version_slug":{"oneOf":[{"type":"string","description":"User-facing version identity. Defaults to v{n} when the version is minted.","uniqueKey":"outgoing.items.[INDEX].plan.version_slug.oneOf.0","typeLabel":"string"},{"type":"null","description":"User-facing version identity. Defaults to v{n} when the version is minted.","uniqueKey":"outgoing.items.[INDEX].plan.version_slug.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.version_slug","typeLabel":"string | null"},"active":{"type":"boolean","description":"Whether this is the active version of the plan. At most one version is active.","uniqueKey":"outgoing.items.[INDEX].plan.active","typeLabel":"boolean"},"processors":{"type":"object","properties":{"stripe":{"oneOf":[{"type":"object","required":["product_id"],"properties":{"product_id":{"type":"string","description":"Stripe product ID this plan is billed under.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.processors.stripe.oneOf.0.product_id","typeLabel":"string"},"additional_product_ids":{"type":"array","items":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.processors.stripe.oneOf.0.additional_product_ids.items.[INDEX]","typeLabel":"string"},"description":"Extra Stripe product IDs aliased to this plan.","uniqueKey":"outgoing.items.[INDEX].plan.processors.stripe.oneOf.0.additional_product_ids","typeLabel":"string[]"}},"uniqueKey":"outgoing.items.[INDEX].plan.processors.stripe.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"outgoing.items.[INDEX].plan.processors.stripe.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.processors.stripe","typeLabel":"object | null"},"revenuecat":{"oneOf":[{"type":"object","required":["products"],"properties":{"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"RevenueCat product ID that grants this plan when purchased.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].product_id","typeLabel":"string"},"feature_quantities":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities.items.[INDEX].feature_id","typeLabel":"string"},"quantity":{"type":"number","minimum":0,"uniqueKey":"outgoing.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities.items.[INDEX].quantity","typeLabel":"number"}},"required":["feature_id"],"uniqueKey":"outgoing.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities.items.[INDEX]","typeLabel":"object"},"description":"Prepaid quantities granted when this specific RevenueCat product is purchased, in feature units.","uniqueKey":"outgoing.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX].feature_quantities","typeLabel":"object[]"}},"required":["product_id"],"uniqueKey":"outgoing.items.[INDEX].plan.processors.revenuecat.oneOf.0.products.items.[INDEX]","typeLabel":"object"},"description":"Every RevenueCat product that maps to this plan. Replaces the current set.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.processors.revenuecat.oneOf.0.products","typeLabel":"object[]"}},"uniqueKey":"outgoing.items.[INDEX].plan.processors.revenuecat.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"outgoing.items.[INDEX].plan.processors.revenuecat.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.processors.revenuecat","typeLabel":"object | null"}},"x-atmn-mapping":true,"description":"Payment processors this plan is connected to. Omitted when unset.","uniqueKey":"outgoing.items.[INDEX].plan.processors","typeLabel":"object"},"free_trial":{"type":"object","properties":{"duration_length":{"type":"number","description":"Number of duration_type periods the trial lasts.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.free_trial.duration_length","typeLabel":"number"},"duration_type":{"enum":["day","month","year"],"type":"string","description":"Unit of time for the trial duration ('day', 'month', 'year').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.free_trial.duration_type","typeLabel":"enum\u003cstring>"},"card_required":{"type":"boolean","description":"Whether a payment method is required to start the trial. If true, customer will be charged after trial ends.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.free_trial.card_required","typeLabel":"boolean"},"on_end":{"oneOf":[{"type":"string","description":"Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.","enum":["bill","revert"],"uniqueKey":"outgoing.items.[INDEX].plan.free_trial.on_end.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.","uniqueKey":"outgoing.items.[INDEX].plan.free_trial.on_end.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.free_trial.on_end","typeLabel":"enum\u003cstring> | null"}},"required":["duration_length","duration_type","card_required"],"description":"Free trial configuration. If set, new customers can try this plan before being charged.","uniqueKey":"outgoing.items.[INDEX].plan.free_trial","typeLabel":"object"},"billing_controls":{"type":"object","properties":{"auto_topups":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature (credit balance) to auto top-up.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].feature_id","typeLabel":"string"},"threshold":{"type":"number","description":"When the balance drops below this threshold, an auto top-up will be purchased.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].threshold","typeLabel":"number"},"quantity":{"type":"number","minimum":1,"description":"Amount of credits to add per auto top-up.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].quantity","typeLabel":"number"},"enabled":{"type":"boolean","default":false,"description":"Whether auto top-up is enabled.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].enabled","typeLabel":"boolean"},"purchase_limit":{"type":"object","properties":{"interval":{"enum":["hour","day","week","month"],"type":"string","description":"The time interval for the purchase limit window.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.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":"outgoing.items.[INDEX].plan.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":"outgoing.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].purchase_limit.interval_count","typeLabel":"number"}},"required":["interval","limit"],"description":"Optional rate limit to cap how often auto top-ups occur.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].purchase_limit","typeLabel":"object"},"invoice_mode":{"type":"boolean","description":"When true, auto top-up creates a send_invoice invoice instead of auto-charging.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX].invoice_mode","typeLabel":"boolean"}},"required":["feature_id","threshold","quantity"],"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.auto_topups.items.[INDEX]","typeLabel":"object"},"description":"List of auto top-up configurations per feature.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.auto_topups","typeLabel":"object[]"},"spend_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Optional feature ID this spend limit applies to.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether the overage spend limit is enabled.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].enabled","typeLabel":"boolean"},"limit_type":{"enum":["absolute","usage_percentage"],"type":"string","description":"How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].limit_type","typeLabel":"enum\u003cstring>"},"overage_limit":{"type":"number","minimum":0,"description":"Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].overage_limit","typeLabel":"number"},"skip_overage_billing":{"type":"boolean","description":"When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX].skip_overage_billing","typeLabel":"boolean"}},"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.spend_limits.items.[INDEX]","typeLabel":"object"},"description":"List of overage spend limits per feature (caps overage spend).","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.spend_limits","typeLabel":"object[]"},"usage_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature this usage limit applies to.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].feature_id","typeLabel":"string"},"limit":{"type":"number","minimum":0,"description":"Maximum units allowed per interval.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].limit","typeLabel":"number"},"interval":{"enum":["day","week","month","year"],"type":"string","description":"Interval for the cap, aligned to the customer's billing cycle.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage limit is enabled.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].enabled","typeLabel":"boolean"},"anchor":{"enum":["billing_cycle","utc"],"type":"string","description":"Window alignment. 'billing_cycle' phases the interval to the customer's renewal time; 'utc' aligns to the UTC calendar.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].anchor","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX].filter","typeLabel":"object"}},"required":["feature_id","limit","interval"],"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_limits.items.[INDEX]","typeLabel":"object"},"description":"List of hard usage caps per feature (max units per interval).","uniqueKey":"outgoing.items.[INDEX].plan.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":"outgoing.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].threshold","typeLabel":"number"},"threshold_type":{"enum":["usage","usage_percentage","remaining","remaining_percentage"],"type":"string","description":"Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].threshold_type","typeLabel":"enum\u003cstring>"},"feature_id":{"type":"string","description":"The feature ID this alert applies to.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage alert is enabled.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].enabled","typeLabel":"boolean"},"basis":{"enum":["balance","included","recurring","usage_limit"],"type":"string","default":"balance","description":"What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].basis","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].filter","typeLabel":"object"},"name":{"type":"string","description":"Optional user-defined label to distinguish multiple alerts on the same feature.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX].name","typeLabel":"string"}},"required":["threshold","threshold_type"],"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_alerts.items.[INDEX]","typeLabel":"object"},"description":"List of usage alert configurations per feature.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.usage_alerts","typeLabel":"object[]"},"overage_allowed":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature ID this overage allowed control applies to.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.overage_allowed.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether overage is allowed for this feature.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.overage_allowed.items.[INDEX].enabled","typeLabel":"boolean"}},"required":["feature_id"],"uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.overage_allowed.items.[INDEX]","typeLabel":"object"},"description":"List of overage allowed controls per feature. When enabled, usage can exceed balance.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls.overage_allowed","typeLabel":"object[]"}},"description":"Plan-level billing controls used as customer defaults.","uniqueKey":"outgoing.items.[INDEX].plan.billing_controls","typeLabel":"object"},"customer_eligibility":{"type":"object","properties":{"attach_action":{"enum":["activate","upgrade","downgrade","none","purchase"],"type":"string","description":"The action that would occur if this plan were attached to the customer.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.customer_eligibility.attach_action","typeLabel":"enum\u003cstring>"},"trial_available":{"type":"boolean","description":"Whether the trial on this plan is available to this customer. For example, if the customer used the trial in the past, this will be false.","uniqueKey":"outgoing.items.[INDEX].plan.customer_eligibility.trial_available","typeLabel":"boolean"},"status":{"enum":["active","scheduled"],"type":"string","description":"The customer's current status with this plan. 'active' if attached, 'scheduled' if pending activation.","uniqueKey":"outgoing.items.[INDEX].plan.customer_eligibility.status","typeLabel":"enum\u003cstring>"},"canceling":{"type":"boolean","description":"Whether the customer's active instance of this plan is set to cancel.","uniqueKey":"outgoing.items.[INDEX].plan.customer_eligibility.canceling","typeLabel":"boolean"},"trialing":{"type":"boolean","description":"Whether the customer is currently on a free trial of this plan.","uniqueKey":"outgoing.items.[INDEX].plan.customer_eligibility.trialing","typeLabel":"boolean"}},"required":["attach_action"],"uniqueKey":"outgoing.items.[INDEX].plan.customer_eligibility","typeLabel":"object"},"variant_details":{"type":"object","properties":{"base_plan_id":{"type":"string","description":"The ID of the base plan this variant was derived from.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.base_plan_id","typeLabel":"string"},"customize":{"type":"object","properties":{"price":{"oneOf":[{"type":"object","title":"BasePrice","description":"Override the base price of the plan. Pass null to remove the base price.","required":["amount","interval"],"properties":{"amount":{"type":"number","description":"Base price amount for the plan, in major currency units (e.g. dollars).","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.price.oneOf.0.amount","typeLabel":"number"},"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval (e.g. 'month', 'year').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.price.oneOf.0.interval_count","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Base price amounts in additional currencies. The base 'amount' is in the org's default currency.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.price.oneOf.0.additional_currencies","typeLabel":"object[]"}},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.price.oneOf.0","typeLabel":"BasePrice · object"},{"type":"null","description":"Override the base price of the plan. Pass null to remove the base price.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.price","typeLabel":"BasePrice · object | null"},"add_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature to configure.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_id","typeLabel":"string"},"threshold_billing":{"oneOf":[{"type":"object","description":"Bills this many feature units when outstanding overage reaches it.","required":["threshold"],"properties":{"threshold":{"type":"number","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Bills this many feature units when outstanding overage reaches it.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].threshold_billing","typeLabel":"object | null"},"included":{"type":"number","maximum":10000000000000,"description":"Number of free units included. Balance resets to this each interval for consumable features.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].included","typeLabel":"number"},"unlimited":{"type":"boolean","description":"If true, customer has unlimited access to this feature.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].unlimited","typeLabel":"boolean"},"pooled":{"type":"boolean","default":false,"description":"Whether entity-level grants contribute to a shared customer balance.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].pooled","typeLabel":"boolean"},"reset":{"type":"object","properties":{"interval":{"enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"type":"string","description":"Interval at which balance resets (e.g. 'month', 'year'). For consumable features only.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].reset.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals between resets. Defaults to 1.","default":1,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].reset.interval_count","typeLabel":"number"}},"required":["interval"],"description":"Reset configuration for consumable features. Omit for non-consumable features like seats.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].reset","typeLabel":"object"},"price":{"type":"object","properties":{"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval. For consumable features, should match reset.interval.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.interval","typeLabel":"enum\u003cstring>"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"'prepaid' for upfront payment (seats), 'usage_based' for pay-as-you-go.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.billing_method","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"Price per billing_units after included usage. Either 'amount' or 'tiers' is required.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers'.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.additional_currencies","typeLabel":"object[]"},"tiers":{"type":"array","items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"const":"inf","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].flat_amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Per-unit amount for this tier in this currency.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","description":"Flat amount for this tier in this currency, if the tier uses one.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].flat_amount","typeLabel":"number"}},"required":["currency"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to","amount"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers.items.[INDEX]","typeLabel":"object"},"description":"Tiered pricing. Either 'amount' or 'tiers' is required.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tiers","typeLabel":"object[]"},"tier_behavior":{"enum":["graduated","volume"],"type":"string","description":"How tiers price usage. 'graduated' (default) charges each unit at the rate of the tier it falls in. 'volume' picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier's rate plus its flat_amount.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.tier_behavior","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.interval_count","typeLabel":"number"},"billing_units":{"type":"number","default":1,"description":"Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.billing_units","typeLabel":"number"},"max_purchase":{"oneOf":[{"type":"number","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.max_purchase.oneOf.0","typeLabel":"number"},{"type":"null","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.max_purchase.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price.max_purchase","typeLabel":"number | null"}},"required":["interval","billing_method"],"description":"Pricing for usage beyond included units. Omit for free features.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].price","typeLabel":"object"},"proration":{"type":"object","properties":{"on_increase":{"enum":["bill_immediately","prorate_immediately","prorate_next_cycle","bill_next_cycle"],"type":"string","description":"Billing behavior when quantity increases mid-cycle.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].proration.on_increase","typeLabel":"enum\u003cstring>"},"on_decrease":{"enum":["prorate","prorate_immediately","prorate_next_cycle","none","no_prorations"],"type":"string","description":"Credit behavior when quantity decreases mid-cycle.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].proration.on_decrease","typeLabel":"enum\u003cstring>"}},"required":["on_increase","on_decrease"],"description":"Proration settings for prepaid features. Controls mid-cycle quantity change billing.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].proration","typeLabel":"object"},"rollover":{"type":"object","properties":{"expiry_duration_type":{"enum":["month","forever"],"type":"string","description":"When rolled over units expire.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.expiry_duration_type","typeLabel":"enum\u003cstring>"},"max":{"type":"number","description":"Max rollover units. Omit for unlimited rollover.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.max","typeLabel":"number"},"max_percentage":{"type":"number","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.max_percentage","typeLabel":"number"},"expiry_duration_length":{"type":"number","description":"Number of periods before expiry.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover.expiry_duration_length","typeLabel":"number"}},"required":["expiry_duration_type"],"description":"Rollover config for unused units. If set, unused included units carry over.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].rollover","typeLabel":"object"},"expiry":{"type":"object","properties":{"duration":{"enum":["day","week","month","year"],"type":"string","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].expiry.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].expiry.length","typeLabel":"number"}},"required":["duration","length"],"description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].expiry","typeLabel":"object"},"feature_override":{"type":"object","properties":{"credit_schema":{"type":"array","items":{"oneOf":[{"type":"object","required":["metered_feature_id","tier_behavior","tiers"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.metered_feature_id","typeLabel":"string"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers","typeLabel":"object[]"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["metered_feature_id","credit_cost"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.credit_cost","typeLabel":"number"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["metered_feature_id","excluded"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature to remove from the credit system.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.metered_feature_id","typeLabel":"string"},"excluded":{"const":true,"description":"Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.excluded","typeLabel":"any"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX]","typeLabel":"object"},"description":"For credit system features: merges into the feature's credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `excluded: true` removes it, and unlisted features keep the credit system's rate.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.credit_schema","typeLabel":"object[]"},"markups":{"type":"object","properties":{"default_markup":{"type":"number","minimum":-100,"description":"Default percentage markup for customers on this plan. Use -100 to make usage free.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.default_markup","typeLabel":"number"},"provider_markups":{"oneOf":[{"type":"object","description":"Per-provider markup percentages for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"}},"required":["markup"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-provider markup percentages for customers on this plan.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.provider_markups","typeLabel":"object | null"},"model_markups":{"oneOf":[{"type":"object","description":"Per-model markup overrides for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"},"input_cost":{"type":"number","minimum":0,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.input_cost","typeLabel":"number"},"output_cost":{"type":"number","minimum":0,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.output_cost","typeLabel":"number"}},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-model markup overrides for customers on this plan.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups.model_markups","typeLabel":"object | null"}},"additionalProperties":false,"description":"For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override.markups","typeLabel":"object"}},"additionalProperties":false,"description":"Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit_schema).","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX].feature_override","typeLabel":"object"}},"required":["feature_id"],"title":"PlanItem","description":"Configuration for a feature item in a plan, including usage limits, pricing, and rollover settings.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items.items.[INDEX]","typeLabel":"PlanItem · object"},"description":"Items to add to the plan.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.add_items","typeLabel":"PlanItem · object[]"},"remove_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Match items linked to this feature.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].feature_id","typeLabel":"string"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"Match items with this billing method (prepaid or usage_based).","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].billing_method","typeLabel":"enum\u003cstring>"},"interval":{"oneOf":[{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","week","month","quarter","semi_annual","year"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval.oneOf.1","typeLabel":"enum\u003cstring>"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Match items with this interval_count. Disambiguates between items that share an interval but differ in count.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].interval_count","typeLabel":"integer"},"included":{"type":"number","maximum":10000000000000,"description":"Match items whose grant equals this included usage. Omitted is a wildcard.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX].included","typeLabel":"number"}},"title":"PlanItemFilter","description":"Filter for matching plan items. All provided fields must match (AND).","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_items.items.[INDEX]","typeLabel":"PlanItemFilter · object"},"description":"Filters selecting items to remove from the plan.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_items","typeLabel":"PlanItemFilter · object[]"},"free_trial":{"oneOf":[{"type":"object","title":"FreeTrialParams","description":"Override the plan's default free trial. Pass an object to set a custom trial, or null to remove the trial entirely.","required":["duration_length"],"properties":{"duration_length":{"type":"number","description":"Number of duration_type periods the trial lasts.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.duration_length","typeLabel":"number"},"duration_type":{"enum":["day","month","year"],"type":"string","default":"month","description":"Unit of time for the trial ('day', 'month', 'year').","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.duration_type","typeLabel":"enum\u003cstring>"},"card_required":{"type":"boolean","default":false,"description":"If true, a payment method is required to start the trial and the customer is charged when it ends. Defaults to false.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.card_required","typeLabel":"boolean"},"on_end":{"enum":["bill","revert"],"type":"string","description":"Behavior when the trial ends. 'bill' charges the customer (default). 'revert' expires the trial and restores the customer's previous plan.","default":"bill","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0.on_end","typeLabel":"enum\u003cstring>"}},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.0","typeLabel":"FreeTrialParams · object"},{"type":"null","description":"Override the plan's default free trial. Pass an object to set a custom trial, or null to remove the trial entirely.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.free_trial.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.free_trial","typeLabel":"FreeTrialParams · object | null"},"billing_controls":{"type":"object","properties":{"auto_topups":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature (credit balance) to auto top-up.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].feature_id","typeLabel":"string"},"threshold":{"type":"number","description":"When the balance drops below this threshold, an auto top-up will be purchased.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].threshold","typeLabel":"number"},"quantity":{"type":"number","minimum":1,"description":"Amount of credits to add per auto top-up.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].quantity","typeLabel":"number"},"enabled":{"type":"boolean","default":false,"description":"Whether auto top-up is enabled.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].enabled","typeLabel":"boolean"},"purchase_limit":{"type":"object","properties":{"interval":{"enum":["hour","day","week","month"],"type":"string","description":"The time interval for the purchase limit window.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.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":"outgoing.items.[INDEX].plan.variant_details.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":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].purchase_limit.interval_count","typeLabel":"number"},"count":{"type":"number","minimum":0,"description":"Set the current window's consumed auto top-up count. Omit to leave runtime state unchanged.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.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":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].purchase_limit","typeLabel":"object"},"invoice_mode":{"type":"boolean","description":"When true, auto top-up creates a send_invoice invoice instead of auto-charging.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX].invoice_mode","typeLabel":"boolean"}},"required":["feature_id","threshold","quantity"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups.items.[INDEX]","typeLabel":"object"},"description":"List of auto top-up configurations per feature.","default":[],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.auto_topups","typeLabel":"object[]"},"spend_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Optional feature ID this spend limit applies to.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether the overage spend limit is enabled.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].enabled","typeLabel":"boolean"},"limit_type":{"enum":["absolute","usage_percentage"],"type":"string","description":"How overage_limit is interpreted: an absolute overage cap (default) or a percentage of the main-plan allowance.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].limit_type","typeLabel":"enum\u003cstring>"},"overage_limit":{"type":"number","minimum":0,"description":"Overage cap for the feature: absolute units, or a percent (e.g. 120) when limit_type is usage_percentage.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].overage_limit","typeLabel":"number"},"skip_overage_billing":{"type":"boolean","description":"When true, overage for this feature is not posted to Stripe. Usage tracking and balance resets still behave normally.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX].skip_overage_billing","typeLabel":"boolean"}},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits.items.[INDEX]","typeLabel":"object"},"description":"List of overage spend limits per feature (caps overage spend).","default":[],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.spend_limits","typeLabel":"object[]"},"usage_limits":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature this usage limit applies to.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].feature_id","typeLabel":"string"},"limit":{"type":"number","minimum":0,"description":"Maximum units allowed per interval.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].limit","typeLabel":"number"},"interval":{"enum":["day","week","month","year"],"type":"string","description":"Interval for the cap, aligned to the customer's billing cycle.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage limit is enabled.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].enabled","typeLabel":"boolean"},"anchor":{"enum":["billing_cycle","utc"],"type":"string","description":"Window alignment. 'billing_cycle' phases the interval to the customer's renewal time; 'utc' aligns to the UTC calendar.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].anchor","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"When set, only usage from events whose properties match counts toward this cap. Omit to count all usage of the feature.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX].filter","typeLabel":"object"}},"required":["feature_id","limit","interval"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_limits.items.[INDEX]","typeLabel":"object"},"description":"List of hard usage caps per feature (max units per interval).","default":[],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.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":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].threshold","typeLabel":"number"},"threshold_type":{"enum":["usage","usage_percentage","remaining","remaining_percentage"],"type":"string","description":"Whether the threshold is an absolute count or a percentage of the usage allowance or remaining balance.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].threshold_type","typeLabel":"enum\u003cstring>"},"feature_id":{"type":"string","description":"The feature ID this alert applies to.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":true,"description":"Whether this usage alert is enabled.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].enabled","typeLabel":"boolean"},"basis":{"enum":["balance","included","recurring","usage_limit"],"type":"string","default":"balance","description":"What 100% means. balance: every grant on the feature. included: the plan allowance only. recurring: grants that reset. usage_limit: the cap of the usage limit with the same feature and filter.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].basis","typeLabel":"enum\u003cstring>"},"filter":{"type":"object","properties":{"properties":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].filter.properties.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].filter.properties","typeLabel":"object"}},"required":["properties"],"description":"Only valid with basis usage_limit. Points the alert at the usage limit carrying the same filter.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].filter","typeLabel":"object"},"name":{"type":"string","description":"Optional user-defined label to distinguish multiple alerts on the same feature.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX].name","typeLabel":"string"}},"required":["threshold","threshold_type"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts.items.[INDEX]","typeLabel":"object"},"description":"List of usage alert configurations per feature.","default":[],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.usage_alerts","typeLabel":"object[]"},"overage_allowed":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The feature ID this overage allowed control applies to.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed.items.[INDEX].feature_id","typeLabel":"string"},"enabled":{"type":"boolean","default":false,"description":"Whether overage is allowed for this feature.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed.items.[INDEX].enabled","typeLabel":"boolean"}},"required":["feature_id"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed.items.[INDEX]","typeLabel":"object"},"description":"List of overage allowed controls per feature. When enabled, usage can exceed balance.","default":[],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls.overage_allowed","typeLabel":"object[]"}},"description":"Override the plan's billing controls (auto top-ups, spend limits, usage limits, usage alerts, overage allowed) for this customer.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.billing_controls","typeLabel":"object"},"upsert_licenses":{"type":"array","items":{"type":"object","properties":{"license_plan_id":{"type":"string","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].license_plan_id","typeLabel":"string"},"version_slug":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].version_slug","typeLabel":"string"},"included":{"type":"integer","minimum":0,"maximum":9007199254740991,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].included","typeLabel":"integer"},"prepaid_only":{"type":"boolean","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].prepaid_only","typeLabel":"boolean"},"customize":{"oneOf":[{"type":"object","properties":{"price":{"oneOf":[{"type":"object","title":"BasePrice","description":"Base price configuration for a plan.","required":["amount","interval"],"properties":{"amount":{"type":"number","description":"Base price amount for the plan, in major currency units (e.g. dollars).","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.amount","typeLabel":"number"},"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval (e.g. 'month', 'year').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.interval_count","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Base price amounts in additional currencies. The base 'amount' is in the org's default currency.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0.additional_currencies","typeLabel":"object[]"}},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.0","typeLabel":"BasePrice · object"},{"type":"null","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.price","typeLabel":"BasePrice · object | null"},"add_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"The ID of the feature to configure.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_id","typeLabel":"string"},"threshold_billing":{"oneOf":[{"type":"object","description":"Bills this many feature units when outstanding overage reaches it.","required":["threshold"],"properties":{"threshold":{"type":"number","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing.oneOf.0.threshold","typeLabel":"number"}},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing.oneOf.0","typeLabel":"object"},{"type":"null","description":"Bills this many feature units when outstanding overage reaches it.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].threshold_billing","typeLabel":"object | null"},"included":{"type":"number","maximum":10000000000000,"description":"Number of free units included. Balance resets to this each interval for consumable features.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].included","typeLabel":"number"},"unlimited":{"type":"boolean","description":"If true, customer has unlimited access to this feature.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].unlimited","typeLabel":"boolean"},"pooled":{"type":"boolean","default":false,"description":"Whether entity-level grants contribute to a shared customer balance.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].pooled","typeLabel":"boolean"},"reset":{"type":"object","properties":{"interval":{"enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"type":"string","description":"Interval at which balance resets (e.g. 'month', 'year'). For consumable features only.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].reset.interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals between resets. Defaults to 1.","default":1,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].reset.interval_count","typeLabel":"number"}},"required":["interval"],"description":"Reset configuration for consumable features. Omit for non-consumable features like seats.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].reset","typeLabel":"object"},"price":{"type":"object","properties":{"interval":{"enum":["one_off","week","month","quarter","semi_annual","year"],"type":"string","description":"Billing interval. For consumable features, should match reset.interval.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.interval","typeLabel":"enum\u003cstring>"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"'prepaid' for upfront payment (seats), 'usage_based' for pay-as-you-go.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.billing_method","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"Price per billing_units after included usage. Either 'amount' or 'tiers' is required.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Price amount in this currency. Set explicitly per currency, not converted from the base amount.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies.items.[INDEX].amount","typeLabel":"number"}},"required":["currency","amount"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies.items.[INDEX]","typeLabel":"object"},"description":"Amounts in additional currencies for this flat price. The base 'amount' is in the org's default currency. Only valid with 'amount', not 'tiers'.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.additional_currencies","typeLabel":"object[]"},"tiers":{"type":"array","items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"const":"inf","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].to.oneOf.1","typeLabel":"any"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].to","typeLabel":"number | any"},"amount":{"type":"number","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].flat_amount","typeLabel":"number"},"additional_currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Three-letter Stripe-supported currency code (e.g. 'eur', 'gbp').","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].currency","typeLabel":"string"},"amount":{"type":"number","description":"Per-unit amount for this tier in this currency.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].amount","typeLabel":"number"},"flat_amount":{"type":"number","description":"Flat amount for this tier in this currency, if the tier uses one.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX].flat_amount","typeLabel":"number"}},"required":["currency"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies.items.[INDEX]","typeLabel":"object"},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX].additional_currencies","typeLabel":"object[]"}},"required":["to","amount"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers.items.[INDEX]","typeLabel":"object"},"description":"Tiered pricing. Either 'amount' or 'tiers' is required.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tiers","typeLabel":"object[]"},"tier_behavior":{"enum":["graduated","volume"],"type":"string","description":"How tiers price usage. 'graduated' (default) charges each unit at the rate of the tier it falls in. 'volume' picks one tier from total usage. On usage-based items it bills only usage past the included amount, at the rate of the tier total usage reaches, plus its flat_amount. On prepaid items it charges every unit, the included ones too, at that tier's rate plus its flat_amount.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.tier_behavior","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"number","description":"Number of intervals per billing cycle. Defaults to 1.","default":1,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.interval_count","typeLabel":"number"},"billing_units":{"type":"number","default":1,"description":"Units per price increment. Usage is rounded UP when billed (e.g. billing_units=100 means 101 rounds to 200).","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.billing_units","typeLabel":"number"},"max_purchase":{"oneOf":[{"type":"number","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.max_purchase.oneOf.0","typeLabel":"number"},{"type":"null","description":"Max units purchasable beyond included. E.g. included=100, max_purchase=300 allows 400 total. Null for no limit.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.max_purchase.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price.max_purchase","typeLabel":"number | null"}},"required":["interval","billing_method"],"description":"Pricing for usage beyond included units. Omit for free features.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].price","typeLabel":"object"},"proration":{"type":"object","properties":{"on_increase":{"enum":["bill_immediately","prorate_immediately","prorate_next_cycle","bill_next_cycle"],"type":"string","description":"Billing behavior when quantity increases mid-cycle.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].proration.on_increase","typeLabel":"enum\u003cstring>"},"on_decrease":{"enum":["prorate","prorate_immediately","prorate_next_cycle","none","no_prorations"],"type":"string","description":"Credit behavior when quantity decreases mid-cycle.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].proration.on_decrease","typeLabel":"enum\u003cstring>"}},"required":["on_increase","on_decrease"],"description":"Proration settings for prepaid features. Controls mid-cycle quantity change billing.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].proration","typeLabel":"object"},"rollover":{"type":"object","properties":{"expiry_duration_type":{"enum":["month","forever"],"type":"string","description":"When rolled over units expire.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.expiry_duration_type","typeLabel":"enum\u003cstring>"},"max":{"type":"number","description":"Max rollover units. Omit for unlimited rollover.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.max","typeLabel":"number"},"max_percentage":{"type":"number","description":"Maximum rollover as a percentage (0-100) of included + prepaid grant. Mutually exclusive with max.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.max_percentage","typeLabel":"number"},"expiry_duration_length":{"type":"number","description":"Number of periods before expiry.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover.expiry_duration_length","typeLabel":"number"}},"required":["expiry_duration_type"],"description":"Rollover config for unused units. If set, unused included units carry over.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].rollover","typeLabel":"object"},"expiry":{"type":"object","properties":{"duration":{"enum":["day","week","month","year"],"type":"string","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].expiry.duration","typeLabel":"enum\u003cstring>"},"length":{"type":"number","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].expiry.length","typeLabel":"number"}},"required":["duration","length"],"description":"Purchased units expire this long after each purchase. One-off prepaid consumable items only.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].expiry","typeLabel":"object"},"feature_override":{"type":"object","properties":{"credit_schema":{"type":"array","items":{"oneOf":[{"type":"object","required":["metered_feature_id","tier_behavior","tiers"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.metered_feature_id","typeLabel":"string"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.tiers","typeLabel":"object[]"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["metered_feature_id","credit_cost"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature that draws from this credit system.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.metered_feature_id","typeLabel":"string"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.credit_cost","typeLabel":"number"},"billing_units":{"type":"number","exclusiveMinimum":0,"description":"Number of metered-feature units priced together. Defaults to one when omitted.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.billing_units","typeLabel":"number"},"dimensions":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"oneOf":[{"type":"object","required":["match","tier_behavior","tiers"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.match","typeLabel":"object"},"tier_behavior":{"const":"graduated","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tier_behavior","typeLabel":"any"},"tiers":{"type":"array","minItems":1,"items":{"type":"object","properties":{"to":{"oneOf":[{"type":"number","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","minimum":0,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.0","typeLabel":"number"},{"type":"string","description":"Inclusive upper usage boundary for this graduated tier. The final tier must be 'inf'.","enum":["inf"],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to.oneOf.1","typeLabel":"enum\u003cstring>"}],"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].to","typeLabel":"number | enum\u003cstring>"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group within this tier.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX].credit_cost","typeLabel":"number"}},"required":["to","credit_cost"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.tiers","typeLabel":"object[]"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","required":["match","credit_cost"],"properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.match","typeLabel":"object"},"credit_cost":{"type":"number","minimum":0,"description":"Credits consumed per billing-unit group when this dimension matches.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.credit_cost","typeLabel":"number"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Breaks ties between dimensions that match the same number of keys. Higher wins.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1.priority","typeLabel":"integer"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions.additionalProperties","typeLabel":"object"},"description":"Named rates chosen by event properties. The most specific match sets the rate; with no match the item's own rate applies.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.dimensions","typeLabel":"object"},"multipliers":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"type":"object","properties":{"match":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match.additionalProperties","typeLabel":"string"},"description":"Event properties this entry applies to. Every key must equal the tracked property, compared as strings.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.match","typeLabel":"object"},"factor":{"type":"number","exclusiveMinimum":0,"description":"Multiplies the matched rate. All matching multipliers stack.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.factor","typeLabel":"number"},"add":{"type":"number","description":"Added to the rate after every factor is applied, in credits per billing-unit group.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties.add","typeLabel":"number"}},"required":["match"],"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers.additionalProperties","typeLabel":"object"},"description":"Named adjustments chosen by event properties. Every match applies: factors multiply, then adds are summed.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1.multipliers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["metered_feature_id","excluded"],"properties":{"metered_feature_id":{"type":"string","minLength":1,"description":"ID of the metered feature to remove from the credit system.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.metered_feature_id","typeLabel":"string"},"excluded":{"const":true,"description":"Removes this feature from the credit system for customers on this plan. Cannot be combined with a rate.","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2.excluded","typeLabel":"any"}},"additionalProperties":false,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX].oneOf.2","typeLabel":"object"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema.items.[INDEX]","typeLabel":"object"},"description":"For credit system features: merges into the feature's credit_schema by metered_feature_id for customers on this plan. A row with a rate overrides or adds that feature, a row with `excluded: true` removes it, and unlisted features keep the credit system's rate.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.credit_schema","typeLabel":"object[]"},"markups":{"type":"object","properties":{"default_markup":{"type":"number","minimum":-100,"description":"Default percentage markup for customers on this plan. Use -100 to make usage free.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.default_markup","typeLabel":"number"},"provider_markups":{"oneOf":[{"type":"object","description":"Per-provider markup percentages for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"}},"required":["markup"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-provider markup percentages for customers on this plan.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.provider_markups","typeLabel":"object | null"},"model_markups":{"oneOf":[{"type":"object","description":"Per-model markup overrides for customers on this plan.","additionalProperties":{"type":"object","properties":{"markup":{"type":"number","minimum":-100,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.markup","typeLabel":"number"},"input_cost":{"type":"number","minimum":0,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.input_cost","typeLabel":"number"},"output_cost":{"type":"number","minimum":0,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties.output_cost","typeLabel":"number"}},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0.additionalProperties","typeLabel":"object"},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.0","typeLabel":"object"},{"type":"null","description":"Per-model markup overrides for customers on this plan.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups.model_markups","typeLabel":"object | null"}},"additionalProperties":false,"description":"For AI credit system features: replaces the feature's markup chain entirely for customers on this plan. An unset level means no markup at that level rather than inheriting the feature's.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override.markups","typeLabel":"object"}},"additionalProperties":false,"description":"Overrides fields of this item's feature for customers on this plan (e.g. a credit system's credit_schema).","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX].feature_override","typeLabel":"object"}},"required":["feature_id"],"title":"PlanItem","description":"Configuration for a feature item in a plan, including usage limits, pricing, and rollover settings.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items.items.[INDEX]","typeLabel":"PlanItem · object"},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.add_items","typeLabel":"PlanItem · object[]"},"remove_items":{"type":"array","items":{"type":"object","properties":{"feature_id":{"type":"string","description":"Match items linked to this feature.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].feature_id","typeLabel":"string"},"billing_method":{"enum":["prepaid","usage_based"],"type":"string","description":"Match items with this billing method (prepaid or usage_based).","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].billing_method","typeLabel":"enum\u003cstring>"},"interval":{"oneOf":[{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","week","month","quarter","semi_annual","year"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Match items with this interval. Accepts either a BillingInterval (price-side) or a ResetInterval (reset-side, includes day/hour/minute) so price-less items keyed by reset.interval can be disambiguated.","enum":["one_off","minute","hour","day","week","month","quarter","semi_annual","year"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval.oneOf.1","typeLabel":"enum\u003cstring>"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval","typeLabel":"enum\u003cstring>"},"interval_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Match items with this interval_count. Disambiguates between items that share an interval but differ in count.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].interval_count","typeLabel":"integer"},"included":{"type":"number","maximum":10000000000000,"description":"Match items whose grant equals this included usage. Omitted is a wildcard.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX].included","typeLabel":"number"}},"title":"PlanItemFilter","description":"Filter for matching plan items. All provided fields must match (AND).","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items.items.[INDEX]","typeLabel":"PlanItemFilter · object"},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0.remove_items","typeLabel":"PlanItemFilter · object[]"}},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize.oneOf.1","typeLabel":"null"}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].customize","typeLabel":"object | null"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"oneOf":[{}],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].metadata.additionalProperties","typeLabel":"any"},"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX].metadata","typeLabel":"object"}},"required":["license_plan_id"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses.items.[INDEX]","typeLabel":"object"},"description":"License links to add or override for this customer, keyed by license_plan_id. Omitted fields inherit the plan catalog link (included defaults to 1 when the license is not in the catalog). A bare entry restores the license to pure catalog inheritance.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.upsert_licenses","typeLabel":"object[]"},"remove_licenses":{"type":"array","items":{"type":"object","properties":{"license_plan_id":{"type":"string","isRequired":true,"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_licenses.items.[INDEX].license_plan_id","typeLabel":"string"}},"required":["license_plan_id"],"uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_licenses.items.[INDEX]","typeLabel":"object"},"description":"License links to drop, keyed by license_plan_id. Parallel to remove_items.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize.remove_licenses","typeLabel":"object[]"}},"additionalProperties":false,"description":"The customization that transforms the base plan into this variant.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details.customize","typeLabel":"object"}},"required":["base_plan_id"],"description":"Details about how this variant relates to its latest base plan.","uniqueKey":"outgoing.items.[INDEX].plan.variant_details","typeLabel":"object"}},"required":["id","name","description","group","version","add_on","auto_enable","price","items","created_at","env","archived","config","metadata","base_variant_id"],"description":"The full plan object if it was expanded in the response.","uniqueKey":"outgoing.items.[INDEX].plan","typeLabel":"object"}},"required":["plan_id","feature_quantities","effective_at","canceled_at","expires_at"],"uniqueKey":"outgoing.items.[INDEX]","typeLabel":"object"},"description":"Products or subscription changes being removed or ended.","isRequired":true,"uniqueKey":"outgoing","typeLabel":"object[]"},"intent":{"enum":["update_plan","update_quantity","cancel_immediately","cancel_end_of_cycle","uncancel","none"],"type":"string","isRequired":true,"uniqueKey":"intent","typeLabel":"enum\u003cstring>"},"resets_usage":{"type":"boolean","description":"True when this change clears the customer's usage balances, so the approver can see usage will reset.","uniqueKey":"resets_usage","typeLabel":"boolean"},"next_cycle":{"type":"object","properties":{"starts_at":{"type":"number","description":"Unix timestamp (milliseconds) when the next billing cycle starts.","isRequired":true,"uniqueKey":"next_cycle.starts_at","typeLabel":"number"},"subtotal":{"type":"number","description":"The total amount before discounts and tax for the next cycle.","isRequired":true,"uniqueKey":"next_cycle.subtotal","typeLabel":"number"},"total":{"type":"number","description":"The final amount after discounts and tax for the next cycle.","isRequired":true,"uniqueKey":"next_cycle.total","typeLabel":"number"},"line_items":{"type":"array","items":{"type":"object","properties":{"display_name":{"type":"string","description":"The name of the line item to display to the customer if you're building a UI. It will either be the plan name or the feature name.","isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].display_name","typeLabel":"string"},"description":{"type":"string","description":"A detailed description of the line item.","isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].description","typeLabel":"string"},"subtotal":{"type":"number","description":"The amount before discounts and tax for this line item.","isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].subtotal","typeLabel":"number"},"total":{"type":"number","description":"The final amount after discounts and tax for this line item.","isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].total","typeLabel":"number"},"plan_id":{"type":"string","description":"The ID of the plan that this line item belongs to.","isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].plan_id","typeLabel":"string"},"feature_id":{"oneOf":[{"type":"string","description":"The ID of the feature that this line item belongs to.","isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].feature_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The ID of the feature that this line item belongs to.","isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].feature_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].feature_id","typeLabel":"string | null"},"quantity":{"type":"number","description":"The quantity of the line item.","isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].quantity","typeLabel":"number"},"discounts":{"type":"array","items":{"type":"object","properties":{"amount_off":{"type":"number","isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].discounts.items.[INDEX].amount_off","typeLabel":"number"},"percent_off":{"type":"number","uniqueKey":"next_cycle.line_items.items.[INDEX].discounts.items.[INDEX].percent_off","typeLabel":"number"},"reward_id":{"type":"string","uniqueKey":"next_cycle.line_items.items.[INDEX].discounts.items.[INDEX].reward_id","typeLabel":"string"},"reward_name":{"type":"string","uniqueKey":"next_cycle.line_items.items.[INDEX].discounts.items.[INDEX].reward_name","typeLabel":"string"}},"required":["amount_off"],"uniqueKey":"next_cycle.line_items.items.[INDEX].discounts.items.[INDEX]","typeLabel":"object"},"default":[],"description":"List of discounts applied to this line item.","uniqueKey":"next_cycle.line_items.items.[INDEX].discounts","typeLabel":"object[]"},"period":{"type":"object","properties":{"start":{"type":"number","description":"The start of the period in milliseconds since the Unix epoch.","isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].period.start","typeLabel":"number"},"end":{"type":"number","description":"The end of the period in milliseconds since the Unix epoch.","isRequired":true,"uniqueKey":"next_cycle.line_items.items.[INDEX].period.end","typeLabel":"number"}},"required":["start","end"],"description":"The period of time that this line item is being charged for.","uniqueKey":"next_cycle.line_items.items.[INDEX].period","typeLabel":"object"}},"required":["display_name","description","subtotal","total","plan_id","feature_id","quantity"],"uniqueKey":"next_cycle.line_items.items.[INDEX]","typeLabel":"object"},"description":"List of line items for the next billing cycle.","isRequired":true,"uniqueKey":"next_cycle.line_items","typeLabel":"object[]"},"usage_line_items":{"type":"array","items":{"type":"object","properties":{"display_name":{"type":"string","description":"The name of the line item to display to the customer if you're building a UI. It will either be the plan name or the feature name.","isRequired":true,"uniqueKey":"next_cycle.usage_line_items.items.[INDEX].display_name","typeLabel":"string"},"plan_id":{"type":"string","description":"The ID of the plan that this line item belongs to.","isRequired":true,"uniqueKey":"next_cycle.usage_line_items.items.[INDEX].plan_id","typeLabel":"string"},"feature_id":{"oneOf":[{"type":"string","description":"The ID of the feature that this line item belongs to.","isRequired":true,"uniqueKey":"next_cycle.usage_line_items.items.[INDEX].feature_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The ID of the feature that this line item belongs to.","isRequired":true,"uniqueKey":"next_cycle.usage_line_items.items.[INDEX].feature_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"next_cycle.usage_line_items.items.[INDEX].feature_id","typeLabel":"string | null"},"period":{"type":"object","properties":{"start":{"type":"number","description":"The start of the period in milliseconds since the Unix epoch.","isRequired":true,"uniqueKey":"next_cycle.usage_line_items.items.[INDEX].period.start","typeLabel":"number"},"end":{"type":"number","description":"The end of the period in milliseconds since the Unix epoch.","isRequired":true,"uniqueKey":"next_cycle.usage_line_items.items.[INDEX].period.end","typeLabel":"number"}},"required":["start","end"],"description":"The period of time that this line item is being charged for.","uniqueKey":"next_cycle.usage_line_items.items.[INDEX].period","typeLabel":"object"}},"required":["display_name","plan_id","feature_id"],"uniqueKey":"next_cycle.usage_line_items.items.[INDEX]","typeLabel":"object"},"description":"List of line items for usage-based features in the next cycle.","isRequired":true,"uniqueKey":"next_cycle.usage_line_items","typeLabel":"object[]"}},"required":["starts_at","subtotal","total","line_items","usage_line_items"],"description":"Preview of the next billing cycle, if applicable. This shows what the customer will be charged in subsequent cycles.","uniqueKey":"next_cycle","typeLabel":"object"},"expand":{"type":"array","items":{"type":"string","uniqueKey":"expand.items.[INDEX]","typeLabel":"string"},"description":"Expand the response with additional data.","uniqueKey":"expand","typeLabel":"string[]"},"tax":{"type":"object","properties":{"total":{"type":"number","description":"Total tax amount in major currency units.","isRequired":true,"uniqueKey":"tax.total","typeLabel":"number"},"amount_inclusive":{"type":"number","description":"Tax included in line item subtotals.","isRequired":true,"uniqueKey":"tax.amount_inclusive","typeLabel":"number"},"amount_exclusive":{"type":"number","description":"Tax added on top of subtotals.","isRequired":true,"uniqueKey":"tax.amount_exclusive","typeLabel":"number"},"currency":{"type":"string","description":"Three-letter currency code.","isRequired":true,"uniqueKey":"tax.currency","typeLabel":"string"},"status":{"enum":["complete","incomplete","requires_location"],"type":"string","description":"Calculation status. 'complete' when tax was calculated, 'incomplete' when the calculation errored, 'requires_location' when the customer has no billing address to tax against.","isRequired":true,"uniqueKey":"tax.status","typeLabel":"enum\u003cstring>"}},"required":["total","amount_inclusive","amount_exclusive","currency","status"],"description":"Tax preview for the immediate charge. Contact us to enable the tax flag on your organisation. Shows only with flag enabled, a Stripe customer exists and has a location.","uniqueKey":"tax","typeLabel":"object"},"invoice_credits":{"type":"object","properties":{"balance":{"type":"number","description":"Stripe customer credit balance available, expressed as a positive number in major currency units.","isRequired":true,"uniqueKey":"invoice_credits.balance","typeLabel":"number"},"currency":{"type":"string","description":"Three-letter currency code.","isRequired":true,"uniqueKey":"invoice_credits.currency","typeLabel":"string"},"applied":{"type":"number","description":"How much of that balance this invoice consumes, capped at its total. The rest stays on the customer.","uniqueKey":"invoice_credits.applied","typeLabel":"number"}},"required":["balance","currency"],"description":"Stripe customer invoice credits preview.","uniqueKey":"invoice_credits","typeLabel":"object"}},"required":["customer_id","line_items","subtotal","total","currency","immediate_invoice","incoming","outgoing","intent"],"examples":[{"customerId":"charles","lineItems":[{"display_name":"Pro seed","description":"Pro seed (from 18 Feb 2026 to 18 Mar 2026)","subtotal":20,"total":20,"discounts":[]}],"subtotal":20,"total":20,"currency":"usd"}],"uniqueKey":"","typeLabel":"object"},"example":{"customerId":"charles","lineItems":[{"display_name":"Pro seed","description":"Pro seed (from 18 Feb 2026 to 18 Mar 2026)","subtotal":20,"total":20,"discounts":[]}],"subtotal":20,"total":20,"currency":"usd"},"examples":{"Example":{"title":"Example","value":{"customerId":"charles","lineItems":[{"display_name":"Pro seed","description":"Pro seed (from 18 Feb 2026 to 18 Mar 2026)","subtotal":20,"total":20,"discounts":[]}],"subtotal":20,"total":20,"currency":"usd"}}},"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":"Preview Update - Autumn","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T15:24:15.992Z","originalFileLocation":"api-reference/billing/previewUpdate.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=\"Previews the billing changes that would occur when updating a subscription, without actually making any changes. Use this endpoint to show customers prorated charges or refunds before confirming subscription modifications.\">\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=\"Preview Update - Autumn\">\u003cmeta data-mint-head property=\"og:description\" content=\"Previews the billing changes that would occur when updating a subscription, without actually making any changes. Use this endpoint to show customers prorated charges or refunds before confirming subscription modifications.\">\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/previewUpdate\">\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=Previews\u0026amp;title=Preview+Update\u0026amp;description=Previews+the+billing+changes+that+would+occur+when+updating+a+subscription%2C+without+actually+making+any+changes.%0A%0AUse+this+endpoint+to+show+customers+prorated+c\u0026amp;theme=3bf7e6d15826cac91d0b643c\u0026amp;signature=05b3955d36b74572abb0827a77b77c7615467ca69d7da5f5da044c6a41d9bd70\">\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=\"Preview Update - Autumn\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Previews the billing changes that would occur when updating a subscription, without actually making any changes. Use this endpoint to show customers prorated charges or refunds before confirming subscription modifications.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://autumn-b9b4c0fb.mintlify.app/_mintlify/api/og/v2?division=Previews\u0026amp;title=Preview+Update\u0026amp;description=Previews+the+billing+changes+that+would+occur+when+updating+a+subscription%2C+without+actually+making+any+changes.%0A%0AUse+this+endpoint+to+show+customers+prorated+c\u0026amp;theme=3bf7e6d15826cac91d0b643c\u0026amp;signature=05b3955d36b74572abb0827a77b77c7615467ca69d7da5f5da044c6a41d9bd70\">\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/previewUpdate\">\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/previewUpdate.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/previewUpdate#webpage\",\"url\":\"https://docs.useautumn.com/api-reference/billing/previewUpdate\",\"name\":\"Preview Update\",\"description\":\"Previews the billing changes that would occur when updating a subscription, without actually making any changes. Use this endpoint to show customers prorated charges or refunds before confirming subscription modifications.\",\"dateModified\":\"2026-10-26T15:24:15.992Z\",\"isPartOf\":{\"@id\":\"https://docs.useautumn.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.useautumn.com/api-reference/billing/previewUpdate#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.useautumn.com/api-reference/billing/previewUpdate#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Billing\",\"item\":\"https://docs.useautumn.com/api-reference/billing/attach\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Previews\",\"item\":\"https://docs.useautumn.com/api-reference/billing/previewAttach\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Preview Update\",\"item\":\"https://docs.useautumn.com/api-reference/billing/previewUpdate\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.useautumn.com/api-reference/billing/previewUpdate#apireference\",\"headline\":\"Preview Update\",\"name\":\"Preview Update\",\"description\":\"Previews the billing changes that would occur when updating a subscription, without actually making any changes. Use this endpoint to show customers prorated charges or refunds before confirming subscription modifications.\",\"url\":\"https://docs.useautumn.com/api-reference/billing/previewUpdate\",\"mainEntityOfPage\":{\"@id\":\"https://docs.useautumn.com/api-reference/billing/previewUpdate#webpage\"},\"dateModified\":\"2026-10-26T15:24:15.992Z\",\"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","href":"/api-reference/billing/attach"},{"title":"Update Subscription","openapi":"openapi POST /v1/billing.update","href":"/api-reference/billing/billingUpdate"},{"title":"Open Customer Portal","openapi":"openapi POST /v1/billing.open_customer_portal","href":"/api-reference/billing/openCustomerPortal"},{"title":"Setup Payment","openapi":"openapi POST /v1/billing.setup_payment","href":"/api-reference/billing/setupPayment"},{"title":"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","description":"Previews the billing changes that would occur when attaching a plan, without actually making any changes.\n\nUse this endpoint to show customers what they will be charged before confirming a subscription change.","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","description":"Previews the billing changes that would occur when attaching multiple plans, without actually making any changes.\n\nUse this endpoint to show customers what they will be charged before confirming a multi-plan subscription.","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":"Preview Update - 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"]}