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.
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.
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.
Key-value metadata to attach to the Stripe subscription, invoice, and checkout session created during this attach flow. Keys prefixed with 'autumn_' are reserved and will be stripped.
If true, the customer's plan is activated immediately even when payment is deferred (invoice mode) or pending (Stripe checkout). For Stripe checkout, the customer_product is inserted before the customer completes the hosted form. Set it here rather than on invoice_mode, which only covers the invoice-unpaid case.
Billing address, tax IDs and tax exemption to save to the customer before billing. Lets an invoice-mode attach supply the address automatic tax needs in the same call.
Currency to bill this attach in (e.g. usd, eur). Must match the customer's currency if they are already locked to one. Without customize, the plan must offer a paid price in it. With customize, every price that states no currency of its own is billed in this currency at the amount given (not converted), so a one-off contract in e.g. EUR needs no plan-level currency setup. Defaults to the customer's currency, then the org default.
Plan IDs to expire on the customer as part of this attach. Each must be an active plan. When no plan in the same group is being replaced, the attach takes over the subscription of the first paid plan listed here, unless new_billing_subscription is true (paid plans cannot be removed in that case). Any other paid plan must be billed on that same subscription (free plans can always be removed). Only allowed when the new plan starts immediately (not with plan_schedule: end_of_cycle, or a future starts_at without enable_plan_immediately).
The ID of the entity the plan (if specified) will be attached to after setup.
{"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/setupPayment","slug":"/api-reference/billing/setupPayment","pageMetadata":{"title":"Setup Payment","openapi":"openapi POST /v1/billing.setup_payment","description":"Create a payment setup session for a customer to add or update their payment method.","href":"/api-reference/billing/setupPayment"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create a payment setup session for a customer to add or update their payment method.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const DynamicResponseExample=({json,statusCode=`200`})=>{const{CodeBlock,ResponseExample}=_provideComponents()||{};if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);const toCamelCase=str=>{return str.replace(/_([a-z])/g,(_,c)=>c.toUpperCase())};const convertKeysToCamelCase=obj=>{if(Array.isArray(obj)){return obj.map(item=>convertKeysToCamelCase(item))}if(obj!==null\u0026\u0026typeof obj===`object`){return Object.keys(obj).reduce((acc,key)=>{const camelKey=toCamelCase(key);acc[camelKey]=convertKeysToCamelCase(obj[key]);return acc},{})}return obj};const[isTypeScript,setIsTypeScript]=useState(()=>{if(typeof window!==`undefined`){try{const lang=localStorage.getItem(`code`);return JSON.parse(lang)===`typescript`}catch{return true}}return true});useEffect(()=>{const onMintlifyStorage=event=>{if(event.detail?.key===`code`){try{const value=JSON.parse(event.detail.value);setIsTypeScript(value===`typescript`)}catch{}}};const pollInterval=setInterval(()=>{try{const lang=localStorage.getItem(`code`);const value=JSON.parse(lang);setIsTypeScript(value===`typescript`)}catch{}},300);document.addEventListener(`mintlify-localstorage`,onMintlifyStorage);return()=>{document.removeEventListener(`mintlify-localstorage`,onMintlifyStorage);clearInterval(pollInterval)}},[]);const camelCaseJson=useMemo(()=>convertKeysToCamelCase(json),[json]);const snakeCaseString=JSON.stringify(json,null,2);const camelCaseString=JSON.stringify(camelCaseJson,null,2);return _jsx(ResponseExample,{children:isTypeScript?_jsx(CodeBlock,{language:`json`,filename:statusCode,children:camelCaseString}):_jsx(CodeBlock,{language:`json`,filename:statusCode,children:snakeCaseString})})};const DynamicResponseField=({children,name,...props})=>{const{ResponseField}=_provideComponents()||{};if(!ResponseField)_missingMdxReference(`ResponseField`,true);const convertToCamelCase=str=>{if(typeof str!==`string`)return str;return str.replace(/[_-](\\w)/g,(_,c)=>c.toUpperCase())};const[lang,setLang]=useState(()=>{if(typeof window!==`undefined`){const stored=localStorage.getItem(`code`);return stored||`\"typescript\"`}return`\"typescript\"`});useEffect(()=>{const onMintlifyStorage=event=>{const key=event.detail?.key;if(key===`code`){setLang(event.detail.value)}};const pollInterval=setInterval(()=>{const current=localStorage.getItem(`code`);if(current\u0026\u0026current!==lang){setLang(current)}},500);document.addEventListener(`mintlify-localstorage`,onMintlifyStorage);return()=>{document.removeEventListener(`mintlify-localstorage`,onMintlifyStorage);clearInterval(pollInterval)}},[lang]);const resolvedName=useMemo(()=>{try{const value=JSON.parse(lang);const useCamelCase=value===`typescript`;return useCamelCase?convertToCamelCase(name):name}catch{return name}},[name,lang]);return _jsx(ResponseField,{name:resolvedName,...props,children})};const DynamicParamField=({children,body,path,...props})=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);const convertToCamelCase=str=>{if(typeof str!==`string`)return str;return str.replace(/[_-](\\w)/g,(_,c)=>c.toUpperCase())};const[lang,setLang]=useState(()=>{if(typeof window!==`undefined`){const stored=localStorage.getItem(`code`);return stored||`\"typescript\"`}return`\"typescript\"`});useEffect(()=>{const onMintlifyStorage=event=>{const key=event.detail?.key;if(key===`code`){setLang(event.detail.value)}};const pollInterval=setInterval(()=>{const current=localStorage.getItem(`code`);if(current\u0026\u0026current!==lang){setLang(current)}},500);document.addEventListener(`mintlify-localstorage`,onMintlifyStorage);return()=>{document.removeEventListener(`mintlify-localstorage`,onMintlifyStorage);clearInterval(pollInterval)}},[lang]);const resolvedBody=useMemo(()=>{try{const value=JSON.parse(lang);const useCamelCase=value===`typescript`;return useCamelCase?convertToCamelCase(body):body}catch{return body}},[body,lang]);const resolvedPath=useMemo(()=>{try{const value=JSON.parse(lang);const useCamelCase=value===`typescript`;return useCamelCase?convertToCamelCase(path):path}catch{return path}},[path,lang]);return _jsx(ParamField,{body:resolvedBody,path:resolvedPath,...props,children})};function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,..._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:`If specified, the plan will be attached to the customer after setup.`})})}),`\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:_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:`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:_jsx(DynamicParamField,{body:`success_url`,type:`string`,children:_jsx(_components.p,{children:`URL to redirect to after successful checkout.`})})}),`\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:`starts_at`,type:`integer`,children:_jsx(_components.p,{children:`Unix timestamp in milliseconds for when the attached plan should start. Future dates create a scheduled subscription.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`ends_at`,type:`integer`,children:_jsx(_components.p,{children:`Unix timestamp in milliseconds for when the attached plan should end.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`checkout_session_params`,type:`object`,children:_jsx(_components.p,{children:`Additional parameters to pass into the creation of the Stripe checkout session.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`custom_line_items`,type:`object[]`,children:[_jsx(_components.p,{children:`Custom line items that override the auto-generated proration invoice. Only valid for immediate plan changes (eg. upgrades or one off plans).`}),_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:`processor_subscription_id`,type:`string`,children:_jsx(_components.p,{children:`The processor subscription ID to link. Use this to attach an existing Stripe subscription instead of creating a new one.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`carry_over_balances`,type:`object`,children:[_jsx(_components.p,{children:`Whether to carry over balances 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 balances 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 balances from. If left undefined, all features will be carried over.`})})})]})]})}),`\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:`Seat quantities for the plan’s licenses, keyed by license plan.`}),_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(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`metadata.{key}`,type:`string`,children:_jsx(_components.p,{children:`Key-value metadata to attach to the Stripe subscription, invoice, and checkout session created during this attach flow. Keys prefixed with ‘autumn_’ are reserved and will be stripped.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`no_billing_changes`,type:`boolean`,children:_jsx(_components.p,{children:`If true, skips any billing changes for the attach operation.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`enable_plan_immediately`,type:`boolean`,children:_jsxs(_components.p,{children:[`If true, the customer’s plan is activated immediately even when payment is deferred (invoice mode) or pending (Stripe checkout). For Stripe checkout, the customer_product is inserted before the customer completes the hosted form. Set it here rather than on `,_jsx(_components.code,{children:`invoice_mode`}),`, which only covers the invoice-unpaid case.`]})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`tax`,type:`object`,children:[_jsx(_components.p,{children:`Tax behavior for this attach. Use automatic_tax to turn automatic tax on or off for this request, or rate_id to apply a fixed tax rate.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`automatic_tax`,type:`object`,children:[_jsx(_components.p,{children:`Override the organization’s automatic tax setting for this request. Can’t be enabled together with rate_id or tax_rate_id.`}),_jsx(Expandable,{title:`properties`,children:_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`enabled`,type:`boolean`,required:true,children:_jsx(_components.p,{children:`Whether to calculate tax automatically through Stripe for this request. Defaults to the organization’s automatic tax setting.`})})})})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`rate_id`,type:`string`,children:_jsx(_components.p,{children:`Stripe tax rate ID (txr_…) to apply instead of automatic tax. Takes precedence over the top-level tax_rate_id.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`billing_details`,type:`object`,children:[_jsx(_components.p,{children:`Billing address, tax IDs and tax exemption to save to the customer before billing. Lets an invoice-mode attach supply the address automatic tax needs in the same call.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`address`,type:`object`,children:[_jsx(_components.p,{children:`Billing address saved to the customer and used to calculate tax. Replaces the customer’s whole address.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`line1`,type:`string | null`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`line2`,type:`string | null`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`city`,type:`string | null`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`state`,type:`string | null`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`postal_code`,type:`string | null`})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`country`,type:`string | null`,children:_jsx(_components.p,{children:`Two-letter country code (ISO 3166-1 alpha-2).`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsxs(DynamicParamField,{body:`tax_ids`,type:`object[]`,children:[_jsx(_components.p,{children:`Tax IDs to add to the customer. IDs the customer already has are ignored, and existing IDs are never removed. To remove one, use customers.update or Stripe.`}),_jsxs(Expandable,{title:`properties`,children:[_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`type`,type:`string`,required:true,children:_jsxs(_components.p,{children:[`Stripe tax ID type, e.g. eu_vat, gb_vat, us_ein. See `,_jsx(_components.a,{href:`https://docs.stripe.com/billing/customer/tax-ids#supported-tax-id`,children:`https://docs.stripe.com/billing/customer/tax-ids#supported-tax-id`})]})})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`value`,type:`string`,required:true,children:_jsx(_components.p,{children:`The tax ID, e.g. DE123456789.`})})})]})]})}),_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`tax_exempt`,type:`'none' | 'exempt' | 'reverse'`,children:_jsx(_components.p,{children:`Customer tax exemption status. ‘exempt’ customers are never charged tax and need no address. ‘reverse’ applies reverse charge.`})})})]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`tax_rate_id`,type:`string`,children:_jsx(_components.p,{children:`Stripe tax rate ID (txr_…) to apply as the default tax rate on the created subscription, invoice, or checkout session line items.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`currency`,type:`string`,children:_jsxs(_components.p,{children:[`Currency to bill this attach in (e.g. usd, eur). Must match the customer’s currency if they are already locked to one. Without `,_jsx(_components.code,{children:`customize`}),`, the plan must offer a paid price in it. With `,_jsx(_components.code,{children:`customize`}),`, every price that states no currency of its own is billed in this currency at the amount given (not converted), so a one-off contract in e.g. EUR needs no plan-level currency setup. Defaults to the customer’s currency, then the org default.`]})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicParamField`,children:_jsx(DynamicParamField,{body:`remove_plan_ids`,type:`string[]`,children:_jsxs(_components.p,{children:[`Plan IDs to expire on the customer as part of this attach. Each must be an active plan. When no plan in the same group is being replaced, the attach takes over the subscription of the first paid plan listed here, unless `,_jsx(_components.code,{children:`new_billing_subscription`}),` is true (paid plans cannot be removed in that case). Any other paid plan must be billed on that same subscription (free plans can always be removed). Only allowed when the new plan starts immediately (not with `,_jsx(_components.code,{children:`plan_schedule: end_of_cycle`}),`, or a future `,_jsx(_components.code,{children:`starts_at`}),` without `,_jsx(_components.code,{children:`enable_plan_immediately`}),`).`]})})}),`\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(Heading,{level:`3`,id:`response`,children:`Response`}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`customer_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the customer`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`entity_id`,type:`string`,children:_jsx(_components.p,{children:`The ID of the entity the plan (if specified) will be attached to after setup.`})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DynamicResponseField`,children:_jsx(DynamicResponseField,{name:`url`,type:`string`,children:_jsx(_components.p,{children:`URL to redirect the customer to setup their payment.`})})})]})}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":"Setup Payment","openapi":"openapi POST /v1/billing.setup_payment","description":"Create a payment setup session for a customer to add or update their payment method.","href":"/api-reference/billing/setupPayment"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[158,4333,")=>null;const DynamicResponseField=()=>null;const DynamicParamField=()=>null;fun"],[4407,4506,"pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Expandable,Heading,ResponseExample,_MdxComponentBoundary}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true)"],[4615,4630,"ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!_MdxComponentBo"],[96504,96515,",`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`200`,numberOfLines:`4`,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:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"customer_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cus_123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://checkout.stripe.com/...\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})})]})}functio"]]},"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=\"4\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"customer_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"cus_123\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"url\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"https://checkout.stripe.com/...\"\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":"setupPayment","description":"Create a payment setup session for a customer to add or update their payment method.","tags":["billing"],"requestBody":"6abf9add-a076-4847-a4ff-3f6f89d5449e","responses":{"200":"d9ec6fc0-db10-46f4-9e00-8a789610e132"},"x-speakeasy-name-override":"setupPayment","parameters":["55790d01-189e-40bc-b26b-1427c0e0fa40"],"x-codeSamples":[{"lang":"typescript","label":"Typescript (SDK)","source":"import { Autumn } from 'autumn-js'\n\nconst autumn = new Autumn()\n\nconst result = await autumn.billing.setupPayment({\n customerId: \"cus_123\",\n successUrl: \"https://example.com/account/billing\",\n});"},{"lang":"python","label":"Python (SDK)","source":"from autumn_sdk import Autumn\n\nautumn = Autumn(secret_key=\"am_sk_test...\")\n\nres = autumn.billing.setup_payment(\n customer_id=\"cus_123\",\n success_url=\"https://example.com/account/billing\",\n)"}],"method":"post","type":"path","servers":["fe6701f7-be5c-40aa-b244-1a6f83c52f58"],"security":["53876c4e-3cd5-4c7e-b82b-fb98671718cb"],"path":"/v1/billing.setup_payment","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.setupPayment({\n customerId: \"cus_123\",\n successUrl: \"https://example.com/account/billing\",\n});"},{"label":"Python (SDK)","lang":"python","source":"from autumn_sdk import Autumn\n\nautumn = Autumn(secret_key=\"am_sk_test...\")\n\nres = autumn.billing.setup_payment(\n customer_id=\"cus_123\",\n success_url=\"https://example.com/account/billing\",\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":"4","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"{"}}}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"customer_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"cus_123\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"url\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"https://checkout.stripe.com/...\""}}]}},"\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"]}}}},"filename":"200"}],"responseExampleType":"mdx"},"dependencies":{"parameters":{"55790d01-189e-40bc-b26b-1427c0e0fa40":{"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":"If specified, the plan will be attached to the customer after setup.","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"},"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>"},"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[]"},"success_url":{"type":"string","description":"URL to redirect to after successful checkout.","uniqueKey":"success_url","typeLabel":"string"},"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"},"starts_at":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Unix timestamp in milliseconds for when the attached plan should start. Future dates create a scheduled subscription.","uniqueKey":"starts_at","typeLabel":"integer"},"ends_at":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Unix timestamp in milliseconds for when the attached plan should end.","uniqueKey":"ends_at","typeLabel":"integer"},"checkout_session_params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"oneOf":[{}],"uniqueKey":"checkout_session_params.additionalProperties","typeLabel":"any"},"description":"Additional parameters to pass into the creation of the Stripe checkout session.","uniqueKey":"checkout_session_params","typeLabel":"object"},"custom_line_items":{"type":"array","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 override the auto-generated proration invoice. Only valid for immediate plan changes (eg. upgrades or one off plans).","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[]"},"processor_subscription_id":{"type":"string","description":"The processor subscription ID to link. Use this to attach an existing Stripe subscription instead of creating a new one.","uniqueKey":"processor_subscription_id","typeLabel":"string"},"carry_over_balances":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to carry over balances from the previous plan.","isRequired":true,"uniqueKey":"carry_over_balances.enabled","typeLabel":"boolean"},"feature_ids":{"type":"array","items":{"type":"string","uniqueKey":"carry_over_balances.feature_ids.items.[INDEX]","typeLabel":"string"},"description":"The IDs of the features to carry over balances from. If left undefined, all features will be carried over.","uniqueKey":"carry_over_balances.feature_ids","typeLabel":"string[]"}},"required":["enabled"],"description":"Whether to carry over balances from the previous plan.","uniqueKey":"carry_over_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":"Seat quantities for the plan's licenses, keyed by license plan.","uniqueKey":"license_quantities","typeLabel":"object[]"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"description":"Key-value metadata to attach to the Stripe subscription, invoice, and checkout session created during this attach flow. Keys prefixed with 'autumn_' are reserved and will be stripped.","uniqueKey":"metadata","typeLabel":"object"},"no_billing_changes":{"type":"boolean","description":"If true, skips any billing changes for the attach operation.","uniqueKey":"no_billing_changes","typeLabel":"boolean"},"enable_plan_immediately":{"type":"boolean","description":"If true, the customer's plan is activated immediately even when payment is deferred (invoice mode) or pending (Stripe checkout). For Stripe checkout, the customer_product is inserted before the customer completes the hosted form. Set it here rather than on `invoice_mode`, which only covers the invoice-unpaid case.","uniqueKey":"enable_plan_immediately","typeLabel":"boolean"},"tax":{"type":"object","properties":{"automatic_tax":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to calculate tax automatically through Stripe for this request. Defaults to the organization's automatic tax setting.","isRequired":true,"uniqueKey":"tax.automatic_tax.enabled","typeLabel":"boolean"}},"required":["enabled"],"description":"Override the organization's automatic tax setting for this request. Can't be enabled together with rate_id or tax_rate_id.","uniqueKey":"tax.automatic_tax","typeLabel":"object"},"rate_id":{"type":"string","description":"Stripe tax rate ID (txr_...) to apply instead of automatic tax. Takes precedence over the top-level tax_rate_id.","uniqueKey":"tax.rate_id","typeLabel":"string"}},"description":"Tax behavior for this attach. Use automatic_tax to turn automatic tax on or off for this request, or rate_id to apply a fixed tax rate.","uniqueKey":"tax","typeLabel":"object"},"billing_details":{"type":"object","properties":{"address":{"type":"object","properties":{"line1":{"oneOf":[{"type":"string","uniqueKey":"billing_details.address.line1.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"billing_details.address.line1.oneOf.1","typeLabel":"null"}],"uniqueKey":"billing_details.address.line1","typeLabel":"string | null"},"line2":{"oneOf":[{"type":"string","uniqueKey":"billing_details.address.line2.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"billing_details.address.line2.oneOf.1","typeLabel":"null"}],"uniqueKey":"billing_details.address.line2","typeLabel":"string | null"},"city":{"oneOf":[{"type":"string","uniqueKey":"billing_details.address.city.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"billing_details.address.city.oneOf.1","typeLabel":"null"}],"uniqueKey":"billing_details.address.city","typeLabel":"string | null"},"state":{"oneOf":[{"type":"string","uniqueKey":"billing_details.address.state.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"billing_details.address.state.oneOf.1","typeLabel":"null"}],"uniqueKey":"billing_details.address.state","typeLabel":"string | null"},"postal_code":{"oneOf":[{"type":"string","uniqueKey":"billing_details.address.postal_code.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"billing_details.address.postal_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"billing_details.address.postal_code","typeLabel":"string | null"},"country":{"oneOf":[{"type":"string","description":"Two-letter country code (ISO 3166-1 alpha-2).","uniqueKey":"billing_details.address.country.oneOf.0","typeLabel":"string"},{"type":"null","description":"Two-letter country code (ISO 3166-1 alpha-2).","uniqueKey":"billing_details.address.country.oneOf.1","typeLabel":"null"}],"uniqueKey":"billing_details.address.country","typeLabel":"string | null"}},"description":"Billing address saved to the customer and used to calculate tax. Replaces the customer's whole address.","uniqueKey":"billing_details.address","typeLabel":"object"},"tax_ids":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"Stripe tax ID type, e.g. eu_vat, gb_vat, us_ein. See https://docs.stripe.com/billing/customer/tax-ids#supported-tax-id","isRequired":true,"uniqueKey":"billing_details.tax_ids.items.[INDEX].type","typeLabel":"string"},"value":{"type":"string","description":"The tax ID, e.g. DE123456789.","isRequired":true,"uniqueKey":"billing_details.tax_ids.items.[INDEX].value","typeLabel":"string"}},"required":["type","value"],"title":"BillingDetailsTaxId","uniqueKey":"billing_details.tax_ids.items.[INDEX]","typeLabel":"BillingDetailsTaxId · object"},"description":"Tax IDs to add to the customer. IDs the customer already has are ignored, and existing IDs are never removed. To remove one, use customers.update or Stripe.","uniqueKey":"billing_details.tax_ids","typeLabel":"BillingDetailsTaxId · object[]"},"tax_exempt":{"enum":["none","exempt","reverse"],"type":"string","description":"Customer tax exemption status. 'exempt' customers are never charged tax and need no address. 'reverse' applies reverse charge.","uniqueKey":"billing_details.tax_exempt","typeLabel":"enum\u003cstring>"}},"description":"Billing address, tax IDs and tax exemption to save to the customer before billing. Lets an invoice-mode attach supply the address automatic tax needs in the same call.","uniqueKey":"billing_details","typeLabel":"object"},"tax_rate_id":{"type":"string","description":"Stripe tax rate ID (txr_...) to apply as the default tax rate on the created subscription, invoice, or checkout session line items.","uniqueKey":"tax_rate_id","typeLabel":"string"},"currency":{"type":"string","description":"Currency to bill this attach in (e.g. usd, eur). Must match the customer's currency if they are already locked to one. Without `customize`, the plan must offer a paid price in it. With `customize`, every price that states no currency of its own is billed in this currency at the amount given (not converted), so a one-off contract in e.g. EUR needs no plan-level currency setup. Defaults to the customer's currency, then the org default.","uniqueKey":"currency","typeLabel":"string"},"remove_plan_ids":{"type":"array","items":{"type":"string","uniqueKey":"remove_plan_ids.items.[INDEX]","typeLabel":"string"},"description":"Plan IDs to expire on the customer as part of this attach. Each must be an active plan. When no plan in the same group is being replaced, the attach takes over the subscription of the first paid plan listed here, unless `new_billing_subscription` is true (paid plans cannot be removed in that case). Any other paid plan must be billed on that same subscription (free plans can always be removed). Only allowed when the new plan starts immediately (not with `plan_schedule: end_of_cycle`, or a future `starts_at` without `enable_plan_immediately`).","uniqueKey":"remove_plan_ids","typeLabel":"string[]"},"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[]"}},"required":["customer_id"],"title":"SetupPaymentParams","examples":[{"customer_id":"cus_123","success_url":"https://example.com/account/billing"}],"uniqueKey":"","typeLabel":"SetupPaymentParams · object"},"example":{"customer_id":"cus_123","success_url":"https://example.com/account/billing"},"examples":{"Example":{"title":"Example","value":{"customer_id":"cus_123","success_url":"https://example.com/account/billing"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"d9ec6fc0-db10-46f4-9e00-8a789610e132":{"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"},"url":{"type":"string","description":"URL to redirect the customer to setup their payment.","isRequired":true,"uniqueKey":"url","typeLabel":"string"},"entity_id":{"type":"string","description":"The ID of the entity the plan (if specified) will be attached to after setup.","uniqueKey":"entity_id","typeLabel":"string"}},"required":["customer_id","url"],"title":"SetupPaymentResponse","examples":[{"customer_id":"cus_123","url":"https://checkout.stripe.com/..."}],"uniqueKey":"","typeLabel":"SetupPaymentResponse · object"},"example":{"customer_id":"cus_123","url":"https://checkout.stripe.com/..."},"examples":{"Example":{"title":"Example","value":{"customer_id":"cus_123","url":"https://checkout.stripe.com/..."}}},"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":"Setup Payment - Autumn","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T19:08:00.531Z","originalFileLocation":"api-reference/billing/setupPayment.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=\"Create a payment setup session for a customer to add or update their payment method.\">\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=\"Setup Payment - Autumn\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create a payment setup session for a customer to add or update their payment method.\">\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/setupPayment\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://autumn-b9b4c0fb.mintlify.app/_mintlify/api/og/v2?division=Billing\u0026amp;title=Setup+Payment\u0026amp;description=Create+a+payment+setup+session+for+a+customer+to+add+or+update+their+payment+method.\u0026amp;theme=3bf7e6d15826cac91d0b643c\u0026amp;signature=628ebea41d210966b0cbc08e2a57dfd235c828f4ab959a00af13a38c0ffdc198\">\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=\"Setup Payment - Autumn\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create a payment setup session for a customer to add or update their payment method.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://autumn-b9b4c0fb.mintlify.app/_mintlify/api/og/v2?division=Billing\u0026amp;title=Setup+Payment\u0026amp;description=Create+a+payment+setup+session+for+a+customer+to+add+or+update+their+payment+method.\u0026amp;theme=3bf7e6d15826cac91d0b643c\u0026amp;signature=628ebea41d210966b0cbc08e2a57dfd235c828f4ab959a00af13a38c0ffdc198\">\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/setupPayment\">\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/setupPayment.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/setupPayment#webpage\",\"url\":\"https://docs.useautumn.com/api-reference/billing/setupPayment\",\"name\":\"Setup Payment\",\"description\":\"Create a payment setup session for a customer to add or update their payment method.\",\"dateModified\":\"2026-10-22T19:08:00.531Z\",\"isPartOf\":{\"@id\":\"https://docs.useautumn.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.useautumn.com/api-reference/billing/setupPayment#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.useautumn.com/api-reference/billing/setupPayment#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Billing\",\"item\":\"https://docs.useautumn.com/api-reference/billing/attach\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Setup Payment\",\"item\":\"https://docs.useautumn.com/api-reference/billing/setupPayment\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.useautumn.com/api-reference/billing/setupPayment#apireference\",\"headline\":\"Setup Payment\",\"name\":\"Setup Payment\",\"description\":\"Create a payment setup session for a customer to add or update their payment method.\",\"url\":\"https://docs.useautumn.com/api-reference/billing/setupPayment\",\"mainEntityOfPage\":{\"@id\":\"https://docs.useautumn.com/api-reference/billing/setupPayment#webpage\"},\"dateModified\":\"2026-10-22T19:08:00.531Z\",\"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","description":"Create a billing portal session for a customer to manage their subscription.","href":"/api-reference/billing/openCustomerPortal"},{"title":"Setup Payment","openapi":"openapi POST /v1/billing.setup_payment","href":"/api-reference/billing/setupPayment"},{"title":"Multi Attach","openapi":"openapi POST /v1/billing.multi_attach","description":"Attaches multiple plans to a customer in a single request. Creates a single Stripe subscription with all plans consolidated.\n\nUse this endpoint when you need to subscribe a customer to multiple plans at once, such as a base plan plus add-ons, or to create a bundle of products.","href":"/api-reference/billing/multiAttach"},{"title":"Multi Update","openapi":"openapi POST /v1/billing.multi_update","href":"/api-reference/billing/multiUpdate"},{"title":"Create Schedule","openapi":"openapi POST /v1/billing.create_schedule","href":"/api-reference/billing/createSchedule"},{"title":"Verify","openapi":"openapi POST /v1/billing.verify","href":"/api-reference/billing/verify"},{"title":"Import","openapi":"openapi POST /v1/billing.import","href":"/api-reference/billing/import"},{"group":"Previews","pages":[{"title":"Preview Attach","openapi":"openapi POST /v1/billing.preview_attach","href":"/api-reference/billing/previewAttach"},{"title":"Preview Update","openapi":"openapi POST /v1/billing.preview_update","href":"/api-reference/billing/previewUpdate"},{"title":"Preview Multi Attach","openapi":"openapi POST /v1/billing.preview_multi_attach","href":"/api-reference/billing/previewMultiAttach"},{"title":"Preview Multi Update","openapi":"openapi POST /v1/billing.preview_multi_update","href":"/api-reference/billing/previewMultiUpdate"}]},{"group":"Licenses","pages":[{"title":"Attach License","openapi":"openapi POST /v1/licenses.attach","href":"/api-reference/licenses/attachLicense"},{"title":"Release License","openapi":"openapi POST /v1/licenses.release","href":"/api-reference/licenses/releaseLicense"},{"title":"List Licenses","openapi":"openapi POST /v1/licenses.list","href":"/api-reference/licenses/listLicenses"},{"title":"List License Assignments","openapi":"openapi POST /v1/licenses.list_assignments","href":"/api-reference/licenses/listLicenseAssignments"}]}]},{"group":"Balances","pages":[{"title":"Check Permissions","openapi":"openapi POST /v1/balances.check","href":"/api-reference/core/check"},{"title":"Track Usage","openapi":"openapi POST /v1/balances.track","href":"/api-reference/core/track"},{"title":"Batch Track Usage","openapi":"openapi POST /v1/balances.batch_track","href":"/api-reference/core/batchTrack"},{"title":"List Balances","openapi":"openapi POST /v1/balances.list","href":"/api-reference/balances/listBalances"},{"title":"Create Balance","openapi":"openapi POST /v1/balances.create","href":"/api-reference/balances/createBalance"},{"title":"Update Balance","openapi":"openapi POST /v1/balances.update","href":"/api-reference/balances/updateBalance"},{"title":"Delete Balance","openapi":"openapi POST /v1/balances.delete","href":"/api-reference/balances/deleteBalance"},{"title":"Finalize Lock","openapi":"openapi POST /v1/balances.finalize","href":"/api-reference/balances/finalizeLock"}]},{"group":"Customers","pages":[{"title":"Get or Create Customer","openapi":"openapi POST /v1/customers.get_or_create","href":"/api-reference/customers/getOrCreateCustomer"},{"title":"Get Customer","openapi":"openapi POST /v1/customers.get","href":"/api-reference/customers/getCustomer"},{"title":"List Customers","openapi":"openapi POST /v1/customers.list","href":"/api-reference/customers/listCustomers"},{"title":"List Subscriptions","openapi":"openapi POST /v1/subscriptions.list","href":"/api-reference/customers/listSubscriptions"},{"title":"List Purchases","openapi":"openapi POST /v1/purchases.list","href":"/api-reference/customers/listPurchases"},{"title":"Update Customer","openapi":"openapi POST /v1/customers.update","href":"/api-reference/customers/updateCustomer"},{"title":"Delete Customer","openapi":"openapi POST /v1/customers.delete","href":"/api-reference/customers/deleteCustomer"}]},{"group":"Invoices","pages":[{"title":"List Invoices","openapi":"openapi POST /v1/invoices.list","href":"/api-reference/invoices/listInvoices"},{"title":"Create Invoice","openapi":"openapi POST /v1/invoices.create","href":"/api-reference/invoices/createInvoice"},{"title":"Mark Invoice as Paid","openapi":"openapi POST /v1/invoices.pay","href":"/api-reference/invoices/payInvoice"},{"title":"Void Invoice","openapi":"openapi POST /v1/invoices.void","href":"/api-reference/invoices/voidInvoice"},{"title":"Reissue Invoice","openapi":"openapi POST /v1/invoices.reissue","href":"/api-reference/invoices/reissueInvoice"},{"title":"Issue Credit Note","openapi":"openapi POST /v1/invoices.issue_credit_note","href":"/api-reference/invoices/issueCreditNote"},{"title":"Backfill Invoices","openapi":"openapi POST /v1/invoices.insert","href":"/api-reference/invoices/insertInvoices"},{"title":"List Invoice Templates","openapi":"openapi POST /v1/invoices.listTemplates","href":"/api-reference/invoices/listInvoiceTemplates"}]},{"group":"Authorization","pages":[{"title":"Mint","openapi":"openapi POST /v1/keys.mint","href":"/api-reference/keys/mintKey"},{"title":"Refresh","openapi":"openapi POST /v1/keys.refresh","href":"/api-reference/keys/refreshKey"},{"title":"Revoke","openapi":"openapi POST /v1/keys.revoke","href":"/api-reference/keys/revokeKey"}]},{"group":"Events","pages":[{"title":"List Events","openapi":"openapi POST /v1/events.list","href":"/api-reference/events/listEvents"},{"title":"Aggregate Events","openapi":"openapi POST /v1/events.aggregate","href":"/api-reference/events/aggregateEvents"}]},{"group":"Logs","pages":[{"title":"Search Request Logs","openapi":"openapi POST /v1/logs.search","href":"/api-reference/logs/searchRequestLogs"}]},{"group":"Entities","pages":[{"title":"Get Entity","openapi":"openapi POST /v1/entities.get","href":"/api-reference/entities/getEntity"},{"title":"List Entities","openapi":"openapi POST /v1/entities.list","href":"/api-reference/entities/listEntities"},{"title":"Create Entity","openapi":"openapi POST /v1/entities.create","href":"/api-reference/entities/createEntity"},{"title":"Update Entity","openapi":"openapi POST /v1/entities.update","href":"/api-reference/entities/updateEntity"},{"title":"Delete Entity","openapi":"openapi POST /v1/entities.delete","href":"/api-reference/entities/deleteEntity"}]},{"group":"Accounts","pages":[{"title":"Get Account","openapi":"openapi POST /v1/accounts.get","href":"/api-reference/accounts/getAccount"},{"title":"Update Account","openapi":"openapi POST /v1/accounts.update","href":"/api-reference/accounts/updateAccount"}]},{"group":"Plans","pages":[{"title":"Get a plan","openapi":"openapi POST /v1/plans.get","href":"/api-reference/plans/getPlan"},{"title":"List all plans","openapi":"openapi POST /v1/plans.list","href":"/api-reference/plans/listPlans"},{"title":"Create a plan","openapi":"openapi POST /v1/plans.create","href":"/api-reference/plans/createPlan"},{"title":"Update a plan","openapi":"openapi POST /v1/plans.update","href":"/api-reference/plans/updatePlan"},{"title":"Delete a plan","openapi":"openapi POST /v1/plans.delete","href":"/api-reference/plans/deletePlan"}]},{"group":"Features","pages":[{"title":"Get Feature","openapi":"openapi POST /v1/features.get","href":"/api-reference/features/getFeature"},{"title":"List Features","openapi":"openapi POST /v1/features.list","href":"/api-reference/features/listFeatures"},{"title":"Create Feature","openapi":"openapi POST /v1/features.create","href":"/api-reference/features/createFeature"},{"title":"Update Feature","openapi":"openapi POST /v1/features.update","href":"/api-reference/features/updateFeature"},{"title":"Delete Feature","openapi":"openapi POST /v1/features.delete","href":"/api-reference/features/deleteFeature"}]},{"group":"Rewards \u0026 Referrals","pages":[{"title":"Create Referral Program","openapi":"openapi POST /v1/referral_programs.create","href":"/api-reference/referrals/createReferralProgram"},{"title":"List Referral Programs","openapi":"openapi POST /v1/referral_programs.list","href":"/api-reference/referrals/listReferralPrograms"},{"title":"Get Referral Program","openapi":"openapi POST /v1/referral_programs.get","href":"/api-reference/referrals/getReferralProgram"},{"title":"Update Referral Program","openapi":"openapi POST /v1/referral_programs.update","href":"/api-reference/referrals/updateReferralProgram"},{"title":"Delete Referral Program","openapi":"openapi POST /v1/referral_programs.delete","href":"/api-reference/referrals/deleteReferralProgram"},{"title":"Create Referral Code","openapi":"openapi POST /v1/referrals.create_code","href":"/api-reference/referrals/createReferralCode"},{"title":"Redeem Referral Code","openapi":"openapi POST /v1/referrals.redeem_code","href":"/api-reference/referrals/redeemReferralCode"},{"title":"Create Reward","openapi":"openapi POST /v1/rewards.create","href":"/api-reference/rewards/createReward"},{"title":"List Rewards","openapi":"openapi POST /v1/rewards.list","href":"/api-reference/rewards/listRewards"},{"title":"Get Reward","openapi":"openapi POST /v1/rewards.get","href":"/api-reference/rewards/getReward"},{"title":"Update Reward","openapi":"openapi POST /v1/rewards.update","href":"/api-reference/rewards/updateReward"},{"title":"Delete Reward","openapi":"openapi POST /v1/rewards.delete","href":"/api-reference/rewards/deleteReward"},{"title":"Redeem Reward Code","openapi":"openapi POST /v1/rewards.redeem","href":"/api-reference/rewards/redeemRewardCode"}]},{"group":"Webhooks","pages":[{"title":"Get Webhook","openapi":"openapi POST /v1/webhooks.get","href":"/api-reference/webhooks/getWebhook"},{"title":"List Webhooks","openapi":"openapi POST /v1/webhooks.list","href":"/api-reference/webhooks/listWebhooks"},{"title":"Create Webhook","openapi":"openapi POST /v1/webhooks.create","href":"/api-reference/webhooks/createWebhook"},{"title":"Update Webhook","openapi":"openapi POST /v1/webhooks.update","href":"/api-reference/webhooks/updateWebhook"},{"title":"Delete Webhook","openapi":"openapi POST /v1/webhooks.delete","href":"/api-reference/webhooks/deleteWebhook"},{"title":"Sync Webhooks","openapi":"openapi POST /v1/webhooks.sync","href":"/api-reference/webhooks/syncWebhooks"},{"group":"Previews","pages":[{"title":"Preview Sync Webhooks","openapi":"openapi POST /v1/webhooks.preview_sync","href":"/api-reference/webhooks/previewSyncWebhooks"}]}]},{"group":"Webhook Events","pages":[{"group":"Balances","pages":[{"title":"Usage Alert Triggered","openapi":"api/openapi.yml webhook balances.usage_alert_triggered","href":"/api-reference/webhooks/balancesUsageAlertTriggered"},{"title":"Limit Reached","openapi":"api/openapi.yml webhook balances.limit_reached","href":"/api-reference/webhooks/balancesLimitReached"}]},{"group":"Billing","pages":[{"title":"Auto Top-Up Failed","openapi":"api/openapi.yml webhook billing.auto_topup_failed","href":"/api-reference/webhooks/billingAutoTopupFailed"},{"title":"Auto Top-Up Succeeded","openapi":"api/openapi.yml webhook billing.auto_topup_succeeded","href":"/api-reference/webhooks/billingAutoTopupSucceeded"},{"title":"Plans Updated","openapi":"api/openapi.yml webhook billing.updated","href":"/api-reference/webhooks/billingUpdated"}]},{"group":"Invoice","pages":[{"title":"Invoice Finalized","openapi":"api/openapi.yml webhook invoice.finalized","href":"/api-reference/webhooks/invoiceFinalized"}]},{"group":"Vercel","pages":[{"title":"Resource Deleted","openapi":"api/openapi.yml webhook vercel.resources.deleted","href":"/api-reference/webhooks/vercelResourcesDeleted"},{"title":"Resource Provisioned","openapi":"api/openapi.yml webhook vercel.resources.provisioned","href":"/api-reference/webhooks/vercelResourcesProvisioned"},{"title":"Rotate Secrets","openapi":"api/openapi.yml webhook vercel.resources.rotate_secrets","href":"/api-reference/webhooks/vercelResourcesRotateSecrets"},{"title":"Webhook Event","openapi":"api/openapi.yml webhook vercel.webhooks.event","href":"/api-reference/webhooks/vercelWebhooksEvent"}]}]},{"group":"Platform (Beta)","pages":[{"title":"Overview","href":"/api-reference/platform/overview"},{"title":"Create Organization","openapi":"platform POST /platform/organizations","href":"/api-reference/platform/create-organization"},{"title":"Generate Stripe OAuth URL","openapi":"platform POST /platform/oauth_url","href":"/api-reference/platform/oauth-url"},{"title":"Get Stripe Connection","openapi":"openapi POST /v1/platform.get_stripe_connection","href":"/api-reference/platform/getStripeConnection"},{"title":"Disconnect Stripe","openapi":"openapi POST /v1/platform.disconnect_stripe","href":"/api-reference/platform/disconnectStripe"},{"title":"Update Connected Stripe Account","openapi":"platform POST /platform/organizations/stripe","href":"/api-reference/platform/update-stripe"},{"title":"List Users","openapi":"platform GET /platform/users","href":"/api-reference/platform/list-users"},{"title":"List Organizations","openapi":"platform GET /platform/organizations","href":"/api-reference/platform/list-orgs"}]}]},{"tab":"Changelog","icon":"list-ol","pages":[{"title":"Changelog","href":"/changelog/changelog"}]}]},"title":"Setup Payment - 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"]}