The id of an existing plan to attach to this contract. When provided, products/productGroups are ignored and the plan is used as-is. Mutually exclusive with inline product definition.
Credit grants that fund credit pools for the customer under this contract. Each grant credits a pool identified by its creditProductId; usage products draw down those pools via consumesCreditProductIds.
The currency of the contract. Overrides the customer-level currency for all invoices under this contract. If not provided, the customer currency or account default (USD) is used.
A caller-owned external id for the contract. Once set, the contract can be fetched or deleted by passing this value in place of the Vayu id on the /contracts/{contractId} endpoints.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Vayu docs","colors":{"primary":"#00a7df","light":"#00e5f5","dark":"#163B7E"},"logo":{"light":"https://mintcdn.com/vayu-786467d1/o-8hk5NjGtk8g3GS/assets/logo/light.svg?fit=max\u0026auto=format\u0026n=o-8hk5NjGtk8g3GS\u0026q=85\u0026s=bfce6c8445b24dbb51f5541edea9c802","dark":"https://mintcdn.com/vayu-786467d1/4AZPc6NfN1PrLxrr/images/Vayu-FullLogo-White-GradientX2.png?fit=max\u0026auto=format\u0026n=4AZPc6NfN1PrLxrr\u0026q=85\u0026s=5f9efb6a5f2fc4ab1c6eb9529b865238"},"favicon":"https://mintcdn.com/vayu-786467d1/1SxS3Ik3tm_XU1jg/assets/favicon.png?fit=max\u0026auto=format\u0026n=1SxS3Ik3tm_XU1jg\u0026q=85\u0026s=e4cd09db091a8f11f1d4a0c892b8d1c0","navbar":{"links":[{"href":"mailto:shai@withvayu.com?subject=Support Request","label":"Support"}],"primary":{"type":"button","label":"Get started now","href":"https://www.withvayu.com/#FAQ"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/withvayu"}},"seo":{"indexing":"navigable"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Website","icon":"link","href":"https://withvayu.com/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"vayu-786467d1","hasAudioNarration":false,"actualSubdomain":"vayu-786467d1","customDomains":["guide.withvayu.com"],"gitSource":{"type":"github","owner":"vayucode","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aa653f3293612ad8f41df49","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"API Reference","count":102},{"language":"default","tag":"Documentation","count":40},{"language":"default","tag":"Guides","count":37},{"language":"default","tag":"Integrations","count":20},{"language":"default","tag":"Customers","count":16},{"language":"default","tag":"API Documentation","count":12},{"language":"default","tag":"Invoices","count":11},{"language":"default","tag":"Plans \u0026 Pricing","count":10},{"language":"default","tag":"Contracts","count":8},{"language":"default","tag":"Events","count":6}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/endpoints/contracts/create-contract","slug":"/api-reference/endpoints/contracts/create-contract","pageMetadata":{"openapi":"post /contracts","title":"Create Contract","description":"Create a new Contract.","href":"/api-reference/endpoints/contracts/create-contract"},"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 new Contract.\"\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}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"openapi":"post /contracts","title":"Create Contract","description":"Create a new Contract.","href":"/api-reference/endpoints/contracts/create-contract"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["contracts"],"operationId":"createContract","description":"Create a new Contract.","summary":"Create Contract","security":["3fc63284-c996-43ba-8294-6bd3e42275cc"],"requestBody":"fabe3abd-185e-4c8a-ac4c-238c8871601d","x-required-scope":"vayu.contracts.write","responses":{"200":"6d362da6-cb4a-4115-98ce-7950e5659753","400":"1919068c-c028-4bcc-8cd6-e062c17b0c45","401":"8e8353e9-439b-4beb-bdfe-69aa1331d0c3","429":"8ad00550-394d-42a9-9bc3-fb1592f8a1c7","500":"91c31a50-cc3d-4b8d-a0cc-9981c9358f44"},"method":"post","type":"path","servers":["0dec5a11-3cfa-4138-ae7a-94bedee29854","eee074eb-d58a-403e-b620-7f577fbb3209"],"path":"/contracts","baseUrlOptions":["https://connect.withvayu.com","https://staging-connect.withvayu.com"],"title":"Create Contract","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"startDate":{"type":"string","description":"The start date of the contract","format":"date-time","isRequired":true,"uniqueKey":"startDate","typeLabel":"string\u003cdate-time>"},"customerId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"The id of the customer that the contract is associated with","isRequired":true,"uniqueKey":"customerId","typeLabel":"string"},"planId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"The id of an existing plan to attach to this contract. When provided, products/productGroups are ignored and the plan is used as-is. Mutually exclusive with inline product definition.","uniqueKey":"planId","typeLabel":"string"},"name":{"type":"string","description":"The name of the contract. Required when planId is not provided.","uniqueKey":"name","typeLabel":"string"},"salesForceOpportunityId":{"oneOf":[{"type":"string","description":"The id of the sales force opportunity that the contract is associated with","uniqueKey":"salesForceOpportunityId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the sales force opportunity that the contract is associated with","uniqueKey":"salesForceOpportunityId.oneOf.1","typeLabel":"null"}],"uniqueKey":"salesForceOpportunityId","typeLabel":"string | null"},"endDate":{"oneOf":[{"type":"string","description":"The end date of the contract","format":"date-time","uniqueKey":"endDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"The end date of the contract","format":"date-time","uniqueKey":"endDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"endDate","typeLabel":"string\u003cdate-time> | null"},"signatureDate":{"oneOf":[{"type":"string","description":"The signature date of the contract","format":"date-time","uniqueKey":"signatureDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"The signature date of the contract","format":"date-time","uniqueKey":"signatureDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"signatureDate","typeLabel":"string\u003cdate-time> | null"},"products":{"type":"array","items":{"type":"object","properties":{"displayName":{"type":"string","description":"The display name of the product","isRequired":true,"uniqueKey":"products.items.[INDEX].displayName","typeLabel":"string"},"scheduling":{"type":"object","properties":{"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"products.items.[INDEX].scheduling.duration.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"products.items.[INDEX].scheduling.duration.value","typeLabel":"integer"}},"required":["unit","value"],"description":"The duration of the product","isRequired":true,"uniqueKey":"products.items.[INDEX].scheduling.duration","typeLabel":"object"},"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month that the product is billed","uniqueKey":"products.items.[INDEX].scheduling.billingDay","typeLabel":"integer"}},"required":["duration"],"description":"The scheduling of the product","isRequired":true,"uniqueKey":"products.items.[INDEX].scheduling","typeLabel":"object"},"pricing":{"oneOf":[{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["ONE_TIME"],"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.0.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.0.price","typeLabel":"number"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"products.items.[INDEX].pricing.oneOf.0.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.0.discount","typeLabel":"object | null"},"isCreditPurchase":{"type":"boolean","description":"Deprecated. Legacy prepaid-credit marker: sets a fixed Credit product type and prepayment, but does NOT fund a credit pool. For the credit pool system, use the contract-level creditGrants field instead. Defaults to false.","deprecated":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.0.isCreditPurchase","typeLabel":"boolean"},"issuedSeparately":{"type":"boolean","description":"When true, this product is billed on its own invoice instead of being combined with other products in the same contract. Defaults to false.","uniqueKey":"products.items.[INDEX].pricing.oneOf.0.issuedSeparately","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.0","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["CONTRACT_TERMS"],"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.price","typeLabel":"number"},"quantity":{"type":"integer","minimum":0,"description":"The number of units this term is charged for. When set, `price` is the rate per unit and the term is worth price x quantity. Leave unset for a flat fee.","uniqueKey":"products.items.[INDEX].pricing.oneOf.1.quantity","typeLabel":"integer"},"installments":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"installmentDate":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX].installmentDate","typeLabel":"string\u003cdate-time>"},"amount":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX].amount","typeLabel":"number"}},"required":["installmentDate","amount"],"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"installmentDate":{"type":"string","format":"date-time"},"amount":{"type":"number","minimum":0}},"required":["installmentDate","amount"]},"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.installments.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.installments","typeLabel":"object[] | null"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"products.items.[INDEX].pricing.oneOf.1.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.1.discount","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.1","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price","subscriptionCadence"],"properties":{"type":{"type":"string","enum":["SUBSCRIPTION"],"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.2.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.2.price","typeLabel":"number"},"subscriptionCadence":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.2.subscriptionCadence.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.2.subscriptionCadence.value","typeLabel":"integer"}},"required":["unit","value"],"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.2.subscriptionCadence","typeLabel":"object"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"products.items.[INDEX].pricing.oneOf.2.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.2.discount","typeLabel":"object | null"},"issuedSeparately":{"type":"boolean","description":"When true, this product is billed on its own invoice instead of being combined with other products in the same contract. Defaults to false.","uniqueKey":"products.items.[INDEX].pricing.oneOf.2.issuedSeparately","typeLabel":"boolean"},"seats":{"type":"integer","minimum":0,"description":"The number of seats for this subscription product.","uniqueKey":"products.items.[INDEX].pricing.oneOf.2.seats","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.2","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","tiers"],"properties":{"type":{"type":"string","enum":["TIERED"],"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.type","typeLabel":"enum\u003cstring>"},"tiers":{"type":"array","items":{"type":"object","properties":{"fromInclusive":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].fromInclusive","typeLabel":"number"},"toExclusive":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive","typeLabel":"number | null"},"rate":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate","typeLabel":"number | null"},"flatFee":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee","typeLabel":"number | null"},"packageSize":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize","typeLabel":"number | null"}},"required":["fromInclusive"],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.tiers","typeLabel":"object[]"},"subscriptionCadence":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0.value","typeLabel":"integer"}},"required":["unit","value"],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.subscriptionCadence","typeLabel":"object | null"},"autoUpgrade":{"oneOf":[{"type":"boolean","uniqueKey":"products.items.[INDEX].pricing.oneOf.3.autoUpgrade.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"products.items.[INDEX].pricing.oneOf.3.autoUpgrade.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.autoUpgrade","typeLabel":"boolean | null"},"prorate":{"oneOf":[{"type":"boolean","uniqueKey":"products.items.[INDEX].pricing.oneOf.3.prorate.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"products.items.[INDEX].pricing.oneOf.3.prorate.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.prorate","typeLabel":"boolean | null"},"isRevShare":{"oneOf":[{"type":"boolean","uniqueKey":"products.items.[INDEX].pricing.oneOf.3.isRevShare.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"products.items.[INDEX].pricing.oneOf.3.isRevShare.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.isRevShare","typeLabel":"boolean | null"},"baseAmount":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.baseAmount.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.baseAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.baseAmount","typeLabel":"number | null"},"usageReset":{"oneOf":[{"type":"integer","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"products.items.[INDEX].pricing.oneOf.3.usageReset.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"products.items.[INDEX].pricing.oneOf.3.usageReset.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.3.usageReset","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.3","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["PER_UNIT"],"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.4.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.4.price","typeLabel":"number"},"chunkSize":{"oneOf":[{"type":"number","minimum":0,"exclusiveMinimum":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.4.chunkSize.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"exclusiveMinimum":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.4.chunkSize.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.4.chunkSize","typeLabel":"number | null"},"usageReset":{"oneOf":[{"type":"integer","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"products.items.[INDEX].pricing.oneOf.4.usageReset.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"products.items.[INDEX].pricing.oneOf.4.usageReset.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.4.usageReset","typeLabel":"integer | null"},"baseAmount":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.4.baseAmount.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"products.items.[INDEX].pricing.oneOf.4.baseAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].pricing.oneOf.4.baseAmount","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.4","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","amountToDeduct"],"properties":{"type":{"type":"string","enum":["FIXED_DEDUCTION"],"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.5.type","typeLabel":"enum\u003cstring>"},"amountToDeduct":{"type":"number","minimum":0,"description":"The fixed amount to deduct","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.5.amountToDeduct","typeLabel":"number"},"installments":{"type":"integer","minimum":0,"description":"The number of installments to spread the deduction over","uniqueKey":"products.items.[INDEX].pricing.oneOf.5.installments","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.5","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","percentageToDeduct"],"properties":{"type":{"type":"string","enum":["PERCENTAGE_DEDUCTION"],"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.6.type","typeLabel":"enum\u003cstring>"},"percentageToDeduct":{"type":"number","minimum":0,"description":"The percentage to deduct","isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.6.percentageToDeduct","typeLabel":"number"},"installments":{"type":"integer","minimum":0,"description":"The number of installments to spread the deduction over","uniqueKey":"products.items.[INDEX].pricing.oneOf.6.installments","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing.oneOf.6","typeLabel":"object"}],"isRequired":true,"uniqueKey":"products.items.[INDEX].pricing","typeLabel":"object"},"description":{"oneOf":[{"type":"string","description":"The description of the product","uniqueKey":"products.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"The description of the product","uniqueKey":"products.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].description","typeLabel":"string | null"},"disableDescription":{"oneOf":[{"type":"boolean","description":"Whether to disable the default description on generated line items","uniqueKey":"products.items.[INDEX].disableDescription.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether to disable the default description on generated line items","uniqueKey":"products.items.[INDEX].disableDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].disableDescription","typeLabel":"boolean | null"},"catalogProductId":{"oneOf":[{"type":"string","description":"The id of the a product from the catalog to connect the contract product to","uniqueKey":"products.items.[INDEX].catalogProductId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the a product from the catalog to connect the contract product to","uniqueKey":"products.items.[INDEX].catalogProductId.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].catalogProductId","typeLabel":"string | null"},"productErpId":{"oneOf":[{"type":"string","description":"The id of the product in NetSuite ERP","uniqueKey":"products.items.[INDEX].productErpId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the product in NetSuite ERP","uniqueKey":"products.items.[INDEX].productErpId.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].productErpId","typeLabel":"string | null"},"nsClass":{"oneOf":[{"type":"string","description":"The class of the product in NetSuite ERP","uniqueKey":"products.items.[INDEX].nsClass.oneOf.0","typeLabel":"string"},{"type":"null","description":"The class of the product in NetSuite ERP","uniqueKey":"products.items.[INDEX].nsClass.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].nsClass","typeLabel":"string | null"},"nsClassId":{"oneOf":[{"type":"string","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"products.items.[INDEX].nsClassId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"products.items.[INDEX].nsClassId.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].nsClassId","typeLabel":"string | null"},"externalIntegrations":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported.","isRequired":true,"uniqueKey":"products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].provider","typeLabel":"enum\u003cstring>"},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration.","isRequired":true,"uniqueKey":"products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].externalId","typeLabel":"string"}},"required":["provider","externalId"],"uniqueKey":"products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Links the product to matching products in V3 integrations (e.g. Paddle). For each entry, the product is linked to that external integration after the contract is created, so invoices for this product are exported to it. At most one entry per provider. Currently only Paddle is supported.","uniqueKey":"products.items.[INDEX].externalIntegrations.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported."},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration."}},"required":["provider","externalId"]},"description":"Links the product to matching products in V3 integrations (e.g. Paddle). For each entry, the product is linked to that external integration after the contract is created, so invoices for this product are exported to it. At most one entry per provider. Currently only Paddle is supported.","uniqueKey":"products.items.[INDEX].externalIntegrations.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].externalIntegrations","typeLabel":"object[] | null"},"commitment":{"oneOf":[{"type":"object","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for","isRequired":true,"uniqueKey":"products.items.[INDEX].commitment.oneOf.0.units","typeLabel":"number"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"products.items.[INDEX].commitment.oneOf.0.price.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"products.items.[INDEX].commitment.oneOf.0.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].commitment.oneOf.0.price","typeLabel":"number | null"},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS.","uniqueKey":"products.items.[INDEX].commitment.oneOf.0.type","typeLabel":"enum\u003cstring>"},"scheduling":{"oneOf":[{"type":"object","properties":{"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.value","typeLabel":"integer"}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR.","isRequired":true,"uniqueKey":"products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration","typeLabel":"object"},"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling","uniqueKey":"products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.billingDay","typeLabel":"integer"}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].commitment.oneOf.0.scheduling","typeLabel":"object | null"},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"products.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"products.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].commitment.oneOf.0.overageStrategy","typeLabel":"enum\u003cstring> | null"}},"required":["units"],"description":"The commitment of the product","uniqueKey":"products.items.[INDEX].commitment.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units"}]},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS."},"scheduling":{"oneOf":[{"type":"object","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."}]},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"}]}},"required":["units"],"description":"The commitment of the product","uniqueKey":"products.items.[INDEX].commitment.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].commitment","typeLabel":"object | null"},"paymentTerm":{"oneOf":[{"type":"string","enum":["Prepayment","Postpayment"],"description":"The payment term of the product. Can be prepayment or postpayment. If not provided, the payment term will be determined by the pricing model.","uniqueKey":"products.items.[INDEX].paymentTerm.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["Prepayment","Postpayment"],"description":"The payment term of the product. Can be prepayment or postpayment. If not provided, the payment term will be determined by the pricing model.","uniqueKey":"products.items.[INDEX].paymentTerm.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].paymentTerm","typeLabel":"enum\u003cstring> | null"},"isCalendarAligned":{"type":"boolean","description":"Whether the invoicing period should be calendar aligned. If not provided, it will default to false. ONE_TIME and COMMERCIAL_TERMS pricing models cannot be calendar aligned. This field is ignored if the product is part of a ProductGroup.","uniqueKey":"products.items.[INDEX].isCalendarAligned","typeLabel":"boolean"},"cloudProviderSettings":{"oneOf":[{"type":"object","properties":{"cloudProvider":{"type":"string","enum":["AWS","GCP","Azure"],"uniqueKey":"products.items.[INDEX].cloudProviderSettings.oneOf.0.cloudProvider","typeLabel":"enum\u003cstring>"},"cloudProviderMarketplaceId":{"type":"string","uniqueKey":"products.items.[INDEX].cloudProviderSettings.oneOf.0.cloudProviderMarketplaceId","typeLabel":"string"},"dimension":{"type":"string","uniqueKey":"products.items.[INDEX].cloudProviderSettings.oneOf.0.dimension","typeLabel":"string"}},"description":"Cloud provider settings for the product","uniqueKey":"products.items.[INDEX].cloudProviderSettings.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"cloudProvider":{"type":"string","enum":["AWS","GCP","Azure"]},"cloudProviderMarketplaceId":{"type":"string"},"dimension":{"type":"string"}},"description":"Cloud provider settings for the product","uniqueKey":"products.items.[INDEX].cloudProviderSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].cloudProviderSettings","typeLabel":"object | null"},"consumesCreditProductIds":{"oneOf":[{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","uniqueKey":"products.items.[INDEX].consumesCreditProductIds.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"IDs of credit products whose pools are drawn down when this usage product is invoiced. Each ID matches the creditProductId of a credit grant on the same contract that funds the pool. Pools are drawn in the order listed. If omitted, no credits are applied and the product is billed at full price. Not supported inside productGroups.","uniqueKey":"products.items.[INDEX].consumesCreditProductIds.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"description":"IDs of credit products whose pools are drawn down when this usage product is invoiced. Each ID matches the creditProductId of a credit grant on the same contract that funds the pool. Pools are drawn in the order listed. If omitted, no credits are applied and the product is billed at full price. Not supported inside productGroups.","uniqueKey":"products.items.[INDEX].consumesCreditProductIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"products.items.[INDEX].consumesCreditProductIds","typeLabel":"string[] | null"}},"required":["displayName","scheduling","pricing"],"uniqueKey":"products.items.[INDEX]","typeLabel":"object"},"description":"The products that the contract is associated with","uniqueKey":"products","typeLabel":"object[]"},"creditGrants":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the credit grant. Used as the invoice line-item label when the grant is charged.","isRequired":true,"uniqueKey":"creditGrants.oneOf.0.items.[INDEX].name","typeLabel":"string"},"creditProductId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"ID of the credit product whose pool this grant funds. A usage product debits the same pool by listing this ID in consumesCreditProductIds. Discover IDs via GET /credit-products.","isRequired":true,"uniqueKey":"creditGrants.oneOf.0.items.[INDEX].creditProductId","typeLabel":"string"},"balanceKind":{"type":"string","enum":["MONETARY","UNIT"],"description":"What grantAmount represents: a monetary value in the contract currency (MONETARY) or a quantity of units (UNIT).","isRequired":true,"uniqueKey":"creditGrants.oneOf.0.items.[INDEX].balanceKind","typeLabel":"enum\u003cstring>"},"grantAmount":{"type":"number","minimum":0,"description":"Amount granted into the pool per grant period — a currency amount when balanceKind is MONETARY (e.g. 500 = $500), or a unit quantity when balanceKind is UNIT.","isRequired":true,"uniqueKey":"creditGrants.oneOf.0.items.[INDEX].grantAmount","typeLabel":"number"},"schedule":{"type":"string","enum":["ONE_TIME","RECURRING_MONTHLY","RECURRING_QUARTERLY","RECURRING_YEARLY"],"description":"How often the grant is applied: ONE_TIME grants once at contract start; RECURRING_MONTHLY, RECURRING_QUARTERLY and RECURRING_YEARLY re-grant each corresponding period.","isRequired":true,"uniqueKey":"creditGrants.oneOf.0.items.[INDEX].schedule","typeLabel":"enum\u003cstring>"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Amount charged to the customer for this grant, in the contract currency. Required when balanceKind is UNIT (a unit quantity has no currency value of its own) — e.g. grant 1000 units for a price of 20 ($20). Optional when balanceKind is MONETARY: if omitted, the grant is sold at face value (price equals grantAmount).","uniqueKey":"creditGrants.oneOf.0.items.[INDEX].price.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"description":"Amount charged to the customer for this grant, in the contract currency. Required when balanceKind is UNIT (a unit quantity has no currency value of its own) — e.g. grant 1000 units for a price of 20 ($20). Optional when balanceKind is MONETARY: if omitted, the grant is sold at face value (price equals grantAmount).","uniqueKey":"creditGrants.oneOf.0.items.[INDEX].price.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditGrants.oneOf.0.items.[INDEX].price","typeLabel":"number | null"},"expirationDate":{"oneOf":[{"type":"string","description":"Explicit date after which unused granted credits expire. Only supported on ONE_TIME grants. For policy-based expiry on recurring grants, use expirationPolicy instead.","format":"date-time","uniqueKey":"creditGrants.oneOf.0.items.[INDEX].expirationDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Explicit date after which unused granted credits expire. Only supported on ONE_TIME grants. For policy-based expiry on recurring grants, use expirationPolicy instead.","format":"date-time","uniqueKey":"creditGrants.oneOf.0.items.[INDEX].expirationDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditGrants.oneOf.0.items.[INDEX].expirationDate","typeLabel":"string\u003cdate-time> | null"},"expirationPolicy":{"type":"string","enum":["AT_NEXT_GRANT","NEVER","END_OF_INVOICE","END_OF_RENEWAL_PERIOD","END_OF_CONTRACT"],"description":"Controls when unused credits from a grant period expire. AT_NEXT_GRANT: credits expire at the end of each billing period (default for recurring). NEVER: credits never expire (default for ONE_TIME). END_OF_INVOICE: credits expire at the end of the invoice period. END_OF_RENEWAL_PERIOD: credits expire at the end of the contract renewal period. END_OF_CONTRACT: credits expire when the contract ends. AT_NEXT_GRANT and END_OF_INVOICE are not available for ONE_TIME grants.","uniqueKey":"creditGrants.oneOf.0.items.[INDEX].expirationPolicy","typeLabel":"enum\u003cstring>"},"applyAutomatically":{"type":"boolean","description":"Whether granted credits are applied to usage automatically. Defaults to true.","uniqueKey":"creditGrants.oneOf.0.items.[INDEX].applyAutomatically","typeLabel":"boolean"},"externalIntegrations":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported.","isRequired":true,"uniqueKey":"creditGrants.oneOf.0.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].provider","typeLabel":"enum\u003cstring>"},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration.","isRequired":true,"uniqueKey":"creditGrants.oneOf.0.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].externalId","typeLabel":"string"}},"required":["provider","externalId"],"uniqueKey":"creditGrants.oneOf.0.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Links the subscription created for a recurring credit grant to matching products in V3 integrations (e.g. Paddle). The grant's inferred product is linked to each external integration after the contract is created, so invoices for the grant are exported to it. At most one entry per provider. Applies only to credit grants on a contract — ignored on credit top-ups. Currently only Paddle is supported.","uniqueKey":"creditGrants.oneOf.0.items.[INDEX].externalIntegrations.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported."},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration."}},"required":["provider","externalId"]},"description":"Links the subscription created for a recurring credit grant to matching products in V3 integrations (e.g. Paddle). The grant's inferred product is linked to each external integration after the contract is created, so invoices for the grant are exported to it. At most one entry per provider. Applies only to credit grants on a contract — ignored on credit top-ups. Currently only Paddle is supported.","uniqueKey":"creditGrants.oneOf.0.items.[INDEX].externalIntegrations.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditGrants.oneOf.0.items.[INDEX].externalIntegrations","typeLabel":"object[] | null"}},"required":["name","creditProductId","balanceKind","grantAmount","schedule"],"uniqueKey":"creditGrants.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Credit grants that fund credit pools for the customer under this contract. Each grant credits a pool identified by its creditProductId; usage products draw down those pools via consumesCreditProductIds.","uniqueKey":"creditGrants.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the credit grant. Used as the invoice line-item label when the grant is charged."},"creditProductId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"ID of the credit product whose pool this grant funds. A usage product debits the same pool by listing this ID in consumesCreditProductIds. Discover IDs via GET /credit-products."},"balanceKind":{"type":"string","enum":["MONETARY","UNIT"],"description":"What grantAmount represents: a monetary value in the contract currency (MONETARY) or a quantity of units (UNIT)."},"grantAmount":{"type":"number","minimum":0,"description":"Amount granted into the pool per grant period — a currency amount when balanceKind is MONETARY (e.g. 500 = $500), or a unit quantity when balanceKind is UNIT."},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Amount charged to the customer for this grant, in the contract currency. Required when balanceKind is UNIT (a unit quantity has no currency value of its own) — e.g. grant 1000 units for a price of 20 ($20). Optional when balanceKind is MONETARY: if omitted, the grant is sold at face value (price equals grantAmount)."},{"type":"null","minimum":0,"description":"Amount charged to the customer for this grant, in the contract currency. Required when balanceKind is UNIT (a unit quantity has no currency value of its own) — e.g. grant 1000 units for a price of 20 ($20). Optional when balanceKind is MONETARY: if omitted, the grant is sold at face value (price equals grantAmount)."}]},"schedule":{"type":"string","enum":["ONE_TIME","RECURRING_MONTHLY","RECURRING_QUARTERLY","RECURRING_YEARLY"],"description":"How often the grant is applied: ONE_TIME grants once at contract start; RECURRING_MONTHLY, RECURRING_QUARTERLY and RECURRING_YEARLY re-grant each corresponding period."},"expirationDate":{"oneOf":[{"type":"string","description":"Explicit date after which unused granted credits expire. Only supported on ONE_TIME grants. For policy-based expiry on recurring grants, use expirationPolicy instead.","format":"date-time"},{"type":"null","description":"Explicit date after which unused granted credits expire. Only supported on ONE_TIME grants. For policy-based expiry on recurring grants, use expirationPolicy instead.","format":"date-time"}]},"expirationPolicy":{"type":"string","enum":["AT_NEXT_GRANT","NEVER","END_OF_INVOICE","END_OF_RENEWAL_PERIOD","END_OF_CONTRACT"],"description":"Controls when unused credits from a grant period expire. AT_NEXT_GRANT: credits expire at the end of each billing period (default for recurring). NEVER: credits never expire (default for ONE_TIME). END_OF_INVOICE: credits expire at the end of the invoice period. END_OF_RENEWAL_PERIOD: credits expire at the end of the contract renewal period. END_OF_CONTRACT: credits expire when the contract ends. AT_NEXT_GRANT and END_OF_INVOICE are not available for ONE_TIME grants."},"applyAutomatically":{"type":"boolean","description":"Whether granted credits are applied to usage automatically. Defaults to true."},"externalIntegrations":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported."},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration."}},"required":["provider","externalId"]},"description":"Links the subscription created for a recurring credit grant to matching products in V3 integrations (e.g. Paddle). The grant's inferred product is linked to each external integration after the contract is created, so invoices for the grant are exported to it. At most one entry per provider. Applies only to credit grants on a contract — ignored on credit top-ups. Currently only Paddle is supported."},{"type":"null","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported."},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration."}},"required":["provider","externalId"]},"description":"Links the subscription created for a recurring credit grant to matching products in V3 integrations (e.g. Paddle). The grant's inferred product is linked to each external integration after the contract is created, so invoices for the grant are exported to it. At most one entry per provider. Applies only to credit grants on a contract — ignored on credit top-ups. Currently only Paddle is supported."}]}},"required":["name","creditProductId","balanceKind","grantAmount","schedule"]},"description":"Credit grants that fund credit pools for the customer under this contract. Each grant credits a pool identified by its creditProductId; usage products draw down those pools via consumesCreditProductIds.","uniqueKey":"creditGrants.oneOf.1","typeLabel":"null"}],"uniqueKey":"creditGrants","typeLabel":"object[] | null"},"productGroups":{"type":"array","items":{"type":"object","properties":{"displayName":{"type":"string","description":"The display name of the product","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].displayName","typeLabel":"string"},"products":{"type":"array","items":{"type":"object","properties":{"displayName":{"type":"string","description":"The display name of the product","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].displayName","typeLabel":"string"},"scheduling":{"type":"object","properties":{"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].scheduling.duration.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].scheduling.duration.value","typeLabel":"integer"}},"required":["unit","value"],"description":"The duration of the product","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].scheduling.duration","typeLabel":"object"},"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month that the product is billed","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].scheduling.billingDay","typeLabel":"integer"}},"required":["duration"],"description":"The scheduling of the product","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].scheduling","typeLabel":"object"},"pricing":{"oneOf":[{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["ONE_TIME"],"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.price","typeLabel":"number"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount","typeLabel":"object | null"},"isCreditPurchase":{"type":"boolean","description":"Deprecated. Legacy prepaid-credit marker: sets a fixed Credit product type and prepayment, but does NOT fund a credit pool. For the credit pool system, use the contract-level creditGrants field instead. Defaults to false.","deprecated":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.isCreditPurchase","typeLabel":"boolean"},"issuedSeparately":{"type":"boolean","description":"When true, this product is billed on its own invoice instead of being combined with other products in the same contract. Defaults to false.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.issuedSeparately","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["CONTRACT_TERMS"],"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.price","typeLabel":"number"},"quantity":{"type":"integer","minimum":0,"description":"The number of units this term is charged for. When set, `price` is the rate per unit and the term is worth price x quantity. Leave unset for a flat fee.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.quantity","typeLabel":"integer"},"installments":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"installmentDate":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX].installmentDate","typeLabel":"string\u003cdate-time>"},"amount":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX].amount","typeLabel":"number"}},"required":["installmentDate","amount"],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"installmentDate":{"type":"string","format":"date-time"},"amount":{"type":"number","minimum":0}},"required":["installmentDate","amount"]},"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments","typeLabel":"object[] | null"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price","subscriptionCadence"],"properties":{"type":{"type":"string","enum":["SUBSCRIPTION"],"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.price","typeLabel":"number"},"subscriptionCadence":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.subscriptionCadence.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.subscriptionCadence.value","typeLabel":"integer"}},"required":["unit","value"],"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.subscriptionCadence","typeLabel":"object"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount","typeLabel":"object | null"},"issuedSeparately":{"type":"boolean","description":"When true, this product is billed on its own invoice instead of being combined with other products in the same contract. Defaults to false.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.issuedSeparately","typeLabel":"boolean"},"seats":{"type":"integer","minimum":0,"description":"The number of seats for this subscription product.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.seats","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","tiers"],"properties":{"type":{"type":"string","enum":["TIERED"],"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.type","typeLabel":"enum\u003cstring>"},"tiers":{"type":"array","items":{"type":"object","properties":{"fromInclusive":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].fromInclusive","typeLabel":"number"},"toExclusive":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive","typeLabel":"number | null"},"rate":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate","typeLabel":"number | null"},"flatFee":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee","typeLabel":"number | null"},"packageSize":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize","typeLabel":"number | null"}},"required":["fromInclusive"],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers","typeLabel":"object[]"},"subscriptionCadence":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0.value","typeLabel":"integer"}},"required":["unit","value"],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.subscriptionCadence","typeLabel":"object | null"},"autoUpgrade":{"oneOf":[{"type":"boolean","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.autoUpgrade.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.autoUpgrade.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.autoUpgrade","typeLabel":"boolean | null"},"prorate":{"oneOf":[{"type":"boolean","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.prorate.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.prorate.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.prorate","typeLabel":"boolean | null"},"isRevShare":{"oneOf":[{"type":"boolean","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.isRevShare.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.isRevShare.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.isRevShare","typeLabel":"boolean | null"},"baseAmount":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.baseAmount.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.baseAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.baseAmount","typeLabel":"number | null"},"usageReset":{"oneOf":[{"type":"integer","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.usageReset.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.usageReset.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.usageReset","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["PER_UNIT"],"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.price","typeLabel":"number"},"chunkSize":{"oneOf":[{"type":"number","minimum":0,"exclusiveMinimum":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.chunkSize.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"exclusiveMinimum":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.chunkSize.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.chunkSize","typeLabel":"number | null"},"usageReset":{"oneOf":[{"type":"integer","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.usageReset.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.usageReset.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.usageReset","typeLabel":"integer | null"},"baseAmount":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.baseAmount.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.baseAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.baseAmount","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","amountToDeduct"],"properties":{"type":{"type":"string","enum":["FIXED_DEDUCTION"],"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.5.type","typeLabel":"enum\u003cstring>"},"amountToDeduct":{"type":"number","minimum":0,"description":"The fixed amount to deduct","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.5.amountToDeduct","typeLabel":"number"},"installments":{"type":"integer","minimum":0,"description":"The number of installments to spread the deduction over","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.5.installments","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.5","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","percentageToDeduct"],"properties":{"type":{"type":"string","enum":["PERCENTAGE_DEDUCTION"],"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.6.type","typeLabel":"enum\u003cstring>"},"percentageToDeduct":{"type":"number","minimum":0,"description":"The percentage to deduct","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.6.percentageToDeduct","typeLabel":"number"},"installments":{"type":"integer","minimum":0,"description":"The number of installments to spread the deduction over","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.6.installments","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.6","typeLabel":"object"}],"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].pricing","typeLabel":"object"},"description":{"oneOf":[{"type":"string","description":"The description of the product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"The description of the product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].description","typeLabel":"string | null"},"disableDescription":{"oneOf":[{"type":"boolean","description":"Whether to disable the default description on generated line items","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].disableDescription.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether to disable the default description on generated line items","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].disableDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].disableDescription","typeLabel":"boolean | null"},"catalogProductId":{"oneOf":[{"type":"string","description":"The id of the a product from the catalog to connect the contract product to","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].catalogProductId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the a product from the catalog to connect the contract product to","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].catalogProductId.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].catalogProductId","typeLabel":"string | null"},"productErpId":{"oneOf":[{"type":"string","description":"The id of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].productErpId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].productErpId.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].productErpId","typeLabel":"string | null"},"nsClass":{"oneOf":[{"type":"string","description":"The class of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].nsClass.oneOf.0","typeLabel":"string"},{"type":"null","description":"The class of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].nsClass.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].nsClass","typeLabel":"string | null"},"nsClassId":{"oneOf":[{"type":"string","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].nsClassId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].nsClassId.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].nsClassId","typeLabel":"string | null"},"externalIntegrations":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].provider","typeLabel":"enum\u003cstring>"},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].externalId","typeLabel":"string"}},"required":["provider","externalId"],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Links the product to matching products in V3 integrations (e.g. Paddle). For each entry, the product is linked to that external integration after the contract is created, so invoices for this product are exported to it. At most one entry per provider. Currently only Paddle is supported.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported."},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration."}},"required":["provider","externalId"]},"description":"Links the product to matching products in V3 integrations (e.g. Paddle). For each entry, the product is linked to that external integration after the contract is created, so invoices for this product are exported to it. At most one entry per provider. Currently only Paddle is supported.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations","typeLabel":"object[] | null"},"commitment":{"oneOf":[{"type":"object","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.units","typeLabel":"number"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.price.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.price","typeLabel":"number | null"},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.type","typeLabel":"enum\u003cstring>"},"scheduling":{"oneOf":[{"type":"object","properties":{"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.value","typeLabel":"integer"}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration","typeLabel":"object"},"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.billingDay","typeLabel":"integer"}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling","typeLabel":"object | null"},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.overageStrategy","typeLabel":"enum\u003cstring> | null"}},"required":["units"],"description":"The commitment of the product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units"}]},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS."},"scheduling":{"oneOf":[{"type":"object","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."}]},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"}]}},"required":["units"],"description":"The commitment of the product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].commitment","typeLabel":"object | null"},"paymentTerm":{"oneOf":[{"type":"string","enum":["Prepayment","Postpayment"],"description":"The payment term of the product. Can be prepayment or postpayment. If not provided, the payment term will be determined by the pricing model.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].paymentTerm.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["Prepayment","Postpayment"],"description":"The payment term of the product. Can be prepayment or postpayment. If not provided, the payment term will be determined by the pricing model.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].paymentTerm.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].paymentTerm","typeLabel":"enum\u003cstring> | null"},"isCalendarAligned":{"type":"boolean","description":"Whether the invoicing period should be calendar aligned. If not provided, it will default to false. ONE_TIME and COMMERCIAL_TERMS pricing models cannot be calendar aligned. This field is ignored if the product is part of a ProductGroup.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].isCalendarAligned","typeLabel":"boolean"},"cloudProviderSettings":{"oneOf":[{"type":"object","properties":{"cloudProvider":{"type":"string","enum":["AWS","GCP","Azure"],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings.oneOf.0.cloudProvider","typeLabel":"enum\u003cstring>"},"cloudProviderMarketplaceId":{"type":"string","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings.oneOf.0.cloudProviderMarketplaceId","typeLabel":"string"},"dimension":{"type":"string","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings.oneOf.0.dimension","typeLabel":"string"}},"description":"Cloud provider settings for the product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"cloudProvider":{"type":"string","enum":["AWS","GCP","Azure"]},"cloudProviderMarketplaceId":{"type":"string"},"dimension":{"type":"string"}},"description":"Cloud provider settings for the product","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings","typeLabel":"object | null"},"consumesCreditProductIds":{"oneOf":[{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].consumesCreditProductIds.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"IDs of credit products whose pools are drawn down when this usage product is invoiced. Each ID matches the creditProductId of a credit grant on the same contract that funds the pool. Pools are drawn in the order listed. If omitted, no credits are applied and the product is billed at full price. Not supported inside productGroups.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].consumesCreditProductIds.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"description":"IDs of credit products whose pools are drawn down when this usage product is invoiced. Each ID matches the creditProductId of a credit grant on the same contract that funds the pool. Pools are drawn in the order listed. If omitted, no credits are applied and the product is billed at full price. Not supported inside productGroups.","uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].consumesCreditProductIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX].consumesCreditProductIds","typeLabel":"string[] | null"}},"required":["displayName","scheduling","pricing"],"uniqueKey":"productGroups.items.[INDEX].products.items.[INDEX]","typeLabel":"object"},"minItems":1,"description":"The products that the product group is associated with","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].products","typeLabel":"object[]"},"description":{"oneOf":[{"type":"string","description":"The description of the product","uniqueKey":"productGroups.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"The description of the product","uniqueKey":"productGroups.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].description","typeLabel":"string | null"},"productErpId":{"oneOf":[{"type":"string","description":"The id of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].productErpId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].productErpId.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].productErpId","typeLabel":"string | null"},"nsClass":{"oneOf":[{"type":"string","description":"The class of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].nsClass.oneOf.0","typeLabel":"string"},{"type":"null","description":"The class of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].nsClass.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].nsClass","typeLabel":"string | null"},"nsClassId":{"oneOf":[{"type":"string","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].nsClassId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"productGroups.items.[INDEX].nsClassId.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].nsClassId","typeLabel":"string | null"},"baseAmount":{"oneOf":[{"type":"number","description":"The base amount for the customer to pay even if the amount based on usage is lower","uniqueKey":"productGroups.items.[INDEX].baseAmount.oneOf.0","typeLabel":"number"},{"type":"null","description":"The base amount for the customer to pay even if the amount based on usage is lower","uniqueKey":"productGroups.items.[INDEX].baseAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].baseAmount","typeLabel":"number | null"},"commitment":{"oneOf":[{"type":"object","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.units","typeLabel":"number"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.price.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.price","typeLabel":"number | null"},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS.","uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.type","typeLabel":"enum\u003cstring>"},"scheduling":{"oneOf":[{"type":"object","properties":{"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.value","typeLabel":"integer"}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR.","isRequired":true,"uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration","typeLabel":"object"},"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling","uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.billingDay","typeLabel":"integer"}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.scheduling","typeLabel":"object | null"},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0.overageStrategy","typeLabel":"enum\u003cstring> | null"}},"required":["units"],"description":"The commitment of the product group. units are aggregated for all products in the group","uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units"}]},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS."},"scheduling":{"oneOf":[{"type":"object","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."}]},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"}]}},"required":["units"],"description":"The commitment of the product group. units are aggregated for all products in the group","uniqueKey":"productGroups.items.[INDEX].commitment.oneOf.1","typeLabel":"null"}],"uniqueKey":"productGroups.items.[INDEX].commitment","typeLabel":"object | null"},"isCalendarAligned":{"type":"boolean","description":"Whether the invoicing period should be calendar aligned. If not provided, it will default to false. ONE_TIME and COMMERCIAL_TERMS pricing models cannot be calendar aligned.","uniqueKey":"productGroups.items.[INDEX].isCalendarAligned","typeLabel":"boolean"}},"required":["displayName","products"],"uniqueKey":"productGroups.items.[INDEX]","typeLabel":"object"},"description":"Product groups are list of products that can be grouped as a single line item with shared settings like ERP settings, commitment settings, etc.","uniqueKey":"productGroups","typeLabel":"object[]"},"accountManager":{"oneOf":[{"type":"string","description":"The name of the account manager of the contract","uniqueKey":"accountManager.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name of the account manager of the contract","uniqueKey":"accountManager.oneOf.1","typeLabel":"null"}],"uniqueKey":"accountManager","typeLabel":"string | null"},"shouldProRateInvoices":{"type":"boolean","description":"Whether to pro rate the invoices for the contract. If not provided, it will default to false","deprecated":true,"uniqueKey":"shouldProRateInvoices","typeLabel":"boolean"},"autoRenewContract":{"type":"boolean","description":"Whether the contract is set to auto renew. If not provided, it will be treated as true","uniqueKey":"autoRenewContract","typeLabel":"boolean"},"customFields":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"vayuCustomFieldName":{"type":"string","description":"The name of the field in Vayu (e.g., \"AE Name\")","isRequired":true,"uniqueKey":"customFields.oneOf.0.items.[INDEX].vayuCustomFieldName","typeLabel":"string"},"valueType":{"type":"string","enum":["String","Number","Boolean","Enum"],"description":"The type of the value: \"String\", \"Number\", or \"Boolean\"","isRequired":true,"uniqueKey":"customFields.oneOf.0.items.[INDEX].valueType","typeLabel":"enum\u003cstring>"},"integrationSource":{"type":"string","enum":["NetSuite","QuickBooks","Stripe","Salesforce","Hubspot","Vayu","Slack","S3","Morning","Snowflake","Anrok","Connact","Xero","Paddle"],"description":"The integration provider (e.g., \"Salesforce\", \"HubSpot\")","uniqueKey":"customFields.oneOf.0.items.[INDEX].integrationSource","typeLabel":"enum\u003cstring>"},"integrationEntityType":{"type":"string","enum":["Account","Invoice","SalesOrder","Item","Deal","Company","Opportunity"],"description":"The entity type in the integration (e.g., \"Opportunity\", \"Deal\")","uniqueKey":"customFields.oneOf.0.items.[INDEX].integrationEntityType","typeLabel":"enum\u003cstring>"},"fieldPath":{"type":"string","description":"The path to the field in the integration (e.g., \"root.path.field\")","uniqueKey":"customFields.oneOf.0.items.[INDEX].fieldPath","typeLabel":"string"},"value":{"oneOf":[{"description":"The actual value of the custom field","uniqueKey":"customFields.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"The actual value of the custom field","type":"null","uniqueKey":"customFields.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"customFields.oneOf.0.items.[INDEX].value","typeLabel":"any | null"}},"required":["vayuCustomFieldName","valueType"],"uniqueKey":"customFields.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Custom fields from CRM systems (Salesforce, HubSpot, etc.)","uniqueKey":"customFields.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"integrationSource":{"type":"string","enum":["NetSuite","QuickBooks","Stripe","Salesforce","Hubspot","Vayu","Slack","S3","Morning","Snowflake","Anrok","Connact","Xero","Paddle"],"description":"The integration provider (e.g., \"Salesforce\", \"HubSpot\")"},"integrationEntityType":{"type":"string","enum":["Account","Invoice","SalesOrder","Item","Deal","Company","Opportunity"],"description":"The entity type in the integration (e.g., \"Opportunity\", \"Deal\")"},"fieldPath":{"type":"string","description":"The path to the field in the integration (e.g., \"root.path.field\")"},"vayuCustomFieldName":{"type":"string","description":"The name of the field in Vayu (e.g., \"AE Name\")"},"valueType":{"type":"string","enum":["String","Number","Boolean","Enum"],"description":"The type of the value: \"String\", \"Number\", or \"Boolean\""},"value":{"oneOf":[{"description":"The actual value of the custom field"},{"description":"The actual value of the custom field","type":"null"}]}},"required":["vayuCustomFieldName","valueType"]},"description":"Custom fields from CRM systems (Salesforce, HubSpot, etc.)","uniqueKey":"customFields.oneOf.1","typeLabel":"null"}],"uniqueKey":"customFields","typeLabel":"object[] | null"},"customFieldValues":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"customFieldDefinitionId":{"type":"string","isRequired":true,"uniqueKey":"customFieldValues.oneOf.0.items.[INDEX].customFieldDefinitionId","typeLabel":"string"},"value":{"type":"string","uniqueKey":"customFieldValues.oneOf.0.items.[INDEX].value","typeLabel":"string"},"fieldName":{"type":"string","uniqueKey":"customFieldValues.oneOf.0.items.[INDEX].fieldName","typeLabel":"string"}},"required":["customFieldDefinitionId"],"uniqueKey":"customFieldValues.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The stored custom field values associated with the contract","uniqueKey":"customFieldValues.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"customFieldDefinitionId":{"type":"string"},"value":{"type":"string"},"fieldName":{"type":"string"}},"required":["customFieldDefinitionId"]},"description":"The stored custom field values associated with the contract","uniqueKey":"customFieldValues.oneOf.1","typeLabel":"null"}],"uniqueKey":"customFieldValues","typeLabel":"object[] | null"},"status":{"type":"string","enum":["InReview","Scheduled","Active","Inactive","Expired","Terminated","PendingTermination","Error"],"description":"The status of the contract","uniqueKey":"status","typeLabel":"enum\u003cstring>"},"purchaseOrder":{"type":"string","description":"The purchase order number of the contract","uniqueKey":"purchaseOrder","typeLabel":"string"},"currency":{"oneOf":[{"type":"string","description":"The currency of the contract. Overrides the customer-level currency for all invoices under this contract. If not provided, the customer currency or account default (USD) is used.","enum":["USD","EUR","GBP","ILS","CAD","AUD","COP","BRL","ARS","INR","MXN","CHF"],"uniqueKey":"currency.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The currency of the contract. Overrides the customer-level currency for all invoices under this contract. If not provided, the customer currency or account default (USD) is used.","enum":["USD","EUR","GBP","ILS","CAD","AUD","COP","BRL","ARS","INR","MXN","CHF"],"uniqueKey":"currency.oneOf.1","typeLabel":"null"}],"uniqueKey":"currency","typeLabel":"enum\u003cstring> | null"},"isTrial":{"type":"boolean","description":"Whether the contract is a trial. All invoices under a trial contract are flagged with isTrial: true. If not provided, it defaults to false.","uniqueKey":"isTrial","typeLabel":"boolean"},"externalId":{"oneOf":[{"type":"string","description":"A caller-owned external id for the contract. Once set, the contract can be fetched or deleted by passing this value in place of the Vayu id on the /contracts/{contractId} endpoints.","uniqueKey":"externalId.oneOf.0","typeLabel":"string"},{"type":"null","description":"A caller-owned external id for the contract. Once set, the contract can be fetched or deleted by passing this value in place of the Vayu id on the /contracts/{contractId} endpoints.","uniqueKey":"externalId.oneOf.1","typeLabel":"null"}],"uniqueKey":"externalId","typeLabel":"string | null"}},"required":["startDate","customerId"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"startDate":"2023-11-07T05:31:56Z","customerId":"\u003cstring>","planId":"\u003cstring>","name":"\u003cstring>","salesForceOpportunityId":"\u003cstring>","endDate":"2023-11-07T05:31:56Z","signatureDate":"2023-11-07T05:31:56Z","products":[{"displayName":"\u003cstring>","scheduling":{"duration":{"unit":"MONTH","value":500},"billingDay":1},"pricing":{"type":"ONE_TIME","price":1,"discount":{"name":"\u003cstring>","amount":1,"recurring":2},"isCreditPurchase":true,"issuedSeparately":true},"description":"\u003cstring>","disableDescription":true,"catalogProductId":"\u003cstring>","productErpId":"\u003cstring>","nsClass":"\u003cstring>","nsClassId":"\u003cstring>","externalIntegrations":[{"provider":"Paddle","externalId":"\u003cstring>"}],"commitment":{"units":1,"price":1,"type":"UNITS","scheduling":{"duration":{"unit":"MONTH","value":500},"billingDay":1},"overageStrategy":"IGNORE"},"isCalendarAligned":true,"cloudProviderSettings":{"cloudProviderMarketplaceId":"\u003cstring>","dimension":"\u003cstring>"},"consumesCreditProductIds":["\u003cstring>"]}],"creditGrants":[{"name":"\u003cstring>","creditProductId":"\u003cstring>","grantAmount":1,"price":1,"expirationDate":"2023-11-07T05:31:56Z","applyAutomatically":true,"externalIntegrations":[{"provider":"Paddle","externalId":"\u003cstring>"}]}],"productGroups":[{"displayName":"\u003cstring>","products":[{"displayName":"\u003cstring>","scheduling":{"duration":{"unit":"MONTH","value":500},"billingDay":1},"pricing":{"type":"ONE_TIME","price":1,"discount":{"name":"\u003cstring>","amount":1,"recurring":2},"isCreditPurchase":true,"issuedSeparately":true},"description":"\u003cstring>","disableDescription":true,"catalogProductId":"\u003cstring>","productErpId":"\u003cstring>","nsClass":"\u003cstring>","nsClassId":"\u003cstring>","externalIntegrations":[{"provider":"Paddle","externalId":"\u003cstring>"}],"commitment":{"units":1,"price":1,"type":"UNITS","scheduling":{"duration":{"unit":"MONTH","value":500},"billingDay":1},"overageStrategy":"IGNORE"},"isCalendarAligned":true,"cloudProviderSettings":{"cloudProviderMarketplaceId":"\u003cstring>","dimension":"\u003cstring>"},"consumesCreditProductIds":["\u003cstring>"]}],"description":"\u003cstring>","productErpId":"\u003cstring>","nsClass":"\u003cstring>","nsClassId":"\u003cstring>","baseAmount":123,"commitment":{"units":1,"price":1,"type":"UNITS","scheduling":{"duration":{"unit":"MONTH","value":500},"billingDay":1},"overageStrategy":"IGNORE"},"isCalendarAligned":true}],"accountManager":"\u003cstring>","shouldProRateInvoices":true,"autoRenewContract":true,"customFields":[{"vayuCustomFieldName":"\u003cstring>","fieldPath":"\u003cstring>","value":"\u003cunknown>"}],"customFieldValues":[{"customFieldDefinitionId":"\u003cstring>","value":"\u003cstring>","fieldName":"\u003cstring>"}],"purchaseOrder":"\u003cstring>","isTrial":true,"externalId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"6d362da6-cb4a-4115-98ce-7950e5659753":{"description":"RequestSuccess","content":{"application/json":{"schema":{"type":"object","properties":{"contract":{"type":"object","properties":{"startDate":{"type":"string","description":"The start date of the contract","format":"date-time","isRequired":true,"uniqueKey":"contract.startDate","typeLabel":"string\u003cdate-time>"},"customerId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"The id of the customer that the contract is associated with","isRequired":true,"uniqueKey":"contract.customerId","typeLabel":"string"},"id":{"type":"string","isRequired":true,"uniqueKey":"contract.id","typeLabel":"string"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"contract.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"contract.updatedAt","typeLabel":"string\u003cdate-time>"},"planId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"The id of an existing plan to attach to this contract. When provided, products/productGroups are ignored and the plan is used as-is. Mutually exclusive with inline product definition.","uniqueKey":"contract.planId","typeLabel":"string"},"name":{"type":"string","description":"The name of the contract. Required when planId is not provided.","uniqueKey":"contract.name","typeLabel":"string"},"salesForceOpportunityId":{"oneOf":[{"type":"string","description":"The id of the sales force opportunity that the contract is associated with","uniqueKey":"contract.salesForceOpportunityId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the sales force opportunity that the contract is associated with","uniqueKey":"contract.salesForceOpportunityId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.salesForceOpportunityId","typeLabel":"string | null"},"endDate":{"oneOf":[{"type":"string","description":"The end date of the contract","format":"date-time","uniqueKey":"contract.endDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"The end date of the contract","format":"date-time","uniqueKey":"contract.endDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.endDate","typeLabel":"string\u003cdate-time> | null"},"signatureDate":{"oneOf":[{"type":"string","description":"The signature date of the contract","format":"date-time","uniqueKey":"contract.signatureDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"The signature date of the contract","format":"date-time","uniqueKey":"contract.signatureDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.signatureDate","typeLabel":"string\u003cdate-time> | null"},"products":{"type":"array","items":{"type":"object","properties":{"displayName":{"type":"string","description":"The display name of the product","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].displayName","typeLabel":"string"},"scheduling":{"type":"object","properties":{"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].scheduling.duration.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].scheduling.duration.value","typeLabel":"integer"}},"required":["unit","value"],"description":"The duration of the product","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].scheduling.duration","typeLabel":"object"},"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month that the product is billed","uniqueKey":"contract.products.items.[INDEX].scheduling.billingDay","typeLabel":"integer"}},"required":["duration"],"description":"The scheduling of the product","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].scheduling","typeLabel":"object"},"pricing":{"oneOf":[{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["ONE_TIME"],"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0.price","typeLabel":"number"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0.discount","typeLabel":"object | null"},"isCreditPurchase":{"type":"boolean","description":"Deprecated. Legacy prepaid-credit marker: sets a fixed Credit product type and prepayment, but does NOT fund a credit pool. For the credit pool system, use the contract-level creditGrants field instead. Defaults to false.","deprecated":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0.isCreditPurchase","typeLabel":"boolean"},"issuedSeparately":{"type":"boolean","description":"When true, this product is billed on its own invoice instead of being combined with other products in the same contract. Defaults to false.","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0.issuedSeparately","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.0","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["CONTRACT_TERMS"],"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.price","typeLabel":"number"},"quantity":{"type":"integer","minimum":0,"description":"The number of units this term is charged for. When set, `price` is the rate per unit and the term is worth price x quantity. Leave unset for a flat fee.","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.quantity","typeLabel":"integer"},"installments":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"installmentDate":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX].installmentDate","typeLabel":"string\u003cdate-time>"},"amount":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX].amount","typeLabel":"number"}},"required":["installmentDate","amount"],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"installmentDate":{"type":"string","format":"date-time"},"amount":{"type":"number","minimum":0}},"required":["installmentDate","amount"]},"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.installments.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.installments","typeLabel":"object[] | null"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1.discount","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.1","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price","subscriptionCadence"],"properties":{"type":{"type":"string","enum":["SUBSCRIPTION"],"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.price","typeLabel":"number"},"subscriptionCadence":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.subscriptionCadence.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.subscriptionCadence.value","typeLabel":"integer"}},"required":["unit","value"],"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.subscriptionCadence","typeLabel":"object"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.discount","typeLabel":"object | null"},"issuedSeparately":{"type":"boolean","description":"When true, this product is billed on its own invoice instead of being combined with other products in the same contract. Defaults to false.","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.issuedSeparately","typeLabel":"boolean"},"seats":{"type":"integer","minimum":0,"description":"The number of seats for this subscription product.","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2.seats","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.2","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","tiers"],"properties":{"type":{"type":"string","enum":["TIERED"],"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.type","typeLabel":"enum\u003cstring>"},"tiers":{"type":"array","items":{"type":"object","properties":{"fromInclusive":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].fromInclusive","typeLabel":"number"},"toExclusive":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive","typeLabel":"number | null"},"rate":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate","typeLabel":"number | null"},"flatFee":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee","typeLabel":"number | null"},"packageSize":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize","typeLabel":"number | null"}},"required":["fromInclusive"],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.tiers","typeLabel":"object[]"},"subscriptionCadence":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0.value","typeLabel":"integer"}},"required":["unit","value"],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.subscriptionCadence","typeLabel":"object | null"},"autoUpgrade":{"oneOf":[{"type":"boolean","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.autoUpgrade.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.autoUpgrade.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.autoUpgrade","typeLabel":"boolean | null"},"prorate":{"oneOf":[{"type":"boolean","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.prorate.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.prorate.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.prorate","typeLabel":"boolean | null"},"isRevShare":{"oneOf":[{"type":"boolean","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.isRevShare.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.isRevShare.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.isRevShare","typeLabel":"boolean | null"},"baseAmount":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.baseAmount.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.baseAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.baseAmount","typeLabel":"number | null"},"usageReset":{"oneOf":[{"type":"integer","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.usageReset.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.usageReset.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3.usageReset","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.3","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["PER_UNIT"],"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4.price","typeLabel":"number"},"chunkSize":{"oneOf":[{"type":"number","minimum":0,"exclusiveMinimum":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4.chunkSize.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"exclusiveMinimum":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4.chunkSize.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4.chunkSize","typeLabel":"number | null"},"usageReset":{"oneOf":[{"type":"integer","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4.usageReset.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4.usageReset.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4.usageReset","typeLabel":"integer | null"},"baseAmount":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4.baseAmount.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4.baseAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4.baseAmount","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.4","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","amountToDeduct"],"properties":{"type":{"type":"string","enum":["FIXED_DEDUCTION"],"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.5.type","typeLabel":"enum\u003cstring>"},"amountToDeduct":{"type":"number","minimum":0,"description":"The fixed amount to deduct","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.5.amountToDeduct","typeLabel":"number"},"installments":{"type":"integer","minimum":0,"description":"The number of installments to spread the deduction over","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.5.installments","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.5","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","percentageToDeduct"],"properties":{"type":{"type":"string","enum":["PERCENTAGE_DEDUCTION"],"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.6.type","typeLabel":"enum\u003cstring>"},"percentageToDeduct":{"type":"number","minimum":0,"description":"The percentage to deduct","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.6.percentageToDeduct","typeLabel":"number"},"installments":{"type":"integer","minimum":0,"description":"The number of installments to spread the deduction over","uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.6.installments","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing.oneOf.6","typeLabel":"object"}],"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].pricing","typeLabel":"object"},"description":{"oneOf":[{"type":"string","description":"The description of the product","uniqueKey":"contract.products.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"The description of the product","uniqueKey":"contract.products.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].description","typeLabel":"string | null"},"disableDescription":{"oneOf":[{"type":"boolean","description":"Whether to disable the default description on generated line items","uniqueKey":"contract.products.items.[INDEX].disableDescription.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether to disable the default description on generated line items","uniqueKey":"contract.products.items.[INDEX].disableDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].disableDescription","typeLabel":"boolean | null"},"catalogProductId":{"oneOf":[{"type":"string","description":"The id of the a product from the catalog to connect the contract product to","uniqueKey":"contract.products.items.[INDEX].catalogProductId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the a product from the catalog to connect the contract product to","uniqueKey":"contract.products.items.[INDEX].catalogProductId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].catalogProductId","typeLabel":"string | null"},"productErpId":{"oneOf":[{"type":"string","description":"The id of the product in NetSuite ERP","uniqueKey":"contract.products.items.[INDEX].productErpId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the product in NetSuite ERP","uniqueKey":"contract.products.items.[INDEX].productErpId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].productErpId","typeLabel":"string | null"},"nsClass":{"oneOf":[{"type":"string","description":"The class of the product in NetSuite ERP","uniqueKey":"contract.products.items.[INDEX].nsClass.oneOf.0","typeLabel":"string"},{"type":"null","description":"The class of the product in NetSuite ERP","uniqueKey":"contract.products.items.[INDEX].nsClass.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].nsClass","typeLabel":"string | null"},"nsClassId":{"oneOf":[{"type":"string","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"contract.products.items.[INDEX].nsClassId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"contract.products.items.[INDEX].nsClassId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].nsClassId","typeLabel":"string | null"},"externalIntegrations":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].provider","typeLabel":"enum\u003cstring>"},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].externalId","typeLabel":"string"}},"required":["provider","externalId"],"uniqueKey":"contract.products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Links the product to matching products in V3 integrations (e.g. Paddle). For each entry, the product is linked to that external integration after the contract is created, so invoices for this product are exported to it. At most one entry per provider. Currently only Paddle is supported.","uniqueKey":"contract.products.items.[INDEX].externalIntegrations.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported."},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration."}},"required":["provider","externalId"]},"description":"Links the product to matching products in V3 integrations (e.g. Paddle). For each entry, the product is linked to that external integration after the contract is created, so invoices for this product are exported to it. At most one entry per provider. Currently only Paddle is supported.","uniqueKey":"contract.products.items.[INDEX].externalIntegrations.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].externalIntegrations","typeLabel":"object[] | null"},"commitment":{"oneOf":[{"type":"object","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.units","typeLabel":"number"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.price.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.price","typeLabel":"number | null"},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS.","uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.type","typeLabel":"enum\u003cstring>"},"scheduling":{"oneOf":[{"type":"object","properties":{"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.value","typeLabel":"integer"}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR.","isRequired":true,"uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration","typeLabel":"object"},"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling","uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.billingDay","typeLabel":"integer"}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.scheduling","typeLabel":"object | null"},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0.overageStrategy","typeLabel":"enum\u003cstring> | null"}},"required":["units"],"description":"The commitment of the product","uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units"}]},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS."},"scheduling":{"oneOf":[{"type":"object","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."}]},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"}]}},"required":["units"],"description":"The commitment of the product","uniqueKey":"contract.products.items.[INDEX].commitment.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].commitment","typeLabel":"object | null"},"paymentTerm":{"oneOf":[{"type":"string","enum":["Prepayment","Postpayment"],"description":"The payment term of the product. Can be prepayment or postpayment. If not provided, the payment term will be determined by the pricing model.","uniqueKey":"contract.products.items.[INDEX].paymentTerm.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["Prepayment","Postpayment"],"description":"The payment term of the product. Can be prepayment or postpayment. If not provided, the payment term will be determined by the pricing model.","uniqueKey":"contract.products.items.[INDEX].paymentTerm.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].paymentTerm","typeLabel":"enum\u003cstring> | null"},"isCalendarAligned":{"type":"boolean","description":"Whether the invoicing period should be calendar aligned. If not provided, it will default to false. ONE_TIME and COMMERCIAL_TERMS pricing models cannot be calendar aligned. This field is ignored if the product is part of a ProductGroup.","uniqueKey":"contract.products.items.[INDEX].isCalendarAligned","typeLabel":"boolean"},"cloudProviderSettings":{"oneOf":[{"type":"object","properties":{"cloudProvider":{"type":"string","enum":["AWS","GCP","Azure"],"uniqueKey":"contract.products.items.[INDEX].cloudProviderSettings.oneOf.0.cloudProvider","typeLabel":"enum\u003cstring>"},"cloudProviderMarketplaceId":{"type":"string","uniqueKey":"contract.products.items.[INDEX].cloudProviderSettings.oneOf.0.cloudProviderMarketplaceId","typeLabel":"string"},"dimension":{"type":"string","uniqueKey":"contract.products.items.[INDEX].cloudProviderSettings.oneOf.0.dimension","typeLabel":"string"}},"description":"Cloud provider settings for the product","uniqueKey":"contract.products.items.[INDEX].cloudProviderSettings.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"cloudProvider":{"type":"string","enum":["AWS","GCP","Azure"]},"cloudProviderMarketplaceId":{"type":"string"},"dimension":{"type":"string"}},"description":"Cloud provider settings for the product","uniqueKey":"contract.products.items.[INDEX].cloudProviderSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].cloudProviderSettings","typeLabel":"object | null"},"consumesCreditProductIds":{"oneOf":[{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","uniqueKey":"contract.products.items.[INDEX].consumesCreditProductIds.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"IDs of credit products whose pools are drawn down when this usage product is invoiced. Each ID matches the creditProductId of a credit grant on the same contract that funds the pool. Pools are drawn in the order listed. If omitted, no credits are applied and the product is billed at full price. Not supported inside productGroups.","uniqueKey":"contract.products.items.[INDEX].consumesCreditProductIds.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"description":"IDs of credit products whose pools are drawn down when this usage product is invoiced. Each ID matches the creditProductId of a credit grant on the same contract that funds the pool. Pools are drawn in the order listed. If omitted, no credits are applied and the product is billed at full price. Not supported inside productGroups.","uniqueKey":"contract.products.items.[INDEX].consumesCreditProductIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.products.items.[INDEX].consumesCreditProductIds","typeLabel":"string[] | null"}},"required":["displayName","scheduling","pricing"],"uniqueKey":"contract.products.items.[INDEX]","typeLabel":"object"},"description":"The products that the contract is associated with","uniqueKey":"contract.products","typeLabel":"object[]"},"creditGrants":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the credit grant. Used as the invoice line-item label when the grant is charged.","isRequired":true,"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].name","typeLabel":"string"},"creditProductId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"ID of the credit product whose pool this grant funds. A usage product debits the same pool by listing this ID in consumesCreditProductIds. Discover IDs via GET /credit-products.","isRequired":true,"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].creditProductId","typeLabel":"string"},"balanceKind":{"type":"string","enum":["MONETARY","UNIT"],"description":"What grantAmount represents: a monetary value in the contract currency (MONETARY) or a quantity of units (UNIT).","isRequired":true,"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].balanceKind","typeLabel":"enum\u003cstring>"},"grantAmount":{"type":"number","minimum":0,"description":"Amount granted into the pool per grant period — a currency amount when balanceKind is MONETARY (e.g. 500 = $500), or a unit quantity when balanceKind is UNIT.","isRequired":true,"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].grantAmount","typeLabel":"number"},"schedule":{"type":"string","enum":["ONE_TIME","RECURRING_MONTHLY","RECURRING_QUARTERLY","RECURRING_YEARLY"],"description":"How often the grant is applied: ONE_TIME grants once at contract start; RECURRING_MONTHLY, RECURRING_QUARTERLY and RECURRING_YEARLY re-grant each corresponding period.","isRequired":true,"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].schedule","typeLabel":"enum\u003cstring>"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Amount charged to the customer for this grant, in the contract currency. Required when balanceKind is UNIT (a unit quantity has no currency value of its own) — e.g. grant 1000 units for a price of 20 ($20). Optional when balanceKind is MONETARY: if omitted, the grant is sold at face value (price equals grantAmount).","uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].price.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"description":"Amount charged to the customer for this grant, in the contract currency. Required when balanceKind is UNIT (a unit quantity has no currency value of its own) — e.g. grant 1000 units for a price of 20 ($20). Optional when balanceKind is MONETARY: if omitted, the grant is sold at face value (price equals grantAmount).","uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].price.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].price","typeLabel":"number | null"},"expirationDate":{"oneOf":[{"type":"string","description":"Explicit date after which unused granted credits expire. Only supported on ONE_TIME grants. For policy-based expiry on recurring grants, use expirationPolicy instead.","format":"date-time","uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].expirationDate.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Explicit date after which unused granted credits expire. Only supported on ONE_TIME grants. For policy-based expiry on recurring grants, use expirationPolicy instead.","format":"date-time","uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].expirationDate.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].expirationDate","typeLabel":"string\u003cdate-time> | null"},"expirationPolicy":{"type":"string","enum":["AT_NEXT_GRANT","NEVER","END_OF_INVOICE","END_OF_RENEWAL_PERIOD","END_OF_CONTRACT"],"description":"Controls when unused credits from a grant period expire. AT_NEXT_GRANT: credits expire at the end of each billing period (default for recurring). NEVER: credits never expire (default for ONE_TIME). END_OF_INVOICE: credits expire at the end of the invoice period. END_OF_RENEWAL_PERIOD: credits expire at the end of the contract renewal period. END_OF_CONTRACT: credits expire when the contract ends. AT_NEXT_GRANT and END_OF_INVOICE are not available for ONE_TIME grants.","uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].expirationPolicy","typeLabel":"enum\u003cstring>"},"applyAutomatically":{"type":"boolean","description":"Whether granted credits are applied to usage automatically. Defaults to true.","uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].applyAutomatically","typeLabel":"boolean"},"externalIntegrations":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported.","isRequired":true,"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].provider","typeLabel":"enum\u003cstring>"},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration.","isRequired":true,"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].externalId","typeLabel":"string"}},"required":["provider","externalId"],"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Links the subscription created for a recurring credit grant to matching products in V3 integrations (e.g. Paddle). The grant's inferred product is linked to each external integration after the contract is created, so invoices for the grant are exported to it. At most one entry per provider. Applies only to credit grants on a contract — ignored on credit top-ups. Currently only Paddle is supported.","uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].externalIntegrations.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported."},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration."}},"required":["provider","externalId"]},"description":"Links the subscription created for a recurring credit grant to matching products in V3 integrations (e.g. Paddle). The grant's inferred product is linked to each external integration after the contract is created, so invoices for the grant are exported to it. At most one entry per provider. Applies only to credit grants on a contract — ignored on credit top-ups. Currently only Paddle is supported.","uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].externalIntegrations.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX].externalIntegrations","typeLabel":"object[] | null"}},"required":["name","creditProductId","balanceKind","grantAmount","schedule"],"uniqueKey":"contract.creditGrants.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Credit grants that fund credit pools for the customer under this contract. Each grant credits a pool identified by its creditProductId; usage products draw down those pools via consumesCreditProductIds.","uniqueKey":"contract.creditGrants.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of the credit grant. Used as the invoice line-item label when the grant is charged."},"creditProductId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"ID of the credit product whose pool this grant funds. A usage product debits the same pool by listing this ID in consumesCreditProductIds. Discover IDs via GET /credit-products."},"balanceKind":{"type":"string","enum":["MONETARY","UNIT"],"description":"What grantAmount represents: a monetary value in the contract currency (MONETARY) or a quantity of units (UNIT)."},"grantAmount":{"type":"number","minimum":0,"description":"Amount granted into the pool per grant period — a currency amount when balanceKind is MONETARY (e.g. 500 = $500), or a unit quantity when balanceKind is UNIT."},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Amount charged to the customer for this grant, in the contract currency. Required when balanceKind is UNIT (a unit quantity has no currency value of its own) — e.g. grant 1000 units for a price of 20 ($20). Optional when balanceKind is MONETARY: if omitted, the grant is sold at face value (price equals grantAmount)."},{"type":"null","minimum":0,"description":"Amount charged to the customer for this grant, in the contract currency. Required when balanceKind is UNIT (a unit quantity has no currency value of its own) — e.g. grant 1000 units for a price of 20 ($20). Optional when balanceKind is MONETARY: if omitted, the grant is sold at face value (price equals grantAmount)."}]},"schedule":{"type":"string","enum":["ONE_TIME","RECURRING_MONTHLY","RECURRING_QUARTERLY","RECURRING_YEARLY"],"description":"How often the grant is applied: ONE_TIME grants once at contract start; RECURRING_MONTHLY, RECURRING_QUARTERLY and RECURRING_YEARLY re-grant each corresponding period."},"expirationDate":{"oneOf":[{"type":"string","description":"Explicit date after which unused granted credits expire. Only supported on ONE_TIME grants. For policy-based expiry on recurring grants, use expirationPolicy instead.","format":"date-time"},{"type":"null","description":"Explicit date after which unused granted credits expire. Only supported on ONE_TIME grants. For policy-based expiry on recurring grants, use expirationPolicy instead.","format":"date-time"}]},"expirationPolicy":{"type":"string","enum":["AT_NEXT_GRANT","NEVER","END_OF_INVOICE","END_OF_RENEWAL_PERIOD","END_OF_CONTRACT"],"description":"Controls when unused credits from a grant period expire. AT_NEXT_GRANT: credits expire at the end of each billing period (default for recurring). NEVER: credits never expire (default for ONE_TIME). END_OF_INVOICE: credits expire at the end of the invoice period. END_OF_RENEWAL_PERIOD: credits expire at the end of the contract renewal period. END_OF_CONTRACT: credits expire when the contract ends. AT_NEXT_GRANT and END_OF_INVOICE are not available for ONE_TIME grants."},"applyAutomatically":{"type":"boolean","description":"Whether granted credits are applied to usage automatically. Defaults to true."},"externalIntegrations":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported."},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration."}},"required":["provider","externalId"]},"description":"Links the subscription created for a recurring credit grant to matching products in V3 integrations (e.g. Paddle). The grant's inferred product is linked to each external integration after the contract is created, so invoices for the grant are exported to it. At most one entry per provider. Applies only to credit grants on a contract — ignored on credit top-ups. Currently only Paddle is supported."},{"type":"null","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported."},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration."}},"required":["provider","externalId"]},"description":"Links the subscription created for a recurring credit grant to matching products in V3 integrations (e.g. Paddle). The grant's inferred product is linked to each external integration after the contract is created, so invoices for the grant are exported to it. At most one entry per provider. Applies only to credit grants on a contract — ignored on credit top-ups. Currently only Paddle is supported."}]}},"required":["name","creditProductId","balanceKind","grantAmount","schedule"]},"description":"Credit grants that fund credit pools for the customer under this contract. Each grant credits a pool identified by its creditProductId; usage products draw down those pools via consumesCreditProductIds.","uniqueKey":"contract.creditGrants.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.creditGrants","typeLabel":"object[] | null"},"productGroups":{"type":"array","items":{"type":"object","properties":{"displayName":{"type":"string","description":"The display name of the product","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].displayName","typeLabel":"string"},"products":{"type":"array","items":{"type":"object","properties":{"displayName":{"type":"string","description":"The display name of the product","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].displayName","typeLabel":"string"},"scheduling":{"type":"object","properties":{"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].scheduling.duration.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].scheduling.duration.value","typeLabel":"integer"}},"required":["unit","value"],"description":"The duration of the product","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].scheduling.duration","typeLabel":"object"},"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month that the product is billed","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].scheduling.billingDay","typeLabel":"integer"}},"required":["duration"],"description":"The scheduling of the product","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].scheduling","typeLabel":"object"},"pricing":{"oneOf":[{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["ONE_TIME"],"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.price","typeLabel":"number"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.discount","typeLabel":"object | null"},"isCreditPurchase":{"type":"boolean","description":"Deprecated. Legacy prepaid-credit marker: sets a fixed Credit product type and prepayment, but does NOT fund a credit pool. For the credit pool system, use the contract-level creditGrants field instead. Defaults to false.","deprecated":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.isCreditPurchase","typeLabel":"boolean"},"issuedSeparately":{"type":"boolean","description":"When true, this product is billed on its own invoice instead of being combined with other products in the same contract. Defaults to false.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0.issuedSeparately","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.0","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["CONTRACT_TERMS"],"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.price","typeLabel":"number"},"quantity":{"type":"integer","minimum":0,"description":"The number of units this term is charged for. When set, `price` is the rate per unit and the term is worth price x quantity. Leave unset for a flat fee.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.quantity","typeLabel":"integer"},"installments":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"installmentDate":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX].installmentDate","typeLabel":"string\u003cdate-time>"},"amount":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX].amount","typeLabel":"number"}},"required":["installmentDate","amount"],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"installmentDate":{"type":"string","format":"date-time"},"amount":{"type":"number","minimum":0}},"required":["installmentDate","amount"]},"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.installments","typeLabel":"object[] | null"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1.discount","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.1","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price","subscriptionCadence"],"properties":{"type":{"type":"string","enum":["SUBSCRIPTION"],"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.price","typeLabel":"number"},"subscriptionCadence":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.subscriptionCadence.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.subscriptionCadence.value","typeLabel":"integer"}},"required":["unit","value"],"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.subscriptionCadence","typeLabel":"object"},"discount":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.name","typeLabel":"string"},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.type","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.amount","typeLabel":"number"},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0.recurring","typeLabel":"integer"}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"name":{"type":"string","minLength":1,"description":"The name of the discount. Will appear on the invoice."},"type":{"type":"string","enum":["FIXED","PERCENTAGE"],"description":"The type of discount — FIXED for a fixed amount, PERCENTAGE for a percentage-based discount."},"amount":{"type":"number","minimum":0,"description":"The discount amount. Interpreted as a currency amount for FIXED or a percentage for PERCENTAGE."},"recurring":{"type":"integer","minimum":1,"description":"The number of billing periods the discount applies for. If not provided, the discount recurs indefinitely."}},"required":["name","type","amount"],"description":"An optional discount to apply to this product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.discount","typeLabel":"object | null"},"issuedSeparately":{"type":"boolean","description":"When true, this product is billed on its own invoice instead of being combined with other products in the same contract. Defaults to false.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.issuedSeparately","typeLabel":"boolean"},"seats":{"type":"integer","minimum":0,"description":"The number of seats for this subscription product.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2.seats","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.2","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","tiers"],"properties":{"type":{"type":"string","enum":["TIERED"],"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.type","typeLabel":"enum\u003cstring>"},"tiers":{"type":"array","items":{"type":"object","properties":{"fromInclusive":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].fromInclusive","typeLabel":"number"},"toExclusive":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].toExclusive","typeLabel":"number | null"},"rate":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].rate","typeLabel":"number | null"},"flatFee":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].flatFee","typeLabel":"number | null"},"packageSize":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX].packageSize","typeLabel":"number | null"}},"required":["fromInclusive"],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.tiers","typeLabel":"object[]"},"subscriptionCadence":{"oneOf":[{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0.value","typeLabel":"integer"}},"required":["unit","value"],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.subscriptionCadence.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.subscriptionCadence","typeLabel":"object | null"},"autoUpgrade":{"oneOf":[{"type":"boolean","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.autoUpgrade.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.autoUpgrade.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.autoUpgrade","typeLabel":"boolean | null"},"prorate":{"oneOf":[{"type":"boolean","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.prorate.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.prorate.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.prorate","typeLabel":"boolean | null"},"isRevShare":{"oneOf":[{"type":"boolean","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.isRevShare.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.isRevShare.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.isRevShare","typeLabel":"boolean | null"},"baseAmount":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.baseAmount.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.baseAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.baseAmount","typeLabel":"number | null"},"usageReset":{"oneOf":[{"type":"integer","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.usageReset.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.usageReset.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3.usageReset","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.3","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","price"],"properties":{"type":{"type":"string","enum":["PER_UNIT"],"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.type","typeLabel":"enum\u003cstring>"},"price":{"type":"number","minimum":0,"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.price","typeLabel":"number"},"chunkSize":{"oneOf":[{"type":"number","minimum":0,"exclusiveMinimum":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.chunkSize.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"exclusiveMinimum":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.chunkSize.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.chunkSize","typeLabel":"number | null"},"usageReset":{"oneOf":[{"type":"integer","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.usageReset.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Usage reset is represented in months and must be one of: 1, 2, 3, 6, 12","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.usageReset.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.usageReset","typeLabel":"integer | null"},"baseAmount":{"oneOf":[{"type":"number","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.baseAmount.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.baseAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4.baseAmount","typeLabel":"number | null"}},"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.4","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","amountToDeduct"],"properties":{"type":{"type":"string","enum":["FIXED_DEDUCTION"],"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.5.type","typeLabel":"enum\u003cstring>"},"amountToDeduct":{"type":"number","minimum":0,"description":"The fixed amount to deduct","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.5.amountToDeduct","typeLabel":"number"},"installments":{"type":"integer","minimum":0,"description":"The number of installments to spread the deduction over","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.5.installments","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.5","typeLabel":"object"},{"type":"object","description":"The pricing of the product","required":["type","percentageToDeduct"],"properties":{"type":{"type":"string","enum":["PERCENTAGE_DEDUCTION"],"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.6.type","typeLabel":"enum\u003cstring>"},"percentageToDeduct":{"type":"number","minimum":0,"description":"The percentage to deduct","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.6.percentageToDeduct","typeLabel":"number"},"installments":{"type":"integer","minimum":0,"description":"The number of installments to spread the deduction over","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.6.installments","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing.oneOf.6","typeLabel":"object"}],"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].pricing","typeLabel":"object"},"description":{"oneOf":[{"type":"string","description":"The description of the product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"The description of the product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].description","typeLabel":"string | null"},"disableDescription":{"oneOf":[{"type":"boolean","description":"Whether to disable the default description on generated line items","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].disableDescription.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"Whether to disable the default description on generated line items","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].disableDescription.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].disableDescription","typeLabel":"boolean | null"},"catalogProductId":{"oneOf":[{"type":"string","description":"The id of the a product from the catalog to connect the contract product to","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].catalogProductId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the a product from the catalog to connect the contract product to","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].catalogProductId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].catalogProductId","typeLabel":"string | null"},"productErpId":{"oneOf":[{"type":"string","description":"The id of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].productErpId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].productErpId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].productErpId","typeLabel":"string | null"},"nsClass":{"oneOf":[{"type":"string","description":"The class of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].nsClass.oneOf.0","typeLabel":"string"},{"type":"null","description":"The class of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].nsClass.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].nsClass","typeLabel":"string | null"},"nsClassId":{"oneOf":[{"type":"string","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].nsClassId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].nsClassId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].nsClassId","typeLabel":"string | null"},"externalIntegrations":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].provider","typeLabel":"enum\u003cstring>"},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX].externalId","typeLabel":"string"}},"required":["provider","externalId"],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Links the product to matching products in V3 integrations (e.g. Paddle). For each entry, the product is linked to that external integration after the contract is created, so invoices for this product are exported to it. At most one entry per provider. Currently only Paddle is supported.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"provider":{"type":"string","enum":["Paddle"],"description":"The V3 integration provider to link the product to. Currently only Paddle is supported."},"externalId":{"type":"string","description":"The id of the matching product in the external integration (e.g. the Paddle product id). The product must already exist in the connected integration; it is fetched and linked when the contract is created so that invoices for this product are exported to that integration."}},"required":["provider","externalId"]},"description":"Links the product to matching products in V3 integrations (e.g. Paddle). For each entry, the product is linked to that external integration after the contract is created, so invoices for this product are exported to it. At most one entry per provider. Currently only Paddle is supported.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].externalIntegrations","typeLabel":"object[] | null"},"commitment":{"oneOf":[{"type":"object","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.units","typeLabel":"number"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.price.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.price","typeLabel":"number | null"},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.type","typeLabel":"enum\u003cstring>"},"scheduling":{"oneOf":[{"type":"object","properties":{"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.value","typeLabel":"integer"}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration","typeLabel":"object"},"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.billingDay","typeLabel":"integer"}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.scheduling","typeLabel":"object | null"},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0.overageStrategy","typeLabel":"enum\u003cstring> | null"}},"required":["units"],"description":"The commitment of the product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units"}]},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS."},"scheduling":{"oneOf":[{"type":"object","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."}]},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"}]}},"required":["units"],"description":"The commitment of the product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].commitment","typeLabel":"object | null"},"paymentTerm":{"oneOf":[{"type":"string","enum":["Prepayment","Postpayment"],"description":"The payment term of the product. Can be prepayment or postpayment. If not provided, the payment term will be determined by the pricing model.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].paymentTerm.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["Prepayment","Postpayment"],"description":"The payment term of the product. Can be prepayment or postpayment. If not provided, the payment term will be determined by the pricing model.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].paymentTerm.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].paymentTerm","typeLabel":"enum\u003cstring> | null"},"isCalendarAligned":{"type":"boolean","description":"Whether the invoicing period should be calendar aligned. If not provided, it will default to false. ONE_TIME and COMMERCIAL_TERMS pricing models cannot be calendar aligned. This field is ignored if the product is part of a ProductGroup.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].isCalendarAligned","typeLabel":"boolean"},"cloudProviderSettings":{"oneOf":[{"type":"object","properties":{"cloudProvider":{"type":"string","enum":["AWS","GCP","Azure"],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings.oneOf.0.cloudProvider","typeLabel":"enum\u003cstring>"},"cloudProviderMarketplaceId":{"type":"string","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings.oneOf.0.cloudProviderMarketplaceId","typeLabel":"string"},"dimension":{"type":"string","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings.oneOf.0.dimension","typeLabel":"string"}},"description":"Cloud provider settings for the product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"cloudProvider":{"type":"string","enum":["AWS","GCP","Azure"]},"cloudProviderMarketplaceId":{"type":"string"},"dimension":{"type":"string"}},"description":"Cloud provider settings for the product","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].cloudProviderSettings","typeLabel":"object | null"},"consumesCreditProductIds":{"oneOf":[{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].consumesCreditProductIds.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"IDs of credit products whose pools are drawn down when this usage product is invoiced. Each ID matches the creditProductId of a credit grant on the same contract that funds the pool. Pools are drawn in the order listed. If omitted, no credits are applied and the product is billed at full price. Not supported inside productGroups.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].consumesCreditProductIds.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"description":"IDs of credit products whose pools are drawn down when this usage product is invoiced. Each ID matches the creditProductId of a credit grant on the same contract that funds the pool. Pools are drawn in the order listed. If omitted, no credits are applied and the product is billed at full price. Not supported inside productGroups.","uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].consumesCreditProductIds.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX].consumesCreditProductIds","typeLabel":"string[] | null"}},"required":["displayName","scheduling","pricing"],"uniqueKey":"contract.productGroups.items.[INDEX].products.items.[INDEX]","typeLabel":"object"},"minItems":1,"description":"The products that the product group is associated with","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].products","typeLabel":"object[]"},"description":{"oneOf":[{"type":"string","description":"The description of the product","uniqueKey":"contract.productGroups.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","description":"The description of the product","uniqueKey":"contract.productGroups.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].description","typeLabel":"string | null"},"productErpId":{"oneOf":[{"type":"string","description":"The id of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].productErpId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].productErpId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].productErpId","typeLabel":"string | null"},"nsClass":{"oneOf":[{"type":"string","description":"The class of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].nsClass.oneOf.0","typeLabel":"string"},{"type":"null","description":"The class of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].nsClass.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].nsClass","typeLabel":"string | null"},"nsClassId":{"oneOf":[{"type":"string","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].nsClassId.oneOf.0","typeLabel":"string"},{"type":"null","description":"The id of the class of the product in NetSuite ERP","uniqueKey":"contract.productGroups.items.[INDEX].nsClassId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].nsClassId","typeLabel":"string | null"},"baseAmount":{"oneOf":[{"type":"number","description":"The base amount for the customer to pay even if the amount based on usage is lower","uniqueKey":"contract.productGroups.items.[INDEX].baseAmount.oneOf.0","typeLabel":"number"},{"type":"null","description":"The base amount for the customer to pay even if the amount based on usage is lower","uniqueKey":"contract.productGroups.items.[INDEX].baseAmount.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].baseAmount","typeLabel":"number | null"},"commitment":{"oneOf":[{"type":"object","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.units","typeLabel":"number"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.price.oneOf.0","typeLabel":"number"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units","uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.price.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.price","typeLabel":"number | null"},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS.","uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.type","typeLabel":"enum\u003cstring>"},"scheduling":{"oneOf":[{"type":"object","properties":{"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.unit","typeLabel":"enum\u003cstring>"},"value":{"type":"integer","minimum":0,"maximum":1000,"isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration.value","typeLabel":"integer"}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR.","isRequired":true,"uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.duration","typeLabel":"object"},"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling","uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0.billingDay","typeLabel":"integer"}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR.","uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.scheduling.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.scheduling","typeLabel":"object | null"},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs","uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.overageStrategy.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0.overageStrategy","typeLabel":"enum\u003cstring> | null"}},"required":["units"],"description":"The commitment of the product group. units are aggregated for all products in the group","uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"units":{"type":"number","minimum":0,"description":"Units to commit the customer for"},"price":{"oneOf":[{"type":"number","minimum":0,"description":"Price to charge the customer for the committed units"},{"type":"null","minimum":0,"description":"Price to charge the customer for the committed units"}]},"type":{"type":"string","enum":["PRICE","UNITS"],"default":"UNITS","description":"The type of commitment. UNITS means the commitment amount is in units, PRICE means it is a monetary value. Defaults to UNITS."},"scheduling":{"oneOf":[{"type":"object","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."},{"type":"null","properties":{"billingDay":{"type":"integer","minimum":1,"maximum":31,"default":1,"description":"The day of the month for the commitment scheduling"},"duration":{"type":"object","properties":{"unit":{"type":"string","enum":["DAY","WEEK","MONTH","YEAR"],"default":"MONTH"},"value":{"type":"integer","minimum":0,"maximum":1000}},"required":["unit","value"],"description":"The duration of the commitment scheduling cycle. Unit must be MONTH or YEAR."}},"required":["duration"],"description":"Scheduling for recurring commitment. Duration unit must be MONTH or YEAR."}]},"overageStrategy":{"oneOf":[{"type":"string","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"},{"type":"null","enum":["IGNORE","BLOCK","UPGRADE_PLAN","TOP_UP"],"default":"IGNORE","description":"The strategy to apply when the overage occurs"}]}},"required":["units"],"description":"The commitment of the product group. units are aggregated for all products in the group","uniqueKey":"contract.productGroups.items.[INDEX].commitment.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.productGroups.items.[INDEX].commitment","typeLabel":"object | null"},"isCalendarAligned":{"type":"boolean","description":"Whether the invoicing period should be calendar aligned. If not provided, it will default to false. ONE_TIME and COMMERCIAL_TERMS pricing models cannot be calendar aligned.","uniqueKey":"contract.productGroups.items.[INDEX].isCalendarAligned","typeLabel":"boolean"}},"required":["displayName","products"],"uniqueKey":"contract.productGroups.items.[INDEX]","typeLabel":"object"},"description":"Product groups are list of products that can be grouped as a single line item with shared settings like ERP settings, commitment settings, etc.","uniqueKey":"contract.productGroups","typeLabel":"object[]"},"accountManager":{"oneOf":[{"type":"string","description":"The name of the account manager of the contract","uniqueKey":"contract.accountManager.oneOf.0","typeLabel":"string"},{"type":"null","description":"The name of the account manager of the contract","uniqueKey":"contract.accountManager.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.accountManager","typeLabel":"string | null"},"shouldProRateInvoices":{"type":"boolean","description":"Whether to pro rate the invoices for the contract. If not provided, it will default to false","deprecated":true,"uniqueKey":"contract.shouldProRateInvoices","typeLabel":"boolean"},"autoRenewContract":{"type":"boolean","description":"Whether the contract is set to auto renew. If not provided, it will be treated as true","uniqueKey":"contract.autoRenewContract","typeLabel":"boolean"},"customFields":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"vayuCustomFieldName":{"type":"string","description":"The name of the field in Vayu (e.g., \"AE Name\")","isRequired":true,"uniqueKey":"contract.customFields.oneOf.0.items.[INDEX].vayuCustomFieldName","typeLabel":"string"},"valueType":{"type":"string","enum":["String","Number","Boolean","Enum"],"description":"The type of the value: \"String\", \"Number\", or \"Boolean\"","isRequired":true,"uniqueKey":"contract.customFields.oneOf.0.items.[INDEX].valueType","typeLabel":"enum\u003cstring>"},"integrationSource":{"type":"string","enum":["NetSuite","QuickBooks","Stripe","Salesforce","Hubspot","Vayu","Slack","S3","Morning","Snowflake","Anrok","Connact","Xero","Paddle"],"description":"The integration provider (e.g., \"Salesforce\", \"HubSpot\")","uniqueKey":"contract.customFields.oneOf.0.items.[INDEX].integrationSource","typeLabel":"enum\u003cstring>"},"integrationEntityType":{"type":"string","enum":["Account","Invoice","SalesOrder","Item","Deal","Company","Opportunity"],"description":"The entity type in the integration (e.g., \"Opportunity\", \"Deal\")","uniqueKey":"contract.customFields.oneOf.0.items.[INDEX].integrationEntityType","typeLabel":"enum\u003cstring>"},"fieldPath":{"type":"string","description":"The path to the field in the integration (e.g., \"root.path.field\")","uniqueKey":"contract.customFields.oneOf.0.items.[INDEX].fieldPath","typeLabel":"string"},"value":{"oneOf":[{"description":"The actual value of the custom field","uniqueKey":"contract.customFields.oneOf.0.items.[INDEX].value.oneOf.0","typeLabel":"any"},{"description":"The actual value of the custom field","type":"null","uniqueKey":"contract.customFields.oneOf.0.items.[INDEX].value.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.customFields.oneOf.0.items.[INDEX].value","typeLabel":"any | null"}},"required":["vayuCustomFieldName","valueType"],"uniqueKey":"contract.customFields.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Custom fields from CRM systems (Salesforce, HubSpot, etc.)","uniqueKey":"contract.customFields.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"integrationSource":{"type":"string","enum":["NetSuite","QuickBooks","Stripe","Salesforce","Hubspot","Vayu","Slack","S3","Morning","Snowflake","Anrok","Connact","Xero","Paddle"],"description":"The integration provider (e.g., \"Salesforce\", \"HubSpot\")"},"integrationEntityType":{"type":"string","enum":["Account","Invoice","SalesOrder","Item","Deal","Company","Opportunity"],"description":"The entity type in the integration (e.g., \"Opportunity\", \"Deal\")"},"fieldPath":{"type":"string","description":"The path to the field in the integration (e.g., \"root.path.field\")"},"vayuCustomFieldName":{"type":"string","description":"The name of the field in Vayu (e.g., \"AE Name\")"},"valueType":{"type":"string","enum":["String","Number","Boolean","Enum"],"description":"The type of the value: \"String\", \"Number\", or \"Boolean\""},"value":{"oneOf":[{"description":"The actual value of the custom field"},{"description":"The actual value of the custom field","type":"null"}]}},"required":["vayuCustomFieldName","valueType"]},"description":"Custom fields from CRM systems (Salesforce, HubSpot, etc.)","uniqueKey":"contract.customFields.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.customFields","typeLabel":"object[] | null"},"customFieldValues":{"oneOf":[{"type":"array","items":{"type":"object","properties":{"customFieldDefinitionId":{"type":"string","isRequired":true,"uniqueKey":"contract.customFieldValues.oneOf.0.items.[INDEX].customFieldDefinitionId","typeLabel":"string"},"value":{"type":"string","uniqueKey":"contract.customFieldValues.oneOf.0.items.[INDEX].value","typeLabel":"string"},"fieldName":{"type":"string","uniqueKey":"contract.customFieldValues.oneOf.0.items.[INDEX].fieldName","typeLabel":"string"}},"required":["customFieldDefinitionId"],"uniqueKey":"contract.customFieldValues.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"The stored custom field values associated with the contract","uniqueKey":"contract.customFieldValues.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object","properties":{"customFieldDefinitionId":{"type":"string"},"value":{"type":"string"},"fieldName":{"type":"string"}},"required":["customFieldDefinitionId"]},"description":"The stored custom field values associated with the contract","uniqueKey":"contract.customFieldValues.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.customFieldValues","typeLabel":"object[] | null"},"status":{"type":"string","enum":["InReview","Scheduled","Active","Inactive","Expired","Terminated","PendingTermination","Error"],"description":"The status of the contract","uniqueKey":"contract.status","typeLabel":"enum\u003cstring>"},"purchaseOrder":{"type":"string","description":"The purchase order number of the contract","uniqueKey":"contract.purchaseOrder","typeLabel":"string"},"currency":{"oneOf":[{"type":"string","description":"The currency of the contract. Overrides the customer-level currency for all invoices under this contract. If not provided, the customer currency or account default (USD) is used.","enum":["USD","EUR","GBP","ILS","CAD","AUD","COP","BRL","ARS","INR","MXN","CHF"],"uniqueKey":"contract.currency.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"The currency of the contract. Overrides the customer-level currency for all invoices under this contract. If not provided, the customer currency or account default (USD) is used.","enum":["USD","EUR","GBP","ILS","CAD","AUD","COP","BRL","ARS","INR","MXN","CHF"],"uniqueKey":"contract.currency.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.currency","typeLabel":"enum\u003cstring> | null"},"isTrial":{"type":"boolean","description":"Whether the contract is a trial. All invoices under a trial contract are flagged with isTrial: true. If not provided, it defaults to false.","uniqueKey":"contract.isTrial","typeLabel":"boolean"},"externalId":{"oneOf":[{"type":"string","description":"A caller-owned external id for the contract. Once set, the contract can be fetched or deleted by passing this value in place of the Vayu id on the /contracts/{contractId} endpoints.","uniqueKey":"contract.externalId.oneOf.0","typeLabel":"string"},{"type":"null","description":"A caller-owned external id for the contract. Once set, the contract can be fetched or deleted by passing this value in place of the Vayu id on the /contracts/{contractId} endpoints.","uniqueKey":"contract.externalId.oneOf.1","typeLabel":"null"}],"uniqueKey":"contract.externalId","typeLabel":"string | null"}},"required":["startDate","customerId","id","createdAt","updatedAt"],"isRequired":true,"uniqueKey":"contract","typeLabel":"object"}},"required":["contract"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"contract":{"startDate":"2023-11-07T05:31:56Z","customerId":"\u003cstring>","id":"\u003cstring>","createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z","planId":"\u003cstring>","name":"\u003cstring>","salesForceOpportunityId":"\u003cstring>","endDate":"2023-11-07T05:31:56Z","signatureDate":"2023-11-07T05:31:56Z","products":[{"displayName":"\u003cstring>","scheduling":{"duration":{"unit":"MONTH","value":500},"billingDay":1},"pricing":{"type":"ONE_TIME","price":1,"discount":{"name":"\u003cstring>","type":"FIXED","amount":1,"recurring":2},"isCreditPurchase":true,"issuedSeparately":true},"description":"\u003cstring>","disableDescription":true,"catalogProductId":"\u003cstring>","productErpId":"\u003cstring>","nsClass":"\u003cstring>","nsClassId":"\u003cstring>","externalIntegrations":[{"provider":"Paddle","externalId":"\u003cstring>"}],"commitment":{"units":1,"price":1,"type":"UNITS","scheduling":{"duration":{"unit":"MONTH","value":500},"billingDay":1},"overageStrategy":"IGNORE"},"paymentTerm":"Prepayment","isCalendarAligned":true,"cloudProviderSettings":{"cloudProvider":"AWS","cloudProviderMarketplaceId":"\u003cstring>","dimension":"\u003cstring>"},"consumesCreditProductIds":["\u003cstring>"]}],"creditGrants":[{"name":"\u003cstring>","creditProductId":"\u003cstring>","balanceKind":"MONETARY","grantAmount":1,"schedule":"ONE_TIME","price":1,"expirationDate":"2023-11-07T05:31:56Z","expirationPolicy":"AT_NEXT_GRANT","applyAutomatically":true,"externalIntegrations":[{"provider":"Paddle","externalId":"\u003cstring>"}]}],"productGroups":[{"displayName":"\u003cstring>","products":[{"displayName":"\u003cstring>","scheduling":{"duration":{"unit":"MONTH","value":500},"billingDay":1},"pricing":{"type":"ONE_TIME","price":1,"discount":{"name":"\u003cstring>","type":"FIXED","amount":1,"recurring":2},"isCreditPurchase":true,"issuedSeparately":true},"description":"\u003cstring>","disableDescription":true,"catalogProductId":"\u003cstring>","productErpId":"\u003cstring>","nsClass":"\u003cstring>","nsClassId":"\u003cstring>","externalIntegrations":[{"provider":"Paddle","externalId":"\u003cstring>"}],"commitment":{"units":1,"price":1,"type":"UNITS","scheduling":{"duration":{"unit":"MONTH","value":500},"billingDay":1},"overageStrategy":"IGNORE"},"paymentTerm":"Prepayment","isCalendarAligned":true,"cloudProviderSettings":{"cloudProvider":"AWS","cloudProviderMarketplaceId":"\u003cstring>","dimension":"\u003cstring>"},"consumesCreditProductIds":["\u003cstring>"]}],"description":"\u003cstring>","productErpId":"\u003cstring>","nsClass":"\u003cstring>","nsClassId":"\u003cstring>","baseAmount":123,"commitment":{"units":1,"price":1,"type":"UNITS","scheduling":{"duration":{"unit":"MONTH","value":500},"billingDay":1},"overageStrategy":"IGNORE"},"isCalendarAligned":true}],"accountManager":"\u003cstring>","shouldProRateInvoices":true,"autoRenewContract":true,"customFields":[{"vayuCustomFieldName":"\u003cstring>","valueType":"String","integrationSource":"NetSuite","integrationEntityType":"Account","fieldPath":"\u003cstring>","value":"\u003cunknown>"}],"customFieldValues":[{"customFieldDefinitionId":"\u003cstring>","value":"\u003cstring>","fieldName":"\u003cstring>"}],"status":"InReview","purchaseOrder":"\u003cstring>","currency":"USD","isTrial":true,"externalId":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"1919068c-c028-4bcc-8cd6-e062c17b0c45":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request_error"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Specific machine-readable error code","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable error explanation","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"requiredScope":{"type":"string","description":"Scope the token was missing, present on insufficient_scope errors","uniqueKey":"requiredScope","typeLabel":"string"},"param":{"type":"string","description":"Single parameter that failed validation","uniqueKey":"param","typeLabel":"string"},"params":{"type":"array","items":{"type":"object","properties":{"param":{"type":"string","description":"The parameter that failed validation","isRequired":true,"uniqueKey":"params.items.[INDEX].param","typeLabel":"string"},"message":{"type":"string","description":"Why validation failed for this parameter","isRequired":true,"uniqueKey":"params.items.[INDEX].message","typeLabel":"string"}},"required":["param","message"],"uniqueKey":"params.items.[INDEX]","typeLabel":"object"},"description":"Multiple parameters that failed validation","uniqueKey":"params","typeLabel":"object[]"}},"required":["type","code","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"invalid_request_error","code":"\u003cstring>","message":"\u003cstring>","requiredScope":"\u003cstring>","param":"\u003cstring>","params":[{"param":"\u003cstring>","message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"8e8353e9-439b-4beb-bdfe-69aa1331d0c3":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["authentication_error"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["authentication_failed"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error explanation","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"requiredScope":{"type":"string","description":"Scope the token was missing, present on insufficient_scope errors","uniqueKey":"requiredScope","typeLabel":"string"}},"required":["type","code","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"authentication_error","code":"authentication_failed","message":"\u003cstring>","requiredScope":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"8ad00550-394d-42a9-9bc3-fb1592f8a1c7":{"description":"Too Many Requests","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["rate_limit_error"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["rate_limit_exceeded"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error explanation","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"requiredScope":{"type":"string","description":"Scope the token was missing, present on insufficient_scope errors","uniqueKey":"requiredScope","typeLabel":"string"}},"required":["type","code","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"rate_limit_error","code":"rate_limit_exceeded","message":"\u003cstring>","requiredScope":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"91c31a50-cc3d-4b8d-a0cc-9981c9358f44":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["api_error"],"isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","enum":["internal_error"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable error explanation","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"requiredScope":{"type":"string","description":"Scope the token was missing, present on insufficient_scope errors","uniqueKey":"requiredScope","typeLabel":"string"}},"required":["type","code","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"api_error","code":"internal_error","message":"\u003cstring>","requiredScope":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"3fc63284-c996-43ba-8294-6bd3e42275cc":{"BearerAuthorizer":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[]}}},"servers":{"0dec5a11-3cfa-4138-ae7a-94bedee29854":{"url":"https://connect.withvayu.com","description":"Production server"},"eee074eb-d58a-403e-b620-7f577fbb3209":{"url":"https://staging-connect.withvayu.com","description":"Sandbox server"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[]},"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":"BearerAuthorizer","name":"Authorization"}],"title":"BearerAuthorizer"}]},"originalFileLocation":"config/vy-openapi.yml"},"subdomain":"vayu-786467d1","siteName":"Vayu docs","title":"Create Contract - Vayu docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-28T10:53:07.082Z","originalFileLocation":"api-reference/endpoints/contracts/create-contract.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 new Contract.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Vayu docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/vayu-786467d1/mq4wQUuhRBkcW2Tn/_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/vayu-786467d1/mq4wQUuhRBkcW2Tn/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/vayu-786467d1/mq4wQUuhRBkcW2Tn/_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/vayu-786467d1/mq4wQUuhRBkcW2Tn/_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/vayu-786467d1/mq4wQUuhRBkcW2Tn/_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/vayu-786467d1/mq4wQUuhRBkcW2Tn/_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/vayu-786467d1/mq4wQUuhRBkcW2Tn/_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/vayu-786467d1/mq4wQUuhRBkcW2Tn/_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/vayu-786467d1/mq4wQUuhRBkcW2Tn/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create Contract - Vayu docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create a new Contract.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Vayu docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://guide.withvayu.com/api-reference/endpoints/contracts/create-contract\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://vayu-786467d1.mintlify.site/_mintlify/api/og/v2?division=Contracts\u0026amp;title=Create+Contract\u0026amp;description=Create+a+new+Contract.\u0026amp;theme=6e72bdd6b5874738767757b6\u0026amp;signature=c76b2ea45c261534c0ddbef54723e2804d684ed8ff80f4ac62b058edc36f4071\">\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=\"Create Contract - Vayu docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create a new Contract.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://vayu-786467d1.mintlify.site/_mintlify/api/og/v2?division=Contracts\u0026amp;title=Create+Contract\u0026amp;description=Create+a+new+Contract.\u0026amp;theme=6e72bdd6b5874738767757b6\u0026amp;signature=c76b2ea45c261534c0ddbef54723e2804d684ed8ff80f4ac62b058edc36f4071\">\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/vayu-786467d1/mq4wQUuhRBkcW2Tn/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Vayu docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00a7df\">\u003clink data-mint-head rel=\"canonical\" href=\"https://guide.withvayu.com/api-reference/endpoints/contracts/create-contract\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/endpoints/contracts/create-contract.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://guide.withvayu.com/#organization\",\"name\":\"Vayu docs\",\"url\":\"https://guide.withvayu.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/vayu-786467d1/o-8hk5NjGtk8g3GS/assets/logo/light.svg?fit=max\u0026auto=format\u0026n=o-8hk5NjGtk8g3GS\u0026q=85\u0026s=bfce6c8445b24dbb51f5541edea9c802\"}},{\"@type\":\"WebSite\",\"@id\":\"https://guide.withvayu.com#website\",\"name\":\"Vayu docs\",\"url\":\"https://guide.withvayu.com\",\"publisher\":{\"@id\":\"https://guide.withvayu.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://guide.withvayu.com/api-reference/endpoints/contracts/create-contract#webpage\",\"url\":\"https://guide.withvayu.com/api-reference/endpoints/contracts/create-contract\",\"name\":\"Create Contract\",\"description\":\"Create a new Contract.\",\"dateModified\":\"2026-01-28T10:53:07.082Z\",\"isPartOf\":{\"@id\":\"https://guide.withvayu.com#website\"},\"breadcrumb\":{\"@id\":\"https://guide.withvayu.com/api-reference/endpoints/contracts/create-contract#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://guide.withvayu.com/api-reference/endpoints/contracts/create-contract#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://guide.withvayu.com/api-reference/endpoints/customers/list-customers\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Contracts\",\"item\":\"https://guide.withvayu.com/api-reference/endpoints/contracts/get-contract\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create Contract\",\"item\":\"https://guide.withvayu.com/api-reference/endpoints/contracts/create-contract\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://guide.withvayu.com/api-reference/endpoints/contracts/create-contract#apireference\",\"headline\":\"Create Contract\",\"name\":\"Create Contract\",\"description\":\"Create a new Contract.\",\"url\":\"https://guide.withvayu.com/api-reference/endpoints/contracts/create-contract\",\"mainEntityOfPage\":{\"@id\":\"https://guide.withvayu.com/api-reference/endpoints/contracts/create-contract#webpage\"},\"dateModified\":\"2026-01-28T10:53:07.082Z\",\"publisher\":{\"@id\":\"https://guide.withvayu.com/#organization\"},\"isPartOf\":{\"@id\":\"https://guide.withvayu.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Vayu docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Vayu docs","nav":{"global":{"anchors":[{"anchor":"Website","icon":"link","href":"https://withvayu.com/"}]},"tabs":[{"tab":"Documentation","icon":"file-doc","pages":[{"title":"Documentation","href":"/documentation/get-started/introduction"}]},{"tab":"API Reference","icon":"phone-plus","groups":[{"group":"API Documentation","icon":"file-doc","pages":[{"title":"Vayu API","href":"/api-reference/pages/introduction"},{"title":"Connecting to Vayu","icon":"key","href":"/api-reference/pages/connecting-to-vayu"},{"title":"SDK","icon":"cube","href":"/api-reference/pages/sdk"},{"title":"Errors","icon":"circle-exclamation","href":"/api-reference/pages/errors"},{"title":"Rate Limits","icon":"gauge-high","href":"/api-reference/pages/rate-limits"},{"title":"Idempotency","icon":"rotate","href":"/api-reference/pages/idempotency"},{"title":"Pagination","icon":"list","href":"/api-reference/pages/pagination"},{"title":"Sending events","icon":"paper-plane","href":"/api-reference/pages/sending-events"},{"title":"Dry Run Ingestion","icon":"square-terminal","href":"/api-reference/pages/ingestion"},{"title":"Browsing Events","icon":"eye","href":"/api-reference/pages/browsing-events"},{"title":"Webhooks","icon":"bell","href":"/api-reference/pages/webhooks"},{"title":"Product Structure","icon":"box","href":"/api-reference/pages/product-structure"}]},{"group":"API Reference","icon":"file-dashed-line","pages":[{"group":"Customers","icon":"hand-holding-box","pages":[{"openapi":"get /customers","title":"List Customers","href":"/api-reference/endpoints/customers/list-customers"},{"openapi":"post /customers","title":"Create Customer","href":"/api-reference/endpoints/customers/create-customer"},{"openapi":"get /customers/{customerId}","title":"Get Customer","href":"/api-reference/endpoints/customers/get-customer"},{"openapi":"get /customers/externalId/{externalId}","title":"Get customer by externalId","href":"/api-reference/endpoints/customers/get-customer-by-externalid"},{"openapi":"get /customers/integration/{integrationType}/{integrationId}","title":"Get customer by integration id","href":"/api-reference/endpoints/customers/get-customer-by-integration-id"},{"openapi":"put /customers/{customerId}","title":"Update Customer","href":"/api-reference/endpoints/customers/update-customer"},{"openapi":"delete /customers/{customerId}","title":"Delete Customer","href":"/api-reference/endpoints/customers/delete-customer"},{"openapi":"get /customers/products-consumptions/{customerId}","title":"Get products consumptions by customer id","href":"/api-reference/endpoints/customers/get-products-consumptions-by-customer-id"},{"openapi":"get /customers/products-consumptions/alias/{alias}","title":"Get products consumptions by customer alias","href":"/api-reference/endpoints/customers/get-products-consumptions-by-customer-alias"},{"openapi":"get /customers/name/{name}","title":"Get customer by name","href":"/api-reference/endpoints/customers/get-customer-by-name"}]},{"group":"Customer Relations","icon":"handshake","pages":[{"openapi":"get /customer-relations/{customerRelationId}","title":"Get Customer relation","href":"/api-reference/endpoints/customers/get-customer-relation"},{"openapi":"post /customer-relations","title":"Create Customer relation","href":"/api-reference/endpoints/customers/create-customer-relation"}]},{"group":"Catalog Products","icon":"list-dropdown","pages":[{"openapi":"get /catalogProducts/{catalogProductId}","title":"Get Catalog product","href":"/api-reference/endpoints/catalog-products/get-catalog-product"},{"openapi":"put /catalogProducts/{catalogProductId}","title":"Update Catalog product","href":"/api-reference/endpoints/catalog-products/update-catalog-product"},{"openapi":"get /catalogProducts","title":"List Catalog products","href":"/api-reference/endpoints/catalog-products/list-catalog-products"},{"openapi":"post /catalogProducts","title":"Create Catalog product","href":"/api-reference/endpoints/catalog-products/create-catalog-product"},{"openapi":"delete /catalogProducts/{catalogProductId}","title":"Delete Catalog product","href":"/api-reference/endpoints/catalog-products/delete-catalog-product"}]},{"group":"Contracts","icon":"file-contract","pages":[{"openapi":"get /contracts/{contractId}","title":"Get Contract","href":"/api-reference/endpoints/contracts/get-contract"},{"openapi":"get /contracts/integration/{integrationType}/{integrationId}","title":"Get contract by integration id","href":"/api-reference/endpoints/contracts/get-contract-by-integration-id"},{"openapi":"delete /contracts/{contractId}","title":"Delete Contract","href":"/api-reference/endpoints/contracts/delete-contract"},{"openapi":"get /contracts","title":"List contracts","description":"List contracts for the account. Optionally filter by customerId or customerExternalId to retrieve contracts for a specific customer (provide at most one, not both).","href":"/api-reference/endpoints/contracts/list-contracts"},{"openapi":"post /contracts","title":"Create Contract","href":"/api-reference/endpoints/contracts/create-contract"}]},{"group":"Invoices","icon":"file-invoice-dollar","pages":[{"openapi":"get /invoices/{invoiceId}","title":"Get Invoice","description":"Get a Invoice by id.","href":"/api-reference/endpoints/invoices/get-invoice"},{"openapi":"get /invoices","title":"List invoices","href":"/api-reference/endpoints/invoices/list-invoices"},{"openapi":"get /invoices/{invoiceId}/payment-status","title":"Get invoice payment status","href":"/api-reference/endpoints/invoices/get-invoice-payment-status"}]},{"group":"Measurements","icon":"ruler-combined","pages":[{"openapi":"get /measurements/{measurementId}","title":"Get Measurement","href":"/api-reference/endpoints/measurements/get-measurement"},{"openapi":"get /measurements","title":"List Measurements","href":"/api-reference/endpoints/measurements/list-measurements"},{"openapi":"post /measurements","title":"Create Measurement","href":"/api-reference/endpoints/measurements/create-measurement"},{"openapi":"delete /measurements/{measurementId}","title":"Delete Measurement","href":"/api-reference/endpoints/measurements/delete-measurement"}]},{"group":"Auth","icon":"key-skeleton","pages":[{"openapi":"post /login","title":"Login by obtaining a new access token","href":"/api-reference/endpoints/auth/login-by-obtaining-a-new-access-token"}]},{"group":"Events","icon":"calendar","pages":[{"openapi":"post /events/dry-run","title":"Submit a batch of events for testing","href":"/api-reference/endpoints/events/submit-a-batch-of-events-for-testing"},{"openapi":"get /events","title":"Query events by timestamp period and optional event name","href":"/api-reference/endpoints/events/query-events-by-timestamp-period-and-optional-event-name"},{"openapi":"post /events","title":"Submit a batch of events for ingestion","href":"/api-reference/endpoints/events/submit-a-batch-of-events-for-ingestion"},{"openapi":"get /events/{refId}","title":"Get event by refId","href":"/api-reference/endpoints/events/get-event-by-refid"},{"openapi":"delete /events/{refId}","title":"Delete an event by refId","href":"/api-reference/endpoints/events/delete-an-event-by-refid"},{"openapi":"post /events/delete-by-refs","title":"Delete events by refs","href":"/api-reference/endpoints/events/delete-events-by-refs"}]},{"group":"Credits","icon":"credit-card-front","pages":[{"openapi":"get /credits","title":"Retrieve credit ledger entries for customer.","href":"/api-reference/endpoints/credits/retrieve-credit-ledger-entries-for-customer"},{"openapi":"post /credits/grant","title":"Grant credits to a customer credit ledger","href":"/api-reference/endpoints/credits/grant-credits-to-a-customer-credit-ledger"},{"openapi":"post /credits/deduct","title":"Deduct credits from customer credit ledger","href":"/api-reference/endpoints/credits/deduct-credits-from-customer-credit-ledger"}]},{"group":"Product Consumption","icon":"space-station-moon-construction","pages":[{"openapi":"get /product-consumption/{productId}","title":"Get product consumption","href":"/api-reference/endpoints/product-consumptions/get-product-consumption"}]},{"group":"Meters","icon":"meter","pages":[{"openapi":"get /meters","title":"List Meters","href":"/api-reference/endpoints/meters/list-meters"},{"openapi":"get /meters/{meterId}","title":"Get Meter","href":"/api-reference/endpoints/meters/get-meter"},{"openapi":"put /meters/{meterId}","title":"Update Meter","href":"/api-reference/endpoints/meters/update-meter"},{"openapi":"delete /meters/{meterId}","title":"Delete Meter","href":"/api-reference/endpoints/meters/delete-meter"}]},{"group":"Webhooks","icon":"webhook","pages":[{"openapi":"post /webhook","title":"Subscribe to webhooks","href":"/api-reference/endpoints/webhooks/subscribe-to-webhooks"}]}]}]},{"tab":"Integrations","icon":"bullseye-pointer","pages":[{"title":"Integrations","href":"/documentation/guides/integrations/anrok"}]}]},"basePath":"","title":"Create Contract - Vayu docs","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}